🗣 «Я даже не видел себя разработчиком, это было просто хобби»
Александр – разработчик на Ruby c семилетним стажем. Он рассказал нашему корреспонденту, какие сложности встречаются в карьере программиста, можно ли стать профессионалом без высшего образования и какие мифы о Ruby – просто мифы.
- Здравствуйте, Александр! Расскажите о себе.
- Мне 28 лет. Закончил 11 классов и 1 курс физфака СПБГУ, потом бросил. Живу в Петербурге. Программирование изучал самостоятельно: в школе участвовал в олимпиадах по С++, а потом уже на работе учил.
- С университетом история довольно простая, выбрал физический факультет, потому что в школе был хороший учитель физики. Выяснил в начале обучения, что физика мне не настолько интересна, насколько я думал, и я стал прогуливать пары.
- Почему не перевелись на программирование?
- Как ни странно, программирование тоже не особо интересно, если учится этому в вузе. Один из больших минусов вуза – программа для всех одна. В итоге первый курс для меня разделился на то, что я уже знаю, и то, что мне скучно. В любом случае, когда я начал получать какие то деньги, даже мысли продолжать учебу уже не было.
- Как получилось, что вы стали Ruby-программистом?
- Если говорить о выборе, я изначально изучал очень много языков, от Lisp до C++. Все это было последовательно. Когда я изучал Ruby и прогуливал универ, мы как то сидели с другом в кафе, пили чай и наш общий знакомый пришел с историей. Он написал биржевого бота для торговой площадки steam и начал зарабатывать на нем какие-то деньги. Я предложил бесплатно переписать его проект на Ruby, потому что это была интересная практика. История закончилась тем, что у меня был практический опыт разработки около года. Наш «стартап» закончился, когда владельцы Steam закрыли удобные пути вывода средств с биржи, и я пошел искать работу. На резюме с практическим опытом в Ruby отреагировали моментально.
Тогда я особо не задумывался, стоит изучать язык или нет, я изучал языки в очень бодром темпе и так совпало, что история с Ruby закончилась трудоустройством. Хотя я даже не видел себя разработчиком, это было просто хобби.
- У вас не было проблем при трудоустройстве? Никто из-за корочки не отказывал?
- У меня есть резюме, где написано, что диплома нет. Если у работодателя в требованиях ВО, то тоже первым не пишу. Даже не знаю, много ли потерял. В высшее образование для прикладного айти я в принципе не особо верю: это в основном нужно теоретикам. Если мне предложат на выбор человека с ВО без стажа и человека без ВО, но со стажем 1 год, я выберу второго.
- При этом понятно, что опытные программисты математику все равно так или иначе знают, просто теоретикам надо из теории графов знать кучу всего, а практикам определение и какие алгоритмы для работы существуют.
- Многие пишут, что Ruby не очень популярен в России, разве что для стартапов и релокаций. Это правда?
- По поводу популярности языка в России – это немного миф, на рынке очень сильный дефицит кадров, в основном джунов и сеньоров. При том что самих вакансий немного, найти работу достаточно легко.
- Можете сказать, какие скиллы нужны для разработчика на Ruby для джуна, мидла и сеньора?
- Я бы предпочел сослаться на общепринятые определения. У Ruby нет особой специфики. Джун делает задачи под руководством, мидл может работать самостоятельно, сеньор руководит.
- Сеньор обычно ставит задачи, но и мидлы могут заниматься постановкой задач. Руководство со стороны сеньора состоит в том, что он определяет, как именно будут сделаны задачи, что они должны затрагивать помимо бизнес скоупа и когда пора заниматься бэклогом. При совмещении с бизнес-процессом сеньор должен выступать скорее экспертом, который помогает тимлиду.
- Разумеется, в реальности все совершенно не так, и даже джуны являются экспертами в каких то узких областях, а сеньору не стыдно попросить у кого-то помощи в его экспертной области – это просто общая схема. Есть еще стажеры/ньюби/новички. Джуны могут решать задачи любой сложности без руководства, но не очень хорошо. Стажеры все еще учатся этому.
Собственно, тут первое заблуждение с пониманием всего этого. Обычно стажер думает, что стал джуном, когда у него начинает получаться решать свои задачи самостоятельно, но ему пока не ставят очень сложных задач. Джун думает, что становится мидлом, когда ему начинают ставить сложные задачи, и он с ними справляется. Мидл думает, что стал сеньором, когда сеньоры перестают его обильно критиковать. Ну и обычно люди думают, что если они проводят ревью, то они уже сеньоры, хотя я считаю что даже джуны должны принимать участие.
- У меня есть один знакомый, тоже рубист, кстати, он из стажера перепрыгнул сразу в CTO. Вера в себя есть, нормального понимания того, что нужно от CTO, у работодателя нет, в итоге получаем историю успеха. И в целом он справился. Как говорится, не можешь – научим.
- Сеньор это должность. Ты можешь быть готов ее занимать, думать что готов ее занимать или ее занимать. Причем то, что ты ее занимаешь, не означает, что ты в принципе готов, но может быть и приятный сюрприз.
- Сейчас вы на Ruby работаете? Говорят, будто там довольно высокий порог входа. Это правда?
- В данный момент я уволился с работы (в январе), но продолжаю консультировать бывшую команду и прямо сейчас делаю довольно объемную задачу. Это сложно назвать увольнением даже. Планирую в ближайшее время начать что-то искать, но пока не обновлял резюме.
- Про высокий порог входа это какой то миф. Я занимаюсь сейчас подготовкой кадров. На знакомство с языком для человека с определенным бэкграундом я отвожу две недели, дальше идет уже знакомство с какими то удобными инструментами и обучение общепринятым практикам. Если брать стажеров с базовым знанием языка, то до уровня джуна они поднимаются за 2 – 4 месяца работы.
- Фактически вы сейчас занимаетесь обучением?
- Скорее консалтингом. Обучение занимает у меня несколько часов в неделю. Правильнее даже не консалтинг, а расслабленный фриланс с единственным контрагентом.
- Чему учите новеньких? Вы учите тех, кто уже что-то знает, или вообще нулевичков?
- У меня было пока две группы: первая с неоконченным высшим, вторая – просто случайные люди. Совсем с нуля тяжело, плохо понимаю в чем у людей могут быть проблемы. Я познакомился с программированием лет в 8, у меня совершенно другой бэкграунд. Если мы про пару недель на изучение, то это про людей с каким то околоайтишным бэкграундом типа хороших оценок в школе на информатике.
- Как вы пришли к тому, что стали учить?
- Учить я начал, потому что мне просто нравится учить людей. Можно учить кого то в интернете жизни, а можно учеников руби. Можно просто помогать с домашкой одноклассникам, тоже обучение. Наверное, примерно в таком порядке и было: сначала чуть чуть помочь подруге с информатикой в школе, потом в универе. Случайно оказавшись в репетиторской тусовке, тоже взял учеников, которые учатся в той же школе и у того же преподавателя, а дальше все как то затихло. Два года назад начал учить сестру с подругами, одна из подруг в итоге работает вместе со мной.
Учить кого то в интернете жизни, кстати, до сих пор нравится больше, хоть и менее продуктивно :)
- Над какими проектами вы работали? Какой из них был самым сложным и интересным?
- Я работал над gettransfer.com, gettransport.com, wfolio.ru и еще некоторыми проектами. Это не мои проекты, в геттрансфере/транспорте я в принципе был линейным сотрудником. В wfolio.ru – уже сеньором.
Сложными обычно бывают задачи, а не проекты. Самая сложное – это, наверное, промо-акции, которые реагировали на события у пользователей и по каким то настраиваемым правилам выдавали вознаграждение. Но по субъективному ощущению, именно на этой задаче я рос из джуна в мидла.
- На самом деле это была не одна задача, а много связанных, и не все из них делал я, но я занимался общим рефакторингом архитектуры и потом запиливал большую часть фич, так как кроме меня там мало кто мог разобраться. В целом я воспринимаю это скорее как провал, но я вынес из него много опыта на тему того, как не нужно делать. И было интересно.
- Из того, с чем сейчас сталкиваюсь, самое сложное – это быстро вникнув в проблему другого человека, объяснить ему решение так, чтобы он мог самостоятельно найти в этом решении несостыковки. Очень мешает авторитет, особенно когда взаимодействуешь с джунами. Тут еще, вероятно, не очень хорошие процессы сказываются: я где-то год хочу попробовать design-review.
Если человек тратит на задачу несколько недель, а ты – пару часов, разумеется, ты не можешь придумать оптимальное решение какой то проблемы. Какой бы у тебя не был опыт, все равно он не переносится дословно.
- Почему вы решили уйти?
- Хочется роста, в идеале хочу найти работу, где меня будут учить управлению командой. В принципе, после того как я лучше познакомился с процессом руководства, меня это начало привлекать гораздо больше разработки. Ну и как минимум – разнообразие. Я почти 7 лет пишу код, от этого можно устать.
- Почему на прежнем месте вы не стали делать карьеру тимлида? Не было возможности?
- Во-первых, у нас небольшая команда и вряд ли там нужен будет второй тимлид в ближайшем будущем. Во-вторых, это в принципе не так удобно, как расти в большой команде, где тебя могут и научить и подстраховать более опытные лиды.
Говорить о росте сеньора до тимлида в принципе не очень корректно, так как это уже разные направления развития – тут скорее перепрофилирование. Конечно, у сеньора есть набор soft skills, который применим и при работе тимлидом, но на мой взгляд это довольно разные вещи. Сеньор – это эксперт, а тимлид занимается принятием решений. Это разные области.
***
Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?
Можно учиться самостоятельно (долго) или пойти на курсы с преподавателями (быстро). Плюс нужно учитывать, что джунов много, конкуренция выше и работодатели повышают порог вхождения при найме на работу. Чтобы получить актуальные знания, мы в proglib.academy запустили курсы:
- Основы программирования на Python.
- Профессия Python-разработчик.
- Алгоритмы и структуры данных.
- Математика для Data Science.
- Профессия Data Science.
- Frontend Basic: принцип работы современного веба.
- Профессия Фронтенд-разработчик.
- Обработка естественного языка. Полный курс.
На подходе еще больше 10 курсов для взрослых и детей.