Почему javascript не любят

Почему разработчики ненавидят JavaScript и почему они все поняли неправильно

Если вы только начинаете заниматься веб-разработкой, вы, возможно, заметили, что разработчики в других областях программного обеспечения, таких как анализ данных, встроенные системы или даже веб-разработчики, просто любят говорить о дерьме JavaScript. На самом деле это настолько распространено, что вы можете начать задумываться, не выбрали ли вы ужасный язык для изучения. Может быть, вам стоит вообще отказаться от веб-разработки или вместо этого изучить Java или C ++?

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

Вот самые частые жалобы, которые я слышу о JavaScript, и почему они все-таки не так уж и плохи.

JavaScript подходит только для Интернета, что делает его простым трюком.

Это так. JavaScript был создан для работы в веб-браузере. Брендан Эйх написал первую версию JavaScript всего за несколько дней, работая в Netscape в начале 90-х. Он был создан, чтобы восполнить недостаток стандартного языка, который можно было бы использовать в веб-браузерах, и сделал это блестяще.

Не знаю, знаете ли вы, но с 1995 года произошло немало технологических достижений. JavaScript не исключение. С появлением среды выполнения Node в 2012 году (и младшего брата Дено в последнее время) JavaScript давно вырвался из плена браузера. Вы можете найти его на веб-серверах, Raspberry Pis, роботах и ​​запущенных алгоритмах машинного обучения.

Читайте также:  Php add array contents to array

Ах да, и JavaScript по-прежнему единственный язык, который работает в веб-браузере. Таким образом, несмотря на то, что он проявил себя практически во всех областях, он по-прежнему является чемпионом по созданию динамических, интерактивных и многофункциональных веб-приложений.

JavaScript раздувается и работает медленно.

Предупреждение о спойлере: JavaScript работает медленнее, чем C. Это, вероятно, никого не удивляет, поскольку C почти во всех реализациях будет быстрее любого языка высокого уровня. Что может удивить разработчиков, которые жалуются на скорость JavaScript, так это то, что Node часто превосходит другие динамические языки своего класса, такие как Python и Ruby.

Фактически, согласно The Benchmarks Game, Node может превзойти Python на несколько порядков. Но давайте сделаем шаг назад на секунду и рассмотрим весь этот самый быстрый язык в перспективе. Для подавляющего большинства кода, который пишется ежедневно, мы говорим здесь о миллисекундах. Добавьте в микс переменную сетевую задержку, и эта статистика уйдет прямо в окно. Короче говоря, если вы не настраиваете оптимизированные решения для серьезного масштабирования, эти различия незначительны. Преимущества гибкости языка намного превышают миллисекунды, потерянные при выполнении.

Принуждение типов в JavaScript делает код непредсказуемым.

Это популярное недовольство. Во-первых, давайте поймем, что JavaScript — это язык с динамической типизацией. Это означает, что типы переменных не объявляются, а интерпретируются во время выполнения.

JavaScript, как и любой язык с динамической типизацией, не требует, чтобы мы помечали переменную как целое число. Скорее, интерпретатор прочитает значение переменной во время выполнения и определит, что это целое число.

Люди могут (и будут) обсуждать преимущества языков со статической типизацией и динамической типизацией в течение всего дня. Настоящая жалоба здесь на то, как JavaScript будет приводить к типу переменной, делая некоторые предположения о коде.

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

Использование строгого компаратора вместо свободного компаратора, описанного выше, предотвращает принудительное приведение JavaScript к любым типам. Это означает, что он не будет делать предположений о вашем коде. Да, это также означает, что мы как разработчики должны четко указывать типы переменных, которые наши функции получают в качестве аргументов. Мы также должны внимательно относиться к написанию исключений и обработке потенциальных ошибок. Разве это не тот уровень контроля, который люди жалуются на отсутствие в JavaScript…? Да, и если вы действительно хотите использовать строго типизированный язык, TypeScript — это тот, который компилируется в JavaScript.

JavaScript не поддерживает объектно-ориентированное программирование

Вы можете услышать это от разработчиков Java или C #, поскольку это два языка, которые полностью соответствуют парадигме ООП. Все в Java написано в классе со строгой инкапсуляцией состояния и функциональности программы. Аккуратно разделенные линии, как коробка для бенто, разделяющая вашу морковь и хумус — именно так любят кодить Java-разработчики.

Простой класс Java может выглядеть примерно так:

public Class MathFunctions < int add(int a, int b) < return a + b; >>

Разработчик Java, написавший его, может возненавидеть тот факт, что он может быть написан как свободно плавающая функция вне класса в JavaScript.

JavaScript, в отличие от тяжелых языков ООП, не требует инкапсуляции кода в классы. Функции можно писать где угодно, переменные можно свободно объявлять после их вызова (благодаря поднятию), а код может быть разбросан по всему файлу и при этом работать должным образом. Это лучший способ написать JavaScript? Точно нет. Как и динамические типы, эти языковые функции требуют от нас более явного и декларативного написания кода. Они также позволяют легко адаптировать JavaScript к парадигме функционального программирования, что не так просто сделать в Java или C #.

Однако это не означает, что JavaScript не может следовать парадигме ООП. Благодаря функциям языка, представленным в ECMAScript 6, JavaScript имеет чистый синтаксис для поддержки классов, инкапсуляции и наследования. Хотя он может работать под капотом иначе, чем другие языки ООП (например, с использованием прототипного наследования и использования замыканий для частных переменных), функциональность в значительной степени поддерживается в языке.

JavaScript бесполезен без использования тяжелых библиотек, таких как React.

С появлением NPM появилась возможность быстро и легко добавлять пакеты в ваш код. Требуется решение для работы с разными часовыми поясами? npm install moment — это решение с одной командой для реализации множества функций, которые уже были протестированы и доказали свою эффективность. Как разработчики, мы должны осторожно изобретать велосипед. Если кто-то уже написал жизнеспособное решение нашей проблемы, зачем писать новое?

Критики JavaScript, скорее всего, укажут на список зависимостей пакетов программы. Поскольку каждая установленная зависимость имеет свой собственный список зависимостей, каждая из которых имеет свой собственный список, который необходимо установить, этот список может стать довольно большим. Соблазн просмотреть реестр NPM в поисках решений и слепо импортировать их в свой код настолько велик, что у начинающего разработчика JavaScript может быть программа из пятидесяти строк с тысячами строк кода зависимостей.

JavaScript является модульным, и сильное сообщество разработчиков каждый день добавляет новые пакеты. Возможность быстро импортировать эти пакеты является преимуществом, которое экономит время и сохраняет код СУХИМ. Мы, как разработчики, должны добавлять только те пакеты, которые нам нужны, и, как всегда, уравновешивать эффективность кодирования с эффективностью программы. Бывают ситуации, когда предпочтительнее использовать тяжелый пакет, чтобы сэкономить несколько дней кодирования. Есть также сценарии, когда нам нужно уравновешенное самодельное решение для реализации эффективной и быстрой программы. Пакеты JavaScript дают нам возможность делать этот выбор изо дня в день.

Вы никогда не избежите скептиков или программистов, которые абсолютно уверяют вас, что JavaScript — ужасный и бесполезный язык. Однако вы можете рассмотреть особенно односторонние жалобы и показать им, что JavaScript является универсальным, надежным и полнофункциональным языком.

Источник

Почему JavaScript все ненавидят? Если я знаю только основы JS, то стоит ли переучиваться на Python?

«JavaScript все ненавидят» — это фактическая ошибка. По результатам опроса «самый нелюбимый язык» на Stackoverflow в 2020 году JS занял всего лишь 16-е место из 25. Выше оказались такие языки как C, C++, PHP и Java. При этом в номинации «самый любимый язык» второе место занимает TypeScript, по сути являющийся надстройкой над JS.

Какие-то разработчики действительно могут не любить JS. Попробую предположить, за что именно, не вдаваясь в холивар о том, какой язык лучше:

  • Безальтернативность. Формально это не совсем так, но по факту если ты занимаешься фронтендом в вебе, ты обязан знать JS, в отличие от бэкенда, где может быть выбор.
  • Трудности при переходе с других языков, особенно с языков с сильной статической типизацией (например, с Java). Конечно, это относится не только к JS, но JS сейчас самый популярный, поэтому с ним сталкиваются чаще.
  • Путаница, вызванная обратной совместимостью. JS имеет довольно долгую историю, в течение которой разработчики сохраняют полную обратную совместимость (старый код должен одинаково работать на новых интерпретаторах). Это вызывает разные неочевидные особенности. Например, какие-то (старые) методы массивов мутируют массив, а другие (новые) — возвращают его копию.
  • Прототипная модель наследования. При переходе с языков с классической реализацией ООП понимание отличий и особенностей возникает не сразу. А первая реакция на непонятное — это обычно отрицание.
  • Излишняя универсальность и модифицируемость. JS не является функциональным языком, но предоставляет функциональные возможности. Он также не является ООП языком, то предоставляет элементы ООП. Иными словами, JS не навязывает конкретную парадигму, из-за чего код разных разработчиков может выглядеть слишком по-разному. Не всем такое нравится.
  • Отсутствие статической проверки типов. Это проблема не только у JS но и у любого языка с динамической типизацией. Крупные проекты нуждаются в том или ином виде контроля данных. Это решается тестами и сторонними инструментами проверки типов (Flow, TypeScript), но без них код становится трудно поддерживаемым.
  • Якобы низкий порог входа. Следствием всего вышеперечисленного является то, что грамотно программировать на JS может оказаться сложно, особенно когда приходишь в уже состоявшийся продукт. Однако почему-то до сих пор считается, что JS это простой язык для новичков. Также встречается мнение, что на JS не делают серьёзных проектов, хотя на практике это давно уже не так. А обманутые ожидания — это всегда боль.

Стоит ли переучиваться на Python, если знаешь только основы JS? Это вопрос, на который ответить можете только вы сами. Python и JS имеют довольно разные сферы применения, какая ближе вам — никто вам не расскажет, это можете знать только вы. То же с комфортом разработки на данном конкретном языке — кому-то нравится Python, кому-то JS. Другие люди не могут (хотя и пытаются) диктовать, что должно нравиться вам.

Попробуйте Python, если его синтаксис вам понравится больше — продолжите его изучение. Если вы знаете только основы, особо переучиваться не придётся. Да и нет такого в IT, чтобы пришлось «переучиваться», это же не моторные навыки. Вы не переучиваетесь, а изучаете новое, расширяете кругозор. Не припоминаю, чтобы это кому-то помешало.

Источник

Оцените статью