Кто такой разработчик на С++
Рассказываем о «плюсовых» разработчиках: почему это перспективная профессия и что нужно знать, чтобы войти в айти и не лишиться ног.
Иллюстрация: Meery Mary для Skillbox Media
С++ — это C-подобный язык общего назначения. Он унаследовал синтаксис у своего прародителя — языка С, и они часто используются вместе. С++ создал программист Бьёрн Страуструп для собственного проекта. Ему был необходим быстрый, выразительный язык программирования, который совмещал бы в себе свойства низкоуровневых и высокоуровневых языков программирования.
Низкоуровневые языки программирования в большей степени зависят от конкретного компьютера, поэтому их сложно портировать на машины с другой архитектурой. Высокоуровневые языки никак не зависят от компьютеров. С++ совмещает в себе оба свойства, что делает его уникальным.
У С++ слабая статическая типизация. Это значит, что типы данных определяются в момент компиляции, а не в момент выполнения кода. При этом во время выполнения программы типы могут меняться, причём неявным для разработчика образом.
Чем занимается «плюсовый» разработчик
Язык С++ используется для написания быстрого и высокотехнологичного ПО. Например, на «плюсах» написана серверная часть Spotify, продуктов Adobe, частично операционная система Windows. На нём пишут драйверы для принтеров и видеокарт, игры — например, Counter-Strike и Diablo — и игровые движки: частично Unity и Unreal Engine. А ещё на C++ можно написать программу автопилота для дрона, софт для умного дома или даже для технологичного вооружения.
С++ обеспечивает высокую скорость работы и помогает сконструировать сложные программы автоматизации для производства и применяется в машинном обучении — например, в CatBoost или XGBoost.
Преимущества С++
Как и у любого другого языка программирования, у С++ есть свои сильные и слабые стороны. К сильным сторонам можно отнести следующее:
- Разнообразие направлений работы: можно разрабатывать игры и игровые движки или программное обеспечение, например поисковые системы, десктопные приложения.
- Это перспективный язык, который будет востребован ещё долго. После «плюсов» было создано много и других интересных технологий, однако заменить C++ чем-то другим сейчас невозможно. Согласно рейтингу Stack Overflow Developer Survey 2021, язык входит в топ-10 самых популярных, а по данным TIOBE, с конца 2019 года его популярность уверенно идёт вверх.
- Много библиотек, которые помогают писать код быстрее и эффективнее — например, Qt, Boost или Eigen.
- Разработчикам на C++ готовы платить большие деньги. Грамотные и продвинутые специалисты уровня middle, middle+ и senior получают от 200 тысяч рублей (по данным hh.ru на 2022 год).
Недостатки С++
- Высокий порог входа. С++ не очень дружелюбен к новичкам.
- Сложный синтаксис, к которому придётся привыкать, особенно если до этого вы изучали другие языки программирования.
- Требует дополнительных знаний из области математики или машинного обучения для более качественной работы.
План обучения: что нужно знать, чтобы писать код на С++
- Изучить основы Computer Science, особенно алгоритмы, типы и структуры данных. Также надо знать разные парадигмы программирования: отличать объектно-ориентированное программирование от функционального или процедурного. Нелишним будет понимание архитектуры компьютера и операционных систем, поскольку С++ предполагает возможность ручного управления памятью.
- Далее можно уже изучать основы С++: синтаксис языка, переменные и работу с ними, циклы, функции, условные конструкции.
- С набором базовых знаний можно приступить к изучению объектно-ориентированных возможностей языка: создания классов и объектов, наследования и шаблонов. С шаблонами новичкам может быть особенно сложно, поэтому им нужно будет уделить особое внимание.
- Если есть потребность и желание, то можно разобраться ещё и с функциональными возможностями языка, например лямбдами.
- С таким набором знаний можно изучать стандартную библиотеку языка, она содержит большую часть алгоритмов и структур данных, необходимых разработчику в ежедневной работе.
- Далее будет полезно получить общие представления о системах сборки (Make, CMake), компиляторах (CLion, GCC) и базовое понимание работы операционных систем — Windows и Linux.
С этими навыками уже можно претендовать на позицию джуниор-разработчика на C++. Кроме практических знаний языка, систем сборки и библиотек, от джунов также ждут навыков работы с таск-трекерами, готовности изучить новые фреймворки и библиотеки в процессе работы и софт-скиллов: ответственности, дисциплинированности, навыков деловой коммуникации.
Дальнейшее развитие зависит уже исключительно от того, в какой сфере вы хотите развиваться:
- Для работы в геймдеве полезно будет получить представление о линейной алгебре, работе с графикой, изучить более подробно существующие движки (Unreal Engine — один из самых популярных на сегодня).
- Для работы в сфере ML — знание основ статистики и теории вероятностей, понимание работы алгоритмов машинного обучения или нейронных сетей.
- Для разработки десктопных приложений — изучить популярные библиотеки и фреймворки (Qt, например), глубже понять нюансы работы ОС, под которую разрабатывается приложение.
- В отдельную область можно вынести embedded (работу с железом) — тут, скорее всего, понадобится хорошее знание ассемблера, понимание принципов аппаратной работы компьютера, для некоторых вакансий — знания схемотехники.
С++ для новичков в программировании
Новичкам в программировании будет сложно учить С++, потому что язык предполагает, что разработчик уже имеет базовые знания о Computer Science и разбирается в ручном управлении памятью. Для первого языка С++ может быть сложным, но если вас это не пугает и вам действительно интересна эта технология, то нет смысла начинать с чего-то другого.
Вам будет проще изучать С++, если у вас уже есть общие знания о компьютерах и программировании. С++ помогает прокачать навыки алгоритмического мышления, а благодаря работе со статической типизацией вы освоите концепции, которые в других языках скрыты от разработчиков.
Если вы готовы к длительному и интенсивному процессу обучения, то C++ будет хорошим выбором. Ваши старания и знания окупятся, когда вы будете работать с интересными проектами и получать достойную заработную плату.
Что с работой: вакансии, зарплаты и обязанности
На апрель 2022 года на hh.ru опубликовано более 2,5 тысячи вакансий разработчика на C++. Заработная плата для джуниор-специалиста стартует от 50 тысяч рублей. Предлагают как разрабатывать компьютерные игры, так и работать над многопоточными приложениями или над автоматизацией процессов.
На «Хабр.Карьере» опубликовано более 600 вакансий для разработчиков на С++, среди работодателей есть МТС, VK, «Лаборатория Касперского», «Яндекс» и другие крупные компании.
У заработной платы достаточно большой разброс. Джуниоры получают от 40 до 90 тысяч рублей, middle-специалисты — от 120 до 250 тысяч рублей, а сеньоры — от 300 до 700 тысяч рублей.
Как правило, от джунов ждут, что они будут хорошо владеть синтаксисом языка, стандартной библиотекой и средствами сборки. В обязанности middle-разработчика входит ещё понимание работы различных компиляторов, а также навыки написания асинхронного кода и многопоточных приложений.
Для разработчиков уровня senior требования будут сильно различаться от компании к компании. Однозначно необходимым будет, помимо всех навыков джуна и мидла, хорошо владеть профилировщиками (Perf) и отладчиками (GDB, Valgrind), уметь анализировать core dumps, разрабатывать архитектуру. Также будут нелишними знания о внутреннем устройстве языка, его взаимодействии с ОС. Например, понимание модели памяти для различных процессоров и знание устройства стандартной библиотеки.
Все эти навыки могут помочь находить наиболее правильные и качественные решения в сложных случаях, с которыми не могут разобраться менее опытные коллеги. Но стоит понимать, что все такие разделения условны.
Где учить С++
Программы высшего образования можно посмотреть в НИУ ВШЭ, МГТУ им. Баумана, МФТИ, ИТМО по направлениям «Программная инженерия» или «Прикладная математика и информатика».
Плюс высшего академического образования в том, что вы получите там хорошие базовые знания и сможете опробовать несколько технологий сразу. Из минусов — долгий процесс обучения и устаревшие программы (не везде, но во многих вузах).
Резюмируем
С++ — это перспективный язык программирования, полных аналогов которому ещё нет. С его помощью можно создать игры, высокотехнологичное и скоростное ПО. Он не очень дружелюбен к новичкам и требует сопутствующих знаний, однако он очень востребован, а работодатели готовы хорошо платить за знания и навыки.
С++ отлично подойдёт всем, кто любит компьютерные игры, хочет лучше разбираться в железе или машинном обучении, а ещё он понравится тем, кто хочет заниматься автоматизацией процессов.