Путь джуниора: от денвера к современным веб-приложениям
Интервью с Андреем Малюхиным (Team lead, Roowix)
Никита из тех разработчиков, который считает самостоятельность важным навыком в работе. Он рассудителен и обладает тонким чувством юмора. Благодаря ему рабочий Slack не такой скучный и богат мудрыми цитатами, типа: «Sometimes you do task, sometimes task did you».
Основной стек: PHP, JavaScript, TypeScript, Symfony, AngularJS.
Область интересов: web-development, мемы, Фридрих Ницше, граф Дракула.
Когда начал программировать и как попал в Roowix?
— Всё началось с колледжа, у нас был такой старенький набор джентльмена — денвер (Denwer). Своеобразная штука. Когда начался курс по базам данных, я начал в нём ковыряться (изучал возможности: внутренности проекта, т.е. как поднимается, почему Apache, какие PHP-модули уже есть, а какие можно добавить и т.д.). В итоге понял, что это поинтереснее, чем C, Delphi, C#. Первый диплом у меня был как раз на C# написан: десктопная программа, которая скачивала данные из социальных сетей и ты там мог строить различные модели данных передачи информации — она визуализировала вбитую в программу соц. сеть и графики. Программа полностью могла сымитировать социальную сеть оффлайн: данные брались из Microsoft Access. После использования денвера я понял, что винда для веб-разработки ужасна.

В колледже у нас был преподаватель, который раньше работал в Roowix. Он следил за теми ребятами, которые не «валяли дурака». После завершения основных курсов по веб-разработке он предложил мне и другим ребятам пройти стажировку в Roowix. В начале нас было пятеро человек, но уже после месяца стажировки осталось трое. Затем и остальные двое ребят оставили мир веб-разработки — в итоге, остался я один.

После колледжа я ушёл, так как начался первый курс вышки и я просто не справился с нагрузкой. Вернулся уже в 2016 году. Сначала меня посадили на учебный проект, а потом я занялся уже реальным B2B-проектом.
Как проходила стажировка?
— В первое время у меня были больше учебные задачи, но затем появились задачи на реальных проектах. Я почти сразу начал рваться помогать на продакшене и добился того, что стал работать над интернет-магазином линз на Magento. Затем работал над приложением для музыкантов на Symfony. Параллельно мы дорабатывали Weho (внутренняя программа): недавно я переводил её на PHP 7 и от своего старого кода плевался.

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

Хотя в полной самостоятельности тоже бывают минусы. Я такой человек, что привык делать всё сам и не отвлекать ребят. За что часто платился — вылезал за сроки. Теперь, если я начинаю долго и неимоверно тупить, то уже стучу во все двери и объясняю проблему.
Что больше всего помогает прокачаться?
— В первую очередь гугл-саморазвитие. Ну и конечно же, сам опыт от решения сложных задач: когда ты начинаешь думать о решении даже за пределами офиса. Roowix научил меня не бояться задач, какими сложными бы они не казались. Правильное планирование, разделение на более простые подзадачи, грамотное направление разработки и отличная команда позволяют решить задачи любой сложности. Но все равно я не люблю, когда не знаю, сколько времени займёт сделать новую штуку. Или когда не могу сразу определить «подводные камни», с которыми предстоит столкнуться в процессе. Как по мне, это приходит только с опытом.

Также важна помощь команды. Я всегда стараюсь максимально не затягивать с задачей, но бывает, что сядешь в лужу и здесь нужна обратная связь от команды. Например, это какие-то ссылки, указания, в какую сторону рыть. Тогда уже в 90% случаев я успешно справляюсь. Стараюсь по важным вопросам всегда советоваться, например, когда нужны архитектурные решения или есть техническая проблема в коде. Но сначала пытаюсь сам всегда разобраться. Смысл от того, что ты будешь ковырять команду? Если сам не хочешь разбираться, то потом на всю жизнь в привычку входит полная несамостоятельность. Надо различать командную работу и собственную ответственность. Если повезло и осталось время, то пытаюсь что-то оптимизировать, улучшить.
Как оцениваешь себя сейчас и чем гордишься?
— Оценил бы себя так: матёрый джуниор или даже начинающий дерзкий мидл разработчик.

Недавно появилась задача на фикс в одном из моих первых проектов — посмотрел админку, там моя штуковина до сих пор работает с 2014 года. Ещё я не ожидал, что так быстро разберусь с новой задачей в этом проекте. Возникла неочевидная проблема с платежной системой и конвертацией валют — я её поправил. Была она потому, что логика не была предназначена под новые настройки, которые сделали менеджеры. Система корректно работала до определенного момента. Этим «моментом» стало решение менеджеров принимать платежи в мультивалюте, а не конвертировать все в одну (на стороне платежного сервиса). С помощью логов, админки и БД удалось выяснить причину.

Интересный опыт работы с проектом iFarm (прим. ред.: веб-приложение по автомтизации теплиц) — здесь идет реальная работа с железяками. Чтобы веб-панель была связана с физическими устройствами — таких проектов я не встречал. Здесь есть нетривиальные задачи, так как проект узкопрофильный. Это интересно и этим можно гордиться.
Чему научился в Roowix?
— Главная фишка, которой я научился в Roowix— грамотно подходить к решению поставленных задач. С приходом iFarm я начал ставить свой воркфлоу более-менее правильно. Наиболее частый вариант в других компаниях — это хаотичный воркфлоу. То есть у большинства всё строится на доверии. Ты можешь совершенно неадекватно оценить задачу, если у тебя ещё есть какая-то Jira, но в большинстве случаев это какая-то своя устаревшая или бесплатная система. Ты там можешь «due date» максимум указать и всё.

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

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

Ещё важен интерес к работе. Любому программисту, как человеку, может быть ближе определенный подход. От этого тоже зависит скорость разработки. Возможно, какой-то инструмент и позволит разработать что-то быстрее, но если работать без энтузиазма и удовольствия — то в итоге может выйти даже дольше.
Какие по-твоему есть критерии, которые помогают удержать воспитанных в компании джуниоров?
Идея проекта/компании. Правильный воркфлоу. Интересные проекты и задачи. Адекватная оценка компетенций. Обмен опытом: наставничество, хакатоны, база знаний.