JavaScript считается простым языком, и его часто рекомендуют в качестве первого языка для изучения. При этом JS сейчас используется повсеместно, множество серьёзных продуктов содержат его в своём стеке. Складывается впечатление, что это идеальный вариант для вхождения в программирование — можно потратить совсем немного ресурсов на изучение JS и идти искать место в профессиональной команде разработчиков.
Этим часто спекулируют продавцы курсов, обещающие за месяц обучить программиста с нуля. "Простота" языка здесь играет на руку маркетингу, ведь если язык "простой", то легче убедить в реальности обещанных результатов за столь короткий срок. На практике оказывается, что между "изучить язык" и "стать профессиональным разработчиком" есть ещё несколько (порой очень длинных) шагов, про которые как бы забывают рассказать.
Но это же справедливо и для любых других ЯП, на которых пишут крупные проекты. Почему же именно JavaScript может оказаться не самым удачным вариантом для изучения в качестве первого языка?
По историческим причинам, заслуживающим отдельного поста, JS полон особенностей неочевидных и порой нелогичных. Поэтому вхождение в язык может оказаться не таким лёгким, как хотелось бы. Подробнее об этом я писал
здесь.
При этом переход на другой язык потребует дополнительных усилий, чтобы переосмыслить казалось бы уже изученные принципы и подходы. JavaScript имеет много специфичных особенностей: скудный набор структур данных, неявное приведение типов, прототипное программирование — лишь некоторые из них. Сформированные на этой основе навыки и знания будут узконаправленными и плохо расширяемыми.
Отладка неправильно работающего кода — ещё один этап, на котором часто застревают начинающие программисты. JavaScript даёт простоту и надёжность в ущерб корректности выполнения. Он прощает многие ошибки, а потому склонен их маскировать. Пример того, как маскирование ошибки приводит к некорректному поведению, можно посмотреть
здесь.
В кодовой базе крупных продуктов сейчас практически всегда есть проверка типов в том или ином виде. Для повышения корректности используют специальные подходы: статический анализ, декларативное программирование, разработку через тесты, инварианты и прочее. Бывает что и вовсе код пишется на другом языке, который затем переводится в JavaScript. Вот пример
интервью с разработчиком, который целиком перевёл проект на ReasonML из таких соображений. А вот
ещё одно интервью, где специалист рассказывает про серверный JS и JS для встраиваемых систем.
Лично я бы рекомендовал начинать знакомство с программированием с более "классических" языков, таких как Java или C#, и уже потом переходить к JavaScript. Та же Java считается более "серьёзным" и строгим языком, но именно по этой причине она лучше подходит для обучающих целей. Начните со статической типизации и привычного ООП — это расширит ваш кругозор и станет ценным орудием в вашем арсенале разработчика.
Повторюсь, это моё субъективное мнение, но оно основано на впечатлениях от нескольких десятков проведённых собеседований. Соискатели, имеющие в своём бэкграунде другие языки, стабильно показывали лучшие результаты. Впрочем, зависимость здесь может быть и обратной — если человек готов вкладываться в изучение индустрии, то он с большей вероятностью будет интересоваться и другими языками программирования в том числе.
Резюмируем вышесказанное. На JS действительно легко начать писать, но потребуется некоторое время, чтобы достичь хотя бы уровня middle разработчика. Изучение JS может оказаться не таким простым, как это обещают на курсах. Разработка крупных проектов точно потребует дополнительных знаний, понимания базовых принципов разработки, которое приходит с опытом. Но, как говорил Лао Цзы, "путь в тысячу ли начинается с первого шага".
Чего точно не надо бояться — так это того, что по какой-то причине этот первый шаг для вас закрыт. Например, что "уже поздно", или что для программирования требуется специальный склад ума, которого у вас якобы нет. Если есть интерес к разработке (а он скорее всего есть, раз вы дочитали до конца) — значит есть и шансы на успех, а значит стоит хотя бы попробовать. Удачи!
Пишите в комментариях, полезна ли оказалась статья, согласны ли вы с вышесказанным, что по-вашему сказано не так. Я читаю все комментарии и всегда отвечаю, если вижу возможность конструктивного диалога.