Artyom Palevich

Можно ли выучить JavaScript за 2 месяца?

Кодинг
Последние два месяца я изучаю программирование на JavaScript. В процессе я попробовал несколько способов изучения этого языка, каждый из которых обещал потрясающие результаты в кратчайшие сроки.
Оправдали ли они эти ожидания? Увы, не совсем. Ниже я записал, какие из способов показались мне наиболее эффективными.

Зачем вообще учить JavaScript?


Я захотел изучить один из языков программирования, когда понял, что устал от приложений и сервисов, которые мне не подходят. Я годами надеюсь автоматизировать некоторые рутинные действия в повседневной жизни и не могу найти подходящего решения. Почему бы не попробовать сделать его самому?
Так как раньше программированием я не занимался, мне нужен был язык, который будет прост в освоении и дополнит мои знания. В конечном счёте я остановился на JavaScript — он составляет основу веб-разработки вместе с HTML и CSS, которые мне уже знакомы.

Как я учился?


Я начал изучать JavaScript около 1,5 месяцев назад, тратя на него около 3 часов 6 дней в неделю. С учётом вводного курса по Python, который я успел начать перед этим, получается 120−140 часов в течение двух месяцев. Я старался выкроить время так, чтобы не отказываться от привычного образа жизни — поездок на работу, тренировок по пятницам, сериалов с женой и т. п. Разве что стал больше спать, позволяя мозгу усваивать новые знания.

С помощью чего я учился?


Приложения


Grasshopper: Learn To Code (сайт)


Небольшой курс по основным принципам программирования на JS от разработчиков из Google. Тут встречаются интересные задания с сюжетом (например, собрать в рюкзак объекты для похода), однако подача материала показалась мне неравномерной и обрывочной.
Главным разочарованием для меня стал момент, когда я попробовал написать первое приложение в сети. Оказалось, функции pickRandom (), которую я многократно использовал в Grasshopper, не существует — вместо неё нужно использовать сочетание других функций. Было обидно.

HTML academy (сайт)

Главное открытие в процессе обучения — HTML academy. Из полезного: всё на русском; никаких тестов — только код; плавное увеличение сложности. Все уроки объединены общим сюжетом — вас нанимает на работу кот (!) и даёт различные задания: написать трекер корма, программу подтягиваний на занавесках и т. п.

SoloLearn (сайт)

Целая платформа с уроками, заданиями, форумом и «песочницей», где можно писать любой код и запускать его. Главная фишка — дуэли с другими игроками, в которых ваше оружие — это язык программирования, который вы изучаете.
Идеальный сервис для знакомства с новыми языками, экспериментов с кодом, хранения черновиков и возможности комментировать чужой код (потом будет проще понять Git). Из недостатков — устаревший дизайн.

Приложение Py (сайт)

Одно из множества приложений в AppStore типа «изучай программирование где хочешь». Выбираешь язык и переходишь карточкам с объяснениями и проверочными заданиями в конце. Есть упражнения, доступные по подписке (3,33 доллара в месяц).
К сожалению, Py не достаёт методичности. Есть приятный дизайн, бонусы за ежедневные занятия, но нет самого главного — возможности писать код. Наверное, идеальный вариант для тех, кто хочет понять, чем занимается парень-программист или коллеги из отдела разработки.

Дополнительные материалы


Книга Выразительный JavaScript (на русском)

Я узнал об этой книге из одного подкаста, где упомянули, что это хороший учебник не только по JS, но и по программированию вообще. Автор в ней объясняет концепции языка, начиная с нулей и единиц, делает акцент на проблемах опытного программиста в работе, а также немного шутит и объясняет математику.
Прекрасная книга, хоть я и прочитал лишь треть от неё — дойдя до абстрактных функций, решил закрепить материал практикой прежде, чем продолжать. Кстати, книга бесплатная и 2 издание есть на русском языке.

UPD из 2021 года: позже я читал 3 издание на английском — оно больше концентрируется на новом синтаксисе языка, который пришёл со стандартом ES6. Увы, ES6 до сих пор не используется повсеместно и привносит ряд более сложных абстракций, так что новичкам я по прежнему рекомендую второе издание.

Курс Skillbox Python-разработчик (сайт)

В поиске лёгкого для освоения языка и посмотрел пару вебинаров Skillbox. Закончилось тем, что я купил у них курс «Python с нуля» (UPD: позже переименован в «Python-разработчик»). Погружение было недолгим — я успел посмотреть оттуда пару уроков, установить среду и программу PyCharm для написания кода и сделать пару домашек. К сожалению, обучение на этом курсе шло слишком медленно для меня — домашние задания проверялись по 5−6 дней, что сильно растягивало весь процесс. Но в целом курс помог понять правила синтаксиса и базовые принципы приграммирования, которые позже пригодились в JavaScript.

Подкасты


Блоги и подкасты — хороший способ отдохнуть головой, переключив фокус с веб-разработки на людей, которые ей занимаются. Я перебрал около десятка каналов и остановился на этих четырёх:

  • Frontend weekend — истории действующих разработчиков и интервью с ними;
  • Веб-стандарты — обзор последних новостей индустрии и знакомство с сообществами разных городов;
  • LoftBlog — обзор инструментов и обучающие видео;
  • Shifu — злободневные ответы опытного программиста на вопросы новичков;

Я пробовал несколько англоязычных подкастов, но пока отказался от них, так как на данном этапе мне важно понимать максимум из того, что я читаю и слушаю.

И что?


В процессе изучения я выяснил, что самое сложное в изучении программирования — это мыслить как программист. Например, в уме строить многоуровневую систему условий if («если») или понимать, как функция может вызывать сама себя.
По этой причине я счёл неэффективными способы изучения, которые концентрировались на синтаксисе — приложения Py и Grasshopper. Конечно, важно использовать нужные скобки и команды, но такие вещи быстро усваиваются в процессе.
Наибольший прогресс в изучении JavaScript я ощутил в HTML academy и чтении книги «Выразительный JavaScript». Благодаря им я уже могу написать небольшую программу вроде игры в кости, калькулятора обмена валют или менять цвет страницы по движению мыши.

Что дальше?


Я планирую продолжить изучать JS и углубиться в CSS (например, освоить препроцессоры и PostCSS). Также мне нужно выбрать один из популярных фреймворков, чтобы позже войти в команду разработчиков и написать свой первый код в продакшн. Сколько времени это займёт? Я надеюсь, через полгода-год уже работать над коммерческим проектом в роли джуниор-разработчика, совмещая это с практикой в open-source проектах.
Если вы знаете другие хорошие источники или у вас есть задача, которую я мог бы использовать в практике — напишите мне письмо.