Краткое содержание
Автор поныл, как тяжело живется инженерам на Руси и решил уходить в программисты. У него получилось. Пост о том, как именно.
Зачем я все это пишу
- Благодарность. Сказать «спасибо» сообществу Хабра.
- Поддержка и мотивация. Морально поддержать инженеров, которые тоже решили менять свое призвание на новое, но не могут решиться.
- Самомотивация. Для движения вперед очень полезны маленький отчет и немного планов, высказанных публично.
- Поделиться опытом. Возможно, кому-то мой путь покажет его собственную дорожку.
Благодарность
Ради этого пост задумывался. С этого и стоит начать.
Мой пост «Инженер VS Программист. Или куда уходят инженеры» принес множество комментариев, несколько личных сообщений, пару собеседований. Самое главное — он принес мне волну поддержки, позитива и мотивации.
Большое спасибо всему сообществу Хабра! Именно поддержка сообщества дала вдохновляющий пинок, вперед, к моей цели, и привела меня в программисты.
Отдельное спасибо хочу сказать serenityfx, который специально зарегистрировался, чтобы оставить комментарий с предложением поделиться своим опытом, нашел время побеседовать со мной лично, ответить на мои вопросы. Он дал мне направление и помог составить некое понимание, как и куда идти дальше.
Спасибо, Хабр! Ты крутой!
Краткое содержание прошлого поста
Проработав 14 лет инженером, в том числе инженером-разработчиком, я решил перейти в программисты, потому что инженер-программист — востребованная специальность с более высокой оплатой труда, широкими перспективами и возможностями.
Мой путь
Благодаря фидбеку от Хабра, я смог четко сформулировать два пути развития дальше.
Первый — еще раз попытаться найти себя как инженера-разработчика, как в России, так и за ее пределами. Благо, прямо из комментариев пришло несколько личных контактов, которые позволили сделать несколько попыток.
Второй путь, который тоже прорисовался достаточно четко – качать навыки программиста микроконтроллеров и встроенных систем и искать начальные позиции (джун-мидл) в этой сфере.
Как «умная и красивая обезьяна», у которой было время, я попытался идти одновременно по двум направлениям. Активно занялся поиском работы, в том числе за рубежом, и стал качать свои навыки в контроллерах.
Через полгода стало понятно, что первый путь все же тупиковый. Надо идти в программисты. Стечение обстоятельств подтолкнуло меня к увольнению. Я сосредоточился на контроллерах и поиске работы, но уже в качестве программиста.
Неожиданно для себя я получил предложение поработать в качестве фрилансера на проекте, который одновременно использовал меня и как программиста контроллеров, и как инженера-разработчика. Моя жизнь фрилансера продлилась 8 месяцев и закончилась вместе с платежами по заказам. Но мои навыки программирования за это время сильно подросли, поэтому я вернулся к рынку труда и поиску вакансии инженера-программиста.
По результатам одного из собеседований меня пригласили сначала на стажировку, потом на испытательный срок, который плавно перетек в постоянный контракт. Так я стал инженером-программистом встроенных систем.
Но давайте чуть подробнее о каждом из этапов.
Стартовая позиция
Начинается с инженера-разработчика. На самом деле, моя работа на половину состояла из разработки и тестирования алгоритмов, железа, на четверть из организационных вопросов — управлением командой, закупками и документацией, и на четверть из программирования разработанных устройств.
Как у инженера старой школы, у меня была склонность к теоретическим знаниям, поэтому к моменту увольнения за спиной у меня уже было несколько пройденных курсов разной степени полезности:
- Основы Linux от LinuxFoundation на edX и на Stepic от института биоинформатики
- Python там же от него же;
- Matlab на Coursera;
- Основы VHDL от Altera в Политехническом университете (сейчас отсутствует);
- Курсы по C++ от Яндекса (обидно, что они ушли на платную курсеру с бесплатного степика)
Кроме того были интересные, но бесполезные курсы от HTML Академии ИТМО (HTML/CSS/JS),
«Управления проектами» от ВШЭ и «Теория графов» от ИТМО. А также половина пройденного курса на JavaRush, который был заброшен после решения идти в embedded.
На практике у меня был опыт моделирования и обработки сигналов, связанных с моими устройствами. Опыт написания прошивок для контроллеров серии C8051 от SiliconLabs, младших контроллеров Atmel и немного опыта разработки для FPGA от Altera.
Также за спиной был опыт управления командой и мелкосерийным производством, но я считал его нерелевантным.
В поисках вакансии
Тема собеседований достойна отдельного поста. Их было много, они проходили волнами.
На собеседованиях был много странностей. Когда я приходил собеседоваться на позицию программиста, меня спрашивали, почему с таким опытом я не хочу работать инженером. На собеседованиях на позицию инженера меня пытали на предмет опыта программирования.
Были короткие встречи, на которых я говорил «Стоп, вам нужен не я». В противовес этому на одну из позиций был марафон собеседований из пяти двухчасовых собеседований на английском по скайпу. Были замаскированные военные, идти к которым я не хотел принципиально. Была фирма, которая по сути представляла собой кооператив фрилансеров во главе с менеджером.
Главным же итогом большинства моих собеседований было отсутствие предложений о работе там, где я хотел, и наличие предложений там, где мне не хотелось бы работать.
Жизнь во фрилансе
Здесь я с головой окунулся во все плюсы и минусы фриланса, которые многократно обсуждались на Хабре. Для меня огромным плюсом стало время. Я жил в своем таунхаусе на природе и не тратил время на дорогу. Зато я легко отдавал проекту по 12 часов в день, имея возможности учиться и закрывать те пробелы в знаниях, которые у меня были в программировании. Я окунулся в мир STM32 и, в том числе, FreeRTOS. Сначала смакетировал на Дискавери нужный мне проект, потом сделал плату и повторил его на 10х серии. Параллельно разобрался в Git и проектировании на UML в рамках нужных задач. К сожалению, уезжать далеко от дома я не мог, потому что осциллограф, паяльник, блок питания пришлось бы таскать с собой.
Одновременно пробегали проекты, связанные с антеннами и радарами. Но основной доход приносил один заказчик. К слову, этот доход был в полтора раза выше мой зарплаты инженера-разработчика.
Однако сначала заказчик стал задерживать оплату этапов, но я терпел. Когда же совсем перестал платить и исчез с горизонта, то пришлось затянуть пояс и идти искать работу снова.
Да, банальность известная всем — заключайте договор. Я обменял деньги на опыт работы во фрилансе и программировании.
Испытание боем
В эту фирму я попал со второго раза. Первая попытка решить тестовое задание (небольшая задачка для микроконтроллера) не привела к собеседованию. Отзвонился, узнал чем именно не понравилось мое решение (мало комментариев, предложен всего один вариант решения). Вторая попытка спустя полгода была более удачной.
Собеседование с представителем HR, с небольшими тестами. Разговор с будущим коллегой, долгий и обстоятельный. Суммарно более 2 часов. Предложение об оплачиваемой «стажировке» на несколько дней.
За время «стажировки» закрыл пару-тройку багов. Деньги получил на руки вместе с предложением испытательного срока на три месяца.
Можно сказать, что с этого времени началось настоящее погружение, длиной в полгода. Вкратце за это время:
- погрузился с головой в целое озеро легаси кода, борясь с багами;
- нахлебался встроенного Линукса, от драйверов до баш скриптов;
- быстренько пробежался по SVN;
- научился юнит-тестированию GTestом;
- освоил методологию CI, настроил свои задачи связкой Hudson/Ant/Python -> компиляция + юнит-тесты;
- разобрался с Qt и его виджетами;
- прокачал практическое применение FreeRTOS на STM;
- написал скрипты выходного тестирования для нового девайса;
- почти перестал чувствовать синдром самозванца.
Первые полгода были очень активным временем. Работаешь положенные 8 часов. Потом приезжаешь домой и все оставшееся время пытаешься быстро подтянуть свои знания и навыки, чтобы решить задачи, поставленные днем. На следующий день приходишь на работу и с новыми знаниями пытаешься решить задачу.
Очень сильно помогали коллеги. Где практическими советами, где просто идеями.
Когда работаешь в режиме: есть задача — нужно срочно решать, то обучение движется существенно быстрее. Главное не забывать смотреть чуть шире, и успевать понимать, что именно ты делаешь.
Сейчас я чуть снизил обороты, тем более что зимой я впадаю в состояние, близкое к спячке, но я уже не только работаю программистом, но и ощущаю себя им. Легаси код, спринты, проектирование, тесты, CI/CD в полный рост. И мне это чертовски нравится!
Зарплата по сравнению с инженером-разработчиком выросла более чем в два раза. Никаких переработок и непонятных требований. Это даже больше, чем я ожидал, когда собирался уходить в программисты.
Что дальше...
Не останавливаться. Это не сложно, потому что программирование имеет свойство затягивать в процесс. Начав, очень сложно остановиться.
Учиться. Потому что белых пятен в моих знаниях еще очень много, в том числе теоретических. А уж как не хватает практических.
Очень хочу заниматься своим проектом, тем более что у меня в голове есть парочка идей, а на руках две интересные платки.
Записался на пару курсов. Алгоритмы и базы данных.
Хочу дойти в той же сфере до сеньора, а там посмотрим.
Заключение
Самый главный посыл этого текста – я смог стать из инженера-разработчика программистом встроенных систем за два года. Если бы не терял время в тщетных надеждах и топтании на месте – в полтора года точно бы уложился.
Что было важно и нужно – знание теории. Базовые понятия, железо, Линукс, контроллеры.
Чего явно не хватило – практики. Любой свой проект, с обязательным красивым кодом и комментариями – очень не хватало при поиске работы.
Уверенность в том, что все получится. У меня были вдохновляющие комментарии на Хабре и «крепкий тыл», который в меня верил.
Еще раз всем огромное спасибо!