Интервью
От стажера до ведущего разработчика — как расти в IT
Изучение программирования это не сложно, это долго. Рано или поздно вы освоите весь необходимый материал и обязательно найдете себе работу мечты!
Алексей Маринин — iOS-разработчик-самоучка с коммерческим опытом более 4-х лет. За свою карьеру он успел вырасти от стажера до ведущего разработчика, а так же внести вклад в разработку таких больших компаний, как Сбербанк, МТС, Озон и ПСБ. Мы пообщались с ним и поговорили о том, как учиться и расти разработчику.
Расскажите, как у вас возникла идея связать свою жизнь с программированием?
Идея строить карьеру в сфере IT возникла у меня не сразу. Я никогда не программировал в детстве, вся моя семья — юристы, и мне, соответственно, предстоял этот путь. Ближе к окончанию университета у меня появилось немного свободного времени и я наткнулся на сайт JavaRush. Для тех кто не знает, это сайт для самостоятельного изучения программирования на языке Java, он предполагает довольно много практики и немного теории. С подросткового возраста меня увлекала инженерия, поэтому программирование сразу меня затянуло. Следующие 2 месяца я практически каждый день сидел с 10 утра до 10 вечера и увлеченно программировал, порой забывая даже поесть.
После получения диплома я все-таки решил рискнуть и попробовать реализоваться в программировании, оставив юриспруденцию, так и не проработав ни дня по специальности.
Получается, каждый желающий может попробовать себя в IT?
Сейчас порог входа в профессию действительно снизился. Появилось множество образовательных курсов, менторских программ, стажировок и тд. Среди множества предложений есть и бесплатные инициативы, в одной из которых мне и посчастливилось поучаствовать.
Я получил рассылку во Вконтакте от бота Сберкота, в которой рассказывали, что Сбербанк открывает новую бесплатную школу программирования, основанную на каком-то революционном подходе к обучению, взятому по франшизе из Франции. Чтобы попасть в эту школу нужно было пройти трех этапный отбор, а именно:
- Онлайн тесты на логику и память
- Офлайн интервью, где за 1,5 минуты нужно было выступить перед жури и рассказать почему взять нужно именно тебя.
- Бассейн, финальный этап отбора, целый месяц нужно каждый день решать задания по программированию и сдавать их в 10 часов вечера. Также каждая неделя — экзамен, резюмирующий твою работу, знания и прогресс.
Самое сложное было то, что критерии отбора были засекречены, и учитывали не только успешность выполнения заданий, но старания и рвение студентов.
С первым этапом у меня не возникло никаких проблем. На втором я рассказал, как во время летних каникул работал проводником пассажирского вагона, а когда от тебя зависит такое количество людей, ты учишься ответственности и усердной работе. Также я значительную часть посвятил рассказу про свою мотивацию. Видимо моя история впечатлила жюри, и я перешел к следующему этапу.
Третий этап был самым сложным, ежедневно мы решали множество задач по программированию. Я проводил все время, что у меня было, в кампусе. Работал каждый день с 9 до 22, без выходных. Иногда все получалось, иногда нет, но тогда я дал себе обещание дойти до конца, и оказалось, что я успешно прошел третий этап и был зачислен на обучение.
С какими сложностями в обучении вы столкнулись?
Главная сложность, с которой столкнулся я и, думаю, многие другие, это непонимание, в рамках какой технологии развиваться. Как оценить востребованность выбранного языка и на что делать упор. В моем случае обучение проводилось на Си и затем делилось на несколько направлений: алгоритмы, веб, геймдев и системное программирование. Я ничего особо не знал про IT и решил выбрать самый сложный путь развития, поскольку он, по моему мнению, должен был быть самым востребованным. Так я начал изучать системное программирование на языке С, изучал его примерно месяцев 9, практически без выходных. Обучение было интересное, я написал свой shell, изучил как работает unix. Вышел на рынок труда и оказалось, что системные программисты почти никому не нужны.
Я решил сменить подход. К тому времени я уже обрел знакомых в сфере разработки, вступил в различные сообщества, старался посещать митапы. Благодаря этому я обратил внимание на iOS и язык программирования Swift. Я руководствовался тем, что язык Swift совсем новый, он появился в 2014 году, и с течением времени у меня есть шанс стать одним из самых опытных специалистов в этой сфере.
Я купил книжку Усова и начал изучать этот язык программирования. Спустя небольшой промежуток времени от знакомых я узнал, что в Сбербанке набирают новую команду и там открыта позиция iOS-разработчика. После тестового задания и нескольких встреч с руководством я получил свою первую работу в роли iOS-разработчика.
У вас большой опыт прохождения собеседований, подскажите пару лайфхаков по подготовке начинающим специалистам?
Самое главное при подготовке к собеседованиям — комплексный подход.
Держать все темы в голове очень сложно и я использую конспект, который веду уже много лет, кратко записывая туда все изученные мной темы. Пролистываю его каждый раз перед собеседованием, освежая основные моменты, а так же вещи которые не очень часто используются на работе, но очень часто всплывают на собеседованиях, например, многопоточность или принципы SOLID.
Многие начинающие разработчики совершают огромную ошибку, начиная учить те технологии, которые в последствии не смогут применить ни на работе, ни на собеседовании. Для того чтобы избежать этого, я предлагаю сильно не засиживаться за учебными материалами и начинать ходить на собеседования как можно раньше. Это позволит вам точно определить темы которые необходимо подтянуть для их прохождения.
Кроме того, критически важно после собеседования делать работу над ошибками. Если мне задают какой либо вопрос, на который я не могу ответить — я сразу же его записываю и обязательно тщательно разбираю после собеседования, дополняя конспект. Таким образом к каждому новому собеседованию я готов лучше, чем к предыдущему, при этом изучая только те вопросы, которые точно бывают на собеседованиях.
Я советую не бояться собеседований и ходить на них хотя бы раз в месяц, даже если вы в данный момент не ищете работу. Вопросы на собеседованиях, вслед за технологиями, постоянно меняются, а так вы будете всегда знать актуальные и держать себя в форме.
Важны ли софтскилы для прохождения собеседований?
Многие специалисты упускают их из виду и готовятся только к технической части собеседования, что абсолютно неверно.
Готовиться к софтскиловой части также важно, как и к технической. У меня были собеседования на которых я идеально отвечал на все технические вопросы, но был в плохом настроении и как итог не получал заветный оффер. Так же были и абсолютно противоположные ситуации, когда я не отвечал на все технические вопросы, но был в отличном расположении духа и в итоге получал оффер.
А как к готовиться к таким вопросам?
Прежде всего я рекомендую подготовить ответы на самые частые вопросы, такие как “почему вы решили сменить работу”, “что ищете на новом месте”, “какими задачами занимались” и т.д. Ответы должны быть логичными и уверенными, раскрывать ваш опыт и показывать вашу заинтересованность в трудоустройстве именно в ту компанию, в которую вы проходите собеседование.
Причем чем выше уровень и должность, на которую вы собеседуетесь, тем сильнее упор делается на софтовую часть. Ближе к синьорскому уровню у интервьюеров начнут возникать вопросы про то, как вы будете решать конфликтные ситуации, например, горящие сроки, проблемы в коммуникациях со смежными командами и другие.
Также рекомендую перед собеседованием изучить место в которое вы идете, поискать статьи в интернете, интервью работников. Это вам поможет лучше понять культуру компании и показать себя с нужной стороны.
Следует остерегаться резкой критики технологий или подходов, если вы не уверены, что данная команда их не использует.
Немаловажный атрибут прохождения любого интервью — прийти на него в хорошем настроении. Будьте уверены, никто не хочет проводить 2 часовое интервью с человеком, который особо в нем не заинтересован и выглядит отстраненно. Чтобы этого избежать я рекомендую перед собеседованием сделать что-нибудь, что вам нравится, например, послушать активную музыку, погладить кота, выпить чашечку кофе.
С новичками все понятно, а как расти уже состоявшемуся разработчику?
На мой взгляд, уровень разработчиков различается прежде всего не техническими знаниями, а уровнем неопределенности, которую специалист может преодолеть самостоятельно.
Так начинающий разработчик получает небольшую хорошо проработанную задачу и выполняет ее. Например, красит кнопку или верстает простой экран.
Разработчик уровня мидл уже сам способен оценивать четко проработаные задачи среднего размера и искать техническое решение для них. Примером такой задачи может служить верстка сложного экрана или небольшого пользовательского сценария.
Разработчик уровня синьор может выполнить любую техническую задачу в адекватный срок, например, реализовать большой сервис или сложный пользовательский сценарий.
Что же касается ведущих разработчиков, помимо технической задачи они могут уже решить и продуктовую. Продуктовые задачи, как правило, не до конца проработаны и уже ответственность разработчика предлагать технические решения, подсвечивать будущие проблемы, ну и конечно же много коммуницировать с заказчиками и соседними командами, выясняя требования.
Получается что для роста разработчика прежде всего нужно стараться брать на себя больше ответственности. Стараться брать такие задачи, которые вы до этого никогда не делали, постепенно увеличивая уровень неопределенности.
Я вижу вы сменили довольно много компаний за свою карьеру, почему так?
Смена компании — это один из главных инструментов для быстрого роста разработчика. Каждый раз когда вы меняете работу, вы делаете рывок. Как в знаниях, так и в должности, зарплате. На мой взгляд это может быть обусловлено несколькими причинами:
- Разный этап разработки проекта — есть огромная разница между теми компаниями, которые находятся на ранней стадии разработки своего продукта и теми, что уже давным-давно вышли на рынок. Прежде всего это обусловлено характером задач. В молодой компании вы сможете реализовывать более низкоуровневый функционал, написать сетевой слой, привнести какие-то новые практики. В состоявшейся же компании, скорее всего, таких задач не будет, но зато будут другие, связанные с оптимизацией уже существующего функционала, починкой очень редких и сложных багов и другие. Соответственно, если вы достаточно давно работаете в компаниях одного типа, вы можете так никогда и не сделать некоторые виды задач и наоборот, когда вы переходите из компании одного типа в компанию другого типа, характер ваших задач меняется, зачастую очень кардинально, что расширяет ваши знания и углубляет экспертизу.
- Разные команды — во всех компаниях есть свой укоренившийся стиль разработки, зачастую эти стили довольно сильно различаются. Связано это не только с технологиями внутри компании и знанием проекта, но и с экспертизой самих разработчиков. Где-то есть люди, которые хорошо разбираются в многопоточности, в другой же компании большее внимание уделяют реактивному программированию. Сильнее всего это конечно же заметно на код ревью. Всегда, когда приходит новый сотрудник, у него сначала много замечаний на мерж реквестах, а потом их количество начинает постепенно снижаться.
- Разные зоны отвественности — в разных компаниях разные структуры построения команд, могут сильно отличаются зоны ответственности членов команды. В одних компаниях разработчики практически не взаимодействуют с заказчиком и коммуницируют только с разработчиками, в других наоборот, приходится много коммуницировать с заказчиками, тестировщиками и другими членами своей и соседних команд.
- Должность/зарплата — если вы не стоите на месте и постоянно развиваетесь, в какой-то момент вы можете понять, что ваша экспертиза начинает обгонять ваше вознаграждение, но зачастую компании имеют довольно строгий регламент, связанный с повышением. Как правило есть искусственные ограничения, которые не позволят вам расти так быстро, как бы вы хотели. Например, ограничение на повышение заработной платы не более чем на 20-30% в год. Или строгая система грейдов, которая не позволит вам за год вырасти с должности стажера до мидл разработчика, даже если ваши компетенции отвечают этому уровню.
Не стоит упускать из виду и то, что если у вас есть такой полезный навык, как умение сменить работу, вы будете чувствовать себя гораздо безопаснее. В случае, если ваш отдел неожиданно сократят или компания обанкротится, вам будет гораздо проще найти себе новое место, потому что вы много раз уже это делали.
Конечно же у данного подхода есть и минусы. Самый большой из них — это стресс. Каждый раз, когда вы меняете работу, это очень волнительно: длительные этапы отбора, затем переговоры по поводу оффера, муки выбора в какую компанию стоит идти, и конечно же испытательный срок. Все это отнимает огромное количество энергии и к этому стоит быть готовым. Однако если вы найдете в себе силы и сможете его преодолеть, практически гарантированно это положительно скажется на вашей карьере.
В завершении что бы вы хотели сказать тем, кто только собирается начать карьеру в этой отрасли?
Если вы все еще сомневаетесь, стоит ли вам идти в IT сферу, или вы уже решили, но долгое время не можете начать, то мой совет — просто попробуйте, откройте YouTube, вбейте название интересующей вас технологии (например, “Swift за час”) и попробуйте что-нибудь посмотреть. Скорее всего данное видео не окажется слишком сложным и, возможно, это вдохновит вас продолжить этот путь.
Если вы будете усердны, у вас обязательно все получится. Программирование, как правило, никак не связано с запуском ракет в космос, это довольно прикладное ремесло, которое доступно каждому. Совсем не обязательно знать в совершенстве математику, английский язык или программировать с самого детства.
Изучение программирования это не сложно, это долго. Рано или поздно вы освоите весь необходимый материал и обязательно найдете себе работу мечты!