Менторство Golang | Артем Романович

Менторство Golang | Артем Романович 

Software & Backend Developer, Блогер и Ментор

16subscribers

3posts

goals2
0 of 10 paid subscribers
Для платных подписчиков выходит эксклюзивный контент, так почему бы тебе не стать одним из них?
$0 of $1 384 raised
Спонсорство красивой картинки для YouTube канала (на оборудование).

Лучший ЯП для лучшего направления IT. Аналитика и мысли.

Предисловие
В данном посте мы определим, в каком направлении в IT (в категории "разработка") больше всего возможностей (и почему), рассмотрим перспективы языков программирования, выбрав "лучший" для изучения. Опираться будем на собственный опыт, статистику и аналитику.
Введение
Почему я решил провести подобное исследование? На данный момент я работаю C++ Software Developer в крупной IT-компании. Компания очень хорошая. Это правда. Я много общаюсь с самыми разными айтишниками из самых разных мест, и понимаю, как сильно мне повезло. В моей компании выстроены все процессы CI/CD, тестирование. Есть опытные менторы, у которых я могу что-то спросить. Мне, как начинающему разработчику, оказывается всяческая поддержка.
При этом я был в других офисах, например, в Яндексе, где проходит наш мастермайнд. Там люди сидят в опенспейсе спинами друг к другу, у каждого маленькое рабочее место, как за школьной партой, у каждого один монитор. Мне (стажеру) на работе к большому удобному столу предлагали три геймерских монитора и компьютер. Короче, условия труда у меня в действительности замечательные.
И мне нравится заниматься тем, чем я занимаюсь. Работа связана с разработкой приложений для компьютера. Вы, наверное, пользуетесь Telegram Desktop. Так вот он написан при помощи фреймворка Qt C++, на котором пишу я. Если кто-то сидит на Linux и знает про KDE, то оно тоже написано на Qt. 2GIS тоже пишется на нем. Словом (и это на самом деле очевидно и ожидаемо), кроме нашей компании много кто использует данную технологию (язык и фреймворк).
Если я буду уходить со своего места работы, мне будет куда приткнуться. Не сказать, что я боюсь сокращений, но я не планирую всю жизнь оставаться на одном месте. Раз место работы придется сменить, а я только в начале своего профессионального пути, то можно и на направления в IT еще разок взглянуть, поменять его будет относительно несложно.
По каким критериям искать работу?
Нужно сделать небольшое отступление. Давайте подумаем, зачем вообще нужна работа. С точки зрения рынка. 
Допустим, я умею делать красивые фарфоровые кружки. Покупатели не умеют делать кружки, поэтому они согласны обменять свои деньги на мой продукт. Таким образом, я могу наладить производство кружек, взамен получая выручку (прибыль - с вычетом расходов).
И возникает вопрос - какие кружки мне делать? 
Ну, в первую очередь, наверное, надо делать продукт, которые будет покупать большое количество людей. Вряд ли вы хотите делать кружки со слишком узким горлышком или непривычной ручкой. 
Еще пример: первое, что делают стартаперы (кроме поиска инвесторов) - определяют целевую аудиторию, чем она больше - тем больше денег.
Здесь мы хотим, чтобы продукт хотело купить как можно большее количество людей. В проекции на программирование это значит, что 1) мы заинтересованы в большом количестве вакансий.
Дальше. Разные типы одинаково продаваемых кружек скорее всего приносят разное количество денег. Допустим, что кружка с рисунком продается примерно так же, как и без рисунка, но получаем мы с нее на 25% больше. 
Мы хотим продавать кружки, за которые нам больше платят, или 2) работать с такими технологиями, где средняя (медианная, она точнее) зарплата больше.
Мы сформулировали два критерия, по которым надо формировать свой стек технологий. Это количество вакансий и ЗП. Очевидно, есть и множество других критериев, но они, как правило, либо эмоциональные (нам нравится предметная область, которая чаще всего встречается при работе на определенном языком), либо одинаковы во всех направлениях (хороших коллег можно встретить везде, дорога до места работы не зависит от стека, и так далее). Так что сосредоточимся на этих двух метриках.
Эти показатели немного влияют друг на друга:
Если взять 100 тысяч вакансий Backend-ера и 10 тысяч вакансий SoftDev-а, то средние значения зарплат могут быть одинаковыми.
Но в Backend больше количество вакансий, где тебе платят огромные суммы (где платят меньше, тоже больше -- их больше в принципе). Если ты целенаправленно будешь стремиться попасть на вакансию с высокой вилкой, то, грамотно все изучив и наработав опыт, тебе будет проще найти работу в области, где вакансий больше.
Сразу скажу, что можно становиться специалистом в узкой области. Например, программировать драйверы. И там можно хорошо зарабатывать, т.к. специалиста сложнее найти и им готовы платить больше, чем в местах, где рынок вакансий переполнен. Можно выбрать такой путь. Но я решил рассмотреть другой -- идти туда, где вакансий больше.
Зачем искать работу, когда ты уже работаешь?
Ну, так просто надо делать. Чтобы проверять свою стоимость по рынку. Чтобы развиваться. Чтобы тренировать навык прохождения собеседований.
Одна из самых больших ошибок, которую можно сделать в начале пути — это углубиться в одну область. Тогда тебе будет очень сложно приспосабливаться и переходить в другие сферы. Не изучайте только один язык, изучайте различные парадигмы, рассматривайте разные фреймворки. Мир IT максимально гибкий, постоянно меняется, поэтому важно уметь реагировать на изменения. Широкий кругозор, не ограничивающийся одной областью, здесь очень поможет.
Я на данный момент не планирую уходить из своей компании, буду изучать то, что мне нужно для работы, но при этом дополнительно смотреть другие направления. Думаю, это хорошая стратегия.
Анализируем направления в IT
Я предлагаю взглянуть на круговую диаграмму. Ее мы составили сами. Тут перечислены самые распространенные по количеству вакансий направления (использовался HeadHunter). Так как средняя ЗП в данном случае не показательна совершенно (средняя будет примерно одинаковая, и сильно зависит от множества других параметров), рассматривать по этому критерию не будем.
Видно, что Backend (треть рынка) и Frontend (четверть) наиболее распространены. Я занимаюсь разработкой Desktop приложений, у меня это 7%, что тоже неплохо, но сильно меньше.
Для наших целей мы просто берем самую распространенную область -- Backend, и идем дальше. Но проведенная аналитика довольно интересна, и обсудить ее помимо всего прочего можно тут: t.me/art_rom_chat.
Помимо этого, абсолютно не меркантильная, а такая, детская часть — мне интересен Backend. Возможно, потому что я его не знаю, но, так или иначе, это факт.
И если ты работаешь в Backend, то есть в том направлении, где больше всего людей, у тебя больше шансов найти интересный проект. В среднем интересных проектов столько же, сколько и неинтересных, просто количество самих проектов больше. Но если ты целенаправленно будешь искать интересные вещи, то тебе будет проще их найти, так как таких проектов в принципе больше.
Анализируем языки программирования
Я определился с тем, что мне интересен Backend. Далее важно понять, с каким языком работать, потому что язык — это основа, база, которая даёт возможность использовать на нём фреймворк. Каждый язык нужен для определённых задач. C++ хорош для низкоуровневого управления памятью, и он очень быстрый. Java хороша тем, что запускается везде, и так далее.
Тут нужно сказать, что в принципе языков для Backend не так уж много. Это JavaScript (TypeScript), Java, Python, PHP, C#, Ruby, Golang, Rust.
Я сразу отбросил некоторые языки по следующим причинам (везде ИМХО):
- JavaScript: это вообще мемный язык, как по мне, там много проблем, он не логичный, он странный
- PHP: старый, у него проблемы с безопасностью, на нем не напишешь что-то высокопроизводительное
- C#: это Java, но меньше вакансий
- Ruby: медленный и не развивается
- Rust: сравнительно сложный, и есть свои проблемы + мало вакансий
Оставил Java, Python, Golang. Также ради интереса добавил C++, т.к. я его хорошо знаю.
Обратим внимание на статистику. Для ее получения использовался калькулятор от Хабра: career.habr.com/salaries. Рекомендую потом заглянуть и поизучать.
Графики ниже справедливы только для Backend, так как мы рассматриваем только это направление.
Зарплата
Сначала рассмотрим ЗП в тысячах рублей.
Очевидно, что у нас есть различные уровни: можно быть начинающим разработчиком (стажёром или джуниором), мидлом, сеньором или даже лидом. 
Итак:
- Python приносит меньше всего денег, потому что разработчиков на этом языке просто уйма, их дофига. Они приходят из математики, data-аналитики. Обучающие курсы учат всех Python, поэтому этот язык наиболее низкооплачиваемый -- найти специалиста довольно легко. В среднем такая тенденция сохраняется на всем графике.
- Рассмотрим C++. Интересно, что интернам на C++ платят больше, чем на Python, потому что порог входа выше (язык сложнее). На графике это может быть не очень хорошо видно, в цифрах проще разобраться, взглянув на таблицу. Почти на всем графике Backend-ер на C++ получает больше, чем на Python, кроме лидов. Там, скорее всего, вы будете писать не только на Python, и у вас вообще будут сложноопределяемая зона ответственности, поэтому здесь значения зарплат ниже.
- Если мы рассмотрим Java, то увидим, что здесь ЗП в начале, как на Python, потому что это язык, на котором тоже много вакансий, и люди на нём активно пишут. Но Java немного более сложная, чем Python, поэтому на ней всегда платят чуть больше, поскольку и знать нужно больше.
- Go. Интерны на Go получают больше, потому что начинающих разработчиков на этом языке крайне мало. На протяжении всей карьерной траектории Golang занимает более высокие позиции по зарплатам, даже с существенным отрывом. Если мы посмотрим на средние зарплаты, то увидим, что Go находится впереди с существенным отрывом. Далее идет сравнительно сложная Java, потом ещё более сложный, но неподходящий для Backend, C++, и далее — Python.
Количество вакансий
Нам интересны языки, на которых высокие зарплаты, потому что есть языки, где платят больше, если они более сложные или если сложнее найти специалиста — это коррелирующие вещи. Также важно количество вакансий, потому что, как мы уже выяснили, если их много, то вы, скорее всего, останетесь востребованным специалистом даже во времена кризисов и увольнений. А когда компании активно нанимают сотрудников, у вас будет более широкий выбор, и вы сможете найти более интересную работу среди всех языков.
Теперь давайте рассмотрим количество вакансий. Повторюсь, рассматривается только Backend.
Видим, что вакансий для C++ крайне мало, всего около 200 на Хабре (это Россия и, вероятно, ещё часть стран СНГ). Это крайне мало.
Если рассмотреть Python, то вакансий на него сильно больше.
Ещё больше их на Java, т.к. это язык для коммерческой разработки. Он является своеобразным стандартом для корпоративных решений, и на нём мы видим 1200 вакансий, что больше, чем на Python. И зарплата на Java выше, чем на Python. Поэтому мне непонятно, почему многие изучают Python, когда есть Java, если сравнивать их только по этим двум параметрам. Возможно, начать изучение с Python проще, но ведь можно потом на Java, к тому же Java не такая уж сложная и можно сразу изучать её.
Наконец, Golang. Мы видим, что вакансий на нём не так много, потому что язык относительно недавно появился и начинает активно развиваться (Рождение языков: Go: 2009, Java: 1995, Python: 1991, C++: 1983). Однако разрыв не такой уж и большой. Числа 1200, 1000 и 800 примерно одного порядка, это не 200 вакансий, которые гораздо ближе к сотне.
Взгляд в динамике
Мы рассмотрели количество вакансий и зарплаты, однако это ситуация на данный момент. Давайте обратим внимание на динамику за последние два года. У нас есть четыре точки данных (получены также с Хабра). Это немного, чтобы полностью отразить динамику, но только такие данные у нас есть для зарплат.
Если не видно, в телеграм канале в хорошем качестве фото прикрепил.
Мы видим, что на Python наблюдается некоторое увеличение зарплат, на Java тоже. На Golang также видим еле заметное увеличение. Сложно сказать, что именно там происходит. На C++ зарплаты снижаются. Не думаю, что это связано с тем, что разработчики переходят на другие языки, потому что в своей области C++ сложно заменить. Возможно, это либо колебания, либо есть какие-то другие причины, например, изменения в требованиях к знанию языка или тенденции на рынке. 
Более полная динамика + рейтинги языков
Чтобы качественнее рассмотреть динамику, мы обратимся к статистике по годам, используя определённый рейтинг языков.
Этот рейтинг включает два параметра.
- Во-первых, количество репозиториев на GitHub (то есть, сколько людей программирует на этом языке)
- Во-вторых, количество вопросов, заданных по этому языку на Stack Overflow (насколько язык обсуждаем на данный момент)
Эти два критерия помогают понять, насколько язык активен: если на нём много репозиториев, но сейчас никто ничего не спрашивает, значит, когда-то на этом языке писали, а сейчас его почти не используют и вопросы не задают.
Тут сразу нужно оговориться: кто-то может сказать, что какие-то языки более сложные, и поэтому на них задают больше вопросов, но  это не так. Каждый язык имеет свои нюансы, в которых нужно разбираться: библиотеки, фреймворки, синтаксис и так далее. Нет такого, что на одном языке вы совершаете меньше ошибок, чем на другом. Вы всё равно будете разбираться и осваивать что-то новое, задавая много вопросов, поэтому количество вопросов действительно показывает, насколько язык активен.
Итак, точками отмечены языки, по осям два вышеупомянутых критерия:
Обращаю внимание, что тут мы рассматриваем уже не только Backend, а все возможные применения языков.
Данный рейтинг проводится ежегодно. Самые перспективные языки -- те, которые находятся в правом верхнем углу. Для удобства представим данные в виде таблицы для последних 4 лет:
Итак, мы видим, что JavaScript — это язык, на котором можно делать всё: и веб, и серверы, но я заранее для себя его исключил из списка. Java -- язык, который держится чуть ниже Python, потому что на Python больше библиотек и инструментов и на нам можно писать все что угодно. Раньше он был ниже Java, кстати. Видно (особенно если посмотреть еще более ранние годы), что C++ плавно теряет свои позиции. Он не используется так активно, как другие языки, и на нём уже не пишут столько новых проектов. В то же время Go стремительно идёт вверх. Go развивается, C++ уходит, и во многом Go заменяет C++. Поэтому многие начинают писать на Go.
Для убедительности рассмотрим еще один рейтинг от Google -- как часто гуглят тот или иной язык
Java плавно уходит, Python стабильно растет, C++ становится все менее распространен, Go имеет взрывной рост. Данный рейтинг не противоречит предыдущему, и показывает динамику за большее количество лет.
Заключение
Исследование не претендует на истину в последней инстанции. Это чистое ИМХО. Это просто попытка понять и структурировать информацию, возможно и так многим известную, на примере некоторых аналитических данных.
Вероятно, Go, учитывая его развитие, растущее количество вакансий и высокие зарплаты, а также интересные проекты, которые пишутся на микросервисах, и простоту изучения (особенно если вы писали на C++, как я), становится отличным вариантом для изучения.
Go up