Какие языки программирования учить? Карьера в IT (часть 1)

Таблицы, списки и примеры из личной практики — собрали самое полезное и интересное с первого дня интенсива «Стратегическое развитие и карьера в IT», который провел Женя Картавец, тимлид и разработчик с 5-летним стажем на C #, а теперь руководитель отдела продюсирования образовательных программ OTUS. Передаем слово самому Жене.

Чем больше освоишь, тем круче будешь

Довольно популярное мнение среди разработчиков, что уровень квалификации и зарплата зависят от количества языков программирования, которыми разработчик владеет.

Я сам в свое время ходил и думал, что бы такого изучить, чтобы потом писать в резюме много умных слов. Затем однажды на работе познакомился с коллегой, С++ разработчиком, который за всю жизнь освоил только один этот язык и все. А зарплата у него была, как у меня, может даже больше. Помню, как он ходил и с интересом спрашивал, как такие же вещи можно делать на С #. Это меня очень удивило, потому что я увидел, что человек достаточно успешен в IT-карьере, хотя он хорошо выучил всего один язык, а за его пределами почти ничего не знает.

Конечно, это не значит, что надо ограничивать свой кругозор единственным языком. На мой взгляд, секрет успеха в том, чтобы стать профи в чем-то одном, а затем осваивать смежные области, которые будут дополнять друг друга и двигать в направлении одной цели. Например, если вы занимаетесь Web-разработкой, будет плюсом знать какой-то язык для бэкэнда и JavaScript для фронтэнда. Но если я буду учить С++ для бэкэнда, то знания JavaScript для фронтэнда мне ничего не даст, потому что я никогда не буду использовать их вместе.

Обычно, с одного языка пересесть на другой не так сложно из-за схожего синтаксиса и общих принципов. Например, с C # на Java. При этом вокруг каждого языка есть своя большая экосистема: библиотеки, фреймворки, либы. А вот на это уже нужно много времени, и быть достаточно высококвалифицированным специалистом в двух-трех разных областях в программировании очень сложно.

Рынок вакансий диктует условия

Если осваивать программирование с целью карьеры, а не в качестве хобби, ориентироваться надо на рынок вакансий. Идем на HeadHunter и видим такую картину (данные собраны в конце 2019-го года):

Зеленым выделены языки с положительной динамикой вакансий. За год Kotlin и Go впервые оказались в этом списке. Красным выделен Ruby — для него число вакансий сокращается, и возможно, скоро из топ-10 его вытеснит какой-нибудь другой перспективный язык.

Может показаться, что если выбрать что-нибудь экзотическое, у вас будет меньше конкурентов, а значит проще найти работу. Это не совсем так. Работодатели тоже идут на hh, смотрят кандидатов и решают, на чем запускать проекты, под которые реально собрать команду. Замкнутый круг. Поэтому мой совет с точки зрения развития карьеры: выбирайте популярный язык, при этом ориентируйтесь на спрос на рынке труда, а не по каким-то другим рейтингам.

Вместо того, чтобы обсуждать актуальность отдельно взятого инструмента — а именно этим являются языки программирования — я рассмотрю их в разрезе 4-х направлений разработки и составлю наборы навыков, необходимых для решения разных задач.

Web-разработка

Здесь больше всего вакансий, но и сильнее конкуренция среди специалистов, т.к. направление развивается уже много лет. Web-разработка состоит из Frontend — визуальная часть сайта, то, с чем взаимодействуют пользователи, и Backend — серверная часть сайта.

Начальный маршрут для фронтендера:

  • HTML, CSS — языки верстки
  • JavaScript — для интерактивных элементов
  • ECMAScript / Typescript — расширения JavaScript, дающие больше возможностей
  • Опыт работы с одним из фреймворков: React / Angular / Vue

Как правило, выбор фреймворка не столь принципиален: работодатель готов рассмотреть кандидата с опытом в любом из трех, т.к. довольно быстро можно пересесть на нужный специально под проект.

Для бэкендера есть несколько вариантов. Каждый пункт в списке — пара из языка и его фреймворков:

  • PHP + Laravel / Yii 2 / Symphony
  • Javascript + NodeJS (Express.JS, Nest.js, TypeScript, GraphQL, Apollo)
  • Python + Django
  • Java + Spring
  • C# + ASP.NET Core

Каждый из наборов актуален для написания серверной части сайтов, поэтому можно выбрать на свое усмотрение. В любом случае понадобится овладеть еще и этими знаниями:

  • HTML & CSS — понимание верстки сайтов
  • SQL (PostgreSQL / MySql) — работа с базами данных
  • Архитектуры и паттерны — как писать код, который легко поддерживать и масштабировать

В большинстве случаев это необходимый минимум, джентельменский набор для бэкенд-разработчика, работающего над сайтами. Далее, можно развиться как разработчик в 2 разных направлениях: начать осваивать технологии из списка фронтендера, т.е. стать Fullstack-разработчиком, или углубиться в бекенд и хайлоад. Выбрав второй путь, будет полезно освоить следующие технологии:

  • NoSql (MongoDB, Reddis, Cassandra)
  • Брокеры сообщений: RabbitMQ / Kafka
  • Docker / Kubernates
  • Highload, микросервисы

Мобильная разработка

Более молодое направление, в котором меньше вакансий, но пока наблюдается дефицит кадров. Языки программирования выбираются в зависимости от того, под какую платформу вы будете создавать приложения.

Android-разработчик:

  • В большинстве проектов нужно знать и Java и Kotlin
  • Новый код чаще пишется на Kotlin, однако очень много кода, который нужно поддерживать, написан на Java

Kotlin молодой, но очень перспективный язык, созданный питерской компанией Jetbrains в 2016 году. Он полностью совместим с Java, но примерно на 40% короче его, что значительно ускоряет разработку. Кроме того, в какой-то момент Google, устал от исков со стороны правообладателей Java за использование кода в Android и назвал Kotlin предпочтительным языком для Android-разработки. Сейчас все чаще приложения пишут на нем. Однако на текущий момент все еще очень много проектов, написанные на Java, которые нуждаются в поддержке и развитии. Поэтому Android-разработчику надо знать оба языка, чтобы уметь читать и вносить изменения в старый код.

iOS-разработчик:

  • Достаточно знать Swift
  • Старый код написан на Objective-C

Легкий и простой Swift пришел на смену и значительно потеснил первый iOS-язык Objective-C. Эти языки несовместимы, поэтому новые проекты начинают на Swift и его вполне достаточно для разработки на платформе. А Objective-C остается актуальным только для старых больших проектов, которые не решились переписывать на Swift.

Что касается востребованности, то Java и Kotlin универсальные языки, которые используют не только для мобильной разработки и под различные платформы. А вот Swift подходит исключительно для мобильной разработки под iOS и десктопной разработки под MacOS.

Еще один путь мобильного разработчика — освоить библиотеку ReactNative для JavaScript. Она устроена таким образом, что написанный код работает под все платформы. С одной стороны это очень удобно. Однако нередки случаи, когда появляется необходимость прописать нативный код для каждой платформы, а это значит нужно иметь наготове знания и Kotlin, и Swift.

Серверные приложения

Путь разработчика серверных приложений во многом похож на бэкендера, разрабатывающего сайты. Во-первых, надо выбрать и изучить один из языков. Сейчас в ТОП-е по количеству вакансий на российском рынке:

  • C++
  • Go
  • Java
  • Python
  • C#

Во-вторых, как и бэкендеру, для большинства задач вам понадобятся навыки работы с базами данных и умение писать качественный код. Тут вам пригодятся:

  • SQL (PostgreSQL / MySql)
  • Архитектуры и паттерны

Дальше можно изучить:

  • Алгоритмы и структуры данных
  • NoSql (MongoDB, Reddis, Cassandra)
  • Брокеры сообщений: RabbitMQ / Kafka
  • Docker / Kubernates
  • Highload, микросервисы

Из этого самый сложный пункт — выбор языка. Я подготовил сравнительную таблицу:

Java, Python и С # между собой очень похожи и довольно универсальны. Java используют для сайтов и мобильной разработки. Python отдают предпочтение стартапы (а также крупные проекты, выросшие из стартапов) из-за его простоты освоения и универсальности. C # популярен и для сайтов, и для написания игр на движке Unity 3D. Я советую выбирать тот, с которым вы уже хоть немного имели дело и на какую сферу больше ориентируетесь. При необходимости быстро пересесть на другой из этой тройки не составит труда.

C++, на мой взгляд, один из самых сложных в освоении язык, подходящий в основном для серверных, десктопных программ и игр, реже — для Data Science. Разработка на нем занимает значительно больше времени, но дает программисту огромные возможности. C++ используют для программ, требовательных к быстродействию, например, Photoshop, или масштабных игр, так как с его помощью можно контролировать и распределять нагрузку на «железо».

Golang (Go) появился как более простая версия С++. Его легко освоить, и он заточен под высокие нагрузки и многоядерные процессоры, но имеет очень ограниченный функционал, например, нет дженериков, исключений и т.д., которыми обладают другие языки программирования. В первую очередь его целесообразно использовать для консольных утилит и highload бэкенда. Вакансии разработчика на Go открывают преимущественно крупные корпорации, хотя в последнее время спрос на разработчиков Go начал появляться и в проектах поменьше.

Разработка игр

Выбор языка во многом определяет платформу, на которой вы сможете писать игры:

  • C#, Unity 3D — кроссплатформ, возможность быстро портировать игру с одной платформы на другую
  • C++, Unreal Engine — PC, обычно используется для масштабных игр, требовательных к быстродействию «железа»
  • Javascript — Web
  • Java — Android

В российском геймдевелопменте больше вакансий на C #, Unity 3D.

Мой совет - выбирайте деятельность, а не язык. Посмотрите компании-работодателей, их проекты и вакансии и выберите те, что вам по душе. Ориентируйтесь на них с первых шагов, тогда вы сможете сфокусировать свои навыки вокруг конкретных задач программирования. И даже если вы потом не пойдете работать в эти компании, у вас будет актуальный набор скиллов и понимание своей специализации.

Специально для быстрого старта в профессию мы записали 5 видеокурсов для начинающих программистов: Java, Python, JavaScript, C++ и Linux. Их достаточно для решения задач уровня Junior, т.е. можно пойти на стажировку или претендовать на начинающую позицию в IT-компаниях. Или поступить и продолжить учиться на наших основных курсах, чтобы углубиться в выбранный язык.

Вторая часть интенсива посвящена карьерному пути в IT.

Рассмотрим, какие сферы есть, как и куда можно расти, в частности, как попасть в Data Science, какие варианты развития есть в DevOps и как айтишнику грамотно составить резюме.

Если по выбору языка какие-то моменты не осветил, задавайте вопросы — отвечу.

0
33 комментария
Написать комментарий...
PetunPetun32

Не согласен с автором. и вот почему - зацыкленность на кириллическом (русско-говорящем) рынке.
Что такое HH.ru? А НИЧЕГО :(. Для программера - ничего. Программер не слесарь и не водила, которому надо быть физически на своём месте работы.

Надо смотреть и анализировать АНГЛОЯЗЫЧНЫЕ международные ресурсы.  И делать это прежде всего. В настоящее время англоязычные - мировые. 
Возможно, лет через 50 будет универсальным языком китайский, или опять, как и в 18-веке станет французский, но сейчас - это аглицкий.
Анализ трендов языков программирования:
http://pypl.github.io/PYPL.html
https://www.tiobe.com/tiobe-index/

А по ЗП и карьере, прежде всего, надо ориентироваться на международные
indeed.com
stackoverflow.com/jobs
jooble.org
www.glassdoor.com
linkedin.com
www.careerbuilder.com

Автор пишет для "детишек", которым начинать жить и трахать баб или мужиков, растить детей, кормить, в будущем, родителей. И при этом "замыкаект" их сознание через hh.ru чётко и жёстко на кирилическом мире. 

1. Английски.  Заменяете русский во всех аспектах жизни, где возможно, на английский.  Фильмы в оригинале, для начала можно с рус. субтитрами, потом с аглицкими субтитрами.  Инет "тусовки" - международные, книги - аглицкие, новости и прочее на аглицком. Вот не хрена смотреть вести24, смотрите russiaToday (https://www.rt.com/) и т.д. или CNN.
Русский вы и так знаете :). Он родной по гражданству или соц. происхождению, коли этот материал читаете.

2. Базовые знания тех. колледжа (института).  ОЧЕНЬ желательно.
Параллельно учите computer skills - xNIX (Linux, BSD и им подобные), Винду - на уровне администрирования в командной строке (!!!).

3. Язык программирования - лучше идти, при наличии денег, на ПЛАТНЫЕ курсы с преподом. Они, обычно, хорошо систематизированы и резко сократят "время вхождения в тему". Если нет возможности физически очно, то идите на on-line, но которые в real time.
3.1 Параллельно с очными русскоязычными курсами  берёте на туже тему  on-line АНГЛОЯЗЫЧНЫЙ на www.classcentral.com, udemy, coursera.org, lynda.com через VPN. Лучше брать с субтитрами аглицкими. Берите от колледжей для начала. Среди "индивидуалов" - бывает ерунда, сразу, без опыта, не разберётесь.

Тогда можно рассчитывать на middle income  $120K year и более. И жить где угодно, где есть Инет. Можно срать на Moscow или "грёбанные штаты". Не замечать ни Зеленского, ни Путина. И не гундить как всё вокруг плохо, и как вам Меркель мешает жить.
Good luck.

Ответить
Развернуть ветку
Bulat Ziganshin

$120K получить удалённо - для меня например недостижимо. ткни пальцем на такие вакансии

Параллельно учите computer skills - xNIX (Linux, BSD и им подобные), Винду - на уровне администрирования в командной строке (!!!). 

computer science - да, прикладные знания - сугубо в своей области. я например программирую в обеих системах и даже поставить их не возьмусь, не то что что-то )))

Ответить
Развернуть ветку
PetunPetun32

"$120K получить удалённо"  - это  в ГОД, это по янковским меркам пишу.
У них к году приписано. 

"ткни пальцем на такие вакансии" - ОК - linkedin.com - java.
и тут пробегают stackoverflow.com/jobs
А вот как "оформляться" - сами думайте :). Для этого и нужен @fluent aka native english@.
Пробегают и запросы с абсолютно прозрачным оформлением.
Да, блин, такие деньги и в РФ и в Польше и Бибис-land платят - в Риге, в Вильнюсе.
"На улице" не лежит без дела, но попадается.

Ответить
Развернуть ветку
Bulat Ziganshin

ok, на SO такие и правда есть, хотя мне кажется что они подразумевают разрешение на работу в сша/европе

спасибо

Ответить
Развернуть ветку
101

Не нужно учить какие либо языки!
1.Нужно во первых выучить и хорошо знать математику
2. Нужно знать английский язык
3. Выучить сами компьютерные науки.
4. А вот язык учить по документации, и уже от собственных предпочтений.
4.1 Чтоб выбрать язык, просто смотрите на синтаксис, скорость работы и потребление ресурсов.
И ещк go это не замена c++, замена плюсам rust.
А go замена C.

Ответить
Развернуть ветку
Олег

Спасибо за совет.

Ответить
Развернуть ветку
Евгений Картавец

Базис немомненно нужен. Однако с одним базисом и бнз знания и опыта работы на конкретном языке работу найти сложно. 

Математика точно полезна для разаития мозгов, но активно применять ее потребкется только для отдельного класса задач. Большинству программистов навыки вычисления интегралов, производных и определителя матрицы не понадобится в работе. 

Ответить
Развернуть ветку
Bulat Ziganshin

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

Ответить
Развернуть ветку
Евгений Картавец

Опять же, нужно только для определённого класса задач. Для огромного круга задач не нужно. 

Ответить
Развернуть ветку
Alexander D

А чем отличается бекенд разработчик от разработчика "серверных приложений"?

Ответить
Развернуть ветку
Олег

Разработчик создает, издатель продает.

Ответить
Развернуть ветку
Alexander D

Такой тупизны я еще не видел. Лучше отключите этого бота.

Ответить
Развернуть ветку
Otus
Автор

Олег, ты как тут оказался?)

Ответить
Развернуть ветку
Кирилл Пашков

Разработчик северных приложений пишет приложения системного уровня(например, ОС, драйвера), в то время как бэк энд разработчик обычно представляет собой разработчика прикладного уровня, создавая приложения и сопутствующие в процессе необходимые утилиты.

Ответить
Развернуть ветку
Alexander D
 Разработчик северных приложений пишет приложения системного уровня(например, ОС, драйвера)

Это называется системный программист. В таком случае не совсем понятно, зачем вводить еще один термин.

Ответить
Развернуть ветку
Евгений Картавец

Я тут говорю про "бекенд разработчика сайтов" - это когда ты пишешь серверную часть сайта. 

Под "серверными приложениями" имел в виду все остальные задачи, котоые6решаются на сервере, не связанные с созданием сайта. Например, какой-нибудь краулер) 

Ответить
Развернуть ветку
Alexander D

Это важное уточнение, лучше запилить его в статью.

Ответить
Развернуть ветку
Александр Крафт

Прошу прощения, но на Go реально и совершенно не сложно писать простые игры. И почему вы считаете, что кресты не подходят для создания серверной логики интернет ресурса?

Ответить
Развернуть ветку
Евгений Картавец

Реально, но ресь не об этом. У каждого языка своя ниша, где его чаще всего используют. 
В геймдев со знанием Go вас не возьмут) ну или возьмут, но вы там будете не на Go игры писать. 

Ответить
Развернуть ветку
Bulat Ziganshin

писать простые игры != профессиональный заработок

Ответить
Развернуть ветку
akap

Привет, у вас в табличке сравнения языков ошибки.
Плюсы часто используют для разработки мобильных приложений\мобильных игр.
Например, мобильные игры на ue4.
Так же при некотором желании можно писать фронтенд сайтов на плюсах(например https://www.webtoolkit.eu/wt), но так делают редко.

Если уж говорить, о бекенде сайтов на плюсах, то так делают многие. 

Фейсбук, яндекс, мейл и подобные.

Голанг иногда используются для разработки игр. Например, мейл использует это для некоторых своих мобильных игр.

Ответить
Развернуть ветку
Евгений Картавец

Формально на одном и том же языке можно решить очень обширный класс задач, и например на Ruby написать игру. 

Речь о том, где этот язык используется чаще всего. 

В табличке напротив С++ и игры стоит ДА именно из-за unreal engine. А вот для мобильных приложений он используется редко по сравнению с лидерами рынка: Java, Kotlin, Swift. 

Опять же, на питоне тоже можно писать под мобилку, но делают это крайне редко. 

Ответить
Развернуть ветку
Bulat Ziganshin

т.е. достаточно посмотреть курс и уже можно устраиваться работать? LOL

Ответить
Развернуть ветку
Никки Пинки

Раньше устроишься, раньше начнёшь получать рабочий опыт/обратную связь, быстрее вырастешь... А кандидатов без стажа работодатель будет рассматривать все равно с большим скепсисом. Хоть десять лет дома сиди учи.

Ответить
Развернуть ветку
Bulat Ziganshin

посмотрев 20-часовой курс - устроишься на работу программистом?

Ответить
Развернуть ветку
Евгений Картавец

Емли будете просто смотреть видосики, то нет. Емли делать домашки и практиковаться, почему нет? Ну только не за 20 часов, а побольше. 

Ответить
Развернуть ветку
Bulat Ziganshin

ну у вас видео на 20 часов. вместе с домашками это будет 80 часов. этого достаточно? или всё же выходит суп из топора?

Ответить
Развернуть ветку
Евгений Картавец

Этого достаточно для старта в профессию. 

После курсов для начинающих можно идти на продвинутые курсы: https://otus.ru/categories/programming/

Ответить
Развернуть ветку
Bulat Ziganshin

а теперь перечитайте что тут Евгений написал:

 Специально для быстрого старта в профессию мы записали 5 видеокурсов для начинающих программистов: Java, Python, JavaScript, C++ и Linux. Их достаточно для решения задач уровня Junior, т.е. можно пойти на стажировку или претендовать на начинающую позицию в IT-компаниях.

что, деньги не пахнут?

Ответить
Развернуть ветку
Евгений Картавец

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

Ответить
Развернуть ветку
Олег

Толк есть — главное желание. Ну и плюс не помешает мнение людей, которые уже заканчивали, что — по подобное:)

Ответить
Развернуть ветку
Владислав Сорокин

"Эти языки несовместимы, поэтому новые проекты начинают на Swift и его вполне достаточно для разработки на платформе."

С чего это вдруг, Swift и Obj-C несовместимы?
Можно писать проект сразу на двух языках: Одни классы будут на Obj-C, а другие на Swift. 

Автор вообще не в курсе того что пишет?

Ответить
Развернуть ветку
Евгений Картавец

Смотрите, совместимость присутствует, но на практике все не так гладко. 

Многие крупные проекты при попытке переехать на Swift сталкиваются с кучей ошибок, и принимают одно из двух решений:
- Остаться на Obj-C
- Все переписать с нуля на Swift

Есть еще конвертеры с Obj-C на Swift, но с ними тоже не все гладко. 

Ответить
Развернуть ветку
30 комментариев
Раскрывать всегда