Как вырасти с Junior до Middle в условиях санкций или как стать Middle-разработчиком в 2022 году
2022 год стал переломным для российской экономики и российского IT-сектора. Компаниям нужно учиться работать в условиях санкций, которые особенно ударили по отечественному IT. На волне всеобщей паники специалисты начали эмигрировать из страны, а количество рабочих мест увеличиваться. При этом в России уже несколько лет ощущается нехватка IT-кадров.
По данным Russoft число IT-специалистов в России за 2020 год увеличилось на 12% и составило более 200 тысяч. В 2022 году SuperJob опубликовали исследование, в котором выяснили, что рост спроса на разработчиков в 2021 году составил 190%, а зарплаты выросли на 23.3%.
Зарплатные индексы специалистов в отрасли информационных технологий в период с 2010 по 2022 год. Источник: SuperJob
Сейчас разработчики сталкиваются с проблемой сохранения и приумножения заработной платы, продвижением по карьерной лестнице. При всем этом хочется опробовать силы на интересных проектах. Давайте разберемся, что сейчас происходит с IT в России и как использовать ситуацию с выгодой для себя.
Многие западные поставщики программного обеспечения уходят с российского рынка из-за санкций. О своем уходе и приостановке работы объявили такие гиганты, как Oracle, SAP, EPAM, Cisco, Microsoft, JetBrains и др. Из-за этой ситуации многие российские компании оказались в затруднительном положении, так как теперь нужно искать замену привычным инструментам.
Сейчас российский сектор IT учиться жить в условиях санкций и ищет альтернативное программное обеспечение, которое сможет покрыть основные потребности разработчиков. На самом деле импортозамещение в России продолжается c 2015 года, а доля российского ПО в государственных компаниях на момент 2019 года составляла 65% (источник: TADVISER).
Рост закупок российского программного обеспечения с 2014 по 2016 год. Источник: TADVISER
Зарубежные компании приостанавливают заключение новых договоров, но не расторгают старые. Это значит, что купленное ПО скорее всего будет работать. Следовательно, компетенции, которые были приобретены разработчиками, останутся релевантными. Найти работу не составит труда.
С 24 февраля наблюдается отток IT-специалистов из России (источник: CNews). Разработчики стараются уехать в Грузию, Сербию, Эстонию, Турцию. Многие пытаются запросить релокацию в западные страны или ищут работу в международных компаниях.
Однако, сейчас правительство РФ старается удержать IT-специалистов в стране и разрабатывает новые законопроекты, которые обеспечивают ITшников и IT-компании определенными преференциями. Так 2 марта этого года был выпущен Указ «О мерах по обеспечению ускоренного развития отрасли информационных технологий в Российской Федерации». Он предусматривает отсрочку от военного призыва, льготную ипотеку и отсутствие налога на прибыль для аккредитованных в России IT-компаний и их специалистов. Однако, данные плюшки никак не отражаются на заработной плате ITшников и не компенсируют снижение курса российского рубля.
До сих пор не совсем понятно, как этот указ будет работать в наших реалиях. Мы постоянно мониторим ситуацию и делимся актуальной информацией в своем telegram-канале, поэтому рекомендуем подписаться, чтобы быть в курсе последних новостей.
Самое первое, что приходит на ум — релокация. Специалистам уровня middle гораздо проще релоцироваться из-за повышенного спроса на высококвалифицированные кадры. По этой причине переход от джуна к миддлу может стать пропуском для вас и вашей семьи в другой город или даже страну.
Сам по себе переход по системе грейдов является трудоемким процессом. Необходимо не только обладать определенными hard-skills, но и иметь достаточный опыт разработки и сильное портфолио с различными проектами. Путь от Junior-разработчика к Middle может занимать от одного года до трех лет.
Количество грейдов разнится от компании к компании, но мы рассмотрим шаблон junior, junior+, middle, middle+, senior.
Система грейдирования позволяет IT-специалистам профессионально развиваться, ведь все достаточно прозрачно: хочешь вырасти до Middle, выучи и освой определенный список компетенций. Основными критериями для перехода на следующий грейд являются:
- Полное понимание технологического стека, с которым придется работать на проекте;
- Хорошая теоретическая база;
- Умение писать тесты;
- Понимание методологий разработки и их особенностей;
- Способность разобраться в чужом коде;
- Опыт работать в команде;
- Умение грамотно оценивать затраты на выполнение задач и т.п.
Рынок IT постоянно растет, а следовательно нуждается в новых кадрах. Не только в сеньорах, но и в миддлах и джунах. Однако, переход от одного грейда к другому может занимать от одного до трех, а иногда и пяти лет. Для оценки сотрудников компании разрабатывают матрицы компетенций и собственные условия.
Однако, не все компании используют грейдирование. При трудоустройстве в государственные компании вы можете столкнуться с отсутствием системы грейдов. Как такового карьерного роста у вас нет, а задачи варьируются от тех, с которыми справиться junior-специалист, до тех, для которых нужен минимум senior. При этом зарплата оставляет желать лучшего и, как правило, ощутимо ниже рыночной. Все это приводит разработчиков к выгоранию, а некоторые и вовсе уходят из IT.
Возможно вы знакомы с историями, когда HR-специалист по-разному ведет себя с соискателями на позиции junior, middle и senior. К junior-разработчикам зачастую относятся предвзято и неохотно берут на проекты, а для перехода на следующий уровень нужен опыт коммерческой разработки и практика.
Отток IT-кадров из России освобождает рабочие места для новых специалистов и разработчиков, спрос на которых в стране только растет. По этой причине перед молодыми специалистами встает вопрос о приобретении новых компетенций и повышении профессиональных навыков. Для этого есть несколько способов.
Прокачать свои навыки и вырасти с Junior-разработчика до Middle можно с помощью самообразования, менторства или онлайн-курсов. Рассмотрим по порядку.
Самообучение — сложный и трудоемкий процесс, для которого необходимо обладать достаточной мотивацией и хорошим тайм-менеджментом. Кроме того, легко потеряться в том количестве информации, которая представлена в Интернете. Поднимать свои профессиональные скиллы таким способом лучше уже опытным разработчикам, которые имеют четкое представление о том, что, где и в каком объеме им нужно изучить или подтянуть. Из плюсов — большое количество профильных сообществ, бесплатных тренировочных сайтов (например LeetCode и CodeWars) и чек-листов.
Менторство же отличный вариант для тех, кто не любит заниматься в больших группах, а предпочитает индивидуальный план развития. Ментор — это преподаватель, который является практикующим высококвалифицированными специалистом. Вместе вы определяете ваши цели, составляете план занятий и работаете в этом направлении. Подходит для специалистов, которые хотят поднять свой грейд и получить фидбек от более опытного специалиста.
Онлайн-курсы — популярный и доступный для большинства вариант. Можно выбрать иностранные площадки, например Udemy, но будьте готовы к тому, что потребуется хорошее знание английского для того, чтобы усвоить материал в полном объеме. Обратная связь немного хромает, так как напрямую связаться с преподавателем у вас вряд ли получится, а вопросы придется задавать в профильной ветке на сайте.
Команда «Цифровых Привычек» предоставляет бесплатные курсы по Java, iOS и Android с последующим трудоустройством. Курс может пройти любой специалист с опытом коммерческой разработки от одного года. Все лекции и практики проходят в режиме онлайн. Длительность курса составляет 2 месяца, а лучшим студентам после окончания обучения предлагается оффер. Таким образом, за два месяца упорной работы вы сможете подняться до уровня Middle.
Для того, чтобы поступить на курс необходимо заполнить заявку на сайте Образовательного центра Цифровых Привычек и пройти техническое интервью.
Отзывы выпускников курса по Java. Источник: Образовательный центр
Помните, что во время кризиса нужно следовать плану, который был до него.
Разница между «джуном», «мидлом» и «сеньором». И что делать, чтобы перейти на уровень выше

Уровень разработчика не обязательно определяется многолетним опытом программирования: «джун» вполне может быть старше «сеньора», — всё сводится к профессиональным навыкам. Это не означает, что старший разработчик должен быть специалистом во всём, но можно с уверенностью сказать, что навыки у него гораздо более развиты, чем у разработчиков младшего и среднего уровня.
Но разработчиков различных уровней отличает нечто большее, чем умение собственно программировать. Так в чем именно кроются различия?
Знания
Очевидно, что старший разработчик обладает гораздо более обширными знаниями. Для младшего разработчика изучить шаблоны проектирования, архитектуру, автоматизацию тестирования, методы повышения производительности и обеспечения безопасности и т. д. — отличный способ сократить этот разрыв в знаниях.
Важно знать, как должно создаваться программное обеспечение. Но просто знать всё это — не значит быть разработчиком более высокого уровня. Знания — это не ключевое отличие, а лишь один из факторов.
Фото — Clem Onojeghuo, площадка Unsplash
Программирование
Несмотря на мнение большинства обычных людей, программирование — это не общение с компьютером. Программировать — значит общаться с людьми и отдавать указания компьютерам. Ведь код в итоге компилируется и превращается в нули и единицы.
Код должен нести в себе смысл для тех, кто будет работать с ним в будущем. Команда, подхватившая за кем-то другим проект, должна иметь возможность открыть его исходный код и начать работать над новыми функциями или исправлением ошибок. И здесь кроется существенная разница между «джуном» и «сеньором».
Разработчиков среднего уровня в этом сравнении я учитывать не буду, поскольку в отношении навыков программирования они представляют собой своего рода переходную область — скорее ближе к уровню старшего разработчика. В основном «промежуточное» положение определяется опытом, поскольку обычно «мидл» успевает пройти весь цикл разработки хотя бы раз, а также совершить множество простейших ошибок и извлечь из них уроки.
Как вычислить «джуна»
Младшие разработчики неопытны: иногда это выпускники, которые только начинают работать на полную ставку. В их голове основная задача — заставить код работать. Если приложение работает — значит, оно хорошее.
Писать простой код — это сложная задача. И младшие разработчики этого делать не умеют: обычно код у них довольно своеобразный. Узнать их можно по причудливым однострочникам и чрезмерно сложным абстракциям — так «джуны» стремятся показать себя и пытаются дать понять другим, насколько хорошо они умеют программировать. Но это неверный подход.
Младшие разработчики сосредотачиваются на «компьютерной» части кода, упуская из виду «человеческую».
Как пишут код «сеньоры»
Глядя на код старшего разработчика, можно подумать: и это всё? А где остальное? Достаточно опытный разработчик пишет простой, понятный и, возможно, местами даже чересчур прямолинейный код — и это одно из самых важных качеств, если говорить о программировании. «Сеньор» следует принципу KISS, гласящему, что код должен быть простым и понятным: «Keep it simple, stupid»
Поэтому у старшего разработчика совершенно другой подход к написанию кода: он учитывает удобство дальнейшей поддержки и масштабируемость. Это совершенно не похоже на мышление младшего разработчика: «сеньор» думает о тех, кто будет работать с кодом, а «джуну» важно в первую очередь заставить код работать.
Не программированием единым
Помимо навыков программирования, есть и другие факторы, которые могут подсказать, что за разработчик перед вами.
Младшие разработчики, как правило, выполняют самые простые и не самые важные задачи; они не занимаются разработкой архитектуры. Разработчики среднего уровня тоже не разрабатывают решения, а просто выполняют задачи, однако их меньше контролируют — если задание довольно типовое. А вот «сеньоры» могут разработать приложение совершенно самостоятельно.
Это не значит, что у старшего разработчика по ходу дела не возникает вопросов: у любого из нас каждый день появляется множество вопросов, и «сеньоры» тут не исключение.
Разница в том, что последние знают, как задавать правильные вопросы и что делать с полученными ответами. Менее опытные разработчики могут задавать правильные вопросы, если речь идет о привычных им задачах, но в более сложных случаях им приходится обращаться за помощью.
Старший разработчик никогда не теряется и знает, как правильно действовать, получив ответ на вопрос. Это не значит, что он не будет просить совета у других — иногда лучшим решением бывает именно обратиться за помощью к тем, кто имеет больше опыта в данной области.
Разработчик среднего уровня также должен уметь задавать правильные вопросы, если только это не очень сложные задачи, требующие глубокого уровня знаний.
А вот в случае «джунов» не следует ожидать, что они смогут задавать нужные вопросы: у них недостаточно практики, поэтому ими должны руководить более опытные коллеги. Младшего разработчика следует обеспечить необходимыми ресурсами или хорошенько подтолкнуть в правильном направлении.
Переход на следующий уровень
Мы все хотим совершенствоваться, в том числе профессионально. Но какие шаги можно предпринять, чтобы перейти на следующий уровень?
От «джуна» — к «мидлу»
Начинающие разработчики не обладают богатым опытом, поэтому важно хотя бы пару раз пройти весь цикл разработки — таким образом вы сможете встретить на своем пути множество ловушек и научитесь их избегать.
Что касается программирования — следует научиться писать простой код: представьте, что после вас над проектом будет работать другой человек. Кроме того, придется научиться заниматься отладкой — это углубит понимание того, что происходит во время работы программы.
Также необходимо ознакомиться с лучшими методиками и побольше узнать об архитектуре, производительности, безопасности и т. д. Закройте пробел в знаниях, отделяющий вас от среднего уровня.
От «мидла» — к «сеньору»
Разработчикам среднего уровня подняться выше может быть довольно сложно: некоторые остаются на этом уровне всю свою карьеру.
Старший разработчик знает, в каких случаях можно пойти на компромисс, и когда этого делать ни в коем случае нельзя — потому что он успел проверить это на собственном горьком опыте.
Чтобы перейти на уровень «сеньора», нужно быть готовым к выполнению задач, за которые никто понятия не имеет, как браться. Нужно знать и уметь больше, чем просто делать свою работу.
Кроме того, как старший разработчик вы должны помогать менее опытным: вы для остальных — спасательный круг, за который можно ухватиться, когда не знаешь, как что-то сделать.
В свете этого неудивительно, что «сеньоры» полностью владеют своим техническим стеком. Нужно не просто уметь программировать, а знать все инструменты и приложения, которые используются в нанявшей вас компании.
Заключение
Разница между «джуном», «мидлом» и «сеньором» заключается не только в многолетнем опыте. Да, можно с уверенностью сказать, что у последнего навыки гораздо более развиты, чем у разработчиков младшего и среднего уровня. Но знание — не самый важный фактор.
Опытные разработчики пишут более простой код и подходят к этому иначе. Но кроме того, чтобы уметь программировать, очень важно также знать, какие вопросы задавать и что делать с полученными ответами. Именно старший разработчик — тот человек, чей богатый опыт позволяет не растеряться и в любой ситуации найти решение.
«Джуну», чтобы расти дальше, нужно постараться научиться писать простой код и пройти через несколько полных циклов разработки. Чтобы подняться выше среднего уровня, нужно сосредоточиться на изучении чего-то большего, чем просто рутинные задачи по исправлению ошибок. Вы должны быть готовы брать на себя самые сложные задачи и полностью овладеть своим техническим стеком. Еще одна обязанность старшего разработчика — выручать менее опытных.
Напоследок процитирую Мартина Фаулера:
О переводчике
Перевод статьи выполнен в Alconost.
Alconost занимается локализацией игр, приложений и сайтов на 70 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.
/dev/energy
Сайт о том, как стать программистом и как с этим жить потом
Как развиваться Junior разработчику? Карьерный путь в IT
Меня не может не радовать то, как сильно вырос онлайн в разделе Как стать программистом, поэтому я решил написать свежую статью именно в этот раздел моего блога, чтобы закрепить успех. Поговорим о том, как происходит рост от Junior ввысь/вглубь мира IT.
Абсолютное большинство приходящих в сферу IT соискателей не стремятся оставаться на позиции младшего разработчика всю свою жизнь. Их цель — как минимум вырасти до стабильного, сильного разработчика уровня middle/senior. А кто-то пойдёт выше. И именно этот процесс хотелось бы обсудить в рамках статьи. Я постараюсь приводить примеры, основанные на своём опыте и опыте моих студентов.
Trainee
В современной индустрии IT с её перенасыщенным рынком понимание между Стажёром (Trainee) и Младшим программистом (Junior) смазалось. И многи часто путают эти два понятия, что неправильно.
Стажёром может стать любой человек практически с нулевыми знаниями (всё зависит от программы стажировки, в которой он участвует). Но чаще всего компаниям интересны кандидаты, которые уже примерно понимают, как устроен мир программирования и могут написать простые вещи типа циклов и ветвлений.
Чаще всего после курсов «с нуля» выпускники становятся именно стажёрами, так как у них по сути нет коммерческого опыта. В лучшем случае они могут стать Junior-ами (но об этом ниже).
Со стороны компании стажёр — это не рабочая единица, а материал для роста, возможность вырастить себе сотрудника. Для самого стажёра — весомый вклад в будущую карьеру, так как именно здесь он получает то, что ему нужно — опыт.
Чаще всего стажировки либо не оплачиваются вовсе (что, кстати, не совсем согласуется с ТК РФ), либо оплачиваются по минимальной границе. Но в текущей ситуации на рынке я бы рекомендовал обращать внимание на любые стажировки крупных компаний вне зависимости от финансовых условий — внимание стоит уделять условиям последующего найма и того, какие преференции даёт стажировка для кандидата.
В роли стажёра Вы
- До конца оттачиваете знание базовых вещей в языке программирования.
- Получаете несколько направлений роста от своих наставников.
- Начинаете двигаться в сторону уже относительно самостоятельного программиста.
Здесь и сейчас Вам важно набить руку в написании простых вещей, чтобы они не требовали у Вас постоянного подглядывания в документацию или Google.
Обязательно узнайте при поступлении на стажировку, как описываются и фиксируются условия успешного её завершения, а также какие знания и навыки Вы получите.
Для тех, кто хочет подробнее узнать о подходе компаний к найму стажёров, есть мой вебинар.
Junior
В условиях насыщенного рынка получение позиции Junior — это уже весомый успех. Он говорит о том, что в общей массе новичков Вы смогли выделиться. Эту картину надо не только сохранить, но и улучшить. В течение испытательного срока, который в нашей необъятной Родине длится обычно три месяца, Вам нужно будет сосредоточиться на следующих вещах (кстати, как и в позиции Trainee)
-
- Изучение процесса разработки в команде. Много общайтесь со старшими коллегами и узнавайте, как принято писать код, тестировать и отлаживать его, а также — как доставлять его на Production. Здесь Вы не только узнаете, как не попасть под раздачу во время Code Review, но и обнаружите множество новых для себя вещей, с которыми Вы ещё не успели познакомиться. Не переживайте — это нормально. Скорее всего, Вам предстоит узнать о таких вещах, как Git-Flow, Docker, CI, DI и прочие модные слова. Спросите у своих наставников о том, что лучше почитать/посмотреть на интересующую Вас тему, могут ли они рассказать Вам об этих вещах.
- Изучение нового и неизвестного. Узнать слова — только начало. Нужно изучать. Не бросайтесь на всё подряд. У Вас быстро сформируется список «пробелов». Приоритезируйте его вместе с коллегами и идите по шагам, убирая пункт за пунктом тогда, когда станете разбираться в них и применять на практике.
- Делайте больше. Додумывайте. Как бы ни хотелось надеяться на то, что ТЗ будут идеальными, а заказчики — лояльными, всегда и в каждой задаче будет оставаться место для небольшого подвига. Как говорил Колосс из вселенной Marvel: «Только несколько мгновений в жизни решают, герой ты или нет». Также и в задачах — добавление некоего небольшого, но полезного функционала увеличит ценность продукта и поднимет Вас в глазах пользователей.
- Ориентируйтесь на ценность, а не на код. Да-да, код сам по себе никому не нужен и не стоит ровно ничего. Он полезен тогда и только тогда, когда логика, следующая ему, создаёт функциональную ценность для пользователей. Поэтому думайте в первую очередь ценностями пользователей, как бы ни хотелось в первую очередь сделать красивую архитектуру и создать ещё пару тысяч классов. Это не отменяет качества кода, но делает его нужным, а не «опять айтишники обновления выкатили :(«.
- Общайтесь. Именно из общения Вы узнаете, что представляет ценность. С кем это обсуждать? С владельцами продуктов (Product owners), аналитиками, конечными пользователями. Именно они расскажут о том, «что болит», и дадут Вам пищу для роста и размышлений.
- Пишите хороший код. Я специально употребил здесь максимально пространную фразу. В каждой команде свои стандарты кода, поэтому понятие «хороший код» будет варьироваться от команды к команде. Поэтому спрашивайте, общайтесь и учитесь. Именно этого от Вас ждут как от Junior-разработчика.
Моя практика показывает, что в позиции Junior специалист обычно растёт от полугода до года. Конечно, этот срок может меняться в разумных рамках, но если после года работы Вы всё ещё не чувствуете себя «в своей тарелке», стоит задуматься о качестве Вашего роста. За это время в процессе активной работы сотрудник не менее активно растёт, начинает изучать фундаментальные понятия в программировании, такие как алгоритмы, оценки сложности, обеспечение работы под высокими нагрузками, устройство выбранного языка программирования и прочее. К концу этого периода уже можно смотреть в сторону позиции Middle.
Если Вы решили изучать язык PHP, то можете взять за основу мой курс для самостоятельного изучения, который найдёте по ссылкам ниже. Он совершенно бесплатный и создан для того, чтобы помочь сделать первые шаги!
А ещё можно найти себе ментора для того, чтобы иметь возможность задавать вопросы и уточнять правильность своего пути. Сделать это можно, например, здесь.
Как понять, что я готов к позиции Middle?
Не ждите, что Ваш шеф радостно ворвётся в Ваш open-space с тортом и шампанским и поздравит с повышением. Конечно, многие серьёзные компании проводят one-2-one встречи, следят за ростом сотрудников, но зачастую многие грешат тем, что исходят из принципа достаточности: человек работает, вот и славно. Зачем платить больше?
Если Ваш руководитель не общается с Вами на тему роста, то нужно активно рефлексировать и анализировать свои навыки. Ответьте себе на вопросы:
- Сколько задач я довёл до Production за последние 3 месяца?
- Какова их ценность?
- Сколько багов было в них? Почему произошли эти баги?
- Какие были нарекания к продукту, который я выпускал?
- Сколько задач релизят старшие коллеги? (Этот вопрос совершенно нормально задать самим коллегам, чтобы понимать уровень собственной производительности, если не окажется доступа к статистике таск-трекера команды)
Если отвечали честно, то увидите сравнительную оценку себя и других разработчиков, что поможет либо вернуться к заполнению пробелов в знаниях, либо продолжить процедуру повышения.
Ещё одним неплохим инструментом являются сайты поиска работы. Нет, это не означает, что надо ездить по собеседованиям. Но на них Вы сможете увидеть, чего ожидают от разработчиков Middle-уровня в Вашем стеке и какие зарплаты платятся в этом сегменте. В принципе, и на собеседование сходить можно, но будьте готовы к тому, что текущий работодатель, мягко говоря, удивится.
В самом хорошем случае в компании есть практика one-2-one встреч. Это практика, при которой руководитель встречается с подчиненными один на один в закрытом формате и обсуждает все вопросы, связанные с рабочим процессом, без купюр. Оба могут говорить о том, что беспокоит, что радует, задавать вопросы. В таком случае рост обычно происходит гораздо проще и естественнее, так как на встрече всегда можно
- Узнать, какие знания надо подтянуть?
- Попросить дать фидбэк по работе
- Обозначить желание расти и обсудить условия роста
- Обговорить сроки роста, что немаловажно, если Вы не хотите питаться «завтраками»
Как видите, маркеров и способов роста множество. Главное — учиться и расти постоянно, без остановки.
Вот я Middle. Что дальше?
Как ни странно, дальше рост очень похож за тем лишь исключением, что качественно меняются набираемые знания. Нужно уделять больше времени смежным системам (таким как ELK-стек, Docker, Kubernetes, кластеризация и скалирование), пониманию построения архитектур. Стоит написать что-то своё прямо с нуля, без фреймворков. Вне работы, но это будет крайне полезно для понимания принципов работы выбранного стека.
В позиции Middle можно и нужно задерживаться дольше. Знаний для роста тут предостататочно, поэтому путь до Senior занимает около 2-3 лет. Конечно же, есть и более быстрые скачки, но это скорее исключение из правил.
Дальнейший рост довольно интересен. За позицией Senior открывается несколько путей развития:
- Технический. Вы продолжаете прокачивать технические навыки (hard skills). В таком случае Вы обычно вырастаете до уровня Architect или Technical Leader. Вторая позиция подразумевает большего общения с людьми, чем первая, поэтому выбирать Вам, исходя из того, насколько хочется активного взаимодействия с окружающими.
- Организационный. Часть разработчиков с ростом чувствуют свою тягу к построению процессов и уходят в менеджмент. Так, например, крайне востребованы Scrum мастера и Agile коучи, которых довольно мало на рынке. Поэтому люди с подобными знаниями и техническим бэкграундом будут очень сильно востребованы на рынке.
- Менеджерский. И снова про организацию процессов, но уже с точки зрения роста в чистый классический менеджмент. Такие Senior-ы обычно вырастают в Team Leader-ов, затем в Head of Development, а потом в CTO (Технический директор). Здесь нужны очень хорошие навыки организатора, желание строить процессы и отстутсвие боязни общения с бизнесом, коего будет очень и очень много.
Основная задача, которая будет стоять перед Вами здесь даже не про то, как расти. Она состоит в том, чтобы предельно честно ответить себе на вопрос: «А что дальше? Как я хочу расти? Зачем я буду развиваться в позиции N?». Изучайте истории разных известных представителей каждого из путей (благо, таких людей много, и они не очень-то прячутся). Это поможет Вам понять множество философских вещей относительно роста, которые точно находятся за рамками конкретно этой статьи.
Кстати, про рост в роли Team Leader-а есть отличное выступление с конференции, которое Вы можете посмотреть ниже
Что прокачать джуниор разработчику, чтобы стать мидлом за год
Реальные требования к кандидатам в плане инструментов разработки сильно различаются в зависимости от компании и задач. В этой статье поговорим про фундаментальные навыки, которые актуальны для роста в бэкенд-разработке и разработке в целом.
Роман Моисеев, менеджер продукта на программе «Мидл Python-разработчик» в Яндекс.Практикуме, рассказывает, над чем стоит работать, если вы джуниор, который хочет стать мидлом.
Четыре грейда джуниор-разработчика
В индустрии нет единого понимания грейдов джуниор–мидл–сениор. Некоторые считают, что так разработчиков делить нельзя. Тем не менее, чтобы рассуждения в этой статье были структурированными, необходимо понимание, кто такой джун.
Ниже вы найдёте условное разделение джуниорства на несколько этапов. Это деление отражает не только эволюцию начинающего разработчика, но и разницу во мнениях разных людей, что должен уметь джуниор.
Первый — стажёр. Это ещё не полноценный джуниор-разработчик, скорее его MVP. На этом уровне человек знает основы языка программирования, его не нужно учить синтаксису. Однако применять этот язык программирования для решения реальных задач он ещё не умеет. Чтобы дать ему задачу в работу, её нужно расписать по шагам: «сделай A, B и С, возьми такую технологию и используй вот эту вот функцию».
Стажёры обычно занимаются задачами, которые не критичны для проекта. Это может быть техдолг, оставшийся с прошлых спринтов, или что-то относящееся к внутренним проблемам, а не фичам конечного потребителя. Если стажёр ошибётся, компания не потеряет деньги. Но если сделает то, на что не хватает времени у более старших разработчиков, принесёт ощутимую пользу проекту.
Второй — джун-новичок. Первая стадия развития джуна: первый оффер на фултайм, первый рабочий месяц и первые боевые задачи. Такой разработчик обладает достаточным набором теоретических (академических) знаний, чтобы делать простые задачи без супердетального описания. Он знает, как работать с документацией и найти в ней ответ на свой вопрос.
Тем не менее процесс коммерческой разработки он знает скорее теоретически, поэтому ошибается на разных этапах написания кода. Он часто приходит к старшим коллегам и говорит: «У меня что-то поломалось. Не могу это сделать. Помоги!» И это нормально.
Главная задача джуниор-разработчика — набивать собственные шишки и учиться на них. Здесь лучше вовремя задать вопрос, чем не показать никакого результата.
Третий — средний джун. Уже прошёл испытательный срок, освоился в компании и процессах командной разработки. Например, знает, какие agile-ритуалы используют в команде и почему. Теперь ему можно давать задачу и не контролировать её выполнение в рамках одного рабочего дня.
Самостоятельно декомпозировать задачи такой разработчик ещё не умеет, но вопросы задаёт более глубокие и конкретные: «Я попробовал сделать так и так, но не вышло, выдаёт ошибку. Нужна помощь, чтобы понять, что идёт не так и где ещё поискать решение».
Четвёртый — крепкий джун. В эту категорию обычно записывают ребят, которые по формальным техническим навыкам уже мидлы или очень близки к ним. Единственный их пробел — нет большого опыта в решении бизнес-задач. Сюда же попадают и выпускники топовых технических вузов. Они многое умеют, и хотя коммерческого опыта разработки у них нет, они быстро дорастут до сильных мидлов за счёт крепкой академической базы.
В качестве отправной точки для роста за год я буду рассматривать джуна-новичка. По двум причинам:
- по моему опыту, рост за год до мидла с этого уровня — это очень хороший темп для разработчика;
- многие компании готовы рассматривать кандидатов с опытом от года на позицию мидлов. Главное в этой фразе — «рассматривать»: отбор и заветный оффер это не гарантирует.
Эволюция сложности задач
На каждом грейде задача, которая попадает разработчику, становится всё менее детализированной. Давайте рассмотрим процесс постановки задачи на немного банальном, но хорошем примере — приготовление яичницы. Для стажёра старший разработчик разложит все ингредиенты на столе, разогреет сковородку и даст чёткую инструкцию, что делать:
- Разогреть в сковороде немного подсолнечного масла.
- Разбить и бросить в неё два яйца.
- Немного посолить.
- Подождать 3 минуты.
- Яичница готова!
Если вдруг стажёр разобьёт яйца, и скорлупа попадёт на сковородку, сениор объяснит, что так делать нельзя.
По мере роста уровня разработчика растёт уровень самостоятельности. Мидлу уже достаточно сказать: «Нужно сделать яичницу». Он уточнит, какой вид яичницы нужен, например, нужно ли добавить сыр и помидоры, найдёт все ингредиенты и приготовит вкусный завтрак.
Утверждение про рост самостоятельности верно не только для роста с джуна до мидла, но и для роста в разработке в целом. Чем более сложную задачу человек способен решить самостоятельно, тем выше его уровень.
Кто такой мидл
Как я уже говорил, главное отличие мидла от джуна — первый умеет решать свои проблемы самостоятельно. Когда у него есть задача, он всегда сначала пытается решить её самостоятельно. Если появляется проблема, которую не получается решить, и есть риск не уложиться в сроки — он успеет это понять и обратиться за помощью к старшим коллегам. В идеале — со своим предложением, как сделать так, чтобы уложиться в дедлайн.
Чисто сениорских задач в разработке мало. Большинство компаний решает достаточно стандартные задачи. И вот с этими задачами мидл должен уметь справляться самостоятельно. Для этого нужен достаточный опыт и накопленный багаж совершённых ошибок.
Hard skills мидла
Перед тем, как перейти непосредственно к списку требований, обозначу три важные вещи:
- Здесь не будет конкретных технологий, которые нужно изучить. Во-первых, требования к технологиям в разных компаниях очень сильно отличаются. Во-вторых, если главный критерий мидл разработчика — «самостоятельность в решении своих задач», полезнее всего выделить фундаментальные вещи, которые помогут к этой самостоятельности прийти.
- Это не список «сделай 10 конкретных шагов и стань мидлом». К сожалению, такого волшебного пути нет. У каждого разработчика он свой. Советую читать требования ниже так: «Чем больше галочек я набрал, тем более вероятно, что я мидл».
- Вы можете переработать этот список в свой чек-лист действий для роста до позиции мидла. Для этого вам понадобятся навыки приоритизации и декомпозиции цели. Небольшой спойлер: это и есть важные навыки мидл-разработчика.
Какие качества ждут от мидл-разработчика
Понимание используемых технологий
Для мидла инструменты, которые он использует в работе, и разработка в целом не должны быть магией. Джуниору простительно не задумываться над тем, как работают какие-то конструкции языка, а просто писать рабочее решение. Мидл должен задаваться вопросом, как работает программа, которую он пишет. Он должен уметь объяснять её простыми словами, чтобы другой человек понял.
Чтобы прокачать этот навык, как можно чаще задавайте себе вопрос, как работают вещи, которые вы используете. Вопросы должны начинаться со слов «как» и «почему». Приведу пример с базой данных:
- Почему <название базы данных> подходит для решения поставленной задачи?
- Как работают индексы в <название базы данных>?
- Почему они работают именно так?
Каждый новый вопрос будет уводить вас на уровень ниже и давать понимание, как устроена разработка. Как глубоко копать? Универсального ответа нет, всё зависит от того, на каком уровне вы хотите разобраться с технологией. Попробуйте начать с двух–трёх вопросов и посмотрите, как пойдёт.
Прохождение и проведение code-review
Прохождение код-ревью — в большей степени джуниорский навык. Технических требований там нет, скорее софтовые: уметь принимать обратную связь, не обижаться на критику и вытягивать из фидбека полезные для себя вещи.
Код-ревью — важная практика для роста разработчика. Если у вас в компании нет ревью кода, найдите человека, который будет давать обратную связь на то, что вы делаете. Идеально, если этот человек будет уровнем выше. Без практики код-ревью вы не сможете адекватно оценивать, насколько хороший код пишете.
Проведение код-ревью, напротив, — во многом техническая задача. Умение разобраться в чужом коде распадается на два навыка: понять общую структуру программы и увидеть места, где решение можно сделать более оптимальным, лаконичным и красивым. А ещё код-ревью — это отличная возможность поделиться своим опытом.
Полезно делать код-ревью собственного кода, когда рабочее решение, выполняющее поставленную задачу, уже написано. Вернитесь к коду, подумайте над другими возможными реализациями. Почему они лучше или хуже?
Умение декомпозировать задачи
У начинающих разработчиков часто есть желание начать писать код сразу, как они получат задачу. Мидл должен сначала остановиться и подумать, как он будет выполнять задачу: разбить её на несколько последовательных этапов и ответить на вопрос, почему он сделал именно такой план. Обычно на написание кода у мидла уходит больше времени, чем у джуна.
Кроме улучшения качества кода, такой подход имеет два косвенных эффекта. Во-первых, вы тренируетесь аргументировать свои решения. Когда вас спросят, как работает ваш код, у вас уже будет готовый ответ. Во-вторых, понимание структуры своего кода помогает разбираться в чужом — ведь это обратные процессы. В первом случае вы делаете структуру, потом её реализуете. Во втором получаете реализацию и раскладываете её на отдельные компоненты.
Насмотренность
Следите за тем, что сейчас происходит в индустрии. Какие технологии и как развиваются, где и почему применяются, какие есть хорошие практики и почему они работают. Смотрите не только за успехами, но и за ошибками — это источник вашего роста. Сеньор за свою карьеру совершил и увидел много ошибок и знает много способов, как делать не надо. Кругозор начинающего разработчика уже и сфокусирован больше на том, чтобы найти хотя бы пару способов сделать так, чтобы сработало.
Развивайте насмотренность через образование, собственные проекты, технические статьи и обмен опытом с коллегами по цеху. Чтобы принимать хорошие решения самому, надо увидеть много плохих и хороших решений других разработчиков.
Понимание алгоритмов и области их применения
Алгоритмы ― это очень холиварная тема, потому что в повседневных задачах они используются очень редко. Тем не менее это единственная фундаментальная вещь, которая остаётся неизменной в быстро меняющемся мире разработки.
Рассматривайте алгоритмы и структуры данных именно как фундаментальную базу. Не мучайте себя академическим подходом — приземляйте алгоритмы на практику, изучайте их применение в коммерческих технологиях. Понимайте причинно-следственные связи, почему те или иные вещи работают именно так, как работают. Не зазубривайте бинарный поиск просто потому, что «надо знать алгоритмы».
Умение писать скучный код
Задумайтесь, насколько код, который вы пишете, будет понятен человеку, который видит его впервые. Помогут ли ему ваши нестандартные решения? Мидл всегда выберет простое решение, вместо того чтобы выпендриться.
Soft skills мидла
Что такое мягкие навыки в разработке? Самый простой ответ: все навыки, которые нужны в работе, но не связаны напрямую с написанием кода. Опасность такой формулировки в том, что можно подумать, будто софты — это что-то вторичное и не очень важное. На самом деле это не так.
Сейчас время командной разработки. Рынок требует хорошие, масштабируемые технические решения в довольно сжатые сроки. Это невозможно вытянуть в одиночку. Команда в долгосрочной перспективе всегда обойдёт гения-одиночку. Именно поэтому пробелы в софтовой части могут нивелировать ваши технические навыки в глазах работодателя.
Какие мягкие навыки ждут от мидл-разработчика
Самостоятельность
Это ключевой навык мидл-разработчика. Вы должны уметь самостоятельно решать свои задачи и проходить полный цикл написания кода: получение задания и уточнение требований, декомпозиция подзадачи, реализация в коде, тестирование, прохождение код-ревью. Принятые решения по задаче мидл должен уметь аргументировать и отстоять перед другими разработчикам.
Мидл не требует микроменеджмента. Контроля раз в день с формулировкой «как у тебя дела, что делаешь сейчас?» достаточно, чтобы быть уверенным, что задача будет выполнена.
Умение видеть проблему бизнеса в технической задаче
Мидл должен понимать, что его главная задача ― не просто писать код. Разработчику платят за техническое решение бизнес-задачи.
Бывают ситуации, когда нужно донести до команды факт, что задачу делать вообще не нужно. Или нужно, но не с поставленными изначально требованиями.
Например, вы видите, что на реализацию текущих требований команда бросает много важных ресурсов, но есть более простое решение. Чтобы донести свои мысли до коллег, понадобится не просто умение доказывать свои технические решения другим разработчикам. Нужно будет получить информацию от нетехнических участников команды и объяснить им технические ограничения.
Увлечённость разработкой
Покажите будущему тимлиду, что разработка вас драйвит. Объясните, почему вы делали проекты и задачи, которые записаны у вас в резюме. Даже тривиальные и обыденные вещи можно раскрыть через призму выводов и полученного опыта, а не с позиции «я просто писал код на Django на последней работе».
Как рассказать о задачах, которые вас действительно не драйвили, и не обмануть собеседника? Расскажите о том, какими задачами вы точно не хотите заниматься. Это тоже выводы и опыт, которые показывают вашу осознанность. Это ещё и возможность показать свои собственные pet-проекты, где вы реализовывали интересные вам задачи.