Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
старший разработчик в pseven.io  · 17 авг 2021

Почему JavaScript — это сложно

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