Перевод статьи Зака Холмэна 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 деградировал до конкатенации [2] строк и публикации пулл реквестов [3], чтобы быть уверенным, что ребята из @github/js команды исправят все за меня.

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

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

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

Небольшая оговорка: я разрабатываю на Ruby последние десять лет и все еще люблю этот язык [4]. Я определенно не крутой доктор наук, у которого есть много фактов и аргументов о дизайне конкретного языка и прочих умных штуках. Мне просто нравится разработка приложений. Так что если мой пост заставляет вас нервничать по причине "Холмэн что-то неправильно понял", возможно вы правы. Как большинство рубистов я пишу этот пост о своих чувствах, а не о действительности.

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

Экосистема

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

У меня были смешанные чувства по поводу того, что что-то не так с безопасностью / производительностью / чем-то еще. И каждый раз, когда я думал о создании нового приложения, находились миллионы пакетов и библиотек, которые можно организовать в свой собственный стек. Клево, много свободы, я понял это, но помните я по-прежнему считаю Rails классным фреймворком?

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

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

Я нашел CRA взрывающим мозг, потому что он позаботился обо всех важных вопросах, которые у меня возникали:

  • как собрать проект?
  • как структурировать код?
  • как сделать горячую перегрузку кода (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. Функциональная подход упрощает многое: получаешь массив объектов и затем отображаешь каждый из них по-отдельности. Вот и все. Если мне не нужно реализовать что-то более сложное, то решение выглядит так же просто как цикл и рендер. Никаких сумасшедших асинхронных слушателей событий [5] и прочей фигни. В результате код каждого компонента или экрана легко читать даже после нескольких месяцев.


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


  1. rad – один из самых высоких комплиментов; оно так же означает клевость, но без необходимости работать над этим. ↩︎

  2. объединения ↩︎

  3. pull request ↩︎

  4. кстати, серверная часть During – GraphQL API на Rails, и я счастлив благодаря этому выбору ↩︎

  5. event listeners ↩︎

Prettier