Почему javascript плохой язык
Перейти к содержимому

Почему javascript плохой язык

  • автор:

Неироничная ненависть к JavaScript

Прочитав данный перевод первоапрельской статьи о JavaScript я был удивлен тому, к каким мелочам могут придираться люди. И проблема не в самой статье, не в мемах и шутках о данном языке, а в том, что кто-то неиронично утверждает что JavaScript — плохой язык программирования. Но что, если попытаться его понять?

Ответьте на вопрос, если вы разрабатываете на JS, то что именно? Может быть вы работаете на FrontEnd-е, может вы разрабатываете небольшое BackEnd приложение на nodejs, а может вы являетесь разработчиком в банке где все ПО написано на нем? Если третий случай это про вас, то скорее всего вы где-то ошиблись.

Проблема в том что ни один язык программирования не сможет стать панацеей от использования разных ЯП для достижения определенных целей. Но почему-то кто-то до сих пор считает что какой-то язык да заменит все существующие, станет универсальным и вообще спасет весь мир. Но обычно инструменты создаются под решение конкретных задач (хоть тут слово «конкретный» может включать довольно обширный спектр этих самых задач), и даже швейцарский нож не решит всех ваших проблем.

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

Первым делом хотелось бы привести в пример следующий отрывок с кодом:

const x= < i: 1, toString: function()< return this.i++; >> if(x==1 && x==2 && x==3)

Действительно, условие будет истинным. В таких случаях у меня возникает два вопроса — «Зачем?!» и «Как так получилось?». Дать ответ на первый вопрос я к сожалению не могу. Но вот попытаться ответить на второй вполне. Как известно JavaScript — язык с динамической типизацией. В нем есть два способа сравнения — строгое (===) и с преобразованием типов (==). Если бы в коде было использовано строгое сравнение, то никаких проблем бы не возникло. Но во втором случае интерпретатор пытается привести оба операнда к одному типу (строке) и сравнить их значения. Но почему-то истинность условия `x == 1 && x == 2 && x == 3` кому-то кажется смешной, несмотря на то, что нечто подобное можно реализовать и в других языках:

public class JavaScript < public static void main(String[] args) < AnonymousObject x = new AnonymousObject(1); if (x.equals(new AnonymousObject(1)) && x.equals(new AnonymousObject(2)) && x.equals(new AnonymousObject(3))) < System.out.println("JavaScript == Java // true"); >> > class AnonymousObject < public int i; public AnonymousObject(int i) < this.i = i; >public boolean equals(AnonymousObject that) < return this.i++ == that.i; >> 

Кто-то скажет что тут использована функция .equals(), а там .toString(), что они предназначены для разных целей, что имплементация функции .toString() не должна влиять на сравнение, да и вообще это другое. Но если использовать строгие сравнения в JS то проблемы не будет, а вот в Java данное условие всегда будет истинно.

Ещё есть претензия к функции .sort(), мол она сортирует лексикографически:

[-2, -7, 0.0000001, 0.0000000006, 6, 10].sort() // [-2, -7, 10, 1e-7, 6, 6e-10] 

Но передадим мы функцию для сравнения и все внезапно работает как надо:

[-2, -7, 0.0000001, 0.0000000006, 6, 10].sort((a, b) => a - b) // [-7, -2, 6e-10, 1e-7, 6, 10] 

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

Под конец хотелось бы обсудить многопоточность в JS. Причина, по которой в JavaScript-е нет нормальной реализации многопоточности не в том, что язык какой-то не такой и он просто не способен на что-то такое, а в сфере его применения — web разработка. Ведь язык программирования это всего лишь спецификация, а её реализация лежит на компиляторе / трансляторе / интерпретаторе. В веб-разработке вам в принципе не должна понадобиться возможность исполнять ваш код в несколько потоков. Если вам часто приходится прибегать к ней, то скорее всего вы делаете что-то не так. Если вам нужна многопоточность на nodejs, то как и написано в исходной статье для этого есть разные библиотеки: comlink, указанная там или paralleljs, которая на мой взгляд удобнее в использовании. А если вас не устраивает дополнительная зависимость, то скорее всего вам нужен другой ЯП. Получить все и сразу попросту не выйдет.

Всем этим я просто хочу сказать, что если язык массово используется, то он имеет право на существование. А если при разработке на каком-либо языке вы сталкиваетесь со множеством трудностей, то пересмотрите ваш выбор, а не вините язык. Ведь, как говорил Бьёрн Страуструп:

Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.

Прочитав комментарии я решил уточнить две вещи:

1. Сказав, что многопоточность в вебе не нужна в принципе, я имел ввиду что она не нужна в большинстве случаев, а не то, что она совершенно не нужна. Есть случаи, когда нужно вынести какие-то вычисления в отдельный поток, чтобы не нагружать основной, но они довольно редки

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

  • javascript
  • выбор языка программирования
  • выбор языка
  • правильное программирование

Почему я считаю, что JavaScript плохой язык?

Мое мнение касательно того или иного языка программирования базируется ровно на одном показателе — насколько легко или сложно поддерживать код, написанный на данном языке. К примеру, я считаю Scala плохим языком, потому что код, написанный на Scala, очень тяжело и дорого поддерживать. Тоже самое касается и JavaScript.

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

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

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

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

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

Автор Сергей Немчинский

Почему многие программисты не любят javascript?

Почему многие программисты на java/c# и других языках недолюбливают javascript? Испытывают к нему какую-то неприязнь и называют недоязыком?

  • Вопрос задан более трёх лет назад
  • 15230 просмотров

1 комментарий

Оценить 1 комментарий

heksen

они в них не шарят
Решения вопроса 0
Ответы на вопрос 11

SagePtr

Еда — это святое
Каждый кулик хвалит своё болото
Ответ написан более трёх лет назад
Комментировать
Нравится 13 Комментировать

gadfi

https://gamega.org

java/c# программисты привыкли к класическому ооп, строгой типизации, красивому коду . отсутвие строгой типизации, странная модель ооп и многие другие вещи просто взрывают мозг и обогащают великий и могучий русский язык ( уверен не только)

Ответ написан более трёх лет назад
Комментировать
Нравится 11 Комментировать

begemot_sun

Сергей @begemot_sun
Программист в душе.
Потому что с помощью него можно выстрелить себе же в ногу.
Ответ написан более трёх лет назад
Комментировать
Нравится 8 Комментировать

Symphony

Azim Kurt @Symphony Куратор тега JavaScript

Потому что js можно освоить за 2 недели и уже писать за еду. На обучение Java/C/C++/C# Вы потратите больше времени и усилий, а еще и матчасть, придется прочитать не одну книгу.
Как показывает статистика тостера: чтоб быть так называемым «js-программистом» обычного javascript*a вообще не надо знать, большинство посмотрели на ютубе 2 видеоурода по жиквари и, извиняюсь за выражение, «херачат» сайты на жомле.

Ответ написан более трёх лет назад
Нравится 7 2 комментария
Выучить JavaScript за 2 недели, и писать на нем хоть что — то нетривиальное — это невозможно!

Symphony

Azim Kurt @Symphony Куратор тега JavaScript
warriorkg: поэтому «js-программист» в кавычки, таких программистов в js больше, чем в других языках

index0h

PHP, Golang. https://github.com/index0h

JS у кучи народа воспринимается, как чисто браузерный язык. Но, учитывая, что требования к фронту обычно на уровне «что бы работало», как следствие — говнарей многовато((. Много людей считают себя тру js-прогерами, при этом знают не js, а jQuery и пару плагинов. По опыту проведения многих собеседований могу сказать, что человек даже с притензией на мидла js может не иметь представления о том, как создать DOM элемент без jQuery, увы это очень печально.

Сам язык вообще-то сложный. Не в плане синтаксиса (синтаксис действительно учится пару недель), а в плане подходов. Они очень отличаются от классических просто потому, что JS — событийный язык. Например задачи с последовательным выполнением на JS пишутся на много сложнее (callback hell — очень частая ошибка), чем на других языках, однако задачи, заточенные под event-loop — на порядки легче. Как пример — чат на nodeJS на порядки проще написать, чем на любом другом серверном ЯП. Очень частой проблемой (в основном backend) являются утечки памяти, их проворонить довольно легко, а отследить — наоборот.

Ответ написан более трёх лет назад
Нравится 7 1 комментарий

index0h

А как справляться с утечками?

так же, как и в любом другом языке)). Следить за используемыми ресурсами и не хранить в памяти то, что вам не надо. Запускать приложение с профайлером, исправлять косяки.

Что делать чтоб сборщик работал так как требуется?

вы со сборщиком не особо что-то сделаете.

В замыканиях мусор не забывать?

knitevision1

Владик Лимонадик @knitevision1
Ванька Скайуокер

Потому что JS, бывает, не очень похож по поведению на те языки, на которых привыкли писать классические программисты. Ну одно только this чего стоит. И потому что он не компилируется. И потому что его разработали за 10 дней в мозилле.

Вот если бы его 5 лет разрабатывали Apple, другое дело.

Ответ написан более трёх лет назад
Нравится 5 13 комментариев

Java и c# тоже не компилируются.
Прототип языка был создан за 10 дней, а не сам язык.
JS разрабатывается уже 25 год.
Мозилла является вторым по популярности браузером, и компания делает не только браузер.
Apple? Серьёзно?

Надеюсь за 3 года ты понял что за бред ты высрал здесь

FlatUser, лол, с# и джава не компилируются, вот это я понимаю

Надеюсь за 6 месяцев ты понял что за бред ты высрал здесь

el-bekasto,
Это интерпретируемые языки, они запускаются на VM и она занимается их компиляцией. JS работает так же.
Надеюсь за 3 дня ты понял что за бред ты высрал здесь.

FlatUser, ты сам признаешь факт того, что они компилируются, хоть и джава на VM, но я не понял почему ты высрал то же самое и про C#. Это какой-то троллинг на который я повелся?
Надеюсь 19 часов хватило, чтобы ты понял что за бред ты высрал здесь.

el-bekasto, Боже ты либо толсто троллишь либо совсем уж поехавший. Загугли что такое интерпретируемые и компилируемые языки программирования. С# как и Java являются интерпретируемыми языками. О байткоде не слышал? Надеюсь 1 часа хватило, чтобы ты понял что за бред ты высрал здесь.

FlatUser, боже. Ты реально какой-то недотролль. Ладно, так давай ты приведёшь доказательства с надёжных источников, а то твой бред расплавил мой мозг. Или все таки тебе хватило одного часа, чтобы ты понял что за бред ты высрал здесь?

IgorArchimag @IgorArchimag

el-bekasto, «Программы на Java транслируются в байт-код Java, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.» Скопиррвал прямо с википедии. Если википедия для тебя — ненадежный источник, то я не знаю, что для тебя может быть надежным источником.

IgorArchimag, ой. это разве не ком. не компиляция? ой. Извиняюсь что помешал вашему бреду, продолжайте высирать свой бред здесь, не буду мешать. И да, если честно я ждал доказательства на счёт C#, хотя на что я от тебя надеюсь

el-bekasto, загугли что такое CRL и как работает C#. Судя по всему ты обычная шкила которая пару уроков в ютубе посмотрела. Вырастишь и поймёшь о чем дяди в комментариях говорили. Надеюсь тебе будет стыдно

FlatUser, обычно шкилой оказывается тот, кто других называет шкилой. По твоим высерам C# и JS это вообще интерпретируемые языки. Я и не говорил что они компилируются, да и только.

За что ненавидят язык программирования JavaScript

Изучили споры между фанатами и хейтерами JavaScript и разобрались, чем JS заслужил нелюбовь кодеров и справедливы ли нападки.

Среди веб-разработчиков принято шутить над PHP и хоронить язык каждый год, а среди разработчиков в целом принято шутить над JavaScript. Мы изучили дискуссии между фанатами и хейтерами JS и скомпилировали их в этом материале.

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

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

Самыми большими проблемами в JS считаются синтаксис и семантика языка. Вместе они создают уродливый и многословный язык, который обычно больно читать.

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

Senior/ Middle FrontEnd (React) Developer Центр HR TECH (Проект Атомкор)

Вот почему появляется так много библиотек и транслируемых языков, которые очищают синтаксис и семантику JS или даже позволяют программистам писать на других языках. Даже людям, которые любят писать на JS, приходится иногда использовать транспиляторы, чтобы было легче организовывать собственный код.

К примеру, в Java есть классы. Классы содержат методы и поля. Методы и поля могут быть объявлены как часть класса. Методы и поля имеют модификаторы доступа. Из классов вы можете создавать объекты. У объектов есть конструкторы, которые определяются одинаково. В Java есть множество элементов для реализации наследования.

Все эти языковые элементы сделаны явными. Классы являются базовым элементом абстракции, а элементы, из которых они состоят, четко идентифицируются своими именами и семантикой.

Зато в JavaScript есть объекты, функции (которые также являются объектами) и переменные (которые могут указывать на объекты, которые могут быть функциями). При этом объекты не являются объектами, но являются ассоциативными массивами.

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

Шестой раунд битвы языков программирования 2022

Фанаты JS утверждают, что жалобы на отсутствие классов в JS — это предвзятое отношение к использованию скомпилированных объектно-ориентированных языков на основе классов, но дело не в классах. Речь идет о ясных, явных элементах языка, позволяющих программистам читать код и быстро его понимать.

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

В защиту JavaScript

Разберем основные причины, по которым не любят JavaScript, и разберемся, справедливы ли претензии.

  • JavaScript действительно прост в использовании. Даже идиот сможет им воспользоваться. C++, Java и другие языки имеют более высокий барьер для входа. А поскольку джуны часто пишут именно на JavaScript, большая часть кода на JavaScript является плохим. Это не недостаток языка, это побочный эффект простоты использования.
  • В JavaScript есть ошибки. О них много пишут в интернете, но большинство преувеличено до крайности. Изначально JavaScript был разработан довольно быстро из маркетинговых соображений, и в первых версиях JS правда возникало много ошибок. Но если вы используете ES2015 и линтер со строгими правилами, все популярные ошибки не будут актуальными.
  • Как и PHP, JavaScript — это язык, который разработчики любят ненавидеть. Это как сигнал о том, что ты принадлежишь к крутой группе программистов. Хейтеры просто пытаются показать, какие они классные.
  • Раньше JavaScript был отстойным. Однако после ECMAScript 2015 ситуация стала намного лучше. Вы можете перенести даже функции ECMAScript 2016+ в ES5, чтобы использовать все актуальные функции языка. Когда-то давно, когда многие разработчики впервые столкнулись с JavaScript, было на что жаловаться.
  • В проблемах с DOM винят JavaScript. JavaScript — это язык программирования. DOM и функции браузера, связанные с DOM, — это просто API JavaScript. Совместимость JavaScript между браузерами долгое время была превосходной. Но все помнят о несовместимости DOM API, с которой им приходилось бороться, поэтому и сегодня приписывают недостатки JavaScript.

Заключение

А что думаете вы? Смогла ли JavaScript решить проблемы языка в новых итерациях? Или синтаксис и сегодня оставляет желать лучшего, и принципиальную конструкцию языка не исправить уже никакими доработками?

Ненавидят ли JavaScript просто потому, что это модно? Или, может, хейт JavaScript справедлив и сегодня?

Присоединяйтесь к дискуссии и напишите об этом в комментариях.

Следите за новыми постами по любимым темам

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *