Хотя название очень похоже на кликбейт, это история моего опыта работы с Javascript во время моей карьеры в области разработки серверных приложений. Основными языками программирования, которые я использую в своей повседневной деятельности, являются Go и Python (последние 15 лет). Как и большинство Backend-разработчиков, я долгое время игнорировал Javascript как серьезный язык. В основном я использовал его для небольших задач, когда не было специалистов по фронтенду. Дело не в том, что я не пытался выучить его как следует, я пытался много раз. Я думаю, что когда-то читал JavaScript: The Good Parts, и это действительно помогло мне узнать достаточно Javascript, чтобы использовать его, когда это необходимо (или знать достаточно, чтобы быть опасным). Несмотря на то, что я иногда рассматривал возможность использования Javascript, не было ситуации, когда он предлагал решение, с которым не мог справиться мой обычный язык, поэтому он просто казался ненужным.

Так что же изменилось?

Экосистема Javascript сильно изменилась, я пропущу очевидные вещи, такие как огромная экосистема npm, поддержка сообщества, кроссплатформенная разработка и улучшения производительности за эти годы, и перейду к вещам, которые снова привлекли мое внимание:

  • Node.js и разработка на стороне сервера: это существует уже давно, но теперь я думаю, что есть несколько достаточно стабильных библиотек/фреймворков. Пару лет назад я пытался поиграть с некоторыми библиотеками в Nodejs, но раньше многое менялось (особенно между версиями Nodejs). Теперь я считаю, что Node.js становится тем, что некоторые могут назвать «скучной» технологией, и именно поэтому она привлекла мое внимание. Мое эмпирическое правило: когда технология скучна, это означает, что она достаточно стабильна и ее можно изучать.
  • ES6 и более поздние версии: новые языковые дополнения, которые были включены в Javascript, действительно хороши. Правильные классы, стрелочные функции и особенно асинхронный/ожидающий синтаксис делают Javascript более разумным и профессиональным языком для меня. Я помню, как пытался делать что-то с Javascript pre async/await и просто сдался, думая, что это не стоит усилий (и меня немного тошнило каждый раз после адского обратного вызова).
  • Typescript: он, вероятно, заслуживает отдельного поста в блоге, но я думаю, что без Typescript я бы все равно не рассматривал Javascript как подходящий язык для своих профессиональных проектов. Это действительно имеет огромное значение с точки зрения наличия статической типизации, лучшей поддержки IDE, лучших языковых структур, более безопасного рефакторинга и т. д. Особенно возможность добавлять его постепенно и быть расширенным набором Javascript просто идеальна.
  • Стабильные интерфейсные фреймворки: Хотя я сам не разработчик внешнего интерфейса, у меня есть стабильные и надежные внешние фреймворки, которые я могу использовать (даже для прототипирования), написанные на том же языке, что и мой бэкэнд имеет большой смысл. Я не большой поклонник React, но я думаю, что это очень большой игрок, поскольку сегодня вы можете писать с его помощью мобильные, веб- и настольные приложения.

Что еще не хорошо?

Хотя Javascript теперь снова привлек мое внимание, есть пара вещей, которые далеки от идеала и до сих пор меня сильно беспокоят:

  • Наследие: несмотря на то, что новые языковые структуры и Typescript делают язык более удобным для работы, странное поведение языка по-прежнему скрыто и может укусить вас, если вы не будете осторожны.
  • Динамическая типизация. Хотя мне самому нравится динамическая типизация, и я часто использую ее для создания прототипов и своих личных проектов, я думаю, что она убивает производительность в больших проектах с большим количеством членов команды. Я ловлю себя на том, что много копаюсь в недокументированном коде и пытаюсь понять, что делаю. Я действительно удивлен, что некоторые разработчики JavaScript избегают TypeScript, утверждая, что статическая типизация замедляет их работу.
  • Перегрузка пакетов. Мне до сих пор кажется очень странным, что в npm есть множество очень маленьких пакетов, в которых есть пара функций. Это безумие, сколько пакетов тянут для очень простых проектов. Я думаю, что Nodejs может сделать больше в этом смысле и поставляется с большим количеством включенных батарей, таких как Go или Python.
  • Создание системы. Я думаю, что создание систем в экосистеме Javascript — это самая болезненная вещь, на которую я трачу большую часть своего времени. Я до сих пор не понимаю этого полностью и все еще учусь там, но что-то внутри меня говорит мне, что это не должно быть так сложно.

Как использовать Javascript?

Как я уже упоминал, моими языками для повседневных задач остаются Python и Go. У меня есть клиенты, которые работают с технологиями искусственного интеллекта, и большую часть времени я использую Python. Кроме того, Go используется для долго работающих приложений из-за его возможностей параллелизма, небольшого объема памяти и производительности. Итак, как мне использовать Javascript:

  • BFF: я думаю, что BFF (Backend for Frontend) — очень подходящий вариант использования Javascript, поскольку вы можете поделиться некоторой логикой с вашим интерфейсом. Кроме того, у меня был один случай, когда нам пришлось использовать GraphQL, и я обнаружил, что с пакетами Javascript очень легко работать (по сравнению с Go).
  • Rest APIS: обычно я использую Go или Python для REST API, но недавно мне пришлось присоединиться к команде, где все их стеки были на Nodejs, поэтому я использовал Express + Typescript + TSOA (для чванства). Я могу сказать, что это был удивительно приятный опыт, особенно часть TSOA, где я смог генерировать открытые определения API из машинописных типов.

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