В данной статье я постараюсь помочь не только начинающим программистам или людям только планирующим погружение в увлекательный мир программирования, но и тем, кто уже владеет каким-либо языком программирования (ЯП) и у кого есть желание выучить что-нибудь ещё.
Хочу разобрать самые частые факторы, которые обычно влияют на выбор того или иного ЯП и сделать обзор ЯП именно с этой точки зрения.
Итак, факторы:
- Востребованность на рынке труда. На сколько выбранный ЯП востребован на рынке прямо сейчас и какие у него перспективы на ближайшее будущее. Иными словами, вопрос денег и востребованности на рынке.
- Применимость технологии. То есть вопрос может ставится так: я хочу разрабатывать то-то и то-то, какой инструмент мне для этого выбрать. При такой постановке вопроса круг выбора технологий к изучению сразу резко сократится, и это, в целом, правильная постановка вопроса, т.к. даже универсальные ЯП занимают свои целевые конкретные ниши.
- Порог входа — на сколько тяжело будет освоить технологию, особенно, если Вы новичок в этом деле.
Штудировать интернет на эту тему дело трудо- и времязатратное, но при необходимости это всегда можно сделать после прочтения обзорной статьи. Поэтому постараюсь рассказать максимально кратко, но информативно, какой язык программирования (ЯП) для чего нужен, с учётом всех вышеупомянутых факторов. Обрисую плюсы и минусы, а также поделюсь личным мнение о том, на сколько перспективен каждый ЯП. Для начинающих скажу пару слов о пригодности изучения языка программирования, если он у Вас первый.
Итак, в обзор я включил следующие ЯП:
- Java
- Kotlin
- Scala
- JavaScript
- Golang
- Python
- R
- Php
- C#
- C / C++
- Objective C
- Swift
- Haskell
- Rust
- Ruby
Список, естественно, не полный, но в нём точно присутствуют все актуальные на текущий момент ЯП.
Возвращаясь к фактору востребованности на рынке, хочется представить прогнозный рейтинг самых востребованных профессий 2020 года по мнению экспертов LinkedIn. Притом в рейтинге учитывались вообще все профессии, а не только из мира IT.
Top 15 выглядит так:
- Специалист по искусственному интеллекту
- Инженер-робототехник
- Специалист по аналитике данных (Data Scientist)
- Full-stack разработчик
- Инженер эксплуатационной надежности (Site Reliability Engineer)
- Специалист по обеспечению успеха клиентов (Customer Success Specialists)
- Специалист по развитию продаж
- Дата-инженер
- Психиатр, специалист по поведенческой психотерапии
- Специалист по кибербезопасности
- Back-end разработчик
- Директор по прибыли (CRO)
- Специалист по облачным технологиям
- JavaScript-разработчик
- Владелец продукта (Product Owner)
Как видим, большинство этих пунктов занимают профессии, непосредственно связанные с IT. Попробую прокомментировать некоторые пункты.
Позиции 1, 3 и отчасти 8 на текущий момент наиболее релевантно закрываются возможностями инструментария, базирующегося на языке Python (NumPy, Pandas, Tensorflow и др.). Далее — язык R. С большим отрывом сюда можно притянуть ЯП Scala и Java, памятуя о, экосистеме Hadoop и библиотеки для машинного обучения Deeplearning4j .
Позиция 2, несмотря на то, что это про робототехнику, но без программирования микроконтроллеров тут может не обойтись. На поприще низкоуровнего программирования уже дцать лет держит первенство язык Си. Ассемблер и перфокарты я не включил в обзор, поэтому на них заострять внимание не буду.
Позиция 4. Несмотря на то, что есть ещё и позиция 14, считаю, что в наиболее выгодной ситуации тут будут именно программисты JavaScript, а также таких технологий, как TypeScript, node.js, React, Angular, vue.js и др. То есть, согласно обзору мы видим, что на рынке очень востребованы универсальные люди-оркестры, которые самостоятельно могут реализовать все часть web приложения.
Пункт 11. Сюда в первую очередь отнесу языки Java, Kotlin, Golang, C#, а также JavaScript (node.js), Php, Python, Ruby. Этот список можно продолжать, но, думаю, что не сильно ошибусь, если скажу, что >90% всего backend'а в мире написано именно на этих языках.
Переходим к следующему фактору — порог входа. Просто перечислю языки с достаточно низким, на мой взгляд порогом входа: Python, Golang, JavaScript, Php, Ruby, Swift, Kotlin. На ступеньку повыше по сложности поставлю Java, С#/, Objective C, Rust. Ну, и завершу языками C/C++, Scala и на самой вершине Haskell, как вишенка на торте.
Бытует мнение, что главное, чтобы были руки прямые, из правильного места растущие, и тогда с любым инструментом можно добиться хороших результатов. Отчасти, пожалуй, соглашусь. Но в этом случае не надо забывать, что ноутбуком тоже вполне можно забивать гвозди. Хотя иногда, куда перспективнее будет воспользоваться для этого специальным инструментом.
Теперь очень кратко с точки зрения применимости каждого ЯП в современном мире:
Java
- Backend (серверные web приложения, web сервисы), в основном для крупных систем из мира Enterprise — банковское ПО, порталы, крупные маркетплейсы и т.п.
- Приложения для Android
- Инфраструктурные и вспомогательные системы, типа IntellijIdea, Kafka, Hadoop и многое другое
Kotlin
По сути, всё, что относится к Java, то относится и к Kotlin.
Scala
То же, что и Java, но, больше с уклоном в академичность.
JavaScript
- Frontend (web app), т.е. всё то, что работает в браузере
- Backend на базе node.js
- Мультиплатформенные приложения (чаще всего мобильные) на базе фреймворков на базе браузерного движка (в том числе, и не слишком требовательные к графической подсистеме игры)
Golang
- Высокопроизводительные web сервисы (backend)
- Инфраструктурные системы, типа Docker, Kubernates, Grafana и др.
Python
- Реализация алгоритмов машинного обучения (ML) и искусственного интеллекта (AI)
- Анализ данных, работа с данными, визуализация данных
- Backend — используется сейчас для построения очень многих web систем (в основном на базе фреймворка Django)
R
- Анализ данных, работа с данными, визуализация данных
Php
Наверное один из самых распространённых и один из самых старых скриптовых ЯП для построения web приложений. На нём построены движки типа WordPress, Joomla, Drupal, OpenCart, 1С-Битрикс и многие другие. В свою очередь, на этих движках работает подавляющее большинство сайтов в интернете, т.к. это самый простой и самый дешёвый способ на текущий момент сделать веб страничку - визитку или организовать свой интернет-магазин.
C#
- Прежде всего, это конкурент Java на поприще Enterprise систем
- Разработка современных компьютерных игр при помощи игрового движка и целого инструментария для разработки Unity
- Также его можно использовать для построения Desktop приложений под Windows
- Есть мультиплатформенные фреймворки, например Xamarin, позволяющие писать мультиплатформенные приложения
C / C++
Проще описать для чего C и C++ подходит менее, т.к. это, наверное, самые универсальные ЯП. На них написаны практически все известные ныне операционные системы, драйвера, инструментарии, подавляющее большинство десктоп приложений (особенно с учётом существования фреймворка Qt), СУБД (PostgreSQL, MySQL, Clickhouse и многие другие), графические, видео и музыкальные редакторы, движки 3D игр, математическое ПО, web серверы общего назначения типа nginx, самая известная библиотека для машинного обучения TensorFlow и многое, многое другое.
На чистом Си часто программируют микроконтроллеры, ведь по низкоуровневости язык Си может обогнать разве что Ассемблер.
Не очень хорошо C / C++ подходит для на писания web приложений бизнес назначения, типа маркетплейсов. В целом, конечно, можно это делать, просто экономически это не всегда целесообразно. Не очень хороши C и C++ для написания приложений под Android (хотя это можно делать через Android NDK) или iOS (хотя и Objective-C, и Swift совместимы с Си, но более высокоуровневые ЯП) по той же самой причине — экономическая целесообразность.
Objective C
В основном используется для программирования всего, где можно увидеть эмблему с откусанным яблоком (приложения для iOS и MacOS). Является языком высокого уровня, но совместим с языком Си.
Swift
Тоже, что и Objective C, только это более современный ЯП. Apple внедрила его, как новый стандарт для разработки ПО для своих устройств. Swift совместим с Objective C.
Haskell
Да простят меня фанаты Haskell, коих на свети немало. Более того, их чаще всего встретишь именно в элитарных клуба программистов умных мира сего. Но на практике этот язык более ценится с точки зрения его изучения, нежели с точки зрения создания реальных программ. Нет, это невероятно выдающийся и уникальный ЯП, он является компилируемым языком программирования общего назначения. Он популярен, знаменит и достаточно распространён. Но... на сколько экономически целесообразно на нам разрабатывать реальное ПО?.. Может какие-то фрагменты, связанные с построением сложных алгоритмов целесообразно... Это очень холиварная тема, как мне кажется...
Rust
Относительно новый компилируемый язык программирования общего назначения, который пытается занять, прежде всего, нишу системного программирования. То есть оттяпать кусок у C / C++. Но на текущий момент продакшн решений, написанных на Rust не так уж и много...
Ruby
Backend — используется, в основном, для построения web систем (на базе фреймворка Ruby on Rails).
Пожалуй, пока на этом всё.
Более подробно по каждому языку программирования можно прочитать в моих обзорах.