Otus
21 242

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

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

{ "author_name": "Otus", "author_type": "editor", "tags": [], "comments": 33, "likes": 15, "favorites": 41, "is_advertisement": false, "subsite_label": "otus", "id": 106935, "is_wide": false, "is_ugc": false, "date": "Thu, 13 Feb 2020 17:34:30 +0300", "is_special": false }
0
33 комментария
Популярные
По порядку
Написать комментарий...
2

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

Ответить
0

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

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

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

Ответить
1

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

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

Ответить
0

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

спасибо

Ответить
0

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

Ответить
1

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

Ответить
1

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
–2

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

Ответить
2

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

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

Ответить
0

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

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

Ответить
0

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

Ответить
0

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

Ответить
1

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

Ответить
0

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

Ответить
0

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

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

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

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

Ответить
0

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

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

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

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

Ответить
0

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

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

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

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

Ответить
0

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

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

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

Ответить

Прямой эфир