Иван Короленко, «Яндекс»: Пять языков программирования, которые останутся с нами в ближайшие пять лет

17.01.24, Ср, 08:16, Мск,

Языки программирования – основа любого IT-продукта. Она незаметна для пользователя, но критически важна для разработчика.

Иван Короленко

Автор: Сергей Казанцев

От выбора языка зависит скорость и эффективность разработки, он во многом определяет качество пользовательского опыта. С появлением новых технологий меняются и языки программирования. У каких из них есть шанс пережить следующие пять лет? Какие из них только появляются на горизонте и скоро засияют новыми звездами? Об этом рассказывает Иван Короленко, Lead Front End Engineer «Яндекса» более чем с семью годами опыта в индустрии. За его плечами также ведущие позиции во фронтенд-разработке в финансовом секторе (банк ВТБ) и электронной коммерции (британская платформа для ритейла Mercaux).

Иван, какие языки программирования Вы чаще всего используете в вашей работе и какие у Вас впечатления от них?

В работе я обычно использую JavaScript и TypeScript, впечатления от обоих положительные. JavaScript нравится мне лаконичностью, возможностью быстро описывать и проверять гипотезы, свободой, которую он предоставляет разработчику, и возможностью применять различные парадигмы разработки, включая мою любимую – функциональное программирование. TypeScript – это по сути усиленная версия JavaScript, имеющая все те же плюсы, и вдобавок статическую типизацию. Статическая типизация при должном навыке позволяет `на одном дыхании` создавать большие части проекта и редактировать множество связанных мест с уверенностью, что при запуске код с первого раза сделает то, что от него ожидается, вместо падения из-за того что мы, например, обратились к свойству объекта, который не существует. Это здорово облегчает и ускоряет разработку, особенно на серьезных крупных проектах вроде тех, что разрабатываются у нас в «Яндексе».

Иван, как устроена эволюция языков программирования?

В этом мире постоянно только одно – перемены. Меняются не только технологии, но и подходы к разработке, а также сложность создаваемых систем. Помимо масштабности происходящих изменений увеличивается также скорость их возникновения. Если в начале 2000-х для создания актуального кода, который не превратится в legacy спустя пару лет, было достаточно изучить какой-то из популярных языков и его стандартную библиотеку, то теперь этого точно будет недостаточно. Ожидания пользователей сильно изменились и далеко не в сторону `смягчения`, и, чтобы удовлетворить эти ожидания, нередко бэкенд-сторона продукта создается с помощью сочетания нескольких языков, каждый из которых специализируется и `сияет` в нескольких конкретных вещах. При этом очень активно используются специализированные open source-ные и, в случае крупных компаний, внутренние библиотеки, в которых уже покрыты все corner case-ы, проведено тщательное тестирование всех компонентов, и обеспечен должный уровень безопасности. При этом количество таких библиотек в зрелом проекте, особенно если посчитать все зависимости 2-го и последующего уровней (зависимости зависимостей) измеряется сотнями. И это на бэкенде, где всё еще довольно неплохо со скоростью изменений экосистемы и появления новых библиотек/рантаймов/бандлеров и т.д. в рамках языков. В мире фронтенда скорость изменений доходит до того, что появилась известная шутка: `За время, пока вы изучали новую библиотеку, появилось еще несколько`. И это на самом деле не шутка даже при высокой скорости изучения новых технологий. Жонглирование библиотеками - это отдельный скилл. Поэтому в применяемых языках на первый план сейчас зачастую выходит не то, насколько они красивые или быстрые, а насколько большая и стабильная у них экосистема.

Каким критериям должен отвечать если не идеальный, то перспективный язык программирования?

Он должен быть удобным, гибким и мощным. Но главное – он должен отвечать требованиям сегодняшнего и завтрашнего дня. Из этого вытекает еще одно важное требование: он должен все время развиваться. А значит, язык должен быть достаточно популярным, чтобы вокруг него сформировалось сильное и живое сообщество, которое будет улучшать и `затачивать` язык под новые, все время меняющиеся реалии.

Какие из известных языков отвечают этим критериям и имеют шанс остаться востребованными в ближайшие годы?

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

1. JavaScript

Практически все, что Вы видите в Интернете через браузер, написано с использованием JavaScript. Сайт, на котором вы читаете эту статью, сайт вашего банка, Wikipedia, ВКонтакте, YouTube, Telegram Web – всё это работает на JavaScript. Благодаря технологии Electron этот язык используется не только для работы с браузерами. Например, вам приходилось использовать приложение Discord для компьютера? Оно написано на JavaScript. На нем же написаны такие десктопные приложения как Twitch, Microsoft Teams, OpenVPN Connect, Skype, Slack, Dropbox, Visual Studio Code, GitHub Desktop. На самом деле, внутри всех этих продуктов работает браузер на JavaScript, просто вся эта `кухня` скрыта за рамками внутренней реализации. Также на нем пишут мобильные приложения с помощью таких технологий, как React Native, Apache Cordova, Ionic. Ну и куда же без Node.js, благодаря которому работает тот же Electron, а также десятки тысяч приложений, бэкенд которых написан с использованием этой среды. Например, приложения компаний PayPal, LinkedIn, Mozilla, Netflix, Uber, eBay и даже организации NASA – той самой, которая занимается исследованиями космоса и множества передовых технологий. Джефф Атвуд, создатель Stack Overflow, как-то сказал: "Любое приложение, которое может быть написано на JavaScript, будет в итоге написано на JavaScript". И, похоже, он был прав.

2. Python

Львиная доля кода для AI пишется именно на Python. Уже одного лишь этого факта достаточно, чтобы быть уверенным в популярности Python в ближайшие пять лет. На Python также пишут код для научных исследований, data science, бэкенда веб-приложений очень широкого спектра, им же пользуются при создании ботов. При этом у языка настолько низкий порог вхождения, что его используют для обучения программированию детей. То есть, помимо прочего, он еще и занял нишу, в которой раньше правили такие языки, как Basic и Pascal. В общем, Python с нами надолго.

3. Java

Если вы хоть раз в жизни пользовались приложением крупной компании или маленькой компании, которая в чем-либо зависит от крупной (а в эту категорию попадают практически все с учетом популярности облачных технологий), вы пользовались кодом, написанным на Java. Этот язык чаще всего используется для написания бэкенда – обычно в связке с фреймворком Spring. Этот язык использовался абсолютно во всех компаниях, в которых я работал, и то же самое могут сказать большинство разработчиков. Если на JavaScript держится интерфейс сайта вашего банка, то на Java держится вся серверная бизнес-логика. Ваши данные и платежи обрабатываются кодом на Java, бэкенд Google, Microsoft, Netflix, и многих других компаний тоже работает на Java. И не только бэкенд. Все Android-приложения тоже написаны на нем. На Java держится столько всего, что в ближайшие пять лет будет очень сложно представить мир без него, а использование JVM дает языку гибкость и кросс-платформенность, которые позволят ему подстроиться под любые реалии.

4. SQL

Подавляющее большинство реляционных баз данных используют SQL. Это означает, что очень большая часть электронных данных человечества создается, считывается, изменяется и удаляется кодом на SQL. Вполне очевидно, что этот язык тоже никуда не денется в ближайшие пять лет, если только человечество не захочет стереть все свои данные и начать жизнь с чистого листа. Конечно, существуют и NoSQL-решения, такие, как MongoDB и Cassandra, но они занимают совершенно другие ниши и никак не конкурируют с SQL-решениями (PostgreSQL, MySQL, Oracle SQL Server, и прочими). Например, Cassandra относится к типу БД "семейство столбцов", он отлично применим для случаев, когда объем данных постоянно растет, а количество вариантов запросов остается примерно одинаковым. MongoDB относится к документо-ориентированным БД, которые подходят, если между данными нет связей, а также когда есть много типов данных и много вариантов запросов. Например, ссылки для двух адресов, сгенерированные сервисом вроде TinyURL, никак не связаны между собой, поэтому нет необходимости хранить их в реляционной базе. Однако большинство моделируемых через базы данных объектов реального мира имеют множество связей, поэтому реляционный тип, а значит и SQL, останутся наиболее частым выбором при проектировании БД в ближайшие пять лет.

5. C++

Играли когда-нибудь в компьютерную игру? Какой бы она ни была, она написана на C++, ну либо на C#, если она работает на движке Unity. Только вот ядро Unity все равно написано на C++, как и части операционной системы устройства, с которого вы читаете этот текст. Неважно, Windows это, Linux, MacOS, Android, или iOS, все они так или иначе используют C++. Говоря о Python, я упоминал AI – так вот, весь код, от которого требуется высокая производительность, в AI-библиотеках написан как раз на C++, а Python-код использует его через байндинги для удобства разработки. Это одно из основных применений языка: его используют везде, где нужно посчитать что-то очень `тяжелое`, вроде AI, моделирования термодинамических процессов, компьютерной графики. И дело не только в его близости к "железу", а еще и в том, что на нем написано очень много библиотек, заточенных как раз под тяжелые вычисления. Это далеко не самый удобный и простой язык разработки, но если вам нужно написать что-то, требующее наилучшей производительности, и у вас не завалялось множество свободных человеко-часов, то оптимальным выбором будет C++. В ближайшие пять лет у человечества будет предостаточно задач с такими критериями, так что от C++ нам никуда не деться.

Какие новые языки имеют шанс стать популярными в будущем и почему?

Таких языков довольно много и тут выбор не так однозначен. Попробую перечислить наиболее известные варианты и добавить кое-что на свой личный вкус:

1. TypeScript

Статически-типизированный язык, созданный компанией Microsoft. Является суперсетом JavaScript. В основном, современный фронтенд создается именно на этом языке благодаря большему удобству разработки, более безопасному коду по сравнению с JS и совместимостью с JS-кодом. Последний фактор обеспечивает возможность плавной интеграции TypeScript в проект, что во многом и развивает его популярность. Большинство кодовых баз, которые вы увидите на фронтенде, на 50% и более состоят из TypeScript. Оставшаяся доля приходится на JavaScript в виде legacy кода и частей, где интеграция TypeScript была бы неоправданно затратной по времени и увеличению размера продакшн бандла, например, страницы, написанные без использования фронтенд-фреймворка и NPM-библиотек. Продолжая слова Джеффа Атвуда про написание всего на JavaScript, могу сказать, что любое приложение, которое было написано на JavaScript, будет в итоге переписано на TypeScript.

2. Kotlin

Современный аналог Java, созданный компанией JetBrains. Работает на JVM и совместим с Java, при этом более лаконичный и удобный в использовании, поэтому многие проекты на Java сейчас частично или полностью переписываются на Kotlin. С 2019 выбран компанией Google как приоритетный язык разработки Android. Учитывая, сколько всего написано на Java, и вполне реальные перспективы переработки этого кода на Kotlin для повышения удобства разработки, этот сравнительно молодой язык будет только набирать популярность в будущем.

3. Swift

Современный аналог Objective-C, созданный компанией Apple. На нем пишутся современные приложения для iOS и MacOS. Учитывая популярность продуктов Apple в мире, этот язык обречен расти в популярности в ближайшие годы.

4. Rust

Современный аналог C++, развиваемый компанией Rust Foundation. Был создан сотрудником Mozilla Грейдоном Хором, когда ему пришлось по ступенькам подняться на 21 этаж своего дома из-за сломанного лифта. Лифт не работал из-за забагованного кода, написанного на C++. Хор решил, что хватит это терпеть и создал свой C++ с LLVM и borrow checker-ами. Язык похож на C++ очень высокой производительностью кода, при этом обеспечивает безопасный доступ к памяти, и `из коробки` поддерживает такие годные вещи из области функционального программирования, как иммутабельность и функции высшего порядка. На Rust сейчас создаются и переписываются очень многие проекты, начиная от внутренностей runtime сред, пакетных менеджеров и транспайлеров на фронте, и заканчивая AWS, Azure и Cloudflare на бэкенде. С недавнего времени он также используется в разработке ядра Linux. В общем, язык серьезный и очень стремительно набирающий популярность.

5. Mojo

Современный язык для разработки AI. Выпущен в мае 2023 года компанией Modular. Являясь суперсетом Python, он унаследовал его удобство, но при этом работает сильно быстрее (согласно замерам, в некоторых ситуациях он быстрее в 35 000 раз), оптимизирован для работы с CUDA-ядрами в GPU. А еще расширение файла на этом языке выглядит так - .🔥. Да, расширение файла в виде эмодзи огня. Ну как не полюбить такой язык?

6. Julia

Разработкой языка занимается компания JuliaHub. Обладает скоростью C++, удобством Python, эффективным garbage collector-ом, JIT-компилятором и способностью вызываться из Python-кода. При этом очень гибок в плане запуска и дистрибьюции, код на нем умеет запускаться и как интерпретируемый язык, и из создаваемого без каких-либо дополнительных зависимостей run-файла, и даже из "бинарника". Очень полезен в задачах машинного обучения, майнинга данных и научных исследований.

7. Elixir

Еще один довольно специфичный язык, который будет набирать популярность. Хосе Валим создал этот язык немногим больше десяти лет назад и он известен как прекрасное средство для разработки масштабируемых систем. Он совместим с Erlang VM и позволяет очень эффективно использовать аппаратные ресурсы, проводя параллельно сотни тысяч вычислительных процессов на одной и той же машине. Он будет хорошим выбором в сферах машинного обучения, веб-разработки и визуализации данных.

Хочу еще раз подчеркнуть, что список далеко не исчерпывающий. Не сомневаюсь, что ближайшее будущее преподнесет нам немало сюрпризов, и мы станем свидетелями появления совершенно новых языков, которые откроют нам невиданные ранее возможности. Вместе с тем, не стоит недооценивать и языки-`ветераны`, которые остаются с нами вот уже много десятилетий и останутся еще надолго. Мне кажется, что будущее будет выглядеть так, как его рисуют в хороших фантастических фильмах. Если вы обращали внимание, в фильмах похуже все люди, скажем, середины XXI века разъезжают на машинах, похожих на звездолеты. Все без исключения. А в хорошем кино на дорогах будущего футуристические авто перемешаны с более старыми моделями. Настолько, что мы порой можем увидеть даже что-то знакомое по нашему времени. Так устроена жизнь: хорошие вещи живут долго. А применять нужно то, что лучше всего подходит для конкретной задачи.