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

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

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

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

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

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

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

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

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

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

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

Зеленым выделены языки с положительной динамикой вакансий. За год 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, микросервисы

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

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

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 и как айтишнику грамотно составить резюме.

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

1414
33 комментария

Не согласен с автором. и вот почему - зацыкленность на кириллическом (русско-говорящем) рынке.
Что такое 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.

4

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

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

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

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

1

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

1

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

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

1

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

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

1