Что требуют от джуниоров работодатели: анализ вакансий для младших программистов

В этом обзоре систематизируем требования работодателей к Junior-программистам, а также обобщаем условия, которые предлагают компании младшим разработчикам. Для этого анализируем реальные вакансии, опубликованные на hh.ru.
Кого ищут работодатели: критерии анализа
Чтобы проанализировать требования работодателей к младшим программистам, я выбрал вакансии на сайте hh.ru по Москве, Санкт-Петербургу и Казани. Смотрел вакансии для JavaScript-программистов (фронт- и бэкенд), PHP-, Python- и Java-программистов. Проанализировал как минимум 10 вакансий по каждому стеку.
В вакансиях анализировал следующие параметры:
- требования к опыту работы;
- требования к возрасту;
- требования к образованию;
- требования к софт-скилам;
- требования к хард-скилам;
- предложенные условия труда.
Параметры анализировал без разделения по стекам. Исключение — требования к хард-скилам. Этот параметр проанализировал для каждого стека отдельно.
Какой опыт работы нужен Junior-программисту
В идеальном мире на позицию джуниора могут претендовать соискатели без опыта работы. В реальном мире всё не так просто.
В подавляющем большинстве вакансий для Junior-программистов опыт работы не требуется. Но иногда работодатели хотят видеть стажёра или джуна с опытом работы. Например, «Яндекс» ищет стажёра-разработчика с опытом работы от 1 года.

«Яндекс» ищет стажёра с опытом работы
Какое образование нужно джуниору
Нужно ли высшее образование программисту? На этот вопрос сложно ответить только с помощью анализа вакансий. HR-менеджеры могут не указывать требования к образованию в вакансиях. Но они наверняка обращают внимание на этот пункт в резюме, когда рассматривают заявку соискателя. Тем не менее даю слово реальному рынку труда.
В большинстве вакансий для Junior-разработчиков нет требований к образованию. Но часть работодателей хочет видеть соискателей с высшим техническим образованием или студентов старших курсов.
Важный момент: требования к образованию я встретил только в вакансиях для Java- и Python-программистов.

От Java- и Python-программистов чаще требуют высшее техническое образование
Промежуточный итог: в большинстве вакансий работодатели не указывают требования к образованию. Но иногда в объявлениях встречаются пожелания: компании хотят видеть у новичка диплом технического вуза или в крайнем случае студенческий билет. Такие требования я встретил только в вакансиях для Java- и Python-программистов.
Требования к возрасту джуниров
Этот вопрос чаще всего волнует специалистов, которые меняют сферу деятельности в возрасте 30+. Давайте посмотрим, есть ли ограничения по возрасту в опубликованных вакансиях.
Я просмотрел около 50 вакансий в разных стеках, но ни в одной не нашёл явных требований к возрасту. Иногда работодатели указывают, что набирают студентов последних курсов. Такие условия есть в объявлениях о стажировке, а не в вакансиях для джуниор-программистов.

На стажировку приглашают студентов
Это не значит, что работодатели не обращают внимание на возраст кандидатов. Эйчары видят резюме и могут уточнить год рождения соискателя, если эта информация не указана. А о среднем возрасте junior-программистов рассказывает HR-менеджер Вероника Ильина в комментарии ниже.
Промежуточный итог: работодатели обычно не указывают формальные требования к возрасту, но учитывают возраст соискателей при отборе.
Какие софт-скилы нужны джуниору
Софт-скилы или гибкие навыки — неспециализированные навыки, которые влияют на профессиональную деятельность специалиста. Примеры софт-скилов: дисциплинированность, проактивность, умение общаться, стрессоусточивость, способность к обучению.
В большинстве вакансий работодатели не указывают требования к гибким навыкам. В нескольких объявлениях есть пожелания к софт-скилам, например:
- готовность общаться с разработчиками и с экспертами в предметной области;
- аналитический склад ума;
- ответственность за результат;
- стремление к профессиональному росту;
- любопытство;
- коммуникабельность;
- умение чётко формулировать мысли;
- адекватность;
- умение и желание работать в команде;
- умение планировать работу;
- умение работать со скучными задачами.
Мне показалось, что в некоторых вакансиях работодатели пишут о гибких навыках формально. Например, сложно представить, что кто-то из кандидатов скажет на собеседовании, что ему не хватает любопытства или адекватности.
В некоторых вакансиях софт-скилам уделяется повышенное внимание. Например, одна из компаний ищет Python-разработчика для работы в медицинском стартапе. Работодатель хочет, чтобы у соискателя был интерес к предметной области, то есть к медицине. Это объясняется тем, что разработчику придётся общаться с врачами, которые участвуют в разработке медицинских приложений.
В объявлениях часто встречается требование знать английский язык. В частности, указывается уровень intermediate.
Промежуточный итог: работодатели иногда указывают желаемые гибкие навыки. Любой кандидат может на собеседовании сказать, что он коммуникабельный, любопытный и адекватный. Реально оценить софт-скилы соискателя работодатель сможет во время испытательного срока.

Адекватные стрессоустойчивые соискатели интересуются вакансией
Какие хард-скилы нужны Junior-программистам
Хард-скилы или профессиональные навыки уместно рассматривать в разрезе стеков.
Требования к JavaScript-разработчикам (фронтенд)
Работодатели требуют от соискателей на позицию фронтенд-разработчиков такие знания и умения:
- знания основ JavaScript;
- базовые знания HTML и CSS;
- умение верстать (встречаются требования умение верстать по принципу pixel-perfect);
- умение использовать UI-фреймворки и библиотеки, чаще всего React и Vue.
- Знание протокола HTTP;
- умение работать с графическими редакторами (Adobe Photoshop требуют чаще всего);
- умение работать с Git и пакетными менеджерами.
В одной вакансии встретил пожелание — соискатель на позицию фронтендера должен знать PHP хотя бы на базовом уровне. Также в единичных вакансиях работодатель искал кандидатов со знанием TypeScript, умением работать с препроцессорами (SCSS или Less), знание Angular.
Требования к Node.js-разработчикам (бэкенд)
Работодатели ждут от Node.js-разработчиков таких знаний и умений:
- знание Node.js;
- опыт использования GitHub и GitLab;
- знание Vue.js;
- знание HTML и CSS, умение верстать;
- знание Websocket;
- знание SQL, умение работать с базами данных;
- понимание принципа MVC.
В вакансиях для Node.js-разработчиков часто встречаются жёсткие требования к знанию английского языка. В нескольких вакансиях увидел пожелание к знанию ещё одного серверного языка, например, PHP или Python.
Требования к PHP-программистам
От младших программистов на PHP компании ожидают таких знаний и умений:
- знание PHP;
- базовые знания HTML и CSS;
- знание бэкенд-фреймворков (чаще всего требуют Laravel и Yii2);
- знание SQL, умение работать с базами данных;
- знание CMS (встречаются разные, включая 1C-Битрикс, WordPress, Magento);
- умение работать с Git;
- понимание принципов ООП.
В нескольких вакансиях работодатели хотят, чтобы соискатель имел базовые знания JavaScript.
Требования к Python-программистам
Один из работодателей принимает стажёров, которые знают основы Python и SQL. Стажировка оплачиваемая. К младшим программистам предъявляются более серьёзные требования:
- знание Python;
- знания scikit-learn, tensorflow-pythorch, matplotlib;
- знание алгоритмов машинного обучения и теоретическое понимание работы нейросетей (для джуниор-программистов в области machine learning);
- в вакансиях для Python-программистов часто встречаются требования уметь работать с Linux;
- для веб-разработчиков на Python актуальны умение работать с базами данных и знание веб-фреймворков, например, Django.
В вакансиях для Python-программистов практически не встречаются требования знать ещё один язык программирования. Также мне не попались требования знать HTML и CSS и уметь верстать. Тем не менее это актуальные для веб-разработчиков умения.
Требования к Java-программистам
Выше сказано, что от джавистов работодатели чаще всего требуют высшее техническое образование. Также компании хотят видеть такие знания и умения:
- знание Java;
- понимание принципов ООП;
- знание SQL;
- умение работать с базами данных;
- знание HTML и CSS;
- знание сетевых технологий, включая TCP и HTTP.
В вакансиях для Java-программистов несколько раз встретил требование уметь писать юнит-тесты. В объявлениях о поиске джуниоров в других стеках такого требования не увидел.
В одной из вакансий нашёл пожелание к знанию второго языка программирования, например, Python. В вакансии для веб-разработчика на Java увидел требование понимать принцип MVC.
Промежуточный итог: от младших программистов во всех стеках работодатели ожидают базового знания выбранного языка программирования. Часто встречается пожелание знать хотя бы ещё один язык. В большинстве вакансий есть требование знать HTML и CSS.
Работодатели ожидают, что Junior-программисты умеют работать с базами данных, знают сетевые технологии, владеют популярными фреймворками и библиотеками.
Изучайте операционные системы, повысьте свой уровень У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.
Что работодатели предлагают Junior-программистам
В части вакансий эйчары не указывают заработную плату, которую предлагают сотрудникам. Тем не менее объявления позволяют оценить уровень зарплат, на которые могут претендовать джуниоры. Также в вакансиях обычно есть информация о других «плюшках».
Работодатели предлагают будущим сотрудникам такие плюшки:
- добровольное медицинское страхование за счёт компании;
- абонемент в спортзал;
- напитки, йогурты, фрукты;
- изучение английского языка за счёт компании;
- корпоративные мероприятия;
- официальное оформление по трудовому кодексу;
- гибкий график работы;
- оплата обедов;
- услуги массажиста за счёт компании.
Промежуточный итог: Junior-программист может рассчитывать на заработную плату от 15 000 рублей в месяц и выше. Работодатели готовы дополнительно мотивировать джуниоров и обеспечивать им комфортабельные условия труда.
Что требуют и что дают джунам: комментарий HR-эксперта Вероники Ильиной
Я анализировал требования работодателей к джуниорам по опубликованным вакансиям. Чтобы получить полную картину, обратился к HR-эксперту Веронике Ильиной и попросил её рассказать, что требуют работодатели от Junior-программиста. Слово Веронике.

«Обычно в вакансиях джунов пишут в требованиях или пожеланиях техническое образование. На это есть несколько причин: от традиций до убеждения, что универ учит системному мышлению. Но все знают, что действительно учатся даже в топовых вузах десятки, если не единицы людей на каждом потоке. То есть настоящих сильных выпускников никогда не хватит, чтобы закрыть потребность рынка в джунах. Так что многие работодатели на самом деле закрывают глаза на образование. Особенно после того, как встречают тимлида с опытом CTO и 9 классами школы или берут в джуны бывшего бариста, потому что мехмат МГУ не смог в сортировку. А бариста смог.
Опыт обычно не требуется, то есть учебного достаточно. Но и в целом джун джуну рознь: кто-то год параллельно с учебой стажируется в известной компании, но ничего не умеет. Кто-то даже учит школьников программировать, но у самого знаний все же не хватает даже в основах. А кто-то — тот самый бывший бариста, который выучил Java дома, и нормально работает 🙂
Идеальный джун — это, конечно, вчерашний студент. Опыта нет, впитывает всё, что дают, легко подстраивается под рабочие процессы и увлечённо старается. Но студентов не напасёшься: их просто меньше, чем нужно. А тем более не хватает студентов с хорошо думающей головой. Поэтому компании медленно, но верно начинают смотреть кандидатов около 30 и старше. Да, они уже не такие «на всё согласные», но они знают, чего хотят. Конечно, негласный возрастной ценз и неверие в то, что человек в 30 может куда-то эффективно переучиться, никуда не исчезают. Но когда на рынке мало хороших студентов, кого еще рассматривать и брать?
Самое главное для джуна — уметь гуглить и не бояться спрашивать непонятное, просить помощи у живых людей. Такие джуны быстро растут. Молчуны растут намного медленнее, это логично: как расти, если ты знаешь меньше правильных решений и собственных ошибок, чем твой коллега-активист?
По хард-скилам: джун джуну рознь. «Яндекс» будет требовать от вас алгоритмов, маленькая студия — умения делать хоть что-то, маленькая и гордая студия — уметь делать простое, но очень хорошо. Нужно смотреть на конкретные требования и пробовать. Нет универсальной формулы технических навыков, с которыми вас возьмут. Но есть то, что помогает на любом уровне — кругозор в Computer Science.
Что предложат джуну: в Москве и Санкт-Петербурге джун любого направления в разработке может иметь 30-100 тысяч рублей на руки. Просто за 100 у него будет минимальный опыт работы и например невероятная алгоритмическая подготовка. А за 30 легкая стажировка или парттайм работа. Скорость роста дальше зависит от самого джуна и компании, не все умеют вовремя поднимать деньги джунам. А джуны не всегда приходят с запросом про деньги. «Плюшки» у всех примерно стандартные: пресловутые «печеньки», ДМС, фрукты какие-нибудь с фитнесом, компенсация обучения. Бывает больше и лучше, бывает меньше».
Вместо заключения: что нужно, чтобы получить должность младшего программиста
О требованиях работодателей к джунам мы узнали благодаря анализу вакансий и комментарию HR-эксперта Вероники Ильиной. Чтобы соответствовать этим требованиям, достаточно единственного фактора. Вам нужно развиваться: изучать программирование и смежные дисциплины, нарабатывать гибкие навыки. И не забывайте рассылать резюме и ходить на собеседования, без этого найти работу не получится.
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
17 вопросов джуну: что должен знать Junior-разработчик
Что должен знать Junior-разработчик, чтобы получить должность или удержаться на уже «завоёванной» позиции?
Джун — это уже пусть и младший, но специалист. Подразумевается, что он самостоятельно умеет писать код, может справиться с простыми задачами сам, а со средними по сложности задачами — под присмотром ментора.
Кто-то говорит, что требования завышены, и в 2020 году младший программист должен знать то, что знал Middle в нулевых. Кто-то парирует аргументами о росте конкуренции, сложности задач и, соответственно, требований.
Что касается технических требований к джунам, то в последние годы они действительно выросли. Профессия программиста стала доступнее из-за курсов, и рынок переполнился начинающими разработчиками. Поэтому компании начали выставлять определённые требования, чтобы найти из общей массы тех, кто лучше других.
Например, теперь на позицию начинающего front-end разработчика недостаточно просто знать JavaScript, HTML5/CSS3: нужны базовые знания одного из популярных фреймворков (React, Vue, Angular). Кажется, что со временем требования будут расти ещё сильнее.
Мы разобрались, что должен знать Junior-программист в 2020 году, и собрали общие вопросы с собеседований, по которым работодатели определяют, дотягивает кандидат до нужной планки или нет.
Hard skills
Почему вы выбрали этот язык программирования?
Вопрос нехитрый, но джун должен хорошо понимать, где лучше использовать один язык, а где отдать предпочтение другому, какие у выбранного языка сильные и слабые стороны.
Где проходили обучение, участвовали ли в реальных проектах?
- опыт некоммерческих проектов, в основном небольших проектов, реализованных в рамках обучения;
- Pet-проекты, база работ на GitHub (само наличие проектов + качество кода);
- участие в хакатонах и конкурсах (особенно победы);
- посещение профильных мероприятий: митапов, конференций, лекций;
- сертификаты об окончании курсов или изучения технологий и пр.
Назовите принципы ООП
Старо как мир, но всё так же актуально. Держите шпаргалку по принципам ООП: там всё разложено по полочкам. Если вы хорошо разбираетесь в ООП, можете рассказать о своём опыте их применения на практике. Идеально, если вы также расскажете, почему те или иные принципы не стоит применять в некоторых ситуациях.
Какие алгоритмы сортировки вы знаете? Напишите код с использованием быстрой сортировки.
Ох уж эти алгоритмы сортировки — понять бы, где они пригодятся в реальной жизни. А зачем вообще Junior-разработчику это знать? Тут всё просто: понимание принципов и гибкость мышления. Опять же, с помощью небольшого примера вы покажете, что владеете синтаксисом языка и умеете объяснять, что происходит в вашем коде.
Какие технологии вы знаете?
Для работы на реальном проекте мало знать сам язык программирования. Младшему разработчику необходим большой багаж знаний. Если мы рассматриваем разработчика на Java, кроме самого языка, необходимо иметь хотя бы начальные знания о Spring, базах данных, SQL, системах контроля версий. Это не означает глубокое изучение всех аспектов, но представление о работе с этими технологиями быть должно, даже если нет реальной практики. Зачастую разница между Middle- и Junior-разработчиком — это реальный опыт.
Если говорить о знании конкретных технологий, от начинающего разработчика требуется опыт разработки на каком-то классическом языке программирования со строгой типизацией — подойдёт Java, C++, C#. При этом не так важно, на каком языке программирования придётся писать в будущем: синтаксис языка выучить легко, а вот понимание, что «можно» делать, а чего «нельзя» — нет.
Расскажите, с какими IDE вы работали
Достаточно назвать одну, но хорошо в ней разбираться: какие редакции есть, как подключить библиотеку к проекту, чем выбранная среда разработки лучше других, какие плагины вы использовали, etc. Это то, что должен знать Junior-разработчик.
Есть ли опыт работы с базами данных? Сколько нормальных форм вы знаете и чем они отличаются?
Знать, как обращаться к БД, нужно, а вот что касается нормальных форм — это, скорее, плюс, чем необходимость. Будет хорошо, если вы назовёте СУБД, с которыми работали, обозначите их ключевые особенности.
Также к навыкам стоит добавить SQL. Да, на SQL сейчас никто не пишет, но без SQL невозможно понимание логики работы СУБД.
У вас был свой проект? В чём заключалась задача и как вы её решали?
Чтобы стать Junior-разработчиком, нужно знать теорию и применять её на практике. Разумеется, вы как джун уже должны были что-то писать, будь то на курсах или для себя. Перед собеседованием стоит разобрать один из самых сложных проектов, вспомнить, какие проблемы возникали в процессе работы над ним, и как вы их решали.
Какие методологии создания продукта вы знаете? Назовите несколько принципов Agile
Да, вам стоит почитать об Agile. Даже если вы твёрдо уверены, что никогда не столкнётесь с командной разработкой, поверьте — столкнётесь. Это не то, что обязательно знать Junior-разработчику, но будет плюсом, если вы разбираетесь.
Есть ли опыт работы с Git? Какой веб-сервис для хостинга проектов вы используете?
Неважно, GitHub это, GitLab или BitBucket. Интервьюера интересует главное — разбираетесь ли вы в системе контроля версий.
Также вас могут попросить решить несколько несложных задач
Минимальный испытательный набор состоит из трёх тестов.
Во-первых, оценивается логическое мышление соискателя. Для этого человеку дают несколько достаточно простых задач, которые позволяют проверить, может ли кандидат выполнить обобщение или сделать выводы из поступившей информации.
Во-вторых, смотрят, как кандидат усваивает информацию, как работает его внимание и память. Обычно перед разработчиком ставится задача из 5–6 вводных пунктов, после чего идёт обсуждение её решения. Кандидат должен резюмировать задачу, описать своё решение, а затем сделать выводы.
В-третьих, по косвенным признакам, оценивается коммуникабельность кандидата — развитие его речевых навыков и способность работать в команде. Часто от соискателей на Junior-позицию требуется проактивность (её оценят, предложив несколько «поведенческих» задач) и скорость мышления.
Soft skills
Вы командный игрок?
Коммуникативные навыки — одни из важнейших, и даже если вы разработчик-одиночка, акцентируйте внимание на том, что вы с удовольствием приобщитесь к командной работе.
Даже опытные разработчики могут ошибиться с оценкой сроков, но они знают, как с этим быть — сразу сообщают менеджеру, обращаются за помощью к коллегам. Джуниор с неразвитыми soft skills промолчит и будет пытаться решить вопрос самостоятельно, в результате ничего толком не сделает и только потратит время.
В удалённой работе гораздо большую роль начинают играть soft skills. Гибкие навыки — это не только умение общаться с коллегами, но и банальное уважение к коллегам, к примеру, в чатах — когда ты отмечаешь коллегу, дублируешь сообщение, которое могло потеряться, и закрепляешь важные ссылки на самом верху.
IT-сфера изменчива, постоянно появляются новые технологии. Готовы ли вы всё время учиться?
Все понимают, что у младшего разработчика нет большого опыта и, скорее всего, нет глубоких знаний фреймворков. Поэтому на собеседовании больше внимания уделяется его soft skills: насколько разработчик мотивирован, готов ли он обучаться.
Каков ваш уровень английского языка?
Для нас, в EPAM, важным фактором является также уровень английского языка — не ниже Intermediate, поскольку после обучения можно попасть на проект с распределённой командой, с разработчиками из других стран.
Кроме того, аутсорсинговые компании зачастую работают с иностранными заказчиками, организовывают с ними встречи и созвоны. И вообще, читать и писать документацию стоит на английском, да и на Stack Overflow лежит всё, что нужно знать Junior-разработчику. Поэтому перед собеседованием обязательно подтяните английский язык.
Умеете ли вы справляться со стрессом?
Часто младший разработчик сталкивается с трудностями, на которые он тратит много сил и времени из-за отсутствия опыта. Поэтому просто необходимо уметь понижать свой уровень стресса, когда это требуется, иначе обучение затянется.
Если возникла проблема, как вы будете её решать?
Это больше вопрос на самостоятельность, нежели на способы решения.
Хочется поделиться советом: прежде чем идти к более опытным коллегам с вопросом, постарайтесь сами разобраться в проблеме. Во всех командах очень ценится, когда человек подходит не просто с вопросом «А как это сделать?», а уже обладает какой-то информацией, прикинул варианты решения и обращается за советом, как решить проблему правильнее.
Можете ли вы оценить время выполнения задачи?
Да, это то, что должен уметь Junior-разработчик уже с кое-каким опытом, но на стадии обучения вы должны были получить хотя бы базовый навык оценки сроков.
У нас сотрудники работают удалённо. Поэтому важно грамотно распределять время для решения задач, уметь сосредотачиваться, оценивать сроки и соблюдать их.
Что должен знать Junior-разработчик? Отвечают эксперты

Говоря о необходимых навыках, сразу важно прочертить границу между джуном и стажёром, поскольку эти роли достаточно часто путают.
Стажёр — человек, который только учится, часто он не имеет опыта разработки. Со стажёрами мы в компании чаще всего имеем дело на наших стажировках, которые мы в разных форматах организовываем с 2012 года. Как правило, значительная часть их аудитории — это студенты без опыта работы. Конечно, если стажёр хорошо себя показывает, мы можем пригласить его на собеседование, а по итогам собеседования даже взять его в компанию, если есть надежда, что он за пару месяцев выйдет на уровень джуна. Но далеко не все стажёры так быстро дорастают до этого.

Тем временем джун — это уже пусть и младший, но специалист. Подразумевается, что он самостоятельно умеет писать код, может справиться с простыми задачами сам, а со средними по сложности задачами — под присмотром ментора. Соответственно, такой специалист обязан обладать уверенными знаниями как минимум одного языка и фреймворка. Да, его знания, скорее всего, не будут глубокими, но он должен знать основы. Значительная часть сил джуна уходит на освоение нового. Ведь чтобы стать мидлом и выйти на новый уровень оплаты своего труда, джуну придётся освоить несколько фреймворков пусть и поверхностно, глубоко изучить как минимум один фреймворк, возможно, подготовиться и сдать экзамен по сертификации, получить опыт в разных проектах. Соответственно, важнейшими soft skills для джуна (да и для любого ИТ-специалиста вообще) будут навыки самообучения, навыки и опыт решения любых проблем, самодисциплина и мотивация к обучению.
Если рассматривать hard skills, то, наверное, нужно упомянуть такие профессиональные навыки, как умение искать информацию в поисковых системах, знание средств коллективной разработки (Git и другие), знание IDE, языка и фреймворка.
Завышены ли требования к джунам? Уверен, нет. Всё проясняется, если разделить понятия стажёр и джун и рассматривать джунов, как младших специалистов, а не просто тех, кто начал учиться.
Junior-разработчику, как в принципе и любому специалисту в сфере ИТ, важны такие качества, как ответственность, стремление к профессиональному росту, умение управлять рабочим временем и работать в команде. Кроме того, от начинающих разработчиков дополнительно ждут умения быстро осваивать новый материал и вникать в суть задач.
Требования к hard skills будут зависеть от направления. Например, мы уже подробно рассказывали, что работодатели ждут от Junior-Python-разработчика. Для таких специалистов это чаще всего знание языка программирования Python, алгоритмов и структур данных, опыт работы с базами данных и фреймворками.
Современные требования к Junior-разработчикам не кажутся мне завышенными. Во-первых, требования очень отличаются от компании к компании. Нужно также иметь в виду, что в описании вакансий обычно пишут портрет идеального соискателя, на деле же готовы брать кандидатов не со всеми перечисленными навыками. Во-вторых, большинство работодателей понимают, что любого джуниор-специалиста придётся учить, поэтому хотят от кандидатов в первую очередь бойкости и заинтересованности.
В технических навыках обычно требуется наличие какого-то (хотя бы учебного) опыта программирования, знакомство с основными инструментами, умение решать типовые задачи. Для получения даже этих навыков придётся постараться. Разработка имеет относительно высокий порог входа по сравнению с другими ИТ-профессиями, но планка по найму в последние годы, скорее, снижалась, чем наоборот.

По нашему опыту в последние годы требования к Junior-разработчикам у нетоповых компаний снизились. Связано это с кадровым голодом, вызванным, с одной стороны, ростом рынка, с другой, демографическим провалом девяностых–начала 2000-х.
В целом для джуна, планирующего работать в прикладной разработке, требования можно определить следующим образом:
Основные хард-скиллы:
- Знать синтаксис языка, на котором предстоит работать.
- Знать основу стандартной библиотеки языка и представлять её структуру в целом.
- Понимать принципы работы технологической платформы и среды исполнения (например jvm).
Дополнительные хард-скиллы:
- Понимать принципы работы реляционных СУБД, иметь навыки работы с ними.
- Знать основы веб-разработки.
- Понимать, как в целом устроен мир: как работает сетевое взаимодействие, какая инфраструктура существует в интернет- и корпоративных сетях, понимать отличия парадигм программирования, скриптовых языков от компилируемых и т. д.
Практические навыки:
- Уметь решать простые прикладные задачи, т. е. применять знания, перечисленные выше, с пользой.
Софт-скиллы:
- Умение слушать, воспринимать постановку задач и пояснения, не упускать детали, но и не зацикливаться на них.
- Способность и желание обучаться в процессе работы.
- Умение задавать вопросы и в целом формулировать мысли.
- Любознательность и стремление к развитию.
- Ответственность.
Как правило, у всех ребят, приходящих к нам на собеседование, всё в порядке с основными хард-скиллами, учитывая, что они предварительно проверяются простейшим тестовым заданием.
Большинство же отклонений по результатам собеседования происходит по причине отсутствия практических навыков или критичных софт-скиллов, таких, как умение слушать.
Это не самые высокие требования: могу с уверенностью сказать, что 10-15 лет назад требования были значительно серьезней. Отрасль была менее лояльной к новичкам, готовность брать на работу, платить не самую низкую зарплату и учить была у единиц компаний. Сейчас же все, даже самые небольшие софтверные и не только компании, готовы вкладываться в обучение вчерашних студентов, несмотря на все сопутствующие риски. Всё, что нужно джуну сегодня, — общая адекватность и минимальные знания технологий.
Выводы
Мнения насчёт того, завышены требования к джунам или нет, очень разнятся. Но практически все эксперты сходятся в том, что Junior-разработчик должен знать о преимуществах и сферах применения выбранного языка или технологии, уметь работать с Git, знать основные алгоритмы, библиотеки и фреймворки в своей сфере, быть в курсе возможностей хотя бы одной IDE, знать английский не ниже уровня Intermediate и уметь работать в команде.
Советы сеньоров: как прокачать знания junior C++
Советы сеньоров — постоянная рубрика на DOU.UA, в которой опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске сеньоры говорили о C++.

Алексей Цой, Senior Developer в Luxoft Ukraine
14 лет опыта
Начинающему программисту необходимо как можно больше времени посвящать изучению новых технологий, библиотек, в том числе и классических, таких как Boost, которые используют многие программисты. Очень важно уделять самообразованию достаточно времени, потому что количество нетехнических задач, митингов и коммуникации разных видов, будет увеличиваться, но без технических знаний молодой специалист просто не будет расти.
Поэтому в целях самообразования очень пригодится свой «домашний» проект. На этой тестовой площадке вы сможете принимать абсолютно все решения. Начиная с требований, процессов и планирования и заканчивая стеком технологий, имплантацией функционала и его тестированием. Экспериментируйте, применяйте новые подходы, технологии, паттерны проектирования — делайте все, что считаете нужным и интересным. Ведь в реальных проектах такая свобода действий у новичков встречается крайне редко.
Насчет качества сделанной работы. Стремитесь давать грамотные оценки, решайте задачи минимальным количеством кода и не допускайте в нем багов. Воспринимайте каждый конкретный баг как свое личное поражение.
Естественно, в этом вам помогут книги, ставшие классикой. Это Герб Саттер и его «Exceptional C++», «More Exceptional C++» и «Exceptional C++ Style». Это Андрей Александреску и его «Modern C++ Design: Generic Programming and Design Patterns Applied» и «C++ Coding Standards: 101 Rules, Guidelines, and Best Practices», написанная вместе с Саттером. И, конечно же, книги Скотта Майерса.
А вот чего не следует делать, так это браться за задачи, в которых не понятна их постановка. Это относится не к технической части, каким образом написать код, а именно к требованиям. Задавайте вопросы. Иначе есть риск сделать бессмысленную вещь, потратить проектное время, создать угрозу срыва дедлайнов. Такое не понравится никому.
И напоследок, более философское. Ответственно подходите к поиску места работы. Не стоит тратить свое время и силы на проекты, которые вам не нравятся, не интересны, кажутся неактуальными. Ведь без интереса в работе вероятность профессионального развития очень низка. И не только в IT.

Андрей Каличак, C++ Competence Lead в Perfectial
14 лет опыта
Язык С++ — один из древнейших, и по нему существует бесконечное множество документации, уроков, советов, тренингов и курсов. Несмотря на то, что некоторые могут одолеть этот язык за 21 день, я уверен, что большинство программистов учатся его использовать правильно и эффективно постоянно.
Очевидно, что для изучения С++ необходимы крепкие знания его предшественника — языка С. Именно с него и стоит начать знакомство с языком. С/С++ — это вообще неразлучная пара, и они всегда вместе на многих проектах и собеседованиях.
Для начинающего программиста очень важно как можно быстрее расширить свои знания. Как только будет получен критически минимальный порог знаний по стандарту языка, смежным базовым технологиям его использования (XML, DB, basic patterns/idioms), и это закрепится первым опытом, тогда свои знания можно углублять в выбранном направлении.
Не буду оригинальным и посоветую почитать в первую очередь классический труд Б. Страуструпа. И лишь потом, имея за плечами несколько килобайт написанного кода, можно приступать к более специализированным материалам, к примеру книгам Скотта Мэйерса или Герба Саттера. Они написаны в виде отдельных уроков, очень легко усваиваются. При определённом опыте и понимании это будет хорошим подспорьем в дальнейшем становлении профессионала.
Но, к сожалению, лишь прочитав книги или документацию, невозможно стать 25-летним синьором, поэтому очень важно набить себе шишки и получить бесценный опыт. Чем больше — тем лучше. Этот опыт следует перенимать у своих старших тиммейтов. Я бы даже заменил слово «перенимать» на «выгрызать». Надо получать как можно больше советов, конструктивной критики, мастер-классов от тех, кто может поделиться своими знаниями. Нужно задавать много вопросов, даже если навскидку вопрос кажется глупым.
Понятно, что вряд ли кто-то изъявит собственное желание менторить тебя, поэтому тут следует быть очень настойчивым и не стесняться просить старших ребят сделать код-ревью или помочь правильно имплементировать паттерн. Оптимально, если у тебя будет официальный ментор, в обязанности которого будет входить помощь в твоём обучении. Тогда все стороны будут заинтересованы в конечном результате. Но всё же крайне важно понимать, что это твой личный путь и только ты отвечаешь за его направление и результат. Организация обучения, скорость продвижения, его направление — это то, что решаешь только ты. Не жди — действуй! Время бесценно.
Обязательно паралельно необходимо осваивать последние стандарты и технологии — C++11/14/17, библиотека Boost, Gtest, Git. Обрети уверенность в использовании хотя бы одной IDE (поиск, дебаг, рефакторинг). Это всё значительно повысит твою ценность на рынке труда.
И несколько маленьких советов, которые бы мне помогли в начале карьеры:
- Выделяй себе время на обучение: понятно, что проект может занять всё свободное время, и на первых порах действительно все мысли лишь об удачном старте, но потом, когда войдешь в спокойное русло, не забывай постоянно увеличивать свои знания.
- Отдавайся работе чуть больше, чем требуется: изучи часть чужого кода и найди баг, найди не очевидное, а оптимальное решение, углубись в новую библиотеку больше, чем требует этого выполнение задачи.
- Выпрашивай себе всё более сложные задачи, даже на первый взгляд непосильные для тебя: именно так и развивается разработчик. Плюс это хорошая мотивация для тех, у кого повышено чувство собственного достоинства и амбиции.
- Разбирай open-source код: там можно подсмотреть и научиться многим вещам.
- Старайся посещать собрания сообщества разработчиков: тут можно позадавать вопросы на более узкие темы и познакомиться с экспертами в разных сферах.
- Регулярно (не обязательно часто) проходи онлайн-тренинги или уроки: это разнообразит твою подготовку и позволит взглянуть под новым углом на некоторые вещи.
- Держи баланс во всём.
Главное — помнить, что никто не стал экспертом сразу. Все прошли через определённые этапы развития, хоть и в индивидуальном русле. И ещё — это всё должно быть в кайф!

Володимир Корнийчук, Senior Software Engineer в Infopulse
12 лет опыта
Зачем?
Прежде всего я бы посоветовал новичку ответить для себя на вопрос: «Почему я хочу писать на С++?». Есть целая куча причин выбрать другие языки программирования — многие из них легче в изучении и ежедневном использовании. Но в С++ есть то, благодаря чему он держится среди лидеров. С++ выбирают за его быстродействие, эффективность, контроль аппаратных ресурсов, кроссплатформенность, распространенность. Если эти вещи соответствуют вашим идеалам — идите в бой. Если хочется, чтобы «раз-раз и в продакшн» — возможно, стоит выбрать что-то попроще?
Кто и когда?
Для понимания философии С++ стоит немного почитать об истории его создания и взгляде на этот язык его авторов. Еще не читали книг Страуструпа? Самое время. Совет банальный, но без этого действительно никак. Только берите последние издания, а не первые.
Стоит читать стандарт?
Стандарт языка программирования С++ в одной из последних редакций, попавшейся мне на глаза, насчитывает 1622 страниц. Как это все прочитать (с учетом стиля документа) и остаться в здравом уме, я лично не представляю. Изучение С++ по стандарту — худшая идея в мире. Есть много книг, объясняющих С++ проще и с теоретической, и с прикладной точки зрения. Можно начать со списка на Isocpp. А стандарт оставьте разработчикам компиляторов.
Подберите удобную среду разработки. Я использую Visual Studio с дополнительно установленным плагином Visual Assist X. Эта связка знает о языке С++ больше всего остального, что я перебрал. Знаю людей, пользующихся VS + ReSharper, CLion, Qt Creator, Vim. Мне не подошло, но вы попробуйте и тогда сможете составить собственное мнение.
Debugger
Научитесь пользоваться дебаггером (как встроенным в вашу IDE, так и внешним, типа GDB или WinDbg). Это, на удивление, мощные инструменты, иногда позволяющие делать невероятные вещи. Большинство разработчиков используют их довольно примитивно, в режиме «поставили точку остановки — остановились на ней», даже не зная о возможности удаленной работы, time-travel debugging, подтягивании внешних символьных файлов и кода, остановки по модификации адреса памяти и т.п.
Профайлер
Эффективность и скорость — одни из главных причин использования С++ в современных проектах. Без профайлера вы никогда не догадаетесь, где именно в вашем коде находится «узкое место». Для простых случаев подойдет та же Visual Studio, для более сложных — Windows Performance Analyzer или инструменты от Intel. Не пытайтесь угадать, что именно у вас работает медленно. Я видел, как на это попусту тратились недели. Просто сделайте замер профайлером и осознайте факты. В большинстве случаев проблема будет совсем не там, где вы ее ожидаете.
Инструменты статического анализа
Сейчас есть много инструментов, позволяющих указать программисту на возможную ошибку в коде на C++. Есть предупреждения стандартного компилятора, есть новые возможности Visual Studio по анализу С++ кода на соответствие рекомендациям C++ Core Guidelines, есть анализ кода в Visual Assist X, есть Cppcheck и Clang. Много чего есть, вон одна только Википедия сколько всего знает. Обязательно выберите себе что-то и используйте. Особенно хорошо эти инструменты работают в сочетании с системами непрерывной интеграции.
Специализированные инструменты разработки
Какую бы отрасль программирования вы не выбрали — скорее всего вы не будете первым, кто начал в ней работать. Ваши предшественники написали много полезных утилит — попробуйте найти их и использовать. Есть хорошие программы для помощи системному программисту, есть полезные утилиты для графики и геймдева, есть куча библиотек с алгоритмами. Не пишите своего велосипеда, пока не потратите крайней мере несколько часов на поиски уже существующего.
Держитесь на острие прогресса
Найдите себе какое-то источник новостей о С++. Язык развивается, выходят новые стандарты и компиляторы. Лично я читаю новости на Isocpp, обсуждение — на Reddit, смотрю видео с конференций C++ Now и CppCon. Это требует не так много времени, как может показаться, но дает возможность планировать как развитие вашего проекта, так и ваше личное.

Николай Родин, С++ Developer в Dev-Pro
8 лет опыта
Мой выбор, когда я заканчивал институт 18 лет назад, был невелик. Web-направление только набирало обороты, и у меня фактически был выбор только между Visual C++ и Delphi. Сегодня же вариантов очень много, а применение С++ найти не так легко. В стремительно развивающейся Web-индустрии ему по-прежнему нет места. Вытесняется он и из кроссплатформенного программирования. Если вам интересен этот язык — осталось всего несколько направлений, в которых С++ (и С) еще удерживают позиции (подробнее об этом можно прочитать здесь):
- Поддержка легаси проектов под Windows — речь о проектах, которым не один год, а может быть и не один десяток лет. Возможно, некоторым не по душе это направление, но саппорт важен и нужен. Новые проекты появляются редко, в них GUI пишется в основном с использованием библиотеки Qt.
- Game Development — здесь C++ актуален, ибо важно быстродействие в сочетании с определенной безопасностью.
- С++ под Linux — здесь С++ по-прежнему востребован ввиду развитости экосистемы. GUI вполне можно писать на Qt, драйвера и некоторые сетевые приложения пишутся даже на С.
- А. Embedded — здесь С и С++ удерживают твердые позиции, особенно если речь заходит о системах, работающих в реальном времени и на ограниченных мощностях.
Б. Internet of Things все быстрее набирает популярность, активно использует C++, здесь можно добиться больших успехов.
Важно отметить, что язык C++ продолжает развиваться: от версий C++98, C++03, C++11 (C++0x), C++14 (C++1y), C++17 (C++1z) двигается к C++20 в 2020 году.
Кому стоит его изучать
Перед тем как приступать к изучению С++, разумно спросить себя, что именно вы собираетесь делать, действительно ли планируете развиваться в одном из направлений из списка выше.
Я бы порекомендовал этот язык тем, кто имеет тягу к написанию программ на Linux, стремится в GameDev или хочет стать Embedded Engineer и работать в перспективном IoT. Язык подойдет тем новичкам в IT-индустрии, которые считают себя перфекционистами и ищут как можно большего контроля над тем, что они делают.
Если же человек стремится скорее конструировать, чем программировать, ждет быстрой реализации своих идей — тогда лучше смотреть в сторону web и скриптовых языков. Да и изучить тот же JavaScript гораздо проще.
Как изучить С++
Осваивать C++ я предлагаю от простого к сложному, начав с С. С считается низкоуровневым и поддерживает в основном процедурную парадигму. Но на его примере можно получить представление об указателях и прямой работе с памятью. Вы также научитесь мыслить битами и тактами, а не только абстракциями языка программирования и шагами алгоритмов. Помимо того, операционные системы до сих пор имеют API, написанный на С, и с ним нужно учиться взаимодействовать.
С++ поддерживает и процедурную, и объектно-ориентированную парадигму (ООП).
Основным при переходе к ООП является поворот мышления от «пассивных» данных и набора процедур для их обработки к «активным» данным, предоставляющим набор операций для работы с ними и скрывающим детали своей реализации. Также важная часть С++ — шаблоны, с помощью которых реализуются в том числе «умные» указатели, позволяющие существенно повысить безопасность С++ кода. В целом С++ является сложным языком и требует существенных усилий на изучение.
Полезная литература
Базовой книгой для изучения С считается книга Брайана Кернигана и Денниса Ритчи «Язык программирования С». Из нее можно почерпнуть информацию о стиле написания кода, основных контейнерах и обработке ошибок. Книга также приучит к ясности изложения мысли, потому что авторы всегда предлагают сначала писать комментарии, а потом уже под ними блоки кода. Это достаточно полезный навык независимо от языка.
Для изучения С++ желательно прочитать больше литературы. С++ я изучал по следующим книгам:
- Bjarne Stroustrup «The C++ Programming Language»;
- Джефф Элджер «C++: Библиотека программиста»;
- Скотт Майерс «Эффективное использование C++»;
- Андрей Александреску «Современное проектирование на C++».
Советы новичкам
Советы стандартны и практически не зависят от языка: изучайте классические алгоритмы и структуры данных, паттерны проектирования. Асинхронное программирование и многопоточность лучше осваивать не сразу, а несколько позже — после приобретения определенного опыта. Ясно излагайте мысли в виде кода, не забывайте о кратких комментариях, минимизируйте содержимое лямбд и избегайте копипасты. Аккуратность написания кода, строгость обработки ошибок и логирование также очень важны — написанный код нужно будет саппортить.
Помните, что когда попадаете в IT, как бы не готовились заранее — начинаете чувствовать пробелы в знаниях и опыте, которые даже не касаются технической квалификации. Soft skills действительно играют роль, и многие из них вы освоите, только присоединившись к реальному проекту. Здесь есть процессы, тестирование, проджект-менеджер, который держит руку на пульсе, следит за сроками и приоритетами. Иногда это тяжело принять, но окончательное решение не за тем, кто пишет код, а за тем, кто несет за него ответственность.
Присоединившись к команде, учитесь на примере того кода, который уже существует на проекте. Работающий код, каким бы он не был, — это наилучший способ изучения С++ и любого другого языка программирования. Кам минимум поймете, как делать не нужно. Надеюсь, у вас все получится.

Михайло Рудый, Senior Software Developer в Vakoms
6 лет опыта
Поскольку ты уже встал на этот путь, то, наверное, понимаешь, что выбрал один из лучших языков, на котором можно писать все, начиная от hardware, заканчивая web.
Я бы хотел поделиться несколькими советами.
Указатель — твой лучший друг. Указатели, указатели, указатели и еще раз указатели, потому что это наше все и они повсюду. Чем больше ты знаешь о них, тем лучше.
Memory management. Научись правильно работать с памятью. В C++ за память отвечаешь ты сам. Пока ты не скажешь «удалить» — никто за тебя это не сделает. Не хочешь сам управлять памятью — тогда учи smart pointers.
Классы и три страшные буквы (ООП). Работа с классами — это очень круто, потому старайся знать и уметь использовать все возможности классов и ООП.
Не выдумывай велосипед. В стандартной библиотеке есть уже много готовых алгоритмов, особенно для работы с контейнерами. Поэтому перед тем, как писать свой метод, сначала проверь — возможно, он уже готов.
В ногу со временем. C++, как и все другие языки, развивается, поэтому не забывай следить за изменениями в новых стандартах. Там появляется много интересного и нужного.
Design patterns. Это мегакрутая вещь. Начни свое знакомство с ними с простого и двигайся к более сложным, заканчивай архитектурными. Главное, научись их правильно применять.
Просто, как двери. Реализуй задачи как можно проще. Это будет удобно для всех: и для тебя, и для твоих коллег по проекту, и для тех, кто будет продолжать после тебя.
Заимствуй. Хочешь улучшить свой код — попробуй найти хотя бы 2 решения подобной задачи. Возможно, ты найдешь там что-то полезное для себя.
Команда. Научись работать в команде. Без хороших отношений работа менее качественная. Учись понимать других членов команды, независимо от их опыта.
Ментор. Это твой помощник, который подскажет, даст совет и обругает, если ты делаешь что-то очень неправильно. Он нужен.
Не бойся. Не бойся тяжелых тасок (иногда они только кажутся тяжелыми). Не бойся спросить совета. Не бойся сказать: «Я уже все попробовал и не знаю, как это сделать. Подскажите, куда двигаться».
Будь уверен. Умей отстаивать свою точку зрения. Иногда твоя идея или вариант реализации может быть лучше, чем у других, но нужно это доказать и объяснить.
Критика — это не зло. Учись воспринимать критику, если она уместна. Будь стоек к ней. Умей взять с нее как можно больше полезного для себя.
И напоследок главное. Практика — залог успеха. Чем больше практики — тем лучше, тем больше опыт, тем быстрее твои пальцы сами «знать», что писать. Практикуйся как можно больше. Прочитал что-то интересное в книге или статье услышал от кого-то — попробуй реализовать, поэкспериментировать. Так ты быстрее все запомнишь.
И знай, C++ невозможно изучить полностью Всегда будет что-то новое, что ты не знаешь, поэтому не пугайся. Просто читай и постоянно практикуйся.