Таблицы и схемы для тех, кто хочет сменить направление или только собирается стать разработчиком. Как выбирать? На что обращать внимание? Подготовили статью с Александром Пряхиным (СТО, PHP-разработчик, автор нескольких курсов OTUS), которая поможет вам сориентироваться и спланировать профессиональный путь. Передаем слово нашему эксперту.
Привет! Я Александр Пряхин, вырос от джуниора до СТО и на данный момент работаю техническим директором в CityAds Media. Весь путь развития программиста — это постоянное обучение. Этот поезд идёт слишком быстро, и спрыгнуть с него, прекратив развитие, очень легко. А вот нагнать заново очень сложно. Поэтому вне зависимости от грейда, должности и прочих регалий программист должен постоянно стремиться узнавать новое.
Уметь учиться
В IT-среде этот навык довольно явно отражается в требованиях к соискателю. Хотите выбирать из нескольких офферов при найме — надо соответствовать. Это условие подчиняется другому правилу: знать язык недостаточно, нужно знать экосистему.
Компании ценят специалистов, способных разобраться не только в том, как написать некий алгоритм, но и осознающих, что он будет работать стабильнее и корректнее с одной технологией, а не с другой. Несмотря на множество разделённых должностей, таких как frontend, backend, DevOps, QA и т.д., грань между обязанностями тонка и размыта. Разумеется, разработчику не надо от и до знать, как устроен под капотом Kubernetes, но вот понимать, какие в нём есть средства взаимодействия контейнеров с кодом, уже нужно.
Именно поэтому пробуйте, практикуйтесь, учитесь. И учитесь не ради того, чтобы собрать «Hello, World» и забыть, а для того, чтобы применять полученные знания, закрепляя их на практике. Есть такая градация познания: знать, уметь, владеть. И если вы что-то умеете здесь и сейчас, но не практикуете это знание, то владение исчезнет со временем.
Как выбирать язык программирования?
Если вы хотите осваивать язык, чтобы получить специальность и развиваться в ее направлении, вам следует учитывать две вещи. Первое — выбранный язык должен быть популярным и востребованным, т.е. у него есть поддержка создателей, активное сообщество и достаточное разнообразие вакансий. Технология должна быть практичной, т.е. ее должны регулярно задействовать новые проекты. Второе — ответить на вопрос, чем вам интересно заниматься? Это может быть разработка web, мобильных, серверных приложений или создание игр. Про это поговорим ниже, а пока вернемся к популярности языков.
Вас не должна смущать конкуренция и мысли в духе «ой, да на питоне каждый второй пишет, я не пробьюсь». Подтягивать навыки вам в любом случае необходимо! Но компании ведь перед запуском проекта тоже оценивают наличие кадров и перспективы роста, зачастую выбирая самые популярные стеки. Поэтому гораздо обиднее выбирать редкую технологию в надежде быть нарасхват у работодателей, а потом так и не найти проект для трудоустройства.
Мы подготовили для вас список языков, по которым в России больше всего вакансий. Данные взяты с HeadHunter. Аналогичная картина наблюдается и на Хабр.Карьера, за исключением того, что по числу вакансий здесь на первое место вышла Java, сместив JavaScript на вторую строчку.
В этой статистике радует общий рост вакансий по всем направлениям. А еще любопытно, что Ruby удается пока сохранить место в этой десятке, хотя его постепенно догоняет Scala — 677 вакансий в конце 2020 года.
Не надо пытаться изучить всё подряд
Подумайте о том, как знания, которые вы получите, пригодятся вам в будущем. Да, можно здесь и сейчас изучить Go, C#, Ruby и Brainfuck. Это весело, интересно, да и при наличии определённого уровня понимания, как устроено программирование, «знание» приходит довольно быстро. Но вот до «умения» и «владения» остаётся большой путь.
Инструмент для вас здесь — это Roadmap. В своей книге «Таймдрайв» Глеб Архангельский предлагает вести «Стратегическую картонку», постоянно сверяясь с ней. Важно понимать, что после найма через 2-3 года вы будете менять работу. И одинаково — если вы остановитесь в росте или будете распыляться между новыми знаниями — вы будете терять стоимость. Поэтому пока вы не будете понимать на уровне профи один язык (одну экосистему), не надо бросаться в другую. А экосистема — это работа языка с окружением, фреймворки, прикладное ПО (очереди, СУБД, кэши и т.п.).
В своей практике я пробовал переключиться с PHP на Java два раза. В первый раз из интереса, когда я был еле-еле мидлом, потому что про Java говорили везде. Второй — уже когда я осознал, что мир PHP мне понятен и экосистема не приносит сюрпризов. Угадайте, какой из подходов был успешен? 🙂
Какие навыки нужны в разных направлениях разработки?
Переходим ко второму критерию, от которого будет зависеть ваш выбор языка. Мы подготовили памятки ключевых навыков, которые нужны программисту в зависимости от рода деятельности.
Web-разработка
Внутри этого направления специалисты делятся на фронтенд и бэкенд. Подробнее про их отличия мы рассказывали в отдельной статье.
Сейчас в вебе набирает популярность Go (Golang), который используется для создания микросервисов или вместо php-fpm иногда. Python же наоборот сдает позиции, в данный момент можно сказать, что это нецелевое использование языка.
Дальше развитие в веб-направлении делится на 2 пути:
- Освоить и фронтенд, и бэкенд технологии, чтобы стать Fullstack-разработчиком
- Углубиться в бэкенд и хайлод. Выбрав второй путь, будет полезно освоить следующие технологии: NoSql (MongoDB, Reddis, Cassandra), брокеры сообщений: RabbitMQ / Kafka, Docker / Kubernetes, Highload и микросервисы.
Мобильная разработка
В этой области специалисты делятся по типу платформы: Android или iOS.
Считается, что пока iOS-разработчики будут в дефиците. Связано это с тем, что процесс обучения более дорогой — начиная от самой техники и заканчивая взаимодействием с AppStore.
В Android-отрасли Kotlin продолжает уверенно вытеснять Java, когда речь идет о создании новых приложений. Однако, чтобы работать в крупных давно запущенных проектах, вероятнее всего, вы столкнетесь с требованием знать оба языка.
Продолжат набирать популярность кроссплатформенные решения. В первую очередь это Flutter. На его фоне ReactNative, библиотека JS, с помощью которой разработчики могли создавать код, работающий сразу на обеих мобильных ОС, постепенно уходит в прошлое.
Серверная разработка
Разработку серверных приложений ведут чаще всего на одном из этих языков: C++, Go, Java, Python, C#, PHP. Чтобы работать в этой области, к знаниям языка понадобится добавить еще навыки работы с базами данных и архитектуры.
Выбор языка тут не так принципиален, поэтому можно отдать предпочтение тому, который вы уже знаете. Так же можно ориентироваться на типы проектов, в которых чаще всего используется тот или иной инструмент. Для наглядности мы подготовили такую таблицу:
Наиболее универсальные языки Java, Python и С#. Python выбирают чаще всего в стартапах, как наиболее простой язык, на котором можно быстро создать первые решения. C# распространенный язык для создания серверных приложений, веба и игр. На Java пишут серверные и мобильные приложения. Постепенно в этой среде начинает набирать обороты и Kotlin, который уже перехватил инициативу в Android-разработке, а теперь используется и для создания серверных приложений.
C++ — наиболее сложный в освоении язык, дающий разработчику огромный простор для деятельности. Он подходит для создания разных приложений, но чаще всего используется в разработке высокопроизводительных программ (таких, как Photoshop) и масштабных игр.
Golang (Go) является упрощенной версией C++. Он специфический, но простой в освоении. Используется в основном для создания микросервисов. Изначально его задействовали крупные корпорации, но теперь и проекты меньших масштабов начинают перенимать тренд разработки на Go.
PHP в сравнительную таблицу включать не стали, все же его используют в основном в вебе. Но с выходом седьмой и восьмой версий язык позволяет решать сложные бэкенд задачи без лишних затрат компании на «дорогие» языки. И достаточно долго можно будет обходиться его стеком.
Разработка игр
Здесь с выбором языка несколько проще. Для каждого типа — браузерные, мобильные, компьютерные — используется своя технология. Однако стоит учитывать, что в основном вакансии геймдева лежат в области разработки на Unity.
Если подвести итоги, получится такая последовательность действий:
- Определитесь, чем вам хочется заниматься
- Изучите вакансии этого направления и требования работодателей, чтобы найти наиболее популярный язык для вашего профиля
- Сосредоточьтесь на изучении этого языка + дополните его знаниями экосистемы, которые понадобятся вам для выполнения задач
- Готово, вы великолепны!
Наши курсы по языкам программирования мы строим как раз по такому принципу. С помощью выбранного инструмента вы учитесь создавать конкретные готовые решения, изучая для этого всю необходимую экосистему. Например, веб-сайт на C#, серверное приложение на Java, игры на Unity, готовое к публикации в AppStore приложение на Swift и т.д.
Рушить границы
2020-й год поменял нашу жизнь кардинально, не только введя новые правила, но и открыв новые направления развития, а также дав развитие уже существующим. И сейчас, когда мир привык к формату работы из дома, можно искать работу где угодно, вне зависимости от места обитания. Но искать надо везде: HeadHunter стремительно теряет свои позиции на рынке найма разработчиков, отдавая доли telegram-каналам, LinkedIn да и просто сарафанному радио. Многих сильных разработчиков агрессивно хантят. Но надо понимать, что требования высоки, и им надо будет соответствовать.
Смотрите на рейтинги, отчёты по зарплатам (Хабр.Карьера), ходите на собеседования и узнавайте, чего хочет рынок, растите свою сеть на LinkedIn, отслеживая рекрутеров и их обновления. Вас найдут, если вы не будете тихонько сидеть в углу.
Если у вас остаются сомнения, какие выбрать технологии и как развиваться в профессии — оставляйте комментарии, пишите в наши каналы связи или задавайте вопросы в сообществе. Менеджеры и преподаватели всегда рады помочь вам определиться с обучением и поделиться своим опытом.