Такие разные «плюсы»: моя карьера разработчика C++ в «Коде безопасности», Яндексе и Huawei
Хабр, привет! Меня зовут Никита, я софтвер-инженер в Huawei. Мой путь в IT был не совсем обычным — я осваивал алгоритмы раньше языка, откатывался почти к старту на каждом месте работы, а однажды даже занял второе место в хакатоне для «питонистов» без знания Python. Но обо всём по порядку.
Почему я ушёл из сферы строительства
Я ещё в школе думал, что хочу заниматься чем-то на компьютере, но, к сожалению, таких перспектив в моей жизни долго не появлялось. В моей новосибирской школе не было информатики, и поэтому мне никто не разрешил её сдавать. Пришлось остановиться на физике с математикой. Так я волей случая попал в сферу строительства.
Окончил местный вуз, устроился на работу и… продержался меньше года. Я был обследователем, то есть подготавливал рабочую документацию для восстановления различных элементов зданий, выезжал на объекты, бурил шурфы, проводил вскрытие армирования железобетонных конструкций, занимался замерами и много чем ещё.
Что не нравилось? Основным минусом была, конечно, зарплата в 8 000 рублей в месяц, но вдобавок к этому и отношение начальства было ужасным — «ты всё нам должен, потому что мы тебе платим». Смешно, откровенно говоря.
Поступил в магистратуру на кафедру информационных систем и технологий. Немножко потрогал Java, немножко C++, но в основном занимался моделированием — в Revit, AutoCAD, 3ds Max. Затем переехал в Москву, поступил в аспирантуру в МТуСИ и устроился работать в ведущий институт Москвы по генеральному планированию.
Там я занимался BIM-моделированием — воссозданием в 3D строений и районов с прилегающей инфраструктурой и всеми коммуникациями. Чаще всего к нам приходили проекты по реновации. Работа была интересной, но через полгода пришли великие оптимизаторы и сократили 25% персонала. Я как новичок мог попасть под сокращение, но так как был одним из немногих, кто умел проектировать дороги в Civil 3D, эта участь меня миновала.
Ужасное отношение к сотрудникам — проблема не отдельных компаний, а, в большинстве случаев, всей сферы строительства. Если у вас иначе, то вам повезло гораздо больше, чем мне или моим друзьям, которые больше по специальности не работают
После момента с сокращениями я всерьёз задумался о школьной мечте стать программистом. А ещё один из моих друзей переобучился на тестировщика и рассказал, что, оказывается, в IT здорово — там по крайней мере люди общаются друг с другом более-менее адекватно. Я решился и стал совмещать работу с обучением.
Первые шаги: почему я почти сразу нашёл работу
Я выбрал C++ случайно. Ко мне приходил друг, разработчик C++, рассказывал про работу. Я сказал: «Вау, круто, а что ты можешь сделать?» Он открыл Visual Studio, написал какой-то простой цикл. Я повторил, мне понравилось. Вот и всё — никакой особенной рефлексии за этим не было.
Выбирал среди нескольких школ, но остановился на Яндекс Практикуме, потому что оттуда не названивали менеджеры по продажам. Правда, курса по C++ тогда ещё не было, поэтому я пошёл на «Алгоритмы и структуры данных», тем более друг-разработчик рассказывал, что это важная тема, которая всё равно пригодится (спойлер: сейчас я понимаю, что можно было «вкатиться» и без них, но кто же знал).
Это были четыре месяца мучения. Курс рассчитан на тех, у кого есть опыт, поэтому мне было очень тяжело. Приходилось много читать о синтаксисе, контейнерах, ещё какой-то гадости. Что это? Зачем мне это нужно? Короче говоря, приходилось с нуля изучать базу.
После обучения я поучаствовал в хакатоне от Практикума. Интересно, что они его организовали, но как-то упустили деталь, что на бэкенд в команды ищут именно Python-разработчиков. Естественно, я узнал об этом, когда команды уже были набраны. Пришлось разбираться на месте. Просидел 16 часов, но написал свою маленькую базу данных. Связка между фронтендом и бэкендом осталась незавершённой. Но это не помешало нам занять второе место! Было тяжело, но весело.
К этому моменту у меня были скромные знания C++ и неплохая база по алгоритмам. Я стал собеседоваться, и меня начали звать довольно хорошие компании, как наши, так и зарубежные. Например, я прошёл собеседования в Parallels, «Код безопасности», «Русбитех», которые делают Astra Linux.
Моё первое резюме в IT
Знаю, что на старте многим трудно найти работу. Думаю, что на моей стороне были несколько обстоятельств.
На рынке не так много «плюсовиков». Вакансий тоже меньше, чем, например, у Python-разработчиков, но всё равно — по ощущениям, разработчики C++ востребованы сильнее.
У меня было отличное резюме. Я хорошо его написал, добавил ссылку на GitHub, рассказал про предыдущий опыт. Спасибо акселератору Практикума — тонкостей создания резюме я нахватался там.
Сыграл мой прошлый опыт. Скажем так, он технический и совсем непростой. Программирование там тоже в каком-то виде было. Я проводил обучение специалистов из разных отделов, читал лекции и проводил практические занятия, вёл проекты и управлял командами.
Тогда в Практикуме появился курс «Разработчик C++», я решил записаться. В Parallels меня в итоге не взяли как раз поэтому — побоялись, что буду отвлекаться. Я пошёл в «Код безопасности».
Код безопасности: DevOps и CI/CD
Моя первая работа на «плюсах» была джуниором DevOps-инженером. Это был трэш.
В первые недели тебя начинают пичкать какими-то новыми словами, которые ты просто не знаешь. То есть тебе что-то говорят и ждут какую-то реакцию, а ты только и можешь, что сказать «ага» или «а-а». Спасибо «Коду безопасности» — к этому относились с пониманием, всё объясняли.
Я много работал с облачной платформой Microsoft Azure Devops Services, делал CI/CD, писал скрипты на XML. Вот последнее было самым сложным — скрипты были практически нечитаемыми, и проверять их можно было только при запуске самих пайплайнов. Задачи мне поначалу ставили простые (по их меркам, конечно): собери патч, внедри новый модуль, найди причину ошибки. Иногда на задачу, которая у тимлида занимала полтора часа, я тратил целый день.
Где-то через два месяца я уже мог спокойно выполнять рутинные задачи и начал придумывать, как это оптимизировать. Например, написал небольшой скрипт, который помогал собирать патчи, и сильно облегчил себе работу. Это было классно.
Через полгода размеренной работы меня поставили перед фактом: нужен совсем новый CI/CD и новые скрипты, кроме того, нужно глубоко изучить возможности Microsoft Azure Devops Services, чтобы использовать их в решении. Эта работа заняла у меня почти год. Когда прототип был близок к завершению, случилась всем известная ситуация, от которой все побежали в разные стороны. Побежать решил и я, но компания не разрешала удалёнку. Пришлось уходить.
Яндекс: работа с сетями
Я уже был в отъезде, когда со мной связался рекрутер из Яндекса. Я прошёл серию собеседований и устроился. Уже на позицию C++ разработчика.
И тут снова синдром самозванца: мне дико страшно, я вижу тонны кода, которые не понимаю, и сталкиваюсь с задачами, которые ещё не решал. Но поначалу они были не такими уж сложными: исправить баги, поработать с конфигурационными файлами, изучить какой-нибудь модуль, посидеть в саппорте и помочь пользователям разобраться с ошибками. В Яндексе я начал работать с сетью, выучил коды ошибок, понял, как работает JavaScript, как пишутся сайты.
Больше мне, впрочем, рассказать нечего. В один момент с задачами пришёл руководитель группы, и, к сожалению, с ним мы общий язык не нашли. Так я ушёл из Яндекса, проработав в нём около четырёх месяцев.
Huawei: LLVM и анализ кода
С тех пор я работаю в Huawei. Мы занимаемся внутренним продуктом для разработчиков, помогаем им не совершать ошибок при написании кода. Для этого я работаю с LLVM. И это очередная сложнейшая вещь в моей карьере. Такая работа может показаться не очень интересной, но знать в ней нужно прямо дофига. Как раз тут мне пригодились алгоритмы!
Кроме этого, нужно изучать кучу документации. Чтобы написать маленький чекер, у меня уходила неделя. Я переживал из-за каждой строчки кода и постоянно думал, что вообще не понимаю, что надо делать. Так было первые пять-шесть месяцев. К счастью, тут мне снова повезло с командой. Мне не давали сложных задач, всё объясняли и показывали.
В Huawei мы работаем по большей части со статическим анализатором, в частности Clang Static Analyzer. Пытаемся его модернизировать, пишем плагины, тестируем всё это дело. Пишем специальные правила для поиска различных уязвимостей в коде. Это очень кропотливая, сложная работа с огромным количеством false positives и false negatives. И она особенно помогает углубиться в знание самих «плюсов», потому что работа заключается как раз в анализе кода.
Самое важное: почему ничего не понимать — это норм
По сути, и в Яндексе, и в «Коде безопасности», и поначалу в Huawei я занимался джуниорскими задачами, просто разного характера. Там не было ничего сверхсложного, и даже к тимлиду было ходить необязательно — большая часть информации находилась и в легаси-коде, и на сайтах. Но даже эти задачи требовали много сил и времени. А ещё вызывали дикий стресс из-за синдрома самозванца и неуверенности в собственном коде. Это повторялось каждый раз, когда я менял работу. Спустя несколько месяцев такие задачи уже давались легче, и страх уходил.
Есть определённые направления, в которые ты можешь сознательно углубляться и совершенствоваться как специалист. Но есть и базовые вещи, необходимые для работы, которые не даст ни один курс. Они свои на каждом месте работы. То есть те же CI/CD в каждой компании могут быть написаны абсолютно по-разному, и тебе придётся в них погружаться, осваивать что-то новое.
У меня получилось так, что я поработал с CI/CD, с сетями, с LLVM. С одной стороны, я точно знаю, что всё это мне ещё пригодится. С другой, я понимаю, что в любом случае на каждом месте мне придётся осваивать даже знакомые инструменты с новой стороны.
Возможных направлений у разработчика C++ много. Например, сейчас очень востребованы специалисты по ROS — среде разработки для роботов и автопилотов. Насколько я знаю, туда берут даже людей без опыта, потому что с этим мало кто работает. Значительную часть информации придётся осваивать уже на месте, и это нормально.
Чтобы убедиться, можно открыть случайную вакансию. Скорее всего, кроме базовых пунктов, которые знают все, будут и какие-то новые, свойственные какой-то конкретной сфере. Я советую не бояться откликаться на такие вакансии. Ведь если ты чего-то не знаешь, это не значит, что тебя не возьмут. Мой опыт это подтверждает.