Как стать программистом: от стажёра до тимлида с минимальными издержками и огромным КПД
Илья Кучумов из «Яндекса» делится личным опытом и рассказывает, как найти своё место в IT, прокачивать навыки и расти в профессии.
Фото: Bloomberg / Getty Images
Илья Кучумов
Руководитель отдела разработки товарного поиска в «Яндексе».
Содержание:
В IT есть куча разнообразных задач, и каждый может найти что-то для себя. Так что не стоит гнаться за мейнстримом или слепо повторять карьерный путь друзей — не бойтесь искать свою дорогу в профессии.
Расскажу о том, как я стал программистом; возможно, кому-то мои мысли и наблюдения окажутся полезными.
Как новичку выбрать своё направление в IT
Главное в работе — чтобы она нравилась. Поэтому в самом начале ответьте на вопрос: а что интересно именно вам? Например, можно выбирать между фронтендом и бэкенд-разработкой.
Фронтенд — это фасад продукта, который видит пользователь. Начинается он с дизайна и реализуется силами мобильной и веб-разработки.
Бэкенд — серверная часть, которая позволяет приложениям работать между несколькими устройствами или решать вычислительно сложные задачи, которые пока не под силу мобильным девайсам или десктопам. Сюда относятся: инфраструктура, аналитика, машинное обучение или программирование микроконтроллеров.
Подробно о том, чем фронтенд отличается от бэкенда и где они пересекаются, читайте в нашей статье.
За придумывание продукта и его развитие отвечает продакт-менеджер. За организацию процессов разработки — проджект-менеджер.
Есть профессии, изначально не требующие глубоких знаний технологий, менеджмента или языков программирования, но также важные при создании продукта: тестировщик, технический писатель, UX-аналитик. В общем, двери в IT открыты даже для новичков с минимальным набором начальных компетенций.
Также может быть интересно:
- Кто такой тестировщик и как им стать с нуля
- Кто такой бизнес-аналитик, сколько он получает и что надо уметь для первой работы
- Как стать разработчиком игр — 5 первых шагов к работе в геймдеве
- Как стать веб-разработчиком с нуля, почему это актуально и что нужно знать
- Что такое Data Science и кто такой Data Scientist
С чего программисту начинать обучение
Идеальный вариант — самостоятельно попробовать каждое из направлений. Можно начать с обучающих видео на YouTube, коротких курсов и маленьких pet-проектов.
Не обязательно создавать уникальные проекты. Например, обучаясь в университете на программиста, я делал онлайн-шахматы, в которые можно было играть с друзьями по сети. В процессе я познакомился со многими нюансами разработки на языке программирования Python: узнал, как организовывать большое приложение, как работает сервер, как устроены клиентские приложения.
Самым запоминающимся опытом программирования стал сбор отладочной информации с устройств игроков: требовалось сразу сделать всё идеально, ведь при возникновении каких-нибудь проблем я не мог сесть за ноутбук каждого из игроков и отладить программу в ручном режиме.
На «примерку» направления достаточно пары месяцев. Если глаза горят и хочется заниматься проектами постоянно — значит, вы нашли то, что искали.
Читайте также:
Общение со специалистами
IT развиваются стремительно. Чтобы понять реальное состояние дел и распланировать свои шаги, неплохо было бы поговорить с людьми из индустрии.
Обратитесь к знакомым, которые уже работают программистами в интересующей вас сфере, поищите людей в LinkedIn и других соцсетях. Ходите на конференции и митапы — они бывают даже в онлайне. Там можно послушать, какие задачи решают «старшие товарищи», а после доклада подойти и задать интересующие вопросы.
Читайте также:
Есть ещё одна забавная опция — воспользоваться сервисами Random Coffee или The Breakfast. Они позволяют встретиться с людьми из интересующего вас сообщества программистов. Специальные сервисы организуют такие встречи в крупных городах, причём не только российских.
Очень важно не перепутать этот этап с предыдущим — иначе разговор будет максимально неконструктивным. Имея представление о базовых вещах, вы можете задавать более предметные вопросы и получать более дельные советы. Формулируйте вопрос по схеме: «Я сделал Х, чтобы получить Y. Что я могу сделать ещё и как можно улучшить результат?» Так человек поймёт, что вы действительно заинтересованы и копаете в сторону решения своей задачи.
Стажировка
Почти любой опыт для программиста-новичка начинается со стажировки, поэтому обязательно постарайтесь на неё попасть. Но даже если вам откажут, просите конструктивный фидбэк. На его основе записывайтесь на долгосрочные курсы или в офлайн-школу по выбранному направлению — например, по разработке или менеджменту.
Однако старайтесь не зависать в состоянии вечного студента — пробуйте устроиться снова. Заявляйте о себе как можно чаще.
Подробно про стажировку в IT можно почитать здесь:
По какому пути пойти программисту — эксперта или руководителя?
Внутри каждого IT-направления есть два магистральных пути развития: экспертный и руководительский.
Эксперт (или Individual Contributor, IC) — это специалист, который уходит вглубь технических компетенций. Он решает всё более сложные задачи, берётся за большие проекты, изучает новые технологии и повышает скорость своей работы. Как правило, ведущие программисты могут самостоятельно выполнять крупные сложные проекты с отличным качеством и в прогнозируемый срок.
Руководитель — это в первую очередь специалист по управлению вверенной ему командой. Здесь много новых компетенций: наём и увольнение сотрудников, их оценка и мотивация, умение решать внешние и внутрикомандные конфликты, постановка и контроль задач. В руководительской ветке рост происходит в сторону увеличения команды. Сравните масштабы: руководить командой из пяти программистов или управлять пятью руководителями, у каждого из которых своя команда по пять человек.
Возможен и переход из IC в руководство и обратно. Например, при смене проекта, работы или просто по желанию. Ошибочно думать, что руководитель — терминальная точка карьеры. По зарплатам — во многих компаниях ведущие разработчики получают не меньше, чем руководители больших команд.
Как развиваться в IT: горизонтальный переход
Горизонтальный переход — это смена деятельности на смежную при сохранении прежней позиции или с небольшим понижением. Не бойтесь ошибаться в выборе направления. Я знаю много айтишников, которые горизонтально переходили между профессиями.
Простой пример — ручные тестировщики (те, кто проверяет приложение, буквально нажимая на кнопки в нём) могут стать автотестировщиками (теми, кто тестирует бэкенд или даже фронтенд при помощи кода). Автотестировщики часто переходят в бэкенд-разработку — то есть изучают языки программирования и пишут непосредственно код приложения.
Некоторые программисты из веб-разработки переходят в аналитику. Что логично: по роду своей деятельности они часто работают с аналитиками, которые помогают оценить качество и скорость их решений.
Из бэкенда можно перейти и в менеджмент. Тут у программиста два варианта: начать организовывать процессы в команде и стать проджектом или активно участвовать в развитии продукта и стать продактом.
Что нужно знать и уметь, чтобы стать программистом: хард- и софт-скиллы
Навыки специалистов делятся на две категории — хард и софт.
Хард — это профессиональные навыки, которые легко доказать и проверить. Например, умение писать на C++, работать в Excel или паять схемы. Для каждой специальности нужен свой набор хард-скиллов.
Набор необходимых программисту софт-скиллов зависит от команды, компании и ситуации в целом. Это умение объяснять свои мысли, договариваться, вести аргументированный спор, способность работать в команде или разбираться в непонятных вещах.
Для эксперта больше важны хард-скиллы в выбранном направлении, а для руководителя — софты. Например, программист может самостоятельно написать целый проект за полгода, но совсем не умеет отказывать смежникам, которые пытаются отвлечь его на свои задачи. Тогда на помощь приходит руководитель и помогает организовать работу.
Или наоборот: руководитель умеет организовывать процесс разработки, но не до конца понимает технические детали реализации. И это нормально, потому что разработка — командная игра.
Не стоит бояться, что при горизонтальном переходе ранее накопленный вами опыт пропадёт впустую. Софты, полученные во время освоения какой-то специальности или на новой работе, останутся с вами навсегда.
Более того: часто бывает, что прокачанные вами хард-скиллы пригождаются и при смене профессии на смежную. Например, разработчики по роду своей деятельности почти всегда обучаются самостоятельно делать аналитику по своим проектам или подключаются к менеджерским задачам.
Читайте также:
Саморазвитие
Важно постоянно сравнивать, как вы и другие программисты решаете похожие задачи, — насколько эффективнее, чем они, выполняете свою работу. Если кто-то делает её быстрее, расспросите его, понаблюдайте за его работой. Узнайте всё вплоть до мелочей: какую среду разработки он использует, какими вспомогательными инструментами и хаками владеет, как выстраивает рабочий процесс и организует свой рабочий день. Затем подумайте о том, что вы делаете по-другому или не делаете вообще.
Универсальный алгоритм самостоятельного развития программиста выглядит так: формулируем проблему, честно рефлексируем, советуемся с ментором или руководителем, делаем выводы, улучшаем скиллы и повторяем попытку.
Так вы найдёте узкое место, догадаться о существовании которого самому будет довольно сложно. Сначала может показаться, что вы тонете в деталях и узнать всё никогда не получится, — и это правда. Как говорил один философ: «Чем больше я знаю, тем больше понимаю, сколько всего не знаю». Но через какое-то время вы заметите, насколько эффективнее и быстрее стали выполнять свои задачи.
Что самое главное в работе программиста
По моему опыту, главное на любом карьерном пути — добросовестное, качественное и проактивное выполнение задач в своей зоне ответственности плюс ещё немного сверх этого.
Будучи разработчиком, я старался не просто выполнять задачи, а брался за целый компонент системы, пусть даже и небольшой. Со временем, увеличивая компетенции, стал техлидом. В мои обязанности входило продумывание сложных компонентов, их декомпозиция и реализация, а иногда и делегирование этих задач. Для этого нужно было уметь просто и понятно объяснять решение как менее опытным разработчикам, так и менеджерам.
Чуть позже я стал руководителем группы программистов, начал планировать долгосрочные цели, их распределение по сотрудникам, мотивацию и контроль. Также я отвечал за наём и рост разработчиков в своей группе.
Сейчас я на позиции руководителя отдела разработки товарного поиска. Зона моей ответственности значительно расширилась, а инструменты управления изменились.
Я веду целое направление, которое нужно улучшать. Я принимаю технические решения, оцениваю возможные риски, связанные с дальнейшим развитием продукта.
Несмотря на то, что в моём ведении большой отдел, я стараюсь обходиться без фраз «не мы за это отвечаем» — часто берусь за задачи, решение которых находится на стыке с обязанностями других команд, и не всегда понятно, чья это проблема. Но именно решение таких задач позволяет программисту замечать новые зоны ответственности и расти.