Сегодня поговорим о том, что надо было обсудить давным-давно. На карьерных консультациях мне постоянно задают один и тот же вопрос. И сегодня мы дадим ответ на этот главный вопрос жизни, вселенной и всего: «Какой язык программирования выбрать для изучения?».
Четыре группы языков
Прежде чем говорить о выборе языка (например, почему не стоит слушать чужие советы), я дам всеобъемлющий гайд по выбору языка. Я разделил их на четыре основные группы.
Первая группа — языки низкого уровня. К ним я отношу С, С++, Rust, Assembler.
Вторая группа — это языки строгой типизации. Обычно предназначены для серверного программирования. Сюда относятся Java и C#.
Третья группа — языки динамического типирования, тоже для серверного программирования. Самые распространенные из них это PHP, Python и Ruby.
Четвертая группа — языки для фронтенда, в нее входит ровно один язык, это Javascript.
Работа в каждой из групп похожа, специализации тоже похожи. Но к чему я вас призываю: прежде чем выбирать конкретный язык, я рекомендую выбрать группу. Как это сделать? Если вы вообще ничего не знаете об этих языках, откройте список и просто, как пальцем в небо, ткните в любой язык из каждой группы.
Как выбрать группу языков
Группу низкоуровневых языков я рекомендую тем, кому нравится работать паяльником. Если вам нравится ковыряться в кишках железа, низкоуровневые языки для вас. Если вас это увлечет, скорее всего, вы там и останетесь, дальше можно не ходить.
Если же от паяльника вас тошнит, как меня, вам неинтересно, как устроен компьютер, вас пугают слова «прерывание» и «процессорные команды», первую группу можно пропустить. Вам там будет скучно. Мне было.
В каждой из оставшихся трех групп языков вы выбираете по одному языку. Затем неделю, если вы нетерпеливый, как я, или две недели, если вы более настойчивый, вы просто учите этот язык по бесплатным гайдам. Лучше всего по YouTube. Вводите в поиск «Основы языка X для начинающих». Находите спикера, который нравится, и слушаете. Можно даже на родном языке, основы учить на английском необязательно. А на русском, украинском, белорусском гайдов по любому языку хватает.
Выбрали спикера, который нравится, и неделю-две учите этот язык. Затем переключаетесь на следующий язык и пробуете его. Через три-четыре недели, максимум через два месяца, если вы пробовали все четыре группы по две недели на язык, у вас уже сложилось представление о каждой группе языков.
Если вдруг представление не сложилось, берите листок, делите на три или четыре части, и в каждую часть выписываете плюсы и минусы языка, с которым вы знакомились. Пишите только субъективные впечатления, не списывайте из интернета. «Тут мне понравилось, что легко установить IDE. Тут не понравился синтаксис. А вот тут сразу понятно, что куда преобразовывается. Тут нравится отсутствие скобок». И так далее.
Обычно на этом моменте человеку становится понятно, какой язык ему больше понравился. Этому языку будет приписано больше всего положительных свойств. Если и это не помогло, возьмите свою половинку — мужа или жену — и расскажите: «Вот, выбираю, не могу определиться». Ваша половина поможет увидеть, какой язык программирования вам понравился больше. На данном этапе это главное.
Может так статься, что вам понравился язык, например, динамической типизации, но этот язык какой-то некомфортный — например, отсутствие скобок в Python не нравится. Попробуйте другой язык из этой группы, PHP или Ruby. И вот тогда возможен эффект «Ооо, это именно то, что я искал, вот это мое».
Почему я к этому призываю? Положительная обратная связь. То, что вам нравится, вы будете делать с большим вдохновением и желанием. Чем больше делаете — тем лучше получается. Чем лучше получается — тем больше хочется это делать. Так вы быстрее становитесь хорошим специалистом и получаете больше денег.
А если вы возитесь с тем, что вам не нравится, то будет получаться все хуже, и вы это в итоге бросите. Поэтому я предлагаю выбирать понравившиеся языки — из списка языков, которые проживут еще 10-15 лет. Языки, конечно, исчезают, но и программисты переходят с языка на язык, ничего страшного. Не стоит переживать: «Я выберу JavaScript, а он выйдет из моды”. Я, например, с десяток языков поменял за свою жизнь, и вы тоже поменяете, будьте к этому готовы. Но начинать нужно с того, что вам нравится.
JavaScript/TypeScript
Теперь пойдем по списку языков. Во всех списках популярности первые 10 позиций примерно одни и те же. Я на свой взгляд отобрал языки, на которые стоит обратить внимание. Но это мое субъективное представление, и если вам безумно нравится язык не из списка — займитесь им, и не слушайте меня.
Первый язык, довольно популярный, это JavaScript. Его вполне можно выбирать как основной язык программирования (неужели я это говорю?). Ориентируйтесь на то, что вы будете фронтенд разработчиком. Это хорошее направление на 2021 год. Ни одного признака, что 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 — вполне себе вариант.
Всегда ваш Сергей Немчинский.