Какие языки программирования учить? Карьера в 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 и как айтишнику грамотно составить резюме.
Если по выбору языка какие-то моменты не осветил, задавайте вопросы — отвечу.
Не согласен с автором. и вот почему - зацыкленность на кириллическом (русско-говорящем) рынке.
Что такое 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.
$120K получить удалённо - для меня например недостижимо. ткни пальцем на такие вакансии
Параллельно учите computer skills - xNIX (Linux, BSD и им подобные), Винду - на уровне администрирования в командной строке (!!!).computer science - да, прикладные знания - сугубо в своей области. я например программирую в обеих системах и даже поставить их не возьмусь, не то что что-то )))
"$120K получить удалённо" - это в ГОД, это по янковским меркам пишу.
У них к году приписано.
"ткни пальцем на такие вакансии" - ОК - linkedin.com - java.
и тут пробегают stackoverflow.com/jobs
А вот как "оформляться" - сами думайте :). Для этого и нужен @fluent aka native english@.
Пробегают и запросы с абсолютно прозрачным оформлением.
Да, блин, такие деньги и в РФ и в Польше и Бибис-land платят - в Риге, в Вильнюсе.
"На улице" не лежит без дела, но попадается.
ok, на SO такие и правда есть, хотя мне кажется что они подразумевают разрешение на работу в сша/европе
спасибо
Не нужно учить какие либо языки!
1.Нужно во первых выучить и хорошо знать математику
2. Нужно знать английский язык
3. Выучить сами компьютерные науки.
4. А вот язык учить по документации, и уже от собственных предпочтений.
4.1 Чтоб выбрать язык, просто смотрите на синтаксис, скорость работы и потребление ресурсов.
И ещк go это не замена c++, замена плюсам rust.
А go замена C.
Спасибо за совет.
Базис немомненно нужен. Однако с одним базисом и бнз знания и опыта работы на конкретном языке работу найти сложно.
Математика точно полезна для разаития мозгов, но активно применять ее потребкется только для отдельного класса задач. Большинству программистов навыки вычисления интегралов, производных и определителя матрицы не понадобится в работе.
а дискретка и теорвер?
Опять же, нужно только для определённого класса задач. Для огромного круга задач не нужно.
А чем отличается бекенд разработчик от разработчика "серверных приложений"?
Разработчик создает, издатель продает.
Такой тупизны я еще не видел. Лучше отключите этого бота.
Олег, ты как тут оказался?)
Разработчик северных приложений пишет приложения системного уровня(например, ОС, драйвера), в то время как бэк энд разработчик обычно представляет собой разработчика прикладного уровня, создавая приложения и сопутствующие в процессе необходимые утилиты.
Это называется системный программист. В таком случае не совсем понятно, зачем вводить еще один термин.
Я тут говорю про "бекенд разработчика сайтов" - это когда ты пишешь серверную часть сайта.
Под "серверными приложениями" имел в виду все остальные задачи, котоые6решаются на сервере, не связанные с созданием сайта. Например, какой-нибудь краулер)
Это важное уточнение, лучше запилить его в статью.
Прошу прощения, но на Go реально и совершенно не сложно писать простые игры. И почему вы считаете, что кресты не подходят для создания серверной логики интернет ресурса?
Реально, но ресь не об этом. У каждого языка своя ниша, где его чаще всего используют.
В геймдев со знанием Go вас не возьмут) ну или возьмут, но вы там будете не на Go игры писать.
писать простые игры != профессиональный заработок
Привет, у вас в табличке сравнения языков ошибки.
Плюсы часто используют для разработки мобильных приложений\мобильных игр.
Например, мобильные игры на ue4.
Так же при некотором желании можно писать фронтенд сайтов на плюсах(например https://www.webtoolkit.eu/wt), но так делают редко.
Если уж говорить, о бекенде сайтов на плюсах, то так делают многие.
Фейсбук, яндекс, мейл и подобные.
Голанг иногда используются для разработки игр. Например, мейл использует это для некоторых своих мобильных игр.
Формально на одном и том же языке можно решить очень обширный класс задач, и например на Ruby написать игру.
Речь о том, где этот язык используется чаще всего.
В табличке напротив С++ и игры стоит ДА именно из-за unreal engine. А вот для мобильных приложений он используется редко по сравнению с лидерами рынка: Java, Kotlin, Swift.
Опять же, на питоне тоже можно писать под мобилку, но делают это крайне редко.
т.е. достаточно посмотреть курс и уже можно устраиваться работать? LOL
Раньше устроишься, раньше начнёшь получать рабочий опыт/обратную связь, быстрее вырастешь... А кандидатов без стажа работодатель будет рассматривать все равно с большим скепсисом. Хоть десять лет дома сиди учи.
посмотрев 20-часовой курс - устроишься на работу программистом?
Емли будете просто смотреть видосики, то нет. Емли делать домашки и практиковаться, почему нет? Ну только не за 20 часов, а побольше.
ну у вас видео на 20 часов. вместе с домашками это будет 80 часов. этого достаточно? или всё же выходит суп из топора?
Этого достаточно для старта в профессию.
После курсов для начинающих можно идти на продвинутые курсы: https://otus.ru/categories/programming/
а теперь перечитайте что тут Евгений написал:
Специально для быстрого старта в профессию мы записали 5 видеокурсов для начинающих программистов: Java, Python, JavaScript, C++ и Linux. Их достаточно для решения задач уровня Junior, т.е. можно пойти на стажировку или претендовать на начинающую позицию в IT-компаниях.что, деньги не пахнут?
Нет никаких противоречий. Конкретно эти курсы для старта в профессию, готовять к задачам уровня Junior-разработчика. Для уже действующих разрабов есть другие курсы, о которых писал выше.
Толк есть — главное желание. Ну и плюс не помешает мнение людей, которые уже заканчивали, что — по подобное:)
"Эти языки несовместимы, поэтому новые проекты начинают на Swift и его вполне достаточно для разработки на платформе."
С чего это вдруг, Swift и Obj-C несовместимы?
Можно писать проект сразу на двух языках: Одни классы будут на Obj-C, а другие на Swift.
Автор вообще не в курсе того что пишет?
Смотрите, совместимость присутствует, но на практике все не так гладко.
Многие крупные проекты при попытке переехать на Swift сталкиваются с кучей ошибок, и принимают одно из двух решений:
- Остаться на Obj-C
- Все переписать с нуля на Swift
Есть еще конвертеры с Obj-C на Swift, но с ними тоже не все гладко.