Интервью с Андреем Савельевым

Андрей шесть лет проработал верстальщиком до того как решил перейти во фронтенд разработку. Осваивать программирование приходилось самостоятельно, в свободное от работы время. Для помощи в составлении плана обучения он обратился к Ивану, нашему ментору. С тех пор прошло полтора года. Сейчас Андрей занимает позицию Middle Frontend Engineer в крупной компании и уже сам даёт консультации и курирует младших специалистов. Мы решили поинтересоваться как развивается его карьера.


Привет! Пожалуйста, представь себя для нашей аудитории.

Мне 30 лет, первое высшее образование не связано с IT. Сейчас получаю второе высшее по специальности «Информатика и Вычислительная Техника» по профилю «Программное Обеспечение Вычислительной техники и Автоматизированных Систем».

С 2008 года работаю в вебе. Занимался созданием сайтов на различных CMS (Wordpress, Joomla, Drupal, Modx, Data Life Engine и Bitrix) и их продвижением в поисковых системах и социальных сетях. Настраивал контекстную рекламу, разрабатывал прототипы и дизайны, занимался вёрсткой и написанием несложных скриптов в инфраструктуре jQuery.

В 2013 году, имея опыт фриланса, отслужив в армии, перебрался на работу в офис, где успешно применял полученные навыки и знания. В 2016 году переехал в Москву, поработал в поддержке большого высоконагруженного новостного сайта из ТОП-10. С 2018 года веду коммерческую разработку на React/Redux. В данный момент, я инженер в Сбербанк-Технологиях в Москве.

Какие технологии используешь на работе и в собственных проектах?

Список технологий, с которыми мне приходилось иметь дело, достаточно велик: React, Redux, Reselect, Redux-Thunk, Redux Saga, Recharts, Styled Components, TypeScript, Immutable, Lodash, Jest, Enzyme, Webpack, Gulp, NodeJS, Express, HTML, CSS, SCSS, PostCSS, Bootstrap, Git... – список постоянно растёт.

Из JavaScript фреймворков и библиотек мне больше по душе React, из менеджеров состояния - Redux, но в последнем несколько удручает объём бойлерплейта. Сейчас рассматриваю альтернативы и планирую присмотреться более детально к Effector.

Для обработки сетевых запросов и написания бизнес логики мне нравится Redux Saga, которая основана на генераторах. Ценю подход CSS in JS, в частности, использую Styled Components для домашних проектов. К сожалению, на текущем месте работы оно не применимо – используем внутреннюю библиотеку компонентов.

Также мне очень нравится типизированный код и я рекомендую изучать TypeScript. Ко всему прочему, он начал часто попадаться в вакансиях. Есть опыт продуктовой разработки на этом языке, но на текущем проекте пока что не используем статическую типизацию.

Слышал, что ты изучаешь Rust... Как оно? Каким образом планируешь применять?

Изучаю Rust для расширения кругозора. Для меня он привлекателен тем, что можно писать на нём как инструменты для девелоперов, консольные утилиты, так и бэкенд для web-приложений. Также я использую генератор статичных сайтов Zola для своего персонального сайта sandrig.com, который сейчас находится в стадии разработки.

Для справки. Rust — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla Research. Сочетает парадигмы функционального и процедурного программирования с объектной системой, основанной на типажах, и с управлением памятью через понятие «владения». В языке отсутствует сборщик мусора, что открывает ему рынок нагруженных приложений. Объектно-ориентированное программирование, как таковое языком не поддерживается, но большинство привычных паттернов ООП можно реализовать при помощи других абстракций.

Продолжаешь ли заниматься вёрсткой? Твой прогноз по технологиям?

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

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

Верно ли то, что ты сейчас получаешь второе высшее?

Да, я решил получить второе ВО, так как первое было не по специальности. Мотивацией стало то, что на руководящих должностях всё чаще в вакансиях указывают наличие профильного образования. Решил, что лучше инвестировать свободное время прежде чем столкнусь с карьерными трудностями в 40+.

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

Как решить, когда "менять направление", а когда "продолжать пробивать стену"?

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

Поделишься с нами какими-нибудь долгосрочными планами?

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

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

В настоящее время, делаю свои маленькие проекты, которые иногда появляются на GitHub. Также давно присматриваюсь к проекту howtocards/frontend. Може быть, через какое-то время, начну туда контрибьютить.

Твои советы начинающим?

  1. Изучайте английский язык. Актуальные и интересные материалы (статьи, видео, курсы) создаются, в-первую очередь, на английском.

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

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

    К примеру, вам нравится сфера машинного обучения. В ней лидирующим языком программирования является Python и необходима хорошая математическая подготовка. Вы открываете hh.ru и смотрите список вакансий и их содержание по вашему региону проживания, делаете выводы есть ли вообще вакансии в радиусе вашего поиска.

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

  4. Если вы не готовы постоянно обучаться, то программирование не для вас. Не идите в программирование ради денег – впустую потратите время.

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

  6. Как можно быстрее устройтесь на работу в хорошую команду, чтобы получать опыт реальной продуктовой разработки. Если вы уже давно учитесь в "пассивном режиме" а работы всё нет на горизонте – нужно что-то менять. Пересмотреть свои приоритеты или подход к обучению, например.

  7. Наконец, не расстраивайтесь из-за неудач. Негативный опыт – тоже опыт.


Спасибо, Андрей. Мы уверены, что эти советы, равно как и многие замечания по тексту интервью, найдут полезными не только начинающие. Было очень интересно пообщаться с тобой ещё раз. Искренне желаем удачи и дальнейших успехов в карьере!