JavaScript: история любви и ненависти
JavaScript – один из самых популярных языков программирования в мире. Однако он же является и одним из самых «нелюбимых». Почему же это происходит? Давайте разберемся.
Как появилась неоднозначная репутация JavaScript?
С одной стороны, JavaScript действительно очень прост в освоении. Это позволяет многим начинающим разработчикам быстро создавать рабочие веб-приложения. Этот язык сильно проще Java и практически такой же простой, как и Python.
С другой стороны, именно из-за своей доступности на JS часто пишут плохой код. А поскольку язык широко распространен, такого кода накопилось немало. Отсюда и пошла дурная слава JavaScript. Так что по крайней мере, часть проблем JavaScript – это проблема не самого языка, а плохих кодеров, которые пытаются что-то на нем писать.
Проблемы прошлого – одна из причин нелюбви к JavaScript
Кроме того, ранние версии JavaScript действительно имели много недостатков. Язык изначально разрабатывался в сжатые сроки, поэтому в нем было много странностей и неочевидных моментов.
Совместимость между браузерами тоже долгое время хромала – программистам приходилось изобретать костыли, чтобы код работал везде одинаково.
Многие «ветераны» до сих пор помнят те времена и ассоциируют JavaScript с теми проблемами. Но сейчас ситуация с языком принципиально иная.
Современное состояние языка Javascript
Однако с выходом стандарта ECMAScript 2015 язык сильно изменился. Появилось множество новых возможностей, улучшился синтаксис, исправлено большинство исторических ошибок.
JavaScript – это полноценный язык программирования
Сейчас JavaScript – это полноценный язык программирования, пригодный для создания сложных веб-приложений и серверных систем. Современные инструменты и транспиляторы позволяют использовать новейшие возможности языка даже в устаревших браузерах.
Так что на самом деле претензии к JavaScript во многом устарели. Сегодня это мощный и гибкий язык, который активно развивается.
Возможно, со временем его репутация изменится. А пока многие разработчики продолжают «троллить» JavaScript просто потому, что это вошло в моду в программистской среде.
Выбор языка
Если вы решили связать свою жизнь с программированием и хотя бы немного попробовали разобраться в индустрии, то уже столкнулись с очевидным — правильный выбор языка на старте изучения — вопрос №1. Это подтвердят и опытные программисты, уже набившие свои шишки. В данной статье попытаемся объяснить, почему JavaScript (JS) является оптимальным выбором для стартового погружения в увлекательный, финансово привлекательный и чрезвычайно перспективный мир программирования. Приведем доводы, почему вы точно не потеряете время впустую с JS, а, напротив, заложите мощный фундамент на перспективу (даже если придется изучать дополнительно другие языки) и без проблем сможете найти хорошо оплачиваемую и удобную работу.
Востребованность
Выбирая перспективную профессию в сфере IT и программирования, стоит ориентироваться на веб-разработку. Пользователи проголосовали в пользу качественных веб-сервисов, а значит, специалисты в этой области будут цениться все больше. Актуальные данные по рынку США (gooroo.io) говорят, что специалистам JS там готовы платить до 125 тысяч долларов в год (разработка backend-a).
Исследования Роструда за последние 12 месяцев (https://russia.trud.com/salary/692/67635.html) указывают, что JS-программисту в России готовы платить около 75 тысяч рублей в месяц. Причем эта сумма стабильна, а спрос на специалистов неизменно растет. По состоянию на апрель 2019 официально зарегистрировано более 350 вакансий, по некоторым из которых работодатели готовы платить более 180 тысяч рублей в месяц. Примерно такие же данные приводят и негосудартственные источники: vc.ru/hr/44296-skolko-zarabatyvayut-javascript-razrabotchiki-v-rossii.
Вывод: работая с JS вы сможете легко найти работу и получать заработок в разы больше среднего по стране. В мировом масштабе за профессионалами JS охотятся даже такие гиганты, как Amazon, Netflix, Walmart, PayPal и другие.
Язык для всего
Сначала Javascript был языком только для веб-клиентов. Но сейчас он используется везде: от простых и доступных новичкам до сложных и профессиональных задач. Зная JS, вы сможете:
- Создавать мобильные приложения для iOS и Android с использованием React Native
- Создавать современный веб-интерфейс с использованием React.js, Vue.js или Angular
- Создавать программы CLI, используя Node.js
- Писать backend веб-приложений, используя Node.js и Express,
- Писать сценарии автоматизации для Mac с использованием JXA
- Писать сценарии автоматизации для Photoshop
- Писать программы для редактирования файлов Excel с использованием ExcelJS
- Создавать десктопные приложения с графическим интерфейсом для Windows/Mac/Linux с Electron
- Разрабатывать решения для blockchain, работать с смарт-контрактами в Ethereum, ведь Solidity (язык, разработанный под “умные контракты”), фактически, является урезанной версией JS
Если вы хотите разрабатывать продукты, которыми смогут пользоваться тысячи и миллионы людей в мире, JS — правильный выбор .
Вывод: если вы изучите Javascript один раз, вы сможете использовать его для создания чего угодно. Если говорить о программировании интерактивных сайтов, то без знания JS делать просто нечего. При этом community не дремлет и постоянно создает новые инструменты и возможности использования JS.
Отправная точка
JS — основа, от которой можно развиваться в любом направлении, осваивая дополнительные фреймворки и библиотеки. Большинство из них настолько мощны и самодостаточны, что спрос на специалистов по ним на рынке труда также невероятно высок. Такие надстройки как TypeScript, Dart, CoffeScript улучшат ваш код и упростят его, делая лучше. Если хочется развиваться за пределы работы с веб-приложениями, то к вашим услугам серверное программирование и Node.js.
Вывод: освоив JS, вы получаете основу для развития в более специализированных областях, также вы получите базовое представление о синтаксисе «сиобразных» языков (таких как C, С++, C#, Java, PHP)
Перспективы
Последние годы показывают, что и пользователи, и, соответственно, разработчики все больше концентрируются на веб-проектах и сервисах. При этом и приложения для смартфонов, планшетов все чаще и легче реализуются на JS. Не стоит забывать также о мощной поддержке разработчиков со стороны корпоративных гигантов (Facebook и Google).
Данные о росте популярности JS на фоне 15-ти других самых популярных языков программирования:
В общем за будущее JavaScript можно не волноваться 🙂
Минусы JavaScript
У JS, как и у любого другого языка программирования, есть свои минусы. Главное отличие от многих других в том, что перечисленные плюсы превосходят эти недостатки. Последние, к слову, нивелируются либо использованием многочисленных надстроек и дополнений, либо за счет наработанного опыта. Когда критикуют JS чаще всего выделяют: проблемы в работе с типами данных (вольное обращение с переменными и отсутствие механизма проверки кода), отсутствие поддержки объективно-ориентированной работы с кодом (опытные программисты решают вопрос собственными конструкциями) и необходимость использования библиотек и фреймворков (подбор правильных решений приходит с опытом).
Заключение
JavaScript, HTML и CSS — три кита, на которых держится веб-разработка. Вам стоит освоить JS, если собираетесь заняться веб-разработкой и программированием в целом. Этот язык является фундаментальным для работы в большом количестве профильных областей, а профессиональные JS-программисты имеют хорошие перспективы в будущем и высокие заработки сегодня.
Почему не любят JavaScript?
16 декабря 2023 в Краснодаре прошел бар-митап, на котором я в первые выступил с докладом с названием, указанным в заголовке статьи. Здесь будет его пересказ (записи докладов не производилось), а в комментариях я буду рад увидеть больше доводов за и против JavaScript.
Вступление
Меня зовут Максим, мне 19 лет, студент Краснодарского гуманитарно-технологического колледжа, frontend-разработчик с опытом более года.
Пока сообщество продолжает накрывать php могильной плитой, стоит обратить внимание на еще одного всеобщего любимчика. Mocha. LiveScript. JavaScript. Этот язык прошел довольно долгий путь, пережил много изменений и трудных поворотов, обошел конкурентов, таких как ActionScript и JScript, окреп и теперь активно пользуется большой частью сообщества.
В этом году самым популярным языком для коммерческого использования стал JavaScript — 19% разработчиков пишут на нем коммерческие проекты.
JS используется в Microsoft, PayPal, Netflix, Groupon, Uber, Facebook, Google.
Но почему JavaScript не любят?
Я постараюсь ответить на этот вопрос.
События, в результате которых появился JavaScript, разворачивались в течение шести месяцев, с мая по декабрь 1995 года. Компания Netscape Communications уверенно прокладывала себе путь в области веб-технологий. У них было всё необходимое для поиска способов дальнейшего развития веб-технологий.
Веб нуждался в лёгком скриптовом языке.
И тут в нашей истории появляется Брендан Айк, отец JavaScript. Айк должен был разработать для Netscape «Scheme для браузера». Scheme — это динамичный, мощный и функциональный диалект языка программирования Lisp с максимально упрощённым синтаксисом.
Перед командой была поставлена задача подготовить работающий прототип в кратчайшие сроки.
Mocha должен был стать скриптовым компаньоном для Java по принципу, аналогичному тому, как взаимодействуют C/C++ и Visual Basic на платформе Windows.
В течение нескольких недель был подготовлен рабочий прототип, который затем был интегрирован в Netscape Communicator.
То, что должно было стать аналогом Scheme для браузера, вылилось в нечто совершенно иное. Рукой Айка управляли необходимость закрыть сделку с Sun и сделать Mocha скриптовым компаньоном для Java. Синтаксис должен был быть максимально близким Java. Помимо этого, от Java была унаследована семантика для большого количества устоявшихся идиом. Таким образом, Mocha был совсем не похож на Scheme. Он выглядел, как динамический Java, под оболочкой которого скрывался гибрид Scheme и Self.
На выходе мы получили простой в освоении, динамичный, немногословный и мощный язык с множеством достоинств, такие как объектная модель и некоторые функциональные особенности.
Синтаксис и семантика языка
Самыми большими проблемами в JS считаются синтаксис и семантика языка. Вместе они создают уродливый и многословный язык, который обычно больно читать, как считают оппозиционеры.
Подобное может быть верным лишь для только родившегося JS.
Исторические проблемы
Проблемы в языке, оставшиеся по историческим причинам, требуют костылей, но и они неповоротливы и сложны. Подобное возникло вследствие спешки еще при рождении языка, а если точнее, из-за обстоятельств, при которых была необходима эта спешка. Несмотря на это, часть проблем в языке была исправлена вместе со стандартизацией языка.
Пожалуй, одной из самых больших ошибок, допущенных из-за спешки, в которой разрабатывался JavaScript, стало то, что объекты, ведущие себя совершенно идентично, могут быть различных типов. Например, тип строки (Hello world) не совпадает с типом нового объекта String (new String(‘Hello world’)). Это порой приводит к нежелательным последствиям, которые могут сбить с толку.
Давайте рассмотрим еще один пример.
В консоль будет выведено значение true . Такой результат будет из-за того, что JavaScript имеет старый баг. typeof null возвращает «object» .
Эти баги существуют уже много лет и вероятнее всего уже никогда не будут исправлены. Это связано с тем, что написано слишком много кода, который полагается на подобное ошибочное поведение.
К слову, о стандартах. Стандартом языка является ECMAScript, его часто называют ES. Версия 1 была выпущена в июне 1997 года. Это событие открыло JavaScript для большей аудитории и дала возможность сторонним разработчикам принимать участие в развитии языка.
Динамическая типизация
Один из любимых доводов против JavaScript — динамическая типизация. Разработчики на статически типизированных языках считают дикостью подобное, поэтому и называют его недоязыком. Для таких случаев был разработан TypeScript, решающий эту проблему, что по большей части вопрос привычки каждого, сколько недостаток языка.
Но нужно помнить, что динамическая типизация несёт как большую власть, так и большую ответственность
Скорость
Еще один любимый критерий оценки языков программирования — их скорость. Сложилось мнение, что JS — медленный.
Еще считается, что «нативное» предназначение JS — манипуляции с DOM. На самом деле это уже давно не так и JS успешно используется на сервере, в мобильных устройствах и даже в микроконтроллерах. Но речь не об этом. Речь о том, что когда вы с помощью JavaScript работаете с DOM, то тормозит не JS, а DOM. Есть много причин, почему DOM такой медленный, но я позволю себе сузить фокус только на одной причине. Проблема в самой спецификации HTML.
В разделе 1.1.1 The DOM Structure Model есть следующий абзац:
…objects in the DOM are live; that is, changes to the underlying document structure are reflected in all relevant NodeList and NamedNodeMap objects…
Смысл в том, что объекты в дереве DOM — «живые». Это означает, что при любом изменении любой части DOM эти изменения отражаются в каждом объекте DOM.
Есть такой проект под названием Benchmarks Game. Ребята написали программы (обход бинарных деревьев, n-body и т.д.) на всех популярных языках программирования и разработали методику измерения скорости и потребления памяти.
Из всех интерпретируемых языков JavaScipt работает быстрее других. На 2016-й год, он в пять раз быстрее, чем Python и Ruby (в том числе JRuby).
Безальтернативность
Также весомая причина нелюбви — безальтернативность. Формально, это не совсем так, но работая с вебом, ты будешь работать с JavaScript.
Прототипная модель наследования
Путаницу, и вследствие, недовольство, вызывает прототипная модель наследования.
Когда дело доходит до наследования, в JavaScript есть только одна конструкция: объекты. Каждый объект имеет внутреннюю ссылку на другой объект, называемый его прототипом. У этого объекта-прототипа есть собственный прототип, и так до тех пор, пока не будет достигнут объект с нулевым значением в качестве его прототипа. null по определению не имеет прототипа и действует как последнее звено в этой цепочке прототипов.
Подобная архитектура вызывает следующие проблемы:
- Изменение свойств прототипа может привести к неожиданным результатам: если свойство прототипа изменяется, это может повлиять на все объекты, наследующие этот прототип. Это может привести к неожиданному поведению приложения и усложнить отладку.
- Неправильное наследование свойств и методов: если объект наследует свойство или метод, который уже есть в его прототипе, это может привести к конфликту и непредсказуемому поведению приложения.
- Отсутствие явного связывания между объектами: прототипное наследование может быть неявным, что затрудняет понимание отношений между объектами и усложняет их дальнейшую модификацию.
Низкий порог входа
Якобы низкий порог входа в язык порождает собой еще больше сплетней исходит из стихии языка — JavaScript при его создании проектировался как простой скриптовый язык для динамичности страниц. Сейчас же в язык добавлено много возможностей для большого программирования и не делает его таким легким.
Конец
Закончить хотелось бы цитатой:
«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.» Bjarne Stroustrup
За что ненавидят язык программирования JavaScript
Изучили споры между фанатами и хейтерами JavaScript и разобрались, чем JS заслужил нелюбовь кодеров и справедливы ли нападки.
Среди веб-разработчиков принято шутить над PHP и хоронить язык каждый год, а среди разработчиков в целом принято шутить над JavaScript. Мы изучили дискуссии между фанатами и хейтерами JS и скомпилировали их в этом материале.
В этой статье мы разбираемся, чем JavaScript заслужил нелюбовь пользователей и справедливы ли эти нападки.
Почему не любят JavaScript
Самыми большими проблемами в JS считаются синтаксис и семантика языка. Вместе они создают уродливый и многословный язык, который обычно больно читать.
При использовании JS программистам приходится писать костыли для решения проблем, которые находятся в самом языке, и эти костыли чрезвычайно сложны и неповоротливы. Когда программист пользуется языком программирования, он не хочет сталкиваться с громоздким синтаксисом, но ему приходится.
Как перевести приложение с Flow на TypeScript?
Вот почему появляется так много библиотек и транслируемых языков, которые очищают синтаксис и семантику JS или даже позволяют программистам писать на других языках. Даже людям, которые любят писать на JS, приходится иногда использовать транспиляторы, чтобы было легче организовывать собственный код.
К примеру, в Java есть классы. Классы содержат методы и поля. Методы и поля могут быть объявлены как часть класса. Методы и поля имеют модификаторы доступа. Из классов вы можете создавать объекты. У объектов есть конструкторы, которые определяются одинаково. В Java есть множество элементов для реализации наследования.
Все эти языковые элементы сделаны явными. Классы являются базовым элементом абстракции, а элементы, из которых они состоят, четко идентифицируются своими именами и семантикой.
Зато в JavaScript есть объекты, функции (которые также являются объектами) и переменные (которые могут указывать на объекты, которые могут быть функциями). При этом объекты не являются объектами, но являются ассоциативными массивами.
Программист подразумевает разную семантику в зависимости от того, как они объединяют и вкладывают эти вещи. В итоге использование JavaScript приводит к комбинациям одних и тех же элементов, каждая из которых имеет разные подразумеваемые значения.
Построй ML-модель для Газпромбанка и выиграй миллион
Фанаты 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 справедлив и сегодня?
Присоединяйтесь к дискуссии и напишите об этом в комментариях.