JavaScript для людей, которые ненавидят JavaScript

6 minute read Published:

Перевод статьи Зака Холмэна JavaScript for People Who Hate JavaScript о его чувствах к современному JavaScript с точки зрения Ruby-разработчика.

У меня долгая история с JavaScript восходящая ко временам славы самой совершенной технологии созданной когда-либо: DHTML.

DHTML был определенно клевым (1), как лягушки Будвайзер из ТВ рекламы. В конце 90-х вы действительно не могли сделать многое в веб за исключением кнопок размера 88x31 и трюков с гифками 1x1. Но затем динамический HTML пришел вместе с Internet Explorer 4 и целый мир hover анимаций, эффектов указателей мыши, и практически больше ничего другого. Это было действительно здорово.

Затем я работал с другим JavaScript время от времени. Все было довольно ужасным пока jQuery, Mootools и множество других фреймворков не появились в середине 2000-х. Что сделало разработку приемлемой на некоторое время.

Потом я начал работать в GitHub, и мой опыт с JavaScript деградировал до конкатенации (объединения) строк и публикации пулл реквестов (pull request), чтобы быть уверенным, что @github/js команда исправит все за меня.

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

Ты знаешь, что херово? Я каким-то образом люблю JavaScript сейчас. Я думаю, 2017 – наконец, год JavaScript on the Desktop, где DESKTOP – акроним для “Разработчики получают теперь удовольствие от JavaScript даже если они думали раньше, что язык сосет по сравнению с другими языками.”

Пожалуйста не раньте мои чувства

Небольшая оговорка: я разрабатывал на Ruby последние десять лет, и все еще люблю этот язык (кстати, серверная часть During – Rails GraphQL API, и я счастлив с этим выбором). Я определенно не крутой доктор наук, который имеет много фактов и аргументов о дизайне языка и прочих умных штуках. Мне просто нравится разработка. Так что если мой пост заставляет вас нервничать по причине “Холмэн что-то неправильно понял”, возможно вы правы. Как большинство рубистов я пишу этот пост о своих чувствах, а не о действительности.

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

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

Экосистема

Одной из вещей, глядя на которую я закатывал свои глаза последние пять лет, была сама платформа Node.js … особенно ее экосистема. Вы уже знаете все эти шутки: существует пятьсот тысяч пакетов для капитализации первого символа каждого слова, и каждый из этих пакетов содержит пятьсот тысяч зависимостей, каждый из которых в свою очередь имеет одну строчку кода.

У меня были странные чувства по поводу того, что что-то не так с безопасностью / производительностью / чем-то еще. И каждый раз когда я смотрел с точки зрения создания нового приложения, находились миллионы пакетов и библиотек, которые вы можете организовать в свой собственный стек. Клево, много свободы, я понял это, но помните: я по-прежнему считаю Rails классным фреймворком. Черт, в свое время я был одним из тех, кто ставил +💯 к знаменитому коммиту DHH добавляющему .second, .third, .fourth, .fifth и так далее методы в Rails. Мне нравятся “батарейки в комплекте”. И хотя на протяжении многих лет я пробовал использовать различные JavaScript фреймворки с “батарейками в комплекте”, ни один из них не резонировал со мной.

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

Времена изменились. Я с радостью присоединился к почитателям «Реакт», и это решило множество проблем, о которых я даже не догадывался. Но одна из вещей, которая меня действительно взбудоражила в плане экосистемы, это проект Create React App. CRA – поддерживаемый Facebook проект с открытым исходным кодом который дебютировал прошлым летом. Он создает основу для вашего React приложения и позволяет быстро начать работу благодаря сопутствующим библиотекам.

Я нашел CRA взрывающим мозг, потому что он позаботился обо всех важных вопросах, которые у меня возникали: как упаковать (bundle) проект? как структурировать код? как сделать горячую перегрузку кода (hot code reloading) – неплохое название для группы? что-то насчет разделения кода? а как настроить тесты? как работать с Babel, что это вообще за фигня (шучу, я знаю что это такое. Ужас – вот что это). Все эти важные вопросы, но у меня нет времени тратить месяцы и месяцы изучая все возможные варианты, пробовать их и пытаться заставить их работать вместе. Над CRA работают лучшие люди в индустрии. Ден Абрамов делает все эти сумасшедшие вещи за меня.

Более того, с обновлениями все хорошо. Просто выполняем yarn install. Несколько месяцев назад я получил бесплатно поддержку Service Workers. Это приводит меня к вещам, которые я еще не изучал, но буду. Это здорово.

Често говоря, Create React App, по крайней мере с перспективы новичка, коренным образом изменил то как я смотрел на JavaScript экосистему раньше.

Синтаксис

Ок, как рубист, я больше не могу быть слишком высоким и могучим. Rails больше не самое горячее дерьмо на улице, производительность никогда не было такой замечательной, и, прикол, репозиторий языка все еще на Subversion. Но я по-прежнему люблю синтаксис Ruby. Язык ощущается гибким, удобным как никакой другой. Он прекрасен, на мой взгяд.

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

Пара новых вещей случилась в JavaScript, которые изменили мое мнение: Prettier и возможность использования ES6 и ES7 функциональности, что делает язык более привлекательным. Create React App хорошо помогает с последним; он уже добавляет несколько полифилов, и способ, которым устанавливается инструментарий для вашего проекта, облегчает установку будущих JavaScript модулей и библиотек.

Prettier, если вы не слышали о нем раньше, офигенен. Скринкаст вместо тысячи слов. Это по сути gofmt для JavaScript. Он парсит ваш JavaScript и возвращает более красивый код. Мне нравится данный инструмент несмотря на изменения синтаксиса, которые он производит. Это позволяет не заботиться о том, что я на самом деле использую табы вместо пробелов, что неправильно. Любое ваше ужасное форматирование будет полностью допустимым. На самом деле, Prettier делает мой код куда более хуже, потому что теперь я даже не беспокоюсь об отступах или скобочках вокруг; я просто жму cmd+S в своем редакторе, и я в порядке. Дайте мне задачу на доске на интервью, и я полностью завалюсь (не то чтобы я не завалился в любом случае, но все же).

В комбинации с TypeScript или Flow мой JavaScript чувствует себя на порядок лучше, логичнее и надежнее.

Помимо всего перечисленного, я хотел бы упомянуть сам React. Это глоток свежего воздуха. С момента перехода на него я продолжаю говорить людям, что я не чувствую что действительно пишу на JavaScript. Функциональная подход упрощает многое: получаешь массив объектов и затем отображаешь каждый из них по-отдельности. Вот и все. Если мне не нужно реализовать что-то более сложное, то решение выглядит так же просто как цикл и рендер. Никаких сумасшедших асинхронных слушателей событий (event listeners) и пр. фигни. В результате код каждого компонента или экрана легко читать даже после нескольких месяцев.


В любом случае, я очень воодушевлен по поводу всех этих новых вещей в JavaScript. Это классное чувство, которое я испытывал последний раз после релиза Rails 0.10 и был в восторге от средств разработки. Быть новичком снова в языке, который я пробовал почти 20 лет назад в той или иной степени, это на самом деле потрясающий, разочаровывающий и захватывающий опыт. Буду учить JavaScript снова в 2037.


  • 1 rad – один из самых высоких комплиментов; оно так же означает клевость, но без необходимости работать над этим.
  • 2 hip – клевее клевого.
  • 3 Developers Enjoy JavaScript now even though they thought it Sucked compared To Other Programming languages before.
comments powered by Disqus