У Андрея Золотых нет романтической истории о том, как он бросил все и стал разработчиком на C++. Наоборот, он шел к этому осознанно и сразу после школы получил профильное образование в Санкт-Петербургском государственном техническом университете. Андрей успел поработать во многих сферах, а сейчас занимается разработкой программ для беспилотных автомобилей. На его примере рассказываем, почему C++ популярен и широко распространен и какие качества нужны, чтобы устроиться на работу в международную компанию.
Что такое C++?
Начнем с того, что C++ — универсальный язык программирования, который входит в тройку самых известных, наряду с Java и Python. Основное его преимущество — скорость: он работает в среднем в два раза быстрее, чем Java, и в 30 раз быстрее, чем Python.
Поэтому в тех областях, где мгновенная реакция — необходимость, альтернативы C++ нет. В автомобильной сфере большинство программного обеспечения написано на C++. На нем же созданы все операционные системы, поисковые движки Яндекса и Google, многие мессенджеры (например Telegram), которые работают с большим объемом информации. Сюда же можно добавить все умные электронные устройства и бытовую технику.
Язык C++ сложный для изучения и применения. Есть одно точное выражение создателя этого языка, которым можно охарактеризовать программирование на C++: «C позволяет легко выстрелить себе в ногу; с C++ это сделать сложнее, но, когда вы это делаете, вы отстреливаете себе ногу целиком». Можно допустить одну небольшую ошибку, и программа упадет.
В Викисловаре есть специальная трактовка этой фразы для программистов, которая звучит следующим образом: «Выстрелить себе в ногу — это повредить содержимое памяти компьютера через прямой доступ». Допустить такую ошибку в Java гораздо сложнее, а на Python — почти невозможно.
Язык программирования C — это часть языка C++. Поэтому если вы изучите C++, то автоматически выучите и C. Этот язык программирования по-прежнему очень популярен, и есть много хороших вакансий для интересных проектов, использующих чистый С.
Где используется C++?
- Разработка операционных систем: Windows, Linux, Mac OS и iOS, Android и др.
- Программирование встроенных систем (embedded systems): микроконтроллеры, беспилотные автомобили, умные часы, сенсоры и устройства, использующие технологию интернета вещей.
- Военно-промышленный комплекс.
- Сетевые устройства: маршрутизаторы, коммутаторы и др.
- Backend высоконагруженных систем (софт для серверов).
- Разработка игр.
- Разработка десктопных и кросс-платформенных приложений.
Этот язык стоит выбирать тем, кому нравится «железо» и интересно разбираться в том, как устроены компьютеры и электронные устройства. Свой первый компьютер — он назывался Sinclair — я спаял и собрал, еще когда был студентом в университете, и эта любовь к технике у меня сохранилась до сих пор. Я знаю и другие языки программирования, но C++ для меня самый любимый и удобный.
Еще подробнее про применение C++ мы писали в этой статье
Инструментов, которыми пользуется C++-разработчик, очень много: для Windows основной — это Microsoft Visual Studio, для macOS — Xcode IDE. Большой выбор инструментов для разработки на C++ есть в Linux. Например, Qt Creator, который стал очень популярным в последние годы. Вообще инструментов десятки, и выбирать можно любой для своего удобства.

Чем я занимаюсь и как устроена работа программистов?
Мой рабочий стаж уже более 25 лет, и первая моя работа была связана с программированием контроллеров для электроэнергетики. Начинал я с должности обычного программиста, а впоследствии стал руководителем отдела разработки. Проведя в этой компании почти 15 лет, я сменил сферу деятельности и на 7 лет ушел в менеджмент.
Вернуться все же захотелось, и выбор пал на компанию «Облачная медицина», которая специализируется на разработке современных медицинских информационных систем. Через год я перешел в компанию МТС ИТ, где мы с коллегами писали код на C++ для серверов, через которые абоненты МТС совершают звонки и используют интернет.
Сейчас я работаю в Luxoft. У компании множество офисов по всему миру, она разрабатывает программы для таких разных индустрий, например автомобилестроение, финансовые услуги, биотехнологии, медиа и телекоммуникации.
Я занимаюсь разработкой программ для беспилотных автомобилей. Написанные на C++ программы управляют работой всех систем автомобиля: поворачивают руль, меняют передачи, газуют и тормозят. Чтобы автомобиль мог собирать информацию об окружающей среде и принимать правильные решения, устанавливаются различные сенсоры (датчики). Все это помогает ему ездить самостоятельно, без водителя, и при этом быть безопасным для окружающих.
Я работаю в большой команде, в которой вместе с программистами есть также инженеры по автомобилестроению, архитекторы программного обеспечения, тестировщики программ и много других специалистов.
Моя же работа в том, чтобы запрограммировать определенный функционал, или, как мы его называем, фичу. То есть я получаю задачу, в которой говорится, что именно должно получиться в итоге. После этого я создаю алгоритм и пишу программный код, который будет управлять работой автомобиля при получении определенного сигнала или информации от сенсора.
После того как написан код, нужно обязательно сделать юнит-тесты и убедиться, что все работает так, как сказано в задании. После этого я передаю программу в отдел качества для более глубокого анализа и тестирования запрограммированных алгоритмов при всевозможных ситуациях и событиях.
Интересно, что программисты обычно знают, где работают их программы, и гордятся результатами своего труда. Моя первая работа была связана с электростанциями, и я могу назвать несколько десятков предприятий, где до сих пор работают программы и системы, которые мы вместе с коллегами когда-то создавали. Сейчас же я знаю модели автомобилей, которые в ближайшем будущем будут ездить по всему миру под управлением в том числе и моего программного кода.
Как выглядит типичный рабочий день C++-программиста?
Типичный рабочий день состоит из того, что программисты пишут программный код и отлаживают его. Но перед этим должны быть выполнены определенные действия, например: руководитель проекта ставит перед командой задачи для выполнения, тимлид дает задание программистам своей команды, архитектор объясняет, как лучше реализовать требуемый функционал.

При планировании своей работы мы оцениваем, сколько времени уйдет на ту или иную фичу. Допустим, ставим срок в две недели для того, чтобы изучить все вводные и начать работу. За это время нужно понять, как работает программа сейчас, как можно ее улучшить или добавить новые возможности — и ничего не сломать.
После этого уже начинается сама разработка, которая может занимать месяцы. Обычно мы работаем в командах по 3–4 человека, чтобы соблюдать Bus factor: если один человек выпадает из работы по каким-либо обстоятельствам, то оставшиеся без проблем закончат ее в нужный срок.
С командой мы находимся в постоянном контакте: созваниваемся и помогаем друг другу решать рабочие задачи. В этой сфере нет ничего страшного в том, чтобы обратиться за помощью или подсказкой.
Самой большой сложностью в программировании можно назвать человеческий фактор: сложно просить помощи у других. Но стоит помнить о том, что все ошибаются и не существует идеального кода — любую программу можно написать еще лучше. Самое главное в программировании — это создание надежного и безопасного кода; именно поэтому программы — это результат труда не одного программиста, а целой команды IT-специалистов.
Какие навыки важны и куда можно вырасти?
Для хорошей работы и продвижения по карьерной лестнице программист должен обладать как hard, так и soft skills. Почти единственный требуемый hard для разработчика — хорошее знание языка программирования. При этом если человек приходит в компанию на позицию junior-программиста, то ему нужно знать лишь базовые конструкции языка — многого требовать не будут, так как понимают, что в течение полугода или года он значительно улучшит свои hard-скиллы, главное, чтобы было желание.
При выборе среди кандидатов обязательно смотрят на soft skills: как умеет общаться, ведет ли себя адекватно, сможет ли работать в команде. Также немалое значение имеет развитый и широкий технический кругозор соискателя. Почти всегда выберут того, кто более приятен и интересен в общении, нежели того, кто более грамотен в языке программирования, но при этом производит не лучшее впечатление.

Перспектив развития в IT-сфере для разработчика достаточно много. Ведь если у человека есть опыт в программировании, то он со временем может перейти на другие позиции:
- project manager контролирует работу команды, общается с заказчиком, следит за сроками и отвечает за конечный результат;
- архитектор занимается построением ИТ-систем для решения бизнес-адач. Объясняет, как сделать программы правильнее и какие технологии использовать;
- product owner знает все о потребностях клиента и возможностях команды и знает, как это объединить;
- технический писатель занимается пользовательской документацией (FAQ, помощь), документацией внешних API и описанием внутренних систем проекта;
- тестировщик ищет ошибки и возможные сбои в программе, моделирует ситуации, которые могут возникнуть во время использования программ;
- DevOps-инженер умеет все и сразу: совмещает функции разработчика и сисадмина. Знает, какую архитектуру будет иметь приложение, и настроит сервера для его работы.
Я работаю в компании Luxoft всего лишь три месяца, и моя цель сейчас — получить опыт работы в международной компании на крупных и ответственных проектах. Это увлекательно!
Совет: меняйте работу примерно раз в два года; если проработать дольше, то начинается выгорание или застой. Вакансий в российских компаниях сейчас много, так как спрос на отечественное ПО резко вырос и специалистов требуется еще больше, чем ранее.