Сьогодні поговоримо про те, що треба було обговорити давним-давно. На кар’єрних консультаціях мені постійно ставлять одне і те ж питання. І сьогодні ми дамо відповідь на це головне питання життя, всесвіту і всього: «Яку мову програмування вибрати для вивчення?».
Чотири групи мов програмування
Перш ніж говорити про вибір мови (наприклад, чому не варто слухати чужі поради), я дам всеосяжний гайд по вибору мови. Я розділив їх на чотири основні групи.
Перша група — мови низького рівня. До них я відношу С, С ++, Rust, Assembler
Друга група — це мови строгої типізації. Зазвичай призначені для серверного програмування. Сюди відносяться Java і C #.
Третя група — мови динамічної типізації, теж для серверного програмування. Найпоширеніші з них це PHP, Python і Ruby.
Четверта група — мови для фронтенду, в неї входить рівно одна мова, це Javascript.
Робота в кожної з груп схожа, спеціалізації теж схожі. Але до чого я вас закликаю: перш ніж вибирати конкретну мову, я рекомендую вибрати групу. Як це зробити? Якщо ви взагалі нічого не знаєте про ці мови, відкрийте список і просто, як пальцем в небо, ткніть в будь-яку мову з кожної групи.
Як вибрати групу мов програмування
Групу низькорівневих мов я рекомендую тим, кому подобається працювати паяльником. Якщо вам подобається розбиратись в деталях “заліза”, низькорівневі мови для вас. Якщо вас це захопить, швидше за все, ви там і залишитеся, далі можна не ходити.
Якщо ж від паяльника вас нудить, як мене, вам не цікаво, як влаштований комп’ютер, вас лякають слова «переривання» і «процесорні команди», першу групу можна пропустити. Вам там буде нудно. Мені було.
У кожній з решти трьох груп мов ви вибираєте по одній мові. Потім тиждень, якщо ви нетерплячий, як я, або два тижні, якщо ви більш наполегливий, ви просто вчіть цю мову за допомогою безкоштовних гайдів. Найкраще з YouTube. Вводите в пошук: «Основи мови X для початківців». Знаходьте спікера, який подобається, і слухаєте. Можна навіть на рідній мові, основи вчити англійською необов’язково. А російською, українською, білоруською – гайдів на будь-якій мові вистачає.
Вибрали спікера, який подобається, і тиждень-два вчіть цю мову. Потім переключаєтесь на наступну мову і пробуєте її. Через три-чотири тижні, максимум через два місяці, якщо ви спробували всі чотири групи по два тижні на мову, у вас вже склалося уявлення про кожну групу мов.
Якщо раптом уявлення не склалося, беріть листок, ділить на три або чотири частини, і в кожну частину перелічуйте плюси і мінуси мов, з якими ви ознайомилися. Пишіть тільки суб’єктивні враження, не списуйте з інтернету. «Тут мені сподобалося, що легко встановити IDE. Тут не сподобався синтаксис. А ось тут відразу зрозуміло, що куди перетворюється. Тут подобається відсутність дужок ». І так далі.
Зазвичай на цьому моменті людині стає зрозуміло, яка мова йому більше сподобалась. Цій мові буде приписано найбільше позитивних властивостей. Якщо і це не допомогло, візьміть свою половинку — чоловіка або дружину — і розкажіть: «Ось, вибираю, не можу визначитися». Ваша половина допоможе побачити, яка мова програмування вам сподобалась більше. На даному етапі це головне.
Може так статися, що вам сподобалась мова, наприклад, динамічної типізації, але ця мова якась некомфортна — наприклад, відсутність дужок в Python не подобається. Спробуйте іншу мову з цієї групи, PHP або Ruby. І ось тоді можливий ефект «Ооо, це саме те, що я шукав, ось це моє».
Чому я до цього закликаю? Позитивний зворотний зв’язок. Те, що вам подобається, ви будете робити з великим натхненням і бажанням. Чим більше це робити — тим краще виходить. Чим краще виходить — тим більше хочеться це робити. Так ви швидше стаєте хорошим фахівцем і отримуєте більше грошей.
А якщо ви возитесь з тим, що вам не подобається, то буде виходити все гірше, і ви це в підсумку кинете. Тому я пропоную обирати ті мови, які сподобалися — зі списку мов, які проживуть ще 10-15 років. Мови, звичайно, зникають, але і програмісти переходять з мови на мову, нічого страшного. Не варто переживати: «Я виберу JavaScript, а вона вийде з моди». Я, наприклад, з десяток мов поміняв за своє життя, і ви теж поміняєте, будьте до цього готові. Але починати потрібно з того, що вам подобається.
JavaScript/TypeScript
Тепер підемо за списком мов. У всіх списках популярності перші 10 позицій приблизно одні й ті ж. Я на свій погляд відібрав мови, на які варто звернути увагу. Але це моє суб’єктивне уявлення, і якщо вам шалено подобається мова не зі списку – займіться нею, і не слухайте мене.
Перша мова, досить популярна, це JavaScript. Її цілком можна вибирати як основну мова програмування (невже я це говорю?). Орієнтуйтеся на те, що ви будете фронтенд розробником. Це гарний напрямок. Жодної ознаки, що JavaScript помре або кудись піде.
Більш того, багато розробників браузерів перестають розробляти власний engine. Тому що сучасний браузер – це комбайн якийсь. Спочатку перестала розробляти Opera — перейшли на Chromium, а недавно і Microsoft нарешті відмовилась від Explorer-a, перейшовши на Chromium. Тому що зараз з нуля розробляти браузер, сумісний з усім, що настворювали в Інтернеті, це просто неможливо.
А все це прив’язане до вашого улюбленого JavaScript. Тому ця мова жити буде. Більш того, коли ви як слід розберетеся в фронтенді, там можна писати на пристойній і “людській” TypeScript. Вона мені дуже подобається, вона схожа на Java і явно від неї наслідувалася. Схожа на людську мову.
Навіть якщо вам потім захочеться з цією JavaScript піти в бекенд, я вас зрозумію. Тому що на фронтенді рано чи пізно приходиш до верхньої межі розвитку, особливо якщо треба буде розробляти корпоративні додатки. Тоді можна буде легко світчнутись на бекенд, там є Node.JS, є де “порозважатися”.
Java
Другий номер нашої програми — звичайно, Java. Я не міг її пропустити. Java в будь-якому рейтингу популярності незмінно займає одну з трьох перших позицій. Роботи на Java повно і в найближчі років 30 вона не закінчиться.
Газільони рядків коду вже написані, всі банки світу, все платіжні системи працюють і будуть працювати на Java. Це дефолтний вибір для системи, яка повинна гарантовано працювати, інтегруватися з сотнями інших систем і забезпечувати безпеку. Будь-яка інша мова — це відхилення в бік “а раптом не вийде”. А на Java точно вийде, тому її і вибирають в найризикованіших випадках.
Якщо Java вам подобається, то роботи для вас буде вагон і маленький візок. І це будуть в перспективі найвищі зарплати на ринку, тому що тут найдорожчі замовники.
Python
Наступна, звичайно, Python. Мова досить стара, це вам не Go, яку “позавчора” створили. Проте, її популярність зараз тільки зростає. Мова досить непогана. Особисто мені вона не подобається відсутністю дужок, хоча це “питання смаку”, і вона саме цим багатьом подобається.
У нас теж є курс по Python, досить популярний, так як мова користується попитом у величезній кількості напрямків, від DevOps до Data Scientist. Під Python розроблено безліч фреймворків і бібліотек, більше хіба що під Java, і то не факт. Мова досить проста по синтаксису, і на відміну від Java, вона підходить для швидкого виготовлення Proof of Concept — щось швидко зліпити і показати замовнику.
На сьогодні Python – це дефолтний варіант, коли не знаєш, що вибрати. Знаєте таку приказку: «Немає ходу – ходи з бубни». Python — це бубна.
PHP
Ще більш стара мова, приблизно ровесник Python, і вона зараз не на хайпі. Але це хороша їздова конячка. Розробник на PHP завжди буде користуватися попитом. Величезна кількість сайтів робиться на PHP, і не видно в перспективі, щоб вона була витіснена тим же Python з ринку. Розвиток мови йде добре, вона явно збирається боротися за місце під сонцем.
Мова має досить низький поріг входу, можна порівняти з Python, і при цьому незрівнянно більша кількість вакансій. У неї можна увійти з мінімумом знань. Мені вона подобається по синтаксису більше ніж Python. Вона хоч і багатослівна, але з дужками. Інша справа, що через низький поріг входу в неї прийшла маса “говнокодеров” і пише що попало. Але це ж не провина мови?
C#
Наступна мова в нашій добірці — Сі-Шарп. Я буквально декілька років тому передрікав їй швидку загибель. В першу чергу, через те, що Microsoft тоді не хотіла переносити C # і .Net-платформу на Unix-like сервера, і це був епік фейл. Але з тих пір вони взялися за розум і зробили .Net core, що працює на лінуксових серверах. Так що ймовірність, що цей напрямок загнеться, досить мала.
У C# є один головний недолік для замовника і перевага для розробників: відсутність зворотної сумісності, на відміну від Java, де завжди зворотна сумісність. Тому для замовника це ризик: раптом розробник візьме і все змінить, доведеться дуже багато чого переробляти. Для розробника це перевага, тому що постійно з’являються нові фічі, мова динамічно розвивається, завжди є стимул підучити щось новеньке.
Мені C# подобається менше, ніж Java. Вона більш м’яка за вимогами, але я не розумію, навіщо це потрібно. Навіщо, наприклад, файл називати інакше, ніж ім’я класу, все одно скомпілюється. Але це “питання смаку”. А якщо вам подобається C#, у нього є багато цікавих ніш – розробка додатків для Windows або ігор для Unity, а не дитячі вироби типу Skype, котрий зроблений на Electron.
С\С++
Наступна пара мов — С\С++ — мови досить низького рівня. У цих мовах можна управляти всіма ресурсами комп’ютера, починаючи від процесора, закінчуючи пам’яттю, зовнішніми пристроями, і так далі. Тому на них розробляють embedded soft – той, який ставиться на різні залізяки, від літаків до холодильників, зараз скрізь є процесори. Або ж це софт, який вимагає жорсткого контролю над залізом. Звичайно, це геймдев. Ігри видавлюють з комп’ютера всі ресурси, щоб все було реалістично, гарненько, і т.д.
Як ви розумієте, ймовірність того, що ці мови кудись подінуться, нульова. Звичайно, є Rust, яка намагається “підтиснути” C ++. Мені Rust подобається, я за неї вболіваю, вона була розроблена Мозілою, і це добре. Але витіснити “бабусь” з ринку їй не вдасться.
Якщо вам подобається низькорівневе програмування — вам сюди. Почати треба з С, мені здається. Там можете додати С ++ або Rust, але це все про одне — знання операційної системи, залізяк комп’ютера, і того, як це все має разом працювати. На якій мові писати, це вже вдруге. Це окремий набір професій, і туди йдуть з розумінням того, що ви будете робити. Якщо ви хочете низькорівневого програмування або все життя мріяли писати ігри — вам сюди. Звичайно, ігри пишуть і на C # і Unity, але що це за ігри?
Swift
Якщо ви фанат Apple, вибирайте Swift, вам сподобається. На Swift пишуть під будь-які еппловскі девайси, там все жорстко. Якщо Google вибрав Kotlin, і всі стали негайно переходити на Kotlin, то Apple сказав «У нас Swift», і тут же Objective C винесли вперед ногами і стала Swift.
Мова непогана, схожа на Kotlin, хоча мені вона не подобається. Але якщо ви фанат Apple і хочете під нього розробляти, вам діватися нікуди, у вас Swift. Мова ця сучасна, модна, молодіжна і правильна. Я сумніваюся, що Apple кудись подінеться найближчим часом. І мову вони поміняли буквально пару років тому, так що Swift з нами надовго.
Ймовірність того, що інша велика компанія захоче розробляти на Swift, дуже невисока. З іншого боку, шансів на те, що Apple знайде нову мову, практично нульова. Але навіть якщо це станеться, Apple подбає про своїх розробників, допоможе їм перейти на нову мову.
Мені вибір Swift для Apple нагадує вибір C ++ для розробки на Windows. Якщо ви фанат цієї платформи, місця для сумнівів не залишається. Я фанатів Apple не розумію, але з практичної точки зору це хороший вибір.
Kotlin
Наступна мова з десятки, про які я розповім, це Kotlin. Для мене це мова дивна. Kotlin складно вчити без знання Java. Велика частина документації по Kotlin зараз написана так: «Ось це у нас робиться як на Java, а ось це — не так, як на Java». Для людини, яка не знає жодної мови програмування, це звучить дивно. Тому я рекомендую починати все-таки з Java.
Але якщо ви Android-розробник, вам є сенс придивитися до Kotlin і підучити його. Тому що Google перейшов на Kotlin. Якщо ви бекенд-розробник, наприклад, на Java, теж є сенс придивитися до Kotlin. У неї цікавий синтаксис, мені не подобається, але цікавий. Вона більш компактна і лаконічна, ніж Java. Крім того, в Kotlin є ряд цікавих знахідок. Швидше за все, їх незабаром засунуть назад в Java, і навіщо нам тоді Kotlin? Але подивимося.
Принаймні зараз цю мову вибирати цілком можна. Вона в трендах, і для мобільної розробки під Android це те, що треба. Але як перша мова вона буде складна, починати краще все-таки з Java. Вибір цієї мови не гарантує вам довголітнє щастя. Google відомий тим, що регулярно відмовляється від улюблених технологій. Сумніваюся, що це станеться з Kotlin, все ж вони багато в нього вклали, але Google це Google, вони можуть.
Ruby
Зараз багато хто почне в мене кидатися помідорами і кричати: «Немчинский збожеволів, Ruby помер». Так ось: ні. Відкриваєте будь-який сайт з роботою і бачите досить багато вакансій для Ruby. Більш того: з часом їх менше не стає.
Ruby досить цікава мова, у неї є величезна армія шанувальників. Вона міцно займає свою нішу: швидке виготовлення e-commerce сайтів. Вона для цієї ніші майже ідеальна. Якщо для її основних конкуренток PHP або Python є набір фреймворків, з якими можна гратися, то Ruby дуже лаконічна. Там всього один фреймворк, Ruby on Rails. Там мінімум чого вчити. Якщо вам подобається синтаксис Ruby — я, звичайно, вас не розумію, але все ж —вибирати Ruby зараз це непоганий варіант.
Я знаю величезну кількість фанатів Ruby, вони продовжують на ній сидіти і не бачать причин, щоб вона закрилась. І я таких перспектив не бачу, мова як мова. Розробників багато. Вакансій менше, ніж на той же Python, це правда. Але не можна сказати, що їх немає або вони зникають. І старі проекти треба підтримувати, і нових проектів на Ruby стартує досить багато.
SQL
Остання мова з нашого огляду це SQL. Всім бекенд розробникам треба знати SQL, це мова запитів в базі даних. Але те, що про SQL знають бекендщики, всі ці запити, це не вся мова. Це серйозна мова програмування, на якій пишуться величезні системи. Припустимо, в банківській справі є величезні збережені процедури на багато мегабайт вихідного коду. Розпитайте банківських розробників — дізнаєтеся. Це окрема програмістська професія, яка дуже користується попитом.
Є питання роботи з Big Data, які ми тут обговорювати не будемо, тому що це не професія програміста. А ось реляційні бази даних, від яких ми нікуди не дінемося в тих же фінансах, де цифри повинні бути однозначно точні і нічого не повинно бути втрачено, з ними теж повинен хтось працювати.
Це триває вже років сорок. Розробник баз даних це окрема програмістська професія, величезна кількість вакансій і дуже хороші зарплати. Вони вміють тонко тюнити базу, прискорювати запити, писати величезні запити, розуміють, як зробити процедуру, що зберігається, яка знадобиться через 20 років і так далі. Це цікавий напрямок розробки, і не треба його скидати з рахунків.
Я не пропоную новачкам вибирати SQL як першу мову програмування. У багатьох випадках ви просто не зрозумієте, як в цей напрямок йти. Але світчнутися, наприклад, з того ж PHP, якщо він вам набрид, на SQL—цілком собі варіант.
Завжди ваш Сергій Немчинський.