Як вибрати мову програмування?

  1. ілюзія вибору
  2. TOП-10
  3. Що ми вибираємо?
  4. 1. Середовище і спосіб виконання
  5. 2. Вендори і Платформа
  6. 3. Екосистема і ком'юніті
  7. RedMonk Rating
  8. GitHut
  9. PyPL Index
  10. CodeEval Stats
  11. StackOverflow Survey
  12. 4. Ринковий попит і тренди індустрії
  13. ModuleCounts .
  14. Google Trends
  15. Tiobe Index
  16. New Relic
  17. 5. Зв'язки з іншими мовами і екосистемами
  18. 6. Подання про мову
  19. критерії вибору
  20. Затребуваність на ринку
  21. Загальна кількість пропозицій
  22. формат роботи
  23. вік ринку
  24. Заробітня плата
  25. можливість саморозвитку
  26. В JavaScript
  27. Короткий гайд по вибору

За різними оцінками, в світі налічується 400-600 production-ready мов програмування. І, як мінімум, на два порядки більше експериментальних проектів. Як зробити правильний вибір, маючи стільки варіантів ? Як вибрати мову, який виявиться не тільки комерційно затребуваним, а й буде радувати в повсякденній практиці? Як даний вибір проявить себе в довгостроковій перспективі?

Критерії вибору першого і N-го мови радикально відрізняються. У цій статті розглядається вибір саме першого мови. Що мається на увазі під "першим" мовою? Те, на чому ви можете виконувати комерційні замовлення! Тобто, якщо ви читали щось по десятку мов, але не дотягуєте до Junior ні по одному з них, - ця стаття може бути вам корисна.

ілюзія вибору

Перше що варто зрозуміти - особливого вибору у вас немає. З усього безлічі мов, нескладно виділити ТОП-10 лідерів. 80% всього, що відбувається - відбувається там. Строго по Парето. ТОП-20 "відомих" мов визначає межі раціонального вибору (першої мови). Ще десяток "по дрібниці" - для авантюристів. "Страх і Ненависть в Лас-Вегасі" - далі за списком.

В алфавітному порядку:

TOП-10
  • C
  • C ++
  • C #
  • Java
  • JavaScript / TypeScript
  • Objective-C
  • PHP
  • Python
  • Ruby
  • Scala
ТОП-20
  • Assemblers
  • Clojure
  • Delphi / Pascal
  • F #
  • Go
  • Haskell
  • Lua
  • Perl
  • Swift
  • Visual Basic

Окремою групою йдуть спеціалізовані титули, які не відносяться до ЯП загального призначення:

  • CSS
  • HTML
  • MATLAB
  • R
  • Shell (s)
  • SQL
  • XML
  • Verilog
  • VHDL

"Родинні" мови типу JavaScript / TypeScript, Delphi / Pascal і всілякі Асемблери згруповані для простоти. Статистичні дані, що лежать в основі цього (і подібних) списків будуть розглянуті далі. Наша поточна мета - ілюстрація ідеї.

Різниця в затребуваності, обсязі доступної інформації, можливості змінити компанію і т.п. для лідируючих і відстаючих мов величезна. Досить сказати, що при порівняння кількісних показників TOП-40 мов (типу Числа репозиторій) завжди використовуються логарифмічні шкали.

Висновок: якщо ви не знаєте яку мову обрати - вибирайте один з популярних. Інерція індустрії дуже велика. Радикальні зміни відбуваються рідко (і все рідше, з часом), а лідери списку міцно займають свої позиції. Зміна лідера (-ів) в тій чи іншій області, практично завжди, відбувається через зміну самої платформи, а не через програш в "чесної" конкуренції. Perl, Cobol, Pascal - нечисленні контр-приклади. Хочете нову мову? Чекайте зміни платформи (або парадигми).

Що ми вибираємо?

Ще одна неприємна правда - ми не вибираємо мову. Ми вибираємо напрям, до якого додається 1, 2 або 3 мови. Їх вже "вибрали" за нас. Хто? Індустрія, ринок, історична випадковість, нарешті.

Початківцям властиво концентруватися на мові. Синтаксис, граматика ... - здаються настільки важливими, настільки незнайомими, що поглинають всю увагу. Однак, мова це лише вершина айсберга. Що ховається під водою?

  1. Середовище (і спосіб) виконання: Компілятор / Віртуальна Машина.
  2. Вендори і Платформа
  3. Екосистема і ком'юніті.
  4. Ринковий попит і тренди індустрії.
  5. Зв'язки з іншими мовами і екосистемами.
  6. Подання про мову.
  • - Яку мову найкращий? - приклад неправильної постановки питання.
  • - Яку мову найкраще підходить для ... - потягне на теоретичне питання.
  • - Які мови використовуються для ... - ближче до справи.

1. Середовище і спосіб виконання

Якість мови не грає вирішальної ролі. Java не був хорошим мовою навіть в момент створення. Він був усього лише зручніше конкурентів. Однак, його віртуальна машина виявилася справжнім проривом для свого часу. Крім числових показників, ця машина давала "перк" кроссплатформенную, якої не було у альтернатив. Тому, вихід Java в лідери індустрії був абсолютно обгрунтований (і, ймовірно, неминучий) історично.

Чи продовжують працювати ці аргументи? Ні. Більшість напрацювань Java VM "взяті на замітку". Кросплатформеність, як виявилося, ще краще досягається через Веб-додатки. Тому, зараз Java тримається вже на інерції. І на відсутності сильних прямих конкурентів. Втім, інерція в індустрії - найпотужніша сила.

Go спочатку позиціонувався як "поганий", примітивний, просту мову. Результат? Вихід в ТОП-20 всього за кілька років - унікальний випадок. Чи може подібно повторитися? Сумнівно. Місце було - місце зайняте. Чекайте чергового opportunity.

Повертаючись до головного питання - подумайте про наступне:

  • Як ви плануєте "вибирати мову" для розробки під IPhone, якщо там їх всього два?
  • Як ви плануєте "вибирати мову" для розробки під Android, якщо там їх "всього один"?

(Kotlin та інше фрицтво ТОП-100 не береться до уваги).

Якийсь вибір поки залишається в Веб-Розробці: Java, JS, PHP, Ruby, Python, Perl. Однак, і він, поступово, зникає: все крім JS вибувають з "гри".

- Чому? Аудиторія Perl перейшла на Ruby, як на більш новий і зручний мову. Ruby і Python поглинаються JS.

- Чому? GIL , Який використовується в "канонічних" версіях Ruby і Python позбавляє їх реальної многопоточности. А многопоточность на рівні IO програє в конкуренції архитектурам, заснованим на асинхронности.

IT корпорації давно зрозуміли це і інвестують шалені гроші в JS (в V8). Іграшковий CPython тепер навіть порівнювати з останніми якось соромно.

- Java?

- Java

Та й неважливо. Mozilla остаточно видаляє підтримку Java в браузері. А що таке сучасна Веб-розробка без фуллстека?

Висновок: починаємо мислити в рамках Платформи а не мови.

А ось ментор по Ruby, Віктор Шепелєв, вважає що мислити при виборі мови програмування потрібно трохи інакше Читати

2. Вендори і Платформа

Мови діляться на "корпоративні" та "незалежні". Практично всі відомі вам IT корпорації просувають свої мови. І, скажімо так, анти-просувають мови конкурентів (якщо не досягнуто корпоративну угоду).

  • Apple - Swift і Objective C.
  • Google: Golang, Dart, JS (V8), Java (Android)
  • Microsoft: C #, F #, TypeScript
  • Mozilla: JS, Rust
  • Oracle: Java
  • Facebook: JS, PHP

"Незалежні" мови створюються або недо-корпораціями (Python, Clojure) або групами вчених (Haskell). У першому випадку, всілякі FooBar Foundation виступають прикриттям авторитарної реальності. У другому випадку - інтелектуальний бар'єр є природним фільтром "від дурнів". Пойнт в тому, що нікому не належать мов - не буває.

Яка категорія краще? Однозначної відповіді немає. Підтримка мови великою корпорацією означає суттєві фінансові вливання. Golang, створений особисто Вами, не був би цікавий нікому, крім знайомих. Golang, створений і просувається Google, - зовсім інша справа. Однак, ця ж підтримка означає зав'язку на успішність корпорації:

  • Розоряється Apple - йдуть по світу розробники Swift і Objective-C.
  • Google вирішує що Google Plus "не потрібен" - десятки тисяч SEO-шників плачуть над розбитою бізнес-моделлю.

Висновок: поцікавтеся - кому належить мову і як у них йдуть справи (останнім часом).

3. Екосистема і ком'юніті

Просто дивимося статистичні дані і робимо висновки.

RedMonk Rating

Відмінний графік, заснований на точної і однозначної інформації з StackOverflow і GitHub.

Лідери зосереджені в правому верхньому куті. Не забуваємо, що обидві шкали - логарифмічні. Не забуваємо, що Java екосистема підтримується "міньйонами" в особі Scala, Clojure, Groovy і ін. А JavaScript - міньйонами в особі TypeScript, CoffeeScript і ін. Ці дві мови лідирують з великим відривом вже всередині ТОП-10.

GitHut

Шикарна діаграма, складена на базі семи показників з GitHub. Кілька застаріла (2014!), Але все ще зберігає актуальність. Варто відзначити, що опен-Сорс активність серед веб-розробників набагато вище, ніж серед ентерпрайз. Тому, лідерство між Java і JavaScript визначається критеріями ранжирування.

PyPL Index

Ще один дивний, але авторитетний рейтинг, заснований на числі пошуку туторіали.

CodeEval Stats

Ексклюзивна статистика від платформи спортивного програмування. У лідерах: Python, Java, C #, C ++, C, JS, Ruby.

StackOverflow Survey

Що думають самі програмісти про бажаних мовами, технологіях, спеціалізації, пошуку роботи? Дана сторінка містить відповіді на всі ці питання. TLDR: Web, JavaScript, FullStack.

Як ми бачимо, лідерство тих чи інших мов визначається способом ранжирування. Титули скрізь одні й ті ж - хіба що йдуть в різному порядку. Варто відзначити, що популярність самого GitHub продовжує стрімко зростати, що підсилює важливість рейтингів, заснованих на цій платформі.

Висновок: в якості першої мови вибираємо один з популярних. Мова без відео-курсів, без статей, без прикладів реальних додатків, без можливості поставити запитання ком'юніті - буде вивчатися повільно і болісно.

4. Ринковий попит і тренди індустрії

І знову дивимося статистику.

ModuleCounts .

Кількома на all time. Виставляємо все галочки. Просвітлювати.

Google Trends

Непоганий інструмент, що володіє рядом обмежень. Для одних мов (PHP) в ньому вдається вибрати категорію Programming Language. Для інших (Python) - немає. Однак, якусь додаткову інформацію (в основному, про динаміку в часі) він дає, тому ми його згадуємо.

Tiobe Index

Дуже дивний рейтинг, заснований на запитах до пошукових систем. опис . На думку Tiobe, EcmaScript і JavaScript - дві різні мови, Pascal настільки ж популярний як і JS, а "C стрімко втрачає популярність з 2015 року". Після подібних "фактів" хочеться тільки закрити обличчя руками і плакати. В ігнор.

New Relic

Ексклюзивна статистика, яка відображає, в більшій мірі, визнання технології Ентерпрайз. Java передбачувано лідирує. NodeJS і Go - ростуть. PHP - падає.

Бонусна інформація: за статистикою згаданого вище RedMonk найбільші темпи зростання показують: Go, PowerShell, Rust, Swift, TypeScript.

Висновок: якщо графік числа бібліотек цікавить вас мови не йде в світле майбутнє (в правий верхній кут) - його майбутнє буде темним і сумним. Як у Perl. Число вакансій і попит на конкретну технологію краще дивитися самому, в прив'язці до своєї країни / місту. Не довіряйте ніяким "зведеннями", дивіться на факти. Локальна ситуація може сильно відрізнятися від глобальної.

5. Зв'язки з іншими мовами і екосистемами

Для нової мови, один з робітників способів розриву циклу "Ніхто їм не користується, тому що ніхто ним не користується!" - прикріплення до існуючої екосистемі. Clojure і Scala - "паразитують" на Java. TypeScript і ClojureScript - на JS. Elixir - на Erlang. Прецедентів знищення носія подібним "паразитом", правда, поки не було.

Який інтерес в цьому для вас? Немає сенсу вчити паразитує мову до освоєння носія. Clojure-сектанти будуть розповідати вам, що знання Java "не потрібно". Далі ви побачите, що значний відсоток їх документації прямо посилається на Java. Брехня ?! Маркетологи! Коли заженете їх в кут, погрожуючи фізичною розправою, вони почнуть виправдовуватися:

- Ми мали на увазі, що не потрібно для рівня Hello World!

Висновок: дуже простий. Мови-сателіти не підходять в якості першого. Вчити дві мови і дві інфраструктури відразу - то ще задоволення. З досвідом, ви самі зрозумієте, що настав час виходити на нову орбіту.

6. Подання про мову

Деякі мови прийнято лаяти. Навіть якщо в наступному PHP додадуть іммутабельность, почистять назви, приберуть ООП ... він, по інерції, буде продовжувати вважатися дуже поганим мовою. Чому? Люди не люблять міняти свою думку і наклеєні ярлики.

Деякі мови не прийнято лаяти. Загляньте в вихідні Python, того ж Clojure. Ви знайдете там лише пекельне місиво (порівняно з конкурентами). Однак, всі вважають ці мови Чарівний єдиноріг і мимохіть кинуті контр-аргументи зустрічають лише подив. Для формування адекватного уявлення, людей потрібно вчити і перенавчати. А хто буде цим займатися?

Висновок: складіть власну думку. Припустимо, ви не можете оцінити технічні характеристики, зважаючи на відсутність досвіду. Ок. Але що заважає вам подивитися виступи розробника (-ів) мови? Вони не виступають публічно? Погана ознака. Дуже поганий. Виступають? Тоді просто послухайте. Як вони тримаються? Що говорять? Що критикують? Що просувають? Близько це особисто вам? Чи є резонанс?

критерії вибору

Вирішивши, що правильно вибирати не Мова, а Платформу, ми, как-будто, приходимо до тих самих питань. Різниця в тому, що тепер ми можемо дати на них об'єктивні відповіді.

Щоб вибрати платформу (і далі мова, якщо вибір залишиться), ми повинні визначитися з критеріями. Для більшості людей, основними критеріями, виявляються такі.

Затребуваність на ринку

Визначається через загальне у вакансій, поділене на загальне у резюме. Великий попит породжує велику пропозицію. "Вікна можливостей" будуть триматися кілька років. Чи встигаєте?

Висновок: при підрахунку "числа вакансій" не забувайте дивитися конкуренцію і демпінг. Звертайте увагу на тренди. Новий "гарячий" фреймворк може "залишитися" поки ви його вивчіть.

Загальна кількість пропозицій

Конкуренція на ринку визначає складність працевлаштування. Однак, варто врахувати і складність потенційної зміни компанії. Ви влаштувалися на рідкісну і високооплачувану роботу консультанта з програмування роботів-борсуків. Що буде якщо ваша фірма вирішить скоротити штат? Ринок вкрай малий - у вашої колишньої фірми є тільки один конкурент. Якому, ось прямо зараз, не потрібні нові консультанти. Будете чекати підходящої вакансії кілька років? Змініть професію? Але ж ви вклали в Тему кращі роки життя ...

Висновок: уникайте малопопулярних напрямків, якщо не знаєте, в точності, чим хочете займатися.

формат роботи

Ви визначилися, що хочете працювати в Ентерпрайз. Віддалено. Побажаємо удачі, оскільки такої комбінації, в природі, не існує. Ну, тобто, ви можете прочитати мотивуючу статтю своєму потенційному роботодавцеві. Показати "статистику" з журналу. Заприсягтися у вірності. Питання тільки в тому - чи допоможе?

Реальність така, що ентерпрайз не любить удалёнку.

  • - Designer Remote? - Проходьте сюди будь ласка.
  • - Java Remote? - Стоп. А ви хто такий?

Чому так - можна обговорювати окремо. Але чи є сенс? Усталені формати роботи і управління змінюються вкрай повільно. Менеджер ентерпрайз розробки хоче бачити ваш потилицю. Всі вісім довгих робочих годин.

  • - Java Part-Time? - Ні, не чули.

Висновок: бажаний формат роботи повинен відповідати реальності. Якщо ви не готові все кар'єру "плисти проти течії" і скаржитися на форумах на "несправедливість буття".

вік ринку

Чим старше ринок, тим менше йому цікаві початківці. Все треди з працевлаштування переповнені новачками, формально освоїли Java Junior і які виявили, що робота не знаходиться. Для працевлаштування потрібен досвід. А для досвіду потрібно трудоустроство. Замкнуте коло.

Тоді як талановитих Junior JS зараз розбирають як гарячі пиріжки. Втім, і це не буде тривати вічно ...

Висновок: уникайте усталених ринків, якщо не розумієте в точності, як будете шукати роботу.

  • - Ваш тато - Java-програміст, готовий все підказати? - Будь ласка. Паліть.
  • - Прочитали в газеті (!), Що потрібні Java програмісти? - У мене для вас погані новини.

Як дізнатися вік ринку? А Вікіпедія на що ?! Для IT розклад, приблизно, такий:

  • До 5 років - новий ринок
  • Від 5 до 10 - встановлюється ринок
  • Більше 10 років - усталений ринок

Далі думайте самі.

Заробітня плата

Різниця між напрямками не така велика. Так - стелю зарплати в одних напрямах настає раніше, ніж в інших. Але завжди залишається можливість репозиціонування. Верстальник → Експерт з анімації. І стеля піднявся ще на 100% ...

Висновок: я б не зациклювався на цьому факторі. Всім початківцям платять мало. Всім профі платять багато. Це те, що вам зараз досить знати.

можливість саморозвитку

Для першої мови - все це не має значення. "Тупо слідувати громадській думці" - буде найправильнішим рішенням. Однак, якщо доля буде до вас прихильна і ви дійдете до цього питання ...

Практично всі мейнстрімні мови мають свої недоліки. Ком'юніті просто виробляє свої відповіді на них. З ростом досвіду, фактори оцінки неминуче змінюються. Сама мова буде означати все менше. Екосистема - все більше. Соромно зізнатися, але колись я вважав Python гарною мовою ...

Мій поточний рейтинг якості (актуальних) мов:

  • хороші: Haskell
  • непогані: F #, Lua, Rust, Swift
  • посередні: C #, Clojure, Erlang, Go, JS, Python, Ruby, Scala
  • погані: C, Java, Objective-C
  • жахливі: PHP, Markdown (останній - заради Лулзім, але на правильному місці)
  • особливе коло пекла: Bash, C ++
  • поза класифікації: асемблери

Уточню, що мова йде про якість за мірками сьогоднішнього дня. Той же C - найважливіший історичний Чекпойнт. Але, як мова, - це вже архаїка. Освоювати OS (заради самих знань) краще через Rust. Розумію, що подібні списки викликають зриви у психологічно слабких людей, що сприймають альтернативні думки як особисту образу. Але що поробиш?

Зрозуміло, можливість саморозвитку не варто ототожнювати з якістю мови. Однак, вони пов'язані. Поганий мову - отупляє "носія". Хороший - робить розумніші, змушуючи розвиватися або залишати професію. Обидва останніх варіанти гарні для людства.

Якість мови, в довгостроковій перспективі, визначається його гнучкістю. Стежимо за руками:

В JavaScript
  1. Відсутність стандартної бібліотеки
  2. Виробляти до з'явиться безлічі альтернатив
  3. Які конкурують между собою
  4. Не будучи зав'язані на поновлених мови
  5. Найбільш прістосовані (а не "перші") решение віжівають за Дарвіном
В Python
  1. Велика стандартна бібліотека ( "Batteries included!")
  2. Що Включає Історично Перші (і Вже тому - погані) решение
  3. Виробляти до відсутності постійної конкуренції (нікому НЕ потрібен другий логгер)
  4. Зав'язка оновлення бібліотек на релізи мови
  5. Виробляти до деградації всієї екосистеми

У підсумку, JavaScript тісніть Python НЕ только в Web, но Вже и в сфере Scientific Programming. Конкуренція і "there are many ways to do it" породжують якість. Повільно, болісно, ​​неминуче. Тоді як авторитаризм і гри в BDFL - ведуть до катастрофи. Повільно, безболісно, ​​так само неминуче.

Висновок: якщо у вашому напрямку є вибір, - вибирайте мови з живим, різнорідним ком'юніті, в яких немає: * "стандартного фреймворка" (схваленого і запечатаного Google) * "довічних диктаторів" * списку "правильних думок" * та іншої гидоти

Іван Клешнін може навчити професійно програмувати на JavaScript найняти

Короткий гайд по вибору

Визначаємося з важливими критеріями і Вибираємо.

Хочу працювати віддалено!

JS, Ruby

Хочу створювати десктопні програми!

Java, C #

Хочу створювати веб-додатки!

JS, PHP, Ruby

Хочу підтримувати легаси ^ _ ^!

PHP

Хочу в Enterprise (великий бізнес)!

Java, Scala, F #

Хочу багато грошей!

Див. вище

Хочу використовувати мову у власному бізнесі!

JS, Haskell, PureScript

Хочу багато свободи!

Див. вище.

Хочу в фінансову сферу!

Scala, Haskell, F #

Хочу в наукову сферу!

Вчені самі вибирають відповідний інструмент. Той випадок, коли можна вибирати.

Хочу в Machine Learning!

Див. вище.

Хочу бути системним адміністратором!

Ruby, Bash

Хочу в системне програмування!

C, Go, Rust

Хочу створювати розподілені системи!

Java, Scala, Erlang, JS

Хочу створювати інтерфейси

JS, Java, C #

Хочу створювати AAA гри!

C ++, C #

Хочу створювати інді-ігри!

C #, JS, PureScript 1.0 ^ _ ^

Хочу створювати додатки під мобільні пристрої

Swift, Java, JS (Objective-C вже немає сенсу)

Хочу працювати з даними!

SQL

Хочу працювати з ВЕЛИКИМИ даними!

Java, Python, R, Scala

Хочу працювати!

Список ТОП-10 наведено вище.

Як вибрати мову, який виявиться не тільки комерційно затребуваним, а й буде радувати в повсякденній практиці?
Як даний вибір проявить себе в довгостроковій перспективі?
Що мається на увазі під "першим" мовою?
Хочете нову мову?
Що ми вибираємо?
Хто?
Яку мову найкращий?
Чи продовжують працювати ці аргументи?
Результат?
Чи може подібно повторитися?

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

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: