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

У JavaScript есть много возможностей. С одной стороны, это самый язык программирования в мире. Работаете над проектом хакатона и вам нужен язык, который знают все? JavaScript, вероятно, является первым выбором. С популярностью приносит богатая экосистема. По принципу «победитель получает все». Чем больше библиотек, тем больше людей привлекает к ней и так далее. Почему JavaScript так популярен? Простой, это единственный язык, который работает в браузере. Тот факт, что JavaScript стандартизирован для Интернета, сделал его новым C. Он имеет доступный синтаксис, унаследованный от семейства Algol (подумайте о C, Java и т. д.). Динамическая типизация и анонимные функции обеспечивают большую гибкость, недоступную в других языках. Однако можно утверждать, что эти благословения также являются проклятием.

Экосистема

Популярность JavaScript привела к появлению множества библиотек для экосистемы, но это усложняет выбор библиотеки для использования. Для любой задачи, о которой вы думаете, вероятно, есть библиотека JavaScript, но также, вероятно, есть несколько библиотек. Некоторые из этих различий могут быть техническими, некоторые могут быть просто племенными. Один человек/компания вкладывает свой вес в проект, в то время как другие поддерживают другой. Что происходит, когда вы, наконец, выбираете библиотеку, а через 6 месяцев эта библиотека уже не крутая? Это то, что известно как усталость от JavaScript. Вместо того, чтобы работать над приложением, разработчики вынуждены изучать все новые библиотеки с более чем вероятными незначительными отличиями от предыдущих. Однако можно утверждать, что это явление является признаком относительной молодости JavaScript в его новой славе. Node.js меньше 10 лет, прибавьте к этому его известность, и вы получите хаос. Однако со временем пыль может осесть, и сообщество может прийти к определенным идеям. Я думаю, что это возможно, но, глядя на нынешнее положение дел, предполагаю, что это маловероятно. Даже npm не застрахован от этого социального явления. Сейчас я не буду углубляться в это, потому что эта проблема хорошо задокументирована. Обычно люди больше всего жалуются на экосистему JS!

Сам язык

Так это просто экосистема, а как насчет самого языка? Что ж, как я уже говорил ранее, это доступный язык, и гибкость, которую он обеспечивает, полезна. Как и все языки, JavaScript — продукт своей истории. Последние изменения коснулись ES6, который предоставляет async/await и некоторые другие функциональные возможности. Кроме того, теперь, когда ES6 поддерживается всеми браузерами и Node.js, вам больше не нужен транспилер для преобразования JS в… JS. Это было огромным улучшением. Однако эти новые изменения не лишены недостатков. Макрос async/await плохо сочетается с некоторыми операциями перечисления, такими как сокращение и forEach. Это вызывает много проблем с отладкой с потерей времени, которые были введены, потому что язык не может поддерживать интуитивно понятный дизайн из-за соображений обратной совместимости.

Низкий уровень навыков

Моя самая большая претензия к JS заключается в том, что он просто скучный. Существует очень низкий предел навыков. Как только вы изучите модули, обещания и то, как избежать плохих частей JS, тогда все. Прототипы интересны, но это просто хаки для объектов. Есть очень веская причина, по которой язык скучный. Это потому, что спецификация языка должна поддерживаться всеми браузерами, и они не могут тратить все свое время на постоянное добавление новых функций. Это приводит к использованию множества библиотек, что приводит к проблемам, о которых я говорил выше. Я думаю, что это важный момент. При работе над долгосрочными проектами это может ускорить усталость и выгорание. Кто хочет работать весь день каждый день над проектом, в котором используются скучные инструменты? Я не. Что делает языки интересными для меня, так это то, что я могу постоянно развиваться как разработчик, есть более глубокие и интересные вещи, которые нужно изучать. Я не чувствую, что получаю это с JavaScript.

Другая проблема, связанная с тем, что JS требует мало навыков, заключается в том, что это означает, что вы, как разработчик JavaScript, более заменяемы. Это должно быть сбалансировано с усложнением языка ради сложности (вспомните Brainfuck). Но если вы проводите все свое время на этом языке, вы должны быть обеспокоены. Вас можно заменить, и у вас, вероятно, нет такого разнообразного взгляда на архитектуру, как у других разработчиков.

параллелизм

JavaScript был параллельным в течение долгого времени. Асинхронная среда выполнения позволяет обрабатывать большое количество задач одновременно. Node.js можно масштабировать, в этом нет сомнений. Но я бы сказал, что примитивы параллелизма, предоставляемые языком, довольно просты. Если все, что у вас есть, это молоток, все выглядит как гвоздь. Эта ситуация была улучшена с помощью промисов, поэтому мы не попадаем в ад обратных вызовов. Однако при этом большинство библиотек, которые я использую, возвращают промисы. Это нормально, за исключением того факта, что в 90% случаев я использую async/await просто для того, чтобы асинхронный код выполнялся синхронно.

Вывод

JavaScript — неизбежный язык. Он притягивает всех разработчиков своей гравитацией, как черная дыра. Гораздо лучше принять его и научиться использовать, если вы хотите добиться успеха. Для небольших интерфейсных проектов я обычно выбираю vanilla JS. Для более сложных вещей мне нравится Elm или Vue. Но если вам не нужно работать в браузере, я считаю важным подумать об альтернативах. Потому что, на мой взгляд, это сэкономит вам время и, возможно, сделает вас более счастливым разработчиком.