В плену JavaScript: как веб-разработка стала заложницей одного языка

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

affae32734819de41b0624a079d04d19.png

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

»На популярность JavaScript вляют создатели браузеров…»

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

Благодаря обширному набору фреймворков и библиотек (React, Angular и Vue.js) процесс разработки значительно упрощается и сокращается во времени. А возможность использования JavaScript для разработки как frontend, так и backend (с помощью Node.js) позволяет разработчикам оставаться в рамках одного языка на всех этапах создания веб-приложений.

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

Однако Александр Биденко, Frontend TeamLead в компании Intelsy, уверен, что его коллеги здесь ни при чем. Популярности JavaScript, по его убеждению, во многом способствуют создатели браузеров. «Если рассмотреть ранний этап существования веба, то вспоминается PHP — один из самых ранних серверных языков программирования. Тогда было много программистов на PHP. Однако PHP никак не помешал развитию в современном мире других языков программирования для серверной разработки. Получается, что не разработчики (и уж точно не их количество) мешают новому языку пробиться, а те, кто способны на это повлиять. Если мы говорим про поддержку современными браузерами, то помочь новым языкам пробиться могут только сами разработчики браузеров», — уверен он.

ed6fd33562d6c48b83e9c15a84518f2e.png

С ним согласен Александр Гузенко, главный программист в IT_ONE. «Представим, что у разработчика браузера есть 100 условных единиц ресурсов. Выгоднее направить эти 100 единиц на реализацию одной цели и достигнуть ее. Допустим, у нас есть инструмент разработки JavaScript. Логично направить все ресурсы на его поддержку и сделать все, чтобы проект, написанный на JavaScript, хорошо работал. Если же сейчас какой-то браузер запустит поддержку, скажем, четырех языков, то это значит, что надо выделять по 25 условных единиц ресурсов на каждый. Однако 25 — это не 100. Возможны проблемы: какие-то инструменты разработки будут некачественными, и никто ими пользоваться не будет. И когда в следующий раз встанет вопрос о том, нужен ли новый язык для браузера, то все скажут: «Вот ребята пытались же. У них ничего не получилось. Давайте еще на 10–15 лет отложим эту тему и не будем ничего развивать», — отмечает спикер.

Проблема монополии одного языка в веб-разработке обсуждается и на уровне создателей новых инструментов программирования. Участники дискуссии вспомнили американского программиста Дугласа Крокфорда, известного как постоянного участника развития языка JavaScript. 

«Дуглас Крокфорд сейчас как раз занимается созданием нового языка, в котором, по его словам, будет лучше обеспечена безопасность и другие аспекты, — рассказал Руслан Посевкин, Frontend Engineer в компании Toptal. — Дугласа спрашивали: «Как новому языку пробиться и составить конкуренцию JavaScript, ведь JavaScript у нас повсюду». И он отвечал, что внедрение того или иного языка зависит лишь от потребностей бизнеса. Если большинству компаний будет выгодно получить новую технологию, то она обязательно будет внедряться в той или иной степени. А если этот процесс будет сопровождаться появлением необходимых инструментов для разработки, формированием комьюнити и всем остальным, то новая технология будет не только широко распространена, но и впоследствии заменит JavaScript».

2f552881a8632649910cbf5dfbaa0574.png

Это мнение поддерживает и Марат Минулин, ex-Senior Frontend разработчик Yandex. «Действительно, если будет потребность от бизнеса на новую технологию, то новый язык может выдержать конкуренцию и привнести новые решения, от которых выиграют как разработчики, так и бизнес. Другой вопрос — как определить текущие проблемы в JavaScript и как на них можно повлиять. Сообщество State of JS (State of JavaScript) проводит ежегодные опросы, в которых можно участвовать и своим мнением стимулировать появление новых API и реализаций в JavaScript. Но мне кажется, что этого мало. Не хватает и других подобных способов донести до индустрии новые идеи, указать на проблемы и найти пути решения. Надеюсь, они скоро появятся. Если же говорить о State of JS, то сообщество уже получило свое развитие. Появились State of CSS, позже State of HTML, и, возможно, в перспективе сформируется State of Web, в котором мы сможем оставлять свои отзывы о целом состоянии индустрии и влиять на то, с чем мы работаем каждый день», — высказывает надежду разработчик.

63b078a7a3df8f4c8c346fde8ac021e5.png

 Спикеры сходятся во мнении, что если речь идет о веб-разработке, то альтернатив JavaScript сейчас нет. 

«Когда мы говорим только о браузерном приложении, у нас вообще нет выбора. Что бы мы не предлагали заказчику, все равно будем использовать JavaScript, — поделился наблюдением Николай Докутович, директор центра разработки Artezio. — Когда мы обсуждаем backend или нативные приложения, уже можно говорить об эффективности и скорости. Так в свое время Microsoft перевел Skype на JavaScript. Чувствовалось, что он работает немного медленно, не всем нравилось, но сейчас Skype — на JavaScript. Его все используют, проблем не возникает», — отметил спикер.

1e0453b2363d818cc2e0d4447e1a012a.png

«JavaScript — это царь, но революции не будет» 

У всех языков есть свои плюсы и минусы, считает Александр Гузенко. «Используя любой из языков, программисты идут на определенные компромиссы. Некоторые языки быстрее. Почему тогда не все серверы написаны на Assembly? И почему мы все не пишем на Assembly? Потому что нужны компромиссы: важна не только скорость, но и удобство, сообщество, инфраструктура. В JavaScript есть минусы, но они компенсируются его преимуществами. Безусловно, в JavaScript много проблем, но на каждую из них есть своя библиотека. Обычно, решая одну проблему, мы создаем две новые, но меньшие. Можно провести аналогию с государством, где JavaScript — это царь. Общество может быть недовольно повышением налогов или другими вещами, но это не переходит в революцию. Только когда будет достигнута точка, когда на JavaScript невозможно будет реализовать нечто важное, появится толчок к развитию альтернатив», — поделился мнением спикер.

Эксперты полагают, что реального стимула для перехода с JavaScript на что-то иное пока не существует. 

«Я хочу немного пофантазировать о том, что должно произойти для появления конкурента JavaScript в вебе, — продолжил Александр Гузенко. — Мы понимаем, что сейчас это не происходит из-за отсутствия определенных критических моментов (к таким можно отнести ситуации, когда язык не сможет справиться с необходимыми задачами). Однако если представить, что может измениться в будущем, то многое. С развитием виртуальной реальности, которая может войти и в веб, возможно, потребуется большая производительность, многопоточность и т. д. Тогда может возникнуть потребность в чем-то, что JavaScript не сможет сделать. Возможно, в будущем с появлением нейроинтерфейсов, где мы сможем управлять компьютером силой мысли, JavaScript также окажется неспособным справиться с этими задачами. В таком случае Dart или другой язык станут хорошей альтернативой». 

Продолжая мысль о развитии языков Марат Минулин добавил, что в backend-разработке люди решают проблемы с помощью конкретных языков, например, C++. «Они могут написать свой компилятор или интерпретатор, что дает толчок развитию. Проблема JavaScript в том, что мы не можем просто написать свой интерпретатор или компилятор, потому что его нужно еще интегрировать в браузер. Не хватает инструментов для интеграции кастомных решений непосредственно в движок браузера. Если бы браузеры позволяли интегрировать собственные решения, это бы сильно продвинуло индустрию вперед», — уверен спикер. 

6ffd362c8e53c95f123b49478bcd9fcc.png

Другой точки зрения придерживается Александр Биденко, Frontend TeamLead в компании Intelsy. Он видит немало преимуществ в монополии JavaScript, в частности, развитую экосистему. «Монополия JavaScript — это скорее плюс, — уточняет Александр. — Когда есть много фреймворков и языков на backend и они развиваются разными командами, то каждому уделяется меньше внимания. Одна же большая экосистема JavaScript двигается вперед быстрее. Браузерный JavaScript имеет огромную систему с множеством фреймворков, которые формируются, «воруя» идеи друг у друга, и это стимулирует появление различных сканеров уязвимостей, линтеров для проверки кода и многого другого». 

 «JavaScript — это действительно зло» 

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

53c2976aa1de6f0a40eefea6481b510f.png

Вадим Вильданов, программист ЮMoney, считает, что JavaScript — это действительно зло. «Помимо браузерного окружения, JavaScript не подходит для сервера, а сам язык очень плох как инструмент разработки. Это видно по всему сопутствующему инструментарию: Node.js, Webpack, NPM и всей среде в целом. Она незрелая, если сравнивать ее с любым другим языком, например, с Java. При этом, JavaScript по-прежнему медленный. Если сравнивать код, написанный на Go с многопоточностью, то такой код в WebAssembly теряет почти всю свою производительность. При этом, JavaScript, действительно, монополизировал браузеры, и нет никаких вариантов. Хотя, по сути, браузер — это что-то вроде приложения на iOS или Android. И когда нужно использовать какой-то специфический функционал, например, виртуальную реальность, все уходят с JavaScript и предпочитают его не применять. Потому что он как язык имеет недостатки, и TypeScript не может их исправить лишь потому, что JavaScript так спроектирован», — приводит аргументы эксперт.  

По его словам, язык тормозит индустрию. «Он является якорем. Да, ты можешь использовать WebAssembly, но ты будешь страдать. Ты можешь использовать JavaScript или TypeScript, но все равно, у тебя все будет транспилироваться в JavaScript, все будет работать однопоточно, в целом медленно. Если же есть CPU-bound задачи, то JavaScript здесь не применим. Он становится абсолютно бесполезным инструментом. При этом, если сравнивать с клиентами на iOS или Android, то там эти задачи решаются отдельными потоками. Конечно, в JavaScript есть WebWorker (Web API), но часто ли эти  API используются на практике? Мне кажется, это просто редкий случай решения какой-то маленькой атомарной задачи. Но в продакшене их API и в целом их использование не подходят для JavaScript. Поэтому я согласен с тем, что язык должен быть заменен в веб», — высказался Вадим.

«Мы не видим лагов, все хорошо»  

У JavaScript есть свои защитники, которые искренне верят, что все неудобства разработки и производительности можно компенсировать за счет большого количества разработчиков на рынке труда. Об этом на дискуссии напомнил Дмитрий Крыстек, Senior Full Stack Software Engineer в Mapbox.

0c7ac34f2e845a79e0711cfd5e85056a.png

«Нет явных проблем с производительностью в текущем браузере. Мы сейчас с вами разговариваем (во время дискуссии на Youtube, прим. ред), и наша трансляция происходит в браузере. Все работает. Мы не видим лагов, все хорошо. Когда мы говорим о многопоточности, то создается больше проблем. У вас будет больше багов. Вам нужны более квалифицированные разработчики, которые будут придумывать решения. Вы будете больше времени тратить на разработку, потому что вам нужно думать о многопоточности. И будет много ситуаций, когда разработчики будут применять многопоточность без необходимости. Это приведет к новым проблемам. Если мы говорим о JavaScript и говорим, что Node.js и какие-то приложения пишутся только для каких-то простых задач на Node, это неправда. Я могу сказать, что мы пишем на Node поисковый движок, который занимается сложной математикой, расчетами и поиском. Скорее всего, ваш backend не упрется в язык. Скорее всего, вы упретесь в базу данных, в I/O операции. Но этот процент работы по сравнению с работой с диском и сетью будет очень мал. Вложив в другой язык, скорее всего вы потеряете больше денег на том, что вам нужны другие разработчики, вы будете больше тестировать, вы будете работать с потоками и еще чем-то. Выгода от этого неясна», — уверен Дмитрий Крыстек.

 «Необходимо дорабатывать JavaScript» 

Николай Докутович также полагает, что время для перемен еще не наступило.

887e584c9f28cf9d11e3edecdd5c71b4.png

«Помимо языка у нас есть браузер, который является движком-интерпретатором для нашего кода. Когда я смотрю на JavaScript, то задаюсь вопросом, нужно ли что-то менять в самом языке. Возможно, изменения нужны в библиотеках. Например, если браузер предоставит новый неймспейс для создания нативных потоков, мы сможем эффективно работать с потоками из JavaScript. Это может потребовать дополнительной криптографии, а для решения бизнес-задач может быть необходимо чтение токенов из браузера. Например, в прошлом при работе с КриптоПро требовалось использовать Internet Explorer и его ActiveX-компоненты. Однако сегодня криптография работает в любом современном браузере без проблем. Уверен, что проблема не только в языке, но и в окружении, и важно не только менять язык, но и дорабатывать браузеры, чтобы предоставлять новые возможности. Если добавить новые ключевые слова или неймспейсы с новой функциональностью, это может помочь нам справляться с различными задачами. Например, если появится VR, мы сможем работать с ней и обрабатывать данные, но скорость зависит от того, насколько быстро браузер сможет интерпретировать новый функционал. Браузеры периодически выпускают обновления, которые улучшают производительность JavaScript, но она может временно улучшиться и затем снова замедлиться», — делится наблюдениями Докутович.

Он подчеркивает, что синтаксический аспект также важен. «Такие проекты, как WebAssembly предоставляют подход, аналогичный .NET, с разделением на frontend- и backend-компиляторы. Это означает, что мы можем писать код на разных языках, а затем компилировать его в байткод, который выполняется на разных системах. С учетом многообразия устройств, поддерживающих JavaScript, заменить язык будет сложной задачей, — подчеркивает разработчик. — Я считаю, что необходимо дорабатывать JavaScript, добавляя новые возможности через спецификацию ECMAScript, вместо его полной замены».

И снова вместо вывода

Если вы хотите лучше понять мнения экспертов — посмотрите запись дискуссии на Youtubе и обязательно оставьте в комментариях под видео свой ответ на вопрос: «Считаете ли вы, что JavaScript тормозит развитие веб-технологий?» 

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

Не забудьте подписаться на наш канал — впереди новые обсуждения и выступления экспертов. Кстати, если вы хотите выступить экспертом на наших дискуссиях, напишите нам. 

© Habrahabr.ru