Хабр, привет! Меня зовут Никита, я софтвер-инженер в 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
Моё первое резюме в 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 — среде разработки для роботов и автопилотов. Насколько я знаю, туда берут даже людей без опыта, потому что с этим мало кто работает. Значительную часть информации придётся осваивать уже на месте, и это нормально.

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

Комментарии (9)


  1. Android1983
    08.10.2024 11:55

    Привет автор и хабр. Я тоже начинающий программист и даже на этом уровне я понял некоторые истины.

    Сейчас я поделюсь своими мыслями.

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

    Второе это то что у каждой IT компании свой подход к решению поставленных задач. И по этому зная свой вариант решения в новой компании все равно придется что-то изучать.

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

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


  1. sobeskiller
    08.10.2024 11:55
    +6

    Понятно что статья проплаченная чтобы толкать курсы C++. Лишь хочу предостеречь новичков чтобы особо не питали надежд что выучат C++ и дело в шляпе. Как раз коммент из интернетов (не мой):

    Голые C и C++ ... никому не нужны. Везде и уже очень давно требуется глубочайшая экспертиза в предметной области: девайсы/схемотехника, драйвера/кишки ОС, СЦОС/кодеки и т.п. Джуном если и возьмут кого, то только перспективного студента топового ВУЗа.

    Короче там где по-настоящему применяется C++, там требуются соответствующие инженеры с профильным высшим образованием, а не так называемые "айтишники". А C++ идёт лишь как прикладной инструмент, и сущая мелочь на фоне того объёма знаний которые вцелом требуются.


    1. SIWRX
      08.10.2024 11:55
      +2

      А другие языки программирования не являются прикладным инструментом?


      1. Gordon01
        08.10.2024 11:55

        Другие языки в 10 и более раз популярнее, поэтому и вакансий больше. Плюсы остались лишь в очень узких областях и там, где их ещё не заменили на Rust, Go или Swift


        1. unreal_undead2
          08.10.2024 11:55

          Разработка движков баз данных или игровых движков, математических библиотек, компиляторов, браузеров - это "очень узкие области"? Там, где надо действительно писать новый код, а не склеивать готовые фреймворки и библиотеки, C++ пока достаточно.


    1. NikWertCpp Автор
      08.10.2024 11:55
      +1

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


      1. sobeskiller
        08.10.2024 11:55

        Нет, вы не понимаете. Это с бизнес-логикой очередного интернет-магазина можно "разобраться". А термех, материаловедение, схемотехника, дискретная математика и т.д. - с этим вот не "разбираются" в кресле с ноутбучеком и смузи. Поэтому от будущего условного робототехника в первую очередь требуется диплом с вышеуказаными дисциплинами, а не C++. А C++ уже потом чисто "бонусом" идёт.


  1. StasEfremov
    08.10.2024 11:55

    Добрый день, хотелось бы чуть подробнее узнать о том, как происходил отбор в Huawei и адаптация там:) Работаю в области разработки инструментов статико-динамического анализа бинарного кода, хотелось бы узнать о схожем направлении.


    1. NikWertCpp Автор
      08.10.2024 11:55

      Привет, туда можно попасть только по рекомендации или hr сами свяжутся с вами. Насколько я знаю, сейчас открытых вакансий в huawei нет, увы :(

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