Из старшего научного сотрудника во фронтенд-разработчика через фриланс
Привет!
Меня зовут Виктор Истомин, я — мидл фронтенд-разработчик в Onecharge. Этот пост — моя история о сложном пути к фронтенду. Я работал в научной среде, делал сайты под заказ, помогал студентам с проектами. И вот, наконец, я работаю в той сфере, в которой всегда хотел.
Начало пути: учёба и преподавание в IT-вузе
Я рос в преподавательской семье, связанной с наукой: мама и дедушка были профессорами. Другой карьеры, кроме научной, я для себя не рассматривал. IT тоже интересовался с детства: активно ковырялся в компьютере, пытался строить какие-то 3D-модели, что-то программировать.
Когда заканчивал школу, мечтал стать разработчиком компьютерных игр, но тогда эта индустрия была ещё слабо развита. Нацелился поступать в вуз на программиста, но не прошёл по баллам. В итоге попал на информационную безопасность телекоммуникационных систем в Пензенский государственный университет.
Учиться было сложно — на момент поступления мне было 15 лет. Но я быстро приспособился и даже помогал программировать ребятам со следующего курса. После окончания университета в 2010-м я пробовал устроиться на профильную работу. Зарплаты предлагали очень маленькие — 3000–5000 рублей при стипендии в 600. Я отказался, хотя сейчас жалею — мог бы начать карьеру раньше.
Я пошёл в аспирантуру, тем более родители очень этого хотели. Начал проходить педагогическую практику: вести лабораторные, читать лекции, учить программированию. Но это была ужасно неблагодарная работа: большинству студентов ничего не надо, они тебя не слушают.
В то время я увлёкся бизнес-литературой, уже стало модно мечтать о стартапах. Меня с другими ребятами из аспирантуры пригласили в местную бизнес-школу. Там мы слушали лекции местных предпринимателей, пробовали защищать перед ними идеи своих проектов.
После этого опыта я подал заявку в региональный венчурный фонд с проектом по созданию медицинского комплекса для дистанционной диагностики и реабилитации пациентов после протезирования суставов. Этот проект предполагал разработку и аппаратной, и программной, и методической части. Сейчас я бы побоялся начинать практически с нуля такой масштабный проект, но тогда меня это ещё не смущало.
В результате я два года был генеральным директором малого предприятия. Отчитывался перед членами правительства области в совете директоров фонда, договаривался с московскими контрагентами, составлял ТЗ на ПО и организовывал приёмку разработанных приборов, нанимал врачей в местной больнице, чтобы они испытывали получившийся комплекс. Завершилась история банально: у фонда кончились деньги, и все малые предприятия потихоньку были ликвидированы.
В сухом остатке я приобрёл управленческий опыт, нежелание взаимодействовать с бюджетными деньгами, а также понимание того, что пора искать более гибкую область деятельности. На эту роль, в отличие от серьёзной науки или медицинских технологий, гораздо лучше подходила веб-разработка.
Слева я с прототипом проекта на выставке Роснано 2011 года. Справа — фото 2014 года с региональной выставки
Собственный интернет-магазин и фриланс
В вузе мне всё надоело: денег было немного, венчурный проект закрылся, а кандидатскую я уже защитил — больше ловить было нечего. Параллельно с этим в 2014-м жена открыла небольшой интернет-магазин, и я взял на себя техническую часть: вёрстку, программирование, доработку шаблонов, плагины, настройку рекламы, SEO. В итоге в 2016-м я уволился из вуза и полностью занялся семейным бизнесом.
Я всему учился самостоятельно. Возникала задача — читал документацию, статьи и гайды, разбирался и применял на практике. Считаю, на этом этапе я получил классный опыт — погрузился в бизнесовую сторону задач веб-разработчика. Мне было видно, к чему приводят все мои действия, какие влияния на бизнес они оказывают — ведь мой заработок зависел от фич и косяков.
Например, была история с масками телефонных номеров — +7 уже было проставлено, и если человек набирал »8965…», то последнюю цифру система автоматически удаляла, так как поле не принимало больше 10 символов. Приходилось прозванивать по 10 номеров со всеми вариантами последней цифры, чтобы дозвониться до клиента, пока я всё это не починил.
Слева скриншот нашего интернет-магазина с дизайном 2014 года, справа — с тем, что был после 2020-го
Потом у нас с женой было ещё несколько мини-проектов: она менеджерила и набирала команду, а я брал на себя техническую сторону.
Работа на фрилансе и выгорание
Где-то с 2019 года я начал брать и другие проекты на фрилансе. Я делал интернет-магазины и лендинги на Wordpress и иногда на Bitrix. В основном занимался вёрсткой: HTML, CSS, чуть-чуть скрипта, JQuery. Иногда были задачи на бэкенд, но немного, чаще были нужны PHP и SQL. С ними я разбирался, но с трудом и без удовольствия — фронтенд мне нравился больше.
Примеры проектов периода фриланса. Копия сайта Oculus.com на Вордпрессе для российского реселлера
И типичный пример интернет-магазина
Пару лет я плотно занимался фрилансом. У нас было что-то вроде команды: один был за менеджера и поставлял заказы, другой был за веб-дизайнера, а я — разработчиком на все руки. Делали сайты в формате »5 тысяч рублей за интернет-магазин с кастомным шаблоном» — сейчас даже звучит смешно.
Я тогда сильно выгорел: много заказов, ненормированный рабочий день, постоянный стресс. К тому же оказалось, что наш «менеджер» был простым перекупщиком — брал задачи на бирже и переадресовывал нам. А потом просто пересылал переписку между нами и заказчиком, почти ничего не делая.
Я понял, что могу искать заказы сам, и пошёл на биржи, в частности на Upwork. Но оказалось, что много месяцев напряжённого труда меня сильно подкосили: буквально тошнило от компьютеров, сайтов и вёрстки.
Перерыв: возвращение в университет и попытки дизайна
Чтобы отдохнуть, я решил вернуться к преподаванию и устроился по совместительству в два московских университета: всем известный МЭИ и небольшой МГГЭУ, который специализируется на обучении людей с ограниченными возможностями здоровья. Параллельно проходил бесплатные курсы по дизайну и рисованию.
Сейчас я понимаю, что это было не зря. Хороший фронтендер в чём-то дизайнер, и ему лучше знать, какой выбрать шрифт, какие цвета сочетаются между собой, где лучше подсветить кнопку. Сейчас я постоянно использую в работе знания из этих бесплатных курсов, особенно когда работать приходится без дизайн-макета.
В итоге я преподавал в вузе два года. За это время освежил знания алгоритмов, сортировок, поиска и вёрстки. Когда ты что-то объясняешь другим — это особый уровень понимания. Тебе надо не просто прочитать и как-то разобраться, а понять так, чтобы суметь объяснить на пальцах.
Потом я вписался в очередную научную разработку, но теперь уже связанную с применением VR-тренингов для снижения уровня стресса у студентов с инвалидностью.
Здесь я представляю эту разработку вместе со студентами
В общем, переключение на дизайн и преподавание в итоге вернули мне желание вернуться в разработку. Но уже не во фриланс, а в серьёзный коммерческий проект.
Обучение в Практикуме: командная работа и один шаг до вылета в академ
Я понимал, что навыки фронтенда у меня уже неплохие, но не хватает именно опыта коммерческой разработки: как взаимодействовать с командой, вместе делать проект и работать в Git. На фрилансе и самостоятельно такие навыки освоить крайне тяжело, поэтому я стал искать курсы.
В это же время я активно слушал подкаст «Запуск завтра». И там было интервью с кем-то из Практикума. Я послушал и решил посмотреть, что за курсы там предлагают.
Просто курс «Веб-разработчик» мне был уже неинтересен. На «Мидл фронтенд-разработчик» было явно больше полезного, но требовался опыт коммерческой разработки от года, и я считал, что мой фриланс не подойдёт. Теперь понимаю, что зря. Я был в раздумьях.
Спустя несколько месяцев в Практикуме появился курс по React, и я сразу за него схватился. Интенсивная прокачка, востребованный фреймворк, работа в команде — это то, что мне было нужно. И я пошёл учиться с чёткой целью — после курса вернуться в IT.
На первый поток я не успел и попал во второй. На учёбе было сложно. Я продолжал работать в вузе: читал лекции, принимал экзамены. К тому же у меня трое детей, в жизни которых я активно участвую: младшие на домашнем обучении, старший в девятом классе готовился к экзаменам. А жена тоже активно работает, так что домашних дел было немало. Поэтому учился часто по ночам, сильно уставал.
Параллельно с основным проектом на курсе предлагалось поучаствовать в командном проекте вместе с другими студентами. От него можно было отказаться, но это же как раз тот бесценный опыт работы в команде, который я так хотел получить? Разумеется, я вписался.
Командный проект был чем-то похож на опенсорс-разработку: по большей части мы были предоставлены сами себе, но могли попросить совет и обратную связь от наставников. Суть проекта состояла в доработке кода блог-платформы, которая намеренно была написана на старой версии React и содержала специально добавленные ошибки, чтобы мы потренировались в ковырянии легаси-проектов.
В Практикуме я преодолел неуверенность в себе. Понял, что не так страшно ошибаться, что команда поможет с ревью, оставит комментарии. Получил положительные отзывы от опытных разработчиков на ревью по основному проекту. А ещё я поработал в условиях, когда вся команда бродит по одному куску кода и что-то там делает, а потом приходится разрешать конфликты в пул-реквестах. Удалось также попробовать себя в роли проджект-менеджера: я вёл доску на GitHub, создавал таски, передвигал задачки, мотивировал ребят.
Проектная доска нашего командного проекта
В итоге я так увлёкся командным проектом и пытался сделать всё идеально, что в какой-то момент перестал успевать с домашками по основному курсу — там я тоже старался верстать пиксель-перфёкт, что вообще-то было необязательно. И куратор сказал, что, если не сдам долги — пойду в академ и продолжу обучение с сентября. У меня тогда всё внутри рухнуло: я уже уволился из вуза и в сентябре планировал найти новую работу, плюс к тому же в академе мне пришлось бы бросить командный проект, которым я руководил.
Я взял себя в руки, вечером того же дня всё доделал и потом нагонял отставание. Командный проект мы тоже завершили, и я провёл его демо перед наставниками курса и Александром Патлухом — он был одним из авторов этой активности. Конечно, результат был не такой, как хотелось, но всё работало.
Командный проект разместил один из членов команды в своём облаке. Проект по этой ссылке будет доступен до осени 2022 года. Репозиторий можно посмотреть тут.
Новостная лента командного проекта
Основной проект по Практикуму тоже получился неплохим и хорошо вписался в портфолио. На курсе мы разрабатывали SPA космической бургерной с классным дизайн-макетом. В приложении есть конструктор бургеров с Drag&drop, личный кабинет с авторизацией по JWT, лента заказов в реальном времени на вебсокетах.
Технически всё реализовано на TypeScript, React на хуках, Redux+thunk+toolkit, покрыто тестами на Jest и Cypress. Для вёрстки проекта использовалась специально подготовленная Практикумом UI-библиотека, компоненты из которой, впрочем, всё равно иногда приходилось допиливать самостоятельно.
Так выглядел конструктор бургеров на нашем проекте. А вот репозиторий
Поиски работы с карьерным треком
В середине августа я закончил обучение. Правда, со сдвигом по срокам: курс по React был новый, и спринты у нас растянулись. Деньги заканчивались, и срочно нужно было искать работу.
Я записался на карьерный трек и стал работать с консультантом. Мы подняли моё старое резюме, обновили — и оказалось, что я вполне могу претендовать на мидла. Мой фрилансовый опыт котируется, причём иногда даже круче коммерческого — ведь там больше стресса, ответственности и вовлечения в проблемы бизнеса.
Я сделал резюме на HeadHunter и завёл LinkedIn. Спустя неделю мне позвонил рекрутер из Onecharge. В разговоре мы поняли, что у нас много общего, а их подход к работе меня более чем устраивал: всё асинхронно и никто не стоит за плечом. Я им тоже понравился, и через пару часов мне перезвонили с приятным оффером. Я сказал, что подумаю, прошёл ещё пару собеседований, но потом понял, что Onecharge для меня — идеальный вариант.
Теперь я работаю в компании, которая занимается производством, поставкой и обслуживанием промышленных литий-ионных батарей в США. Там многое под NDA, но могу сказать, что последние 9 месяцев я занимался переносом большой и сложной внутренней системы менеджмента с Vue на React с усовершенствованиями и дополнениями.
Главные выводы, которые я для себя сделал из всей истории
Поработать в команде очень важно. На фрилансе нет обратной связи от других кодеров: вдруг ты пишешь плохой код или что-то неэффективное. В довесок развивается синдром самозванца, и ты не можешь понять, насколько ты реально хорош.
Для фронтендера полезно знать основы веб-дизайна и UI/UX. Не лишним будет пройти хотя бы несколько бесплатных курсов, чтобы понимать, как всё устроено и как сделать красиво и удобно. Это сильно поможет в работе.
Фрилансеру стоит поработать в штате. Только так можно чётко узнать себе цену на рынке труда. И бояться штата не надо: сейчас есть удалёнка со свободным графиком, которая не слишком-то привяжет к одному работодателю.
Нужно ходить на профильные мероприятия или хотя бы общаться онлайн с теми, кто работает в индустрии. Я был очно на открытой записи подкаста «Запуск завтра» и на большом юбилейном митапе MoscowJS 50, и это было очень круто. Особенно неформальное общение после мероприятий.
Помнить о здоровье. Пройти курс психотерапии, хорошо спать и активно двигаться. Так у вас будут силы на профессиональные свершения.