Код
#статьи

Как стать программистом: от стажёра до тимлида с минимальными издержками и огромным КПД

Илья Кучумов из «Яндекса» делится личным опытом и рассказывает, как найти своё место в IT, прокачивать навыки и расти в профессии.

Фото: Bloomberg / Getty Images

Илья Кучумов

Руководитель отдела разработки товарного поиска в «Яндексе».

Содержание:

В IT есть куча разнообразных задач, и каждый может найти что-то для себя. Так что не стоит гнаться за мейнстримом или слепо повторять карьерный путь друзей — не бойтесь искать свою дорогу в профессии.

Расскажу о том, как я стал программистом; возможно, кому-то мои мысли и наблюдения окажутся полезными.

Как новичку выбрать своё направление в IT

Главное в работе — чтобы она нравилась. Поэтому в самом начале ответьте на вопрос: а что интересно именно вам? Например, можно выбирать между фронтендом и бэкенд-разработкой.

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

Бэкенд — серверная часть, которая позволяет приложениям работать между несколькими устройствами или решать вычислительно сложные задачи, которые пока не под силу мобильным девайсам или десктопам. Сюда относятся: инфраструктура, аналитика, машинное обучение или программирование микроконтроллеров.

Подробно о том, чем фронтенд отличается от бэкенда и где они пересекаются, читайте в нашей статье.

За придумывание продукта и его развитие отвечает продакт-менеджер. За организацию процессов разработки — проджект-менеджер.

Есть профессии, изначально не требующие глубоких знаний технологий, менеджмента или языков программирования, но также важные при создании продукта: тестировщик, технический писатель, UX-аналитик. В общем, двери в IT открыты даже для новичков с минимальным набором начальных компетенций.

С чего программисту начинать обучение

Идеальный вариант — самостоятельно попробовать каждое из направлений. Можно начать с обучающих видео на YouTube, коротких курсов и маленьких pet-проектов.

Не обязательно создавать уникальные проекты. Например, обучаясь в университете на программиста, я делал онлайн-шахматы, в которые можно было играть с друзьями по сети. В процессе я познакомился со многими нюансами разработки на языке программирования Python: узнал, как организовывать большое приложение, как работает сервер, как устроены клиентские приложения.

Самым запоминающимся опытом программирования стал сбор отладочной информации с устройств игроков: требовалось сразу сделать всё идеально, ведь при возникновении каких-нибудь проблем я не мог сесть за ноутбук каждого из игроков и отладить программу в ручном режиме.

На «примерку» направления достаточно пары месяцев. Если глаза горят и хочется заниматься проектами постоянно — значит, вы нашли то, что искали.

Общение со специалистами

IT развиваются стремительно. Чтобы понять реальное состояние дел и распланировать свои шаги, неплохо было бы поговорить с людьми из индустрии.

Обратитесь к знакомым, которые уже работают программистами в интересующей вас сфере, поищите людей в LinkedIn и других соцсетях. Ходите на конференции и митапы — они бывают даже в онлайне. Там можно послушать, какие задачи решают «старшие товарищи», а после доклада подойти и задать интересующие вопросы.

Есть ещё одна забавная опция — воспользоваться сервисами Random Coffee или The Breakfast. Они позволяют встретиться с людьми из интересующего вас сообщества программистов. Специальные сервисы организуют такие встречи в крупных городах, причём не только российских.

Очень важно не перепутать этот этап с предыдущим — иначе разговор будет максимально неконструктивным. Имея представление о базовых вещах, вы можете задавать более предметные вопросы и получать более дельные советы. Формулируйте вопрос по схеме: «Я сделал Х, чтобы получить Y. Что я могу сделать ещё и как можно улучшить результат?» Так человек поймёт, что вы действительно заинтересованы и копаете в сторону решения своей задачи.

Стажировка

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

Однако старайтесь не зависать в состоянии вечного студента — пробуйте устроиться снова. Заявляйте о себе как можно чаще.

По какому пути пойти программисту — эксперта или руководителя?

Внутри каждого IT-направления есть два магистральных пути развития: экспертный и руководительский.

Эксперт (или Individual Contributor, IC) — это специалист, который уходит вглубь технических компетенций. Он решает всё более сложные задачи, берётся за большие проекты, изучает новые технологии и повышает скорость своей работы. Как правило, ведущие программисты могут самостоятельно выполнять крупные сложные проекты с отличным качеством и в прогнозируемый срок.

Руководитель — это в первую очередь специалист по управлению вверенной ему командой. Здесь много новых компетенций: наём и увольнение сотрудников, их оценка и мотивация, умение решать внешние и внутрикомандные конфликты, постановка и контроль задач. В руководительской ветке рост происходит в сторону увеличения команды. Сравните масштабы: руководить командой из пяти программистов или управлять пятью руководителями, у каждого из которых своя команда по пять человек.

Возможен и переход из IC в руководство и обратно. Например, при смене проекта, работы или просто по желанию. Ошибочно думать, что руководитель — терминальная точка карьеры. По зарплатам — во многих компаниях ведущие разработчики получают не меньше, чем руководители больших команд.

Как развиваться в IT: горизонтальный переход

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

Простой пример — ручные тестировщики (те, кто проверяет приложение, буквально нажимая на кнопки в нём) могут стать автотестировщиками (теми, кто тестирует бэкенд или даже фронтенд при помощи кода). Автотестировщики часто переходят в бэкенд-разработку — то есть изучают языки программирования и пишут непосредственно код приложения.

Некоторые программисты из веб-разработки переходят в аналитику. Что логично: по роду своей деятельности они часто работают с аналитиками, которые помогают оценить качество и скорость их решений.

Из бэкенда можно перейти и в менеджмент. Тут у программиста два варианта: начать организовывать процессы в команде и стать проджектом или активно участвовать в развитии продукта и стать продактом.

Что нужно знать и уметь, чтобы стать программистом: хард- и софт-скиллы

Навыки специалистов делятся на две категории — хард и софт.

Хард — это профессиональные навыки, которые легко доказать и проверить. Например, умение писать на C++, работать в Excel или паять схемы. Для каждой специальности нужен свой набор хард-скиллов.

Набор необходимых программисту софт-скиллов зависит от команды, компании и ситуации в целом. Это умение объяснять свои мысли, договариваться, вести аргументированный спор, способность работать в команде или разбираться в непонятных вещах.

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

Или наоборот: руководитель умеет организовывать процесс разработки, но не до конца понимает технические детали реализации. И это нормально, потому что разработка — командная игра.

Не стоит бояться, что при горизонтальном переходе ранее накопленный вами опыт пропадёт впустую. Софты, полученные во время освоения какой-то специальности или на новой работе, останутся с вами навсегда.

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

Саморазвитие

Важно постоянно сравнивать, как вы и другие программисты решаете похожие задачи, — насколько эффективнее, чем они, выполняете свою работу. Если кто-то делает её быстрее, расспросите его, понаблюдайте за его работой. Узнайте всё вплоть до мелочей: какую среду разработки он использует, какими вспомогательными инструментами и хаками владеет, как выстраивает рабочий процесс и организует свой рабочий день. Затем подумайте о том, что вы делаете по-другому или не делаете вообще.

Универсальный алгоритм самостоятельного развития программиста выглядит так: формулируем проблему, честно рефлексируем, советуемся с ментором или руководителем, делаем выводы, улучшаем скиллы и повторяем попытку.

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

Что самое главное в работе программиста

По моему опыту, главное на любом карьерном пути — добросовестное, качественное и проактивное выполнение задач в своей зоне ответственности плюс ещё немного сверх этого.

Будучи разработчиком, я старался не просто выполнять задачи, а брался за целый компонент системы, пусть даже и небольшой. Со временем, увеличивая компетенции, стал техлидом. В мои обязанности входило продумывание сложных компонентов, их декомпозиция и реализация, а иногда и делегирование этих задач. Для этого нужно было уметь просто и понятно объяснять решение как менее опытным разработчикам, так и менеджерам.

Чуть позже я стал руководителем группы программистов, начал планировать долгосрочные цели, их распределение по сотрудникам, мотивацию и контроль. Также я отвечал за наём и рост разработчиков в своей группе.

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

Я веду целое направление, которое нужно улучшать. Я принимаю технические решения, оцениваю возможные риски, связанные с дальнейшим развитием продукта.

Несмотря на то, что в моём ведении большой отдел, я стараюсь обходиться без фраз «не мы за это отвечаем» — часто берусь за задачи, решение которых находится на стыке с обязанностями других команд, и не всегда понятно, чья это проблема. Но именно решение таких задач позволяет программисту замечать новые зоны ответственности и расти.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована