company_banner

JavaScript, Python или Go: что лучше всего подойдёт для бэкенд-разработки в 2021 году?

Автор оригинала: Mr Herath
  • Перевод
Уже прошло почти восемь месяцев 2020 года, а технические прогнозы на этот год всё выходят и выходят. И это — несмотря на то, что очень сложно предсказать будущее в такой динамично развивающейся индустрии, как разработка программного обеспечения. Тот, кто работает в этой индустрии, видел, как технологии приходят и уходят. Иногда эти технологии проводят свою недолгую жизнь практически незаметно. Технологиям нелегко выживать в мире программирования.

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



Я — программист. Мне очень нравится JavaScript (у меня с этим языком, так сказать, «вечная связь»), я пишу на этом языке уже давно. Но если немного оглядеться, то можно заметить, что в мире разработки ПО есть и другие языки. Предлагаю поразмыслить о том, что лучше использовать для серверной разработки в 2021 году: JavaScript, Python или Go. Но, прежде чем говорить о сильных сторонах каждого из этих языков, давайте взглянем на результаты некоторых исследований.

Результаты исследований и другие данные


▍Исследование Stack Overflow


Ежегодное исследование Stack Overflow — это самое масштабное из существующих мероприятий, направленных на изучение мнений программистов по различным вопросам, касающихся современных технологий. В нём, в 2019 году, приняло участие более 90000 программистов. По его результатам можно сделать вывод о том, что лидером среди языков программирования является Python. А второе и третье места, соответственно, занимают JavaScript и Go. Но это, напомню, исследование 2019 года. За год много чего может измениться. Например, Go — это язык, который развивается крайне быстро, и популярность которого постоянно растёт. Я думаю, что в аналогичном исследовании этого года мы, возможно, увидим другую таблицу лидеров.


Результаты исследования StackOverflow

▍Рейтинги GitHub (GitHut)


Ниже показан график GitHut 2.0, который демонстрирует количество PR, сделанных с 2013 по 2019 год с разбивкой по языкам программирования. Как видно, JavaScript уверенно обходит все остальные языки. Python занимает второе место, а Go тут даже и не видно.


GitHut 2.0, данные по PR

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


Популярность Go растёт, а популярность JavaScript и Python падает

▍GitHub-репозитории


Давайте заглянем в GitHub-репозитории, связанные с интересующими нас языками, и посмотрим на то, насколько активно ведётся работа над ними.


Репозиторий cpython


Репозиторий node


Репозиторий go

Видя эти данные, несложно сделать вывод о том, что Go пользуется большим вниманием разработчиков. У соответствующего репозитория больше наблюдателей, чем у репозиториев, связанных с двумя другими языками, у него больше звёзд. Правда, у этого репозитория меньше форков, чем у двух других.

Теперь давайте поговорим о том, в каких ситуациях может быть интересен каждый из обсуждаемых нами языков.

Python


Python — это высокоуровневый язык программирования с динамической типизацией, который уже много лет пользуется популярностью в IT-индустрии. А именно, на что указывают результаты множества исследований, Python можно назвать самым популярным языком программирования прошедшего десятилетия.

▍Сильные стороны Python


  • Python позволяет быстро решать сложные задачи, создавая при этом небольшие объёмы кода.
  • Python упрощает использование сложных конструкций благодаря простому, но мощному синтаксису.
  • Это — высокоуровневый язык. Поэтому тому, кто им пользуется, не приходится заботиться, как при C++-разработке, о чём-то вроде управления памятью.
  • Это — кросс-платформенный язык. То есть — Python-приложения можно запускать на Windows, Mac и Linux.
  • Вокруг Python сложилось огромное сообщество. Если вы столкнётесь с какой-то проблемой — всегда найдётся тот, кто сможет вам помочь.
  • Существует множество библиотек, фреймворков, вспомогательных инструментов для Python. То есть — какая бы перед вами ни стояла задача, весьма вероятно то, что кто-то её уже решил. Ведь Python используется для решения самых разных задач уже более 20 лет.

В целом можно отметить, что Python — это многоцелевой язык, имеющий простой, чистый и не слишком сложный синтаксис, освоение которого не вызывает затруднений даже у новичков. Всё вышесказанное означает, что Python — это замечательный язык. Если смотреть с технической точки зрения, то все те задачи, которые решают с помощью Python, можно решать и с помощью других языков. Но простота и ясность Python сделали его тем, чем он является сейчас — самым популярным языком программирования. Именно поэтому Python — это «язык №1» из тех, что интересует компании, которые ищут программистов. Поэтому, являетесь ли вы программистом с некоторым опытом, или пока не знаете о программировании абсолютно ничего, изучение Python откроет вам интересные возможности трудоустройства в 2021 году. На самом деле, усреднённый годовой заработок Python-разработчика составляет впечатляющие $116,000.

JavaScript (Node.js)


Лично мне очень нравится платформа Node.js. Именно с неё я начал заниматься серверной разработкой. До сих пор я говорил о языках программирования. Но здесь мне хотелось бы поговорить о Node.js, об одной из самых популярных платформ, предназначенных для выполнения JavaScript-кода. Как всем известно, платформа Node.js популярна в IT-индустрии в качестве среды для разработки серверных приложений. Одна из основных причин этого заключается в том, что эта платформа основана на JavaScript. Если вы — JS-разработчик, то вы без особых сложностей можете стать фулстек-программистом. Это — одно из конкурентных преимуществ того, кто знает JavaScript.

▍Сильные стороны JavaScript и Node.js


  • Платформа Node.js поддерживает эффективные механизмы ввода-вывода, использование которых не блокирует выполнение основного кода программы. Это говорит нам о том, что Node.js — это по-настоящему быстрая платформа. Дело в том, что чтение и запись файлов — это одна из важнейших задач серверов. Node.js справляется с этой задачей очень хорошо.
  • Для того чтобы создавать фронтенд- и бэкенд-приложения, достаточно знать один язык — JavaScript.
  • Платформа Node.js используется крупными компаниями, такими, как Uber, LinkedIn, Netflix и Facebook.
  • Node.js-приложения являются кросс-платформенными. Их можно запускать на Windows, Mac и Linux.
  • Вокруг Node.js и JavaScript сложилось огромное сообщество. Вот, например, группа любителей Node.js, в которую вхожу и я. Кроме того, существуют Slack-каналы и дискуссии на Stack Overflow, посвящённые Node.js и JavaScript.
  • Node.js — это не некая система, перегруженная возможностями. То есть — перед нами платформа для выполнения кода на сервере, на базе которой можно, пользуясь самостоятельно подобранными фреймворками и библиотеками, создать именно то, что нужно. Среди популярных Node.js-фреймворков можно отметить Express.

Как видите, Node.js вполне можно назвать отличной платформой, позволяющей пользоваться JavaScript для бэкенд-разработки. Если проанализировать приведённый ниже график, взятый из этого исследования, то окажется, что JavaScript используется для клиентской и серверной разработки в примерно одинаковых масштабах.


JavaScript пользуется популярностью в клиентской и серверной разработке

Если говорить о средней зарплате Node.js-разработчика в США, то это будет что-то в районе $48,000 — $130,000 в год.

Go


Go — это опенсорсный язык программирования, применение которого облегчает разработку простых, надёжных и эффективных приложений. Он появился в 2009 году, но не стал столь же популярным, как Python и JavaScript. Однако Go с тех пор два раза называли «языком года». 67,9% разработчиков, участвовавших в исследовании Stack Overflow, назвали Go своим самым любимым языком. Очевидно, всё это происходит не без причины.


Самые любимые языки

▍Сильные стороны Go


  • Go — это C-подобный язык, поэтому тому, кто знаком с C или с другими похожими языками, не придётся, осваивая Go, изучать что-то совершенно новое.
  • Go — это кросс-платформенный язык.
  • Это — простой язык. Почему? Дело в том, что в нём есть всего 25 ключевых слов, а количество структур данных меньше, чем в других языках. В нём нет классов. В Go имеются только функции и типы данных.
  • Это — надёжный язык, позволяющий разрабатывать высокопроизводительные приложения. Он поддерживает конкурентность и разработку серверного кода, что называется, «из коробки».
  • Обновления Go выходят не слишком часто. А при выходе обновлений не страдает обратная совместимость. Старый код остаётся полностью работоспособным при выходе новых версий языка.
  • В наши дни Go — это уже зрелый язык. В частности, если говорить о вспомогательных инструментах, в экосистеме Go есть стандартный менеджер пакетов и фреймворк для тестирования кода.

Вышеприведённые факты о Go позволяют нам говорить о том, что это — тоже замечательный язык. Возможно, вы размышляете сейчас о том, почему вы ещё пишете на чём-то другом, а не на Go. Я, признаться, когда немного узнал о Go, думал о том же самом. Многие программисты изучали C в качестве первого языка. Тому, кто учился именно так, очень легко будет изучить Go и приступить к его использованию.

Если взглянуть на среднюю зарплату Go-разработчика в США, то это будет что-то вроде $45,000-$130,000 в год

Мои самые любимые вещи в жизни не стоят никаких денег. Для меня совершенно ясно, что самый драгоценный ресурс, который у нас есть – это время.
Стив Джобс

Итоги


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

Какой язык вы назвали бы самым перспективным языком для серверной разработки в 2021 году?

RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

Комментарии 48

    +12
    Какая-то необычайно странная статья.

    Делать выбор только на основании «хайповости» технологии (а все выбранные метрики так или иначе про это) — это умиляет, мягко говоря.

    Я понимаю, что количество вакансий, зарплаты, перспективы — хоть какие-то критерии.
    Трудоемкость разработки и сопровождения, вопросы производительности — это если вспомнить, про что вообще изначально был Хабр.

    А так… смузи какое-то.
      +11
      Это кликабельная статья рекламирующая RUVDS – хостинг, 99% статей у них примерно так и выглядят, одна вода
        +2
        Ну да. Тем не менее, можно же для перевода что-нибудь нормальное найти.
          +1

          Рувдс публикует по 2 статьи в сутки.
          Сложновато находить стабильно столько качественных статей для перевода

        –7
        Хабр изначально был про хайповость конечно. Система инвайтов, поощрение переводных неоригинальных статей… (если бы статью перепечатывали на оригинальном языке, это называлось бы плагиатом). Были оригинальные интересные глубокие статьи, но исчезающе мало и в основном на geektimes.
          0
          Появление гиктаймс — это попытка реанимации уже к тому моменту издохшего хабра. Такой себе референс к «изначальности».
          0
          А так… смузи какое-то.

          Носители брекетов смотрят на Вас с неодобрением )
            0
            Я понимаю, что количество вакансий, зарплаты, перспективы — хоть какие-то критерии.


            Если мы говорим о выборе языка, то значит мы и говорим об его изучении.
            А тут зарплата начинающего и зарплата опытного, количество вакансий разного уронвня — разные вещи.
            0

            То есть go это C подобный яп, а JS выходит, что нет?
            Итого, рулит php. А пайтон… Через совсем небольшое время превратится в php, ибо толпы говнокодеров рассматривают программирование не с позиции алгоритмической красоты, продуманости и техник исполнения, многообразия задач и инструментов, а с точки зрения "как поскорее выучит язык программирования".

              +2
              А причём тут толпы говнокодеров? Они вроде как влияния на дизайн самого языка и его библиотек не оказывают.
                +2
                Через совсем небольшое время превратится в PHP


                Ну во первых, язык Python уже сложился. Сам язык уже ни во что иное не превратится.
                Во вторых, PHP как раз превратился в нормальный язык с годами.
                –8
                Из Node сейчас происходит существенный отток разработчиков в Deno. Через несколько лет он начнёт попадать в подобные таблицы. Это тот-же JavaScript, а Core разработчик — тот же что в своё время начинал делать node. Кардинальное выкидывание legacy и учёт ошибок\современных реалий (async, ES6).
                  0
                  Ага, только к теме не относиться, будет вместо JavaScript (нода) стоять JavaScript (дено)
                    +2
                    Существенный отток? Нет ни одного крупного проекта, который бы мигрировал на Deno. Нет ни одной крупной компании, которая бы заявила что используют Deno в продакшене. Вы выдаете желаемое за действительное.
                    +10
                    Для тех, кто так же, как и я, пойдет по ссылке возле первого графика на исследование стэковерфлоу и НЕ НАЙДЕТ там диаграммы из статьи — это раздел Most Loved, Dreaded, and Wanted Languages. вкладка Wanted. График отражает долю ответивших «who do not yet use it say they want to learn it». Т.е. количество людей, которые НЕ ИСПОЛЬЗУЮТ язык, но не прочь его выучить. А совсем не «лидера среди языков программирования».
                      +4

                      Лидер по "слышал, но никак руки не доходят пощупать"

                      +4

                      Давно сижу на c#. Поглядываю на другие яп. Но они не цепляют.
                      Скажите что-нибудь плохое про c#.

                        +1

                        Система сборки MSBuild не настолько продвинутая, как Gradle. Причем, если в Maven, хотя бы, порог входа низкий, то в MSBuild он как и в Gradle немаленький.
                        Как следствие — меньшее число дополнительных плагинов. Например, в Maven/Gradle есть плагин для Artifactory, который позволяет не только залить бинарники строго после всех тестов по всем платформам, но и отправляет метаданные на сайт, так что можно понять — где, когда и с помощью каких зависимостей был собран тот или иной пакет.
                        Как следствие из предыдущего пункта — новым языкам под CLR сложно появиться, так как их непросто встраивать в build pipeline. Я думаю, в том числе и по этой причине для JVM есть Scala, Groovy, Kotlin, тогда как для .Net их не адаптировали.


                        Хотя архитектурно CLR, конечно, на голову обходит JVM — есть struct'ы, честные generic'и, Span и пр. Так что узкие места разгонять проще. JVM, правда, здесь догоняет.

                          0

                          Стоит заметить, что с выходом .NET Core MSbuild стал на порядок проще и *.csproj читаются не хуже pom.xml

                            0
                            мне когда говорят что msbuild скрипты стали проще (применительно к платформе .net в целом) я прошу объяснить мне пару вещей (код ниже):
                            1) откуда новые файлы
                            2) как влиять на их генерацию (напишите мне «в блокноте/на память/без гуглежа»)
                            3) каких ещё вещей мне ожидать в следующие релизе .net5/6/7… в выхлопе моего софта, непосредственно к нему (к его работе) не относящегося и как мне обеспечить приемлемую скорость обновления этих версий с учётом правок билд конвейерных скриптов всявзи с этими изменениями.
                            4) а ещё помнится был (а может и есть?) SOS_README.md в зависимостях (попадал в deps.json) и приятно удивлял своей «необходимостью» при развёртывании («мусор, а приятно»)…

                            короче в msbuild очень много всяких «нюансов» и «сделали по-умолчанию, потому что это устраиват 99% юзеров, прочитавших книжку `.net за 21 час`» (кто там помнит на память содержимое и назнчение файла «PackageOverrides.txt» ?) И не стал он проще — он стал сложнее, и то как его используют делает его всё более запутанным. А «перезагрузку» (отказ от msbuild) M$ так и не осилили и похронили идею («прощай project.json»).

                            # представим что у нас netcoreapp3.1
                            mkdir c
                            cd c
                            dotnet new console
                            touch some.config
                            dotnet publish
                            ls -l bin/Debug/netcoreapp3.1/publish/
                            .....   c.deps.json
                            .....   c.dll
                            .....   c.pdb
                            .....   c.runtimeconfig.json
                            cd ..
                            
                            # now web ....
                            mkdir w
                            cd w
                            dotnet new web
                            touch some.config
                            dotnet publish
                            ls -l bin/Debug/netcoreapp3.1/publish/
                            ..... appsettings.Development.json  
                            ..... appsettings.json              
                            ..... some.config                   <== wow
                            ..... w.deps.json
                            ..... w.dll
                            ..... web.config                    <== wow
                            ..... w.pdb
                            ..... w.runtimeconfig.json
                            
                              +1

                              Вот пожалуйста, csproj из моего последнего проекта. Это единственный файл для сборки проекта, других не нужно.


                              <Project Sdk="Microsoft.NET.Sdk">
                                <PropertyGroup>
                                  <TargetFramework>netcoreapp2.1</TargetFramework>
                                </PropertyGroup>
                                <ItemGroup>
                                  <PackageReference Include="Flurl.Http" Version="2.4.2" />
                                  <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.1" />
                                  <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.0.1" />
                                  <PackageReference Include="System.IO.Packaging" Version="4.7.0" />
                                  <PackageReference Include="VkNet" Version="1.52.0" />
                                  <PackageReference Include="VkNet.AudioBypassService" Version="1.6.0" />
                                </ItemGroup>
                              </Project>
                                0
                                Это чудесно, что ваш большой и отличный проект состоит из одной сборки и вам ничего не надо менять из того, что делает msbuild «из коробки выбранной вами SDK» (и вы никогда не обновляли этот SDK так, что это сломало вам сборку). А, к примеру, когда этих сборок хотя бы 20-30 (даже в рамках одного solution), и надо менеджерить зависимости (версии) — начинается «DirectoryBuild.props» и другие «веселые друзья».

                                Почитайте о проекте Paket и про транзитивные зависимости например…

                                А уж какая веселуха у тулинга .net с теми же цифровыми подписями бинарей (не под виндой, хотя и под ней не без нюансов) и nuget пакетов — цельный issue года этак с 2016 открытый имеется — страниц на 200…
                                0

                                А проблема со внешними *.json решается сборкой в один исполняемый файл, а какие они там и сколько их это "внутренняя кухня" .NET

                                  0
                                  один исполняемый файл — это, конечно, отлично, пока вы не задумываетесь о том, как именно он работает с учетом таких вещех как, скажем, SELinux (и о безопасности в целом).

                                  Внутреняя кухня до тех пор «внутреняя», пока вам не надо там что-то менять или вы не натыкаетесь на баги в этой внутрянке.
                                +1

                                Про простоту — согласен. Про функциональность — нет.


                                В Maven/Gradle компилятор языка — это плагин проекта. То есть проект требует "java plugin", "scala plugin", "kotlin plugin" и так далее, а уже билд система скачивает необходимое из репозиториев. В MsBuild версия компилятора прибита гвоздями к самому MsBuild по сути (хоть сейчас это уже не на 100% верно, с появлением compiler services, однако, насколько я видел, их не особо используют).


                                Maven/Gradle сейчас не требуют никакого предварительного скачивания, так как присутствует Maven Wrapper/Gradle Wrapper. Так что на машине разработчика/на билд машине достаточно просто установить JVM. Для .Net это не так.


                                Тесты, линтеры и аналоги nuget в Maven/Gradle — это плагины по сути (хоть часть из них встроенные). Так что Вы можете заменять их на более удобные. MsBuild является, по сути, монолитом. Что тормозит развитие платформы.

                            +2
                            Сравнили Go с питоном и JS но при этом не упомянули никаких его отличительных черт
                              0
                              Зато упомянули, что все 3 «кросс-платформенные языки».
                              +1
                              Судя по hh, еще бы добавил Java. Интересно было бы разобрать причины применения того или иного языка в бекенде (ну кроме «исторически так сложилось»).
                              оффтоп — у яндекса/mail значительная часть бекенда на С++. Но у них это скорее наследие нулевых годов (или нагрузки такие?). Получается С++ для бекенда скорее мертв?
                                0

                                Небольшой оффтоп: у меня про Java только нецензурные слова. Я понимаю, что все зависит от софта, но все же. Пишу на JS под VSCode, все хорошо. Надо поправить что-то в Андроид-приложении и запускаю Андроид Студию и на макбуке можно жарить яишницу, притом, что оно просто запущено (макбук 2014 года, но под VSCode загрузка околонулевая). Еще и после закрытия надо процессы java прибивать.

                                +1
                                Но если проанализировать рейтинги языков программирования, взглянув на таблицу, расположенную ниже графика, то окажется, что популярность Go растёт, а популярность JavaScript и Python падает.

                                А если посмотреть на TypeScript в этой же таблице, то видно, что его популярность почти в 2 раза больше выросла по сравнению с Go
                                  0
                                  Только вот TypeScript это не язык, а надстройка над JS.
                                    +1
                                    Не буду спрашивать почему Вы считаете, что TypeScript это не язык, но приведу цитату с офф сайта
                                    TypeScript is an open-source language which builds on JavaScript, one of the world’s most used tools, by adding static type definitions.
                                      0
                                      TypeScript сильно улучшает JS, но отдельным языком его сложно называть. Можно установить в проект TypeScript и выполнить проект, не написав на TypeScript ни одной строчки.
                                        +1

                                        По определению любая строчка на JS является строчкой на TS :)

                                    +1

                                    Преимущество питона как серверного языка перед nodejs в наличии одного единственного полноценного фреймворка с удобной ORM, в nodejs такого единообразия нет. Есть express, поверх которого если не хотим писать запросы руками, нужно использовать отдельно орм фреймворк — typeorm или не сильно удобный и по моему короткому опыту использования весьма глючный sequelize. Это признаться отталкивает.

                                      0

                                      Это вы про Django?

                                        0
                                        Да, имеется ввиду фреймворк именно для вэб приложений.
                                          +1
                                          А как же Flask?
                                            0

                                            А как-же FastAPI

                                        0

                                        NestJS + TypeORM. Полгода использую, в основном положительные впечатления. Про Express не вспоминаю даже.

                                          0
                                          А Sequelize не пробовали? Очень хорошо чувствуем себя на проде с ним
                                            0

                                            Раньше активно его использовал, как раз когда пользовался express'ом. У тайпорма хорошая интеграция с nestjs, поэтому такая связка мне больше нравится. Ну и аннотации выглядят гораздо чище, чем возня с sequelize.define.

                                          –1

                                          +

                                          0
                                          Dart берите, он афигенский и для бека и для фронта
                                            +4

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

                                              0
                                              Батенька да вы трансформер
                                              +1
                                              А зачем в статье 2020 года про языки 2021 года использовать статистические данные опроса Stack Overflow 2019 года?
                                              Чем плох опрос 2020 года?
                                                0

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

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое