C++ — один из самых популярных и известных языков программирования. В рейтинге TIOBE 2023 года он занимает третье место вместе с Python и C. Рассказываем, что особенного в C++ и что нужно знать, чтобы найти работу.
Что такое C++
Основное преимущество C++ — скорость: он работает в среднем в два раза быстрее, чем Java, и в 30 раз быстрее, чем Python.
Поэтому в тех областях, где мгновенная реакция — необходимость, альтернативы C++ нет. В автомобильной сфере большинство программного обеспечения написано на C++. На нем же созданы все операционные системы, поисковые движки Яндекса и Google, многие мессенджеры (например Telegram), которые работают с большим объемом информации. Сюда же можно добавить все умные электронные устройства и бытовую технику.
Разработчик на C++ — непростая профессия. Язык считается трудным для изучения, а чтобы на нем писать, важно уметь работать с алгоритмами. C++ стоит выбирать тем, кому нравится «железо» и интересно разбираться в том, как устроены компьютеры и электронные устройства.
Есть одно точное выражение создателя этого языка, которым можно охарактеризовать программирование на C++: «C позволяет легко выстрелить себе в ногу; с C++ это сделать сложнее, но, когда вы это делаете, вы отстреливаете себе ногу целиком». Можно допустить одну небольшую ошибку, и программа упадет.
Где используется C++
Язык C++ долго был одним из основных в программировании. Сейчас его применяют реже, но он по-прежнему занимает важное место:
- в высоконагруженной разработке — C++ используют для систем, на которые приходится большая нагрузка, а также есть требования к скорости;
- программировании встроенных систем (embedded systems) — микроконтроллеров, беспилотных автомобилей, умных часов, сенсоров и устройств, использующих технологию интернета вещей;
- геймдеве — игровой движок Unreal Engine работает на C++, язык используют и для проектов на других технологиях;
- создании операционных систем — C++ используют как системный язык, например чтобы писать прошивки для разной техники и дорабатывать существующие ОС: Windows, Linux, Mac OS и iOS, Android и др.;
- разработке прикладного ПО — в браузерах, антивирусах, других сложных программах, где важно хорошее быстродействие и способность выдерживать нагрузку;
- создании специализированного ПО — например, в программах для различного оборудования, от софта для серверов до космических систем.
Причина, по которой C++ востребован именно в этих областях, — высокая эффективность. Если нужно написать код, который будет хорошо работать на слабом или узкоспециализированном железе, C++ незаменим. Язык кросс-платформенный, мощный и очень гибкий.
Особенности разработки на языке C++
При всех достоинствах C++ — сложный язык с высоким порогом входа.
- У C++ более низкий уровень, чем у большинства современных языков. Он все еще считается высокоуровневым, то есть отдаленным от «железа» и близким к человеку, но все же сохраняет возможность, например, напрямую работать с памятью. C++ не настолько уходит в человекопонятную абстракцию, как тот же JavaScript. Он может на довольно глубоком уровне работать с аппаратной частью компьютера. Поэтому важно понимать особенности работы «железа».
- В C++ нет автоматизации сборки мусора и других процессов. Многие вещи, которые в современных языках программирования за разработчика выполняют автоматические процессы, в C++ делаются вручную. Например, та же работа с памятью: в C++ разработчик выделяет память и управляет ей сам, а если ошибется, могут начаться утечки.
- В C++ много специфичных понятий и абстракций. Например, один из самых знаменитых типов данных языка C, перешедший и в C++, — указатель. Переменные этого типа буквально указывают на какое-то значение в памяти компьютера, и работать с ними нужно несколько иначе, чем с привычными переменными.
C++ совмещает преимущества низко- и высокоуровневых языков программирования.
Почему разработчик на C++ — особенный специалист
В большинстве других языков программирования разработчику не нужно знать, как работает техническая «начинка»: для сложных процессов есть библиотеки и уже готовые функции. В C++ программист должен понимать, как все устроено. Именно так он может писать эффективный и быстрый код.
В теории можно работать с C++ как с другими языками и не углубляться в детали, но на практике это бесполезно. Так теряется главный плюс C++ — возможность писать код, оптимизированный под «железо» и потому очень быстрый.
Хороший разработчик на C++ — человек, который, кроме самого языка программирования, разбирается в устройстве компьютера, алгоритмах и структурах данных, а еще умеет их применять. Для работы с языком важны познания в Computer Science: без них эффективные программы писать не получится.
Чем занимается C++-разработчик
Программисты на C++ создают от корпоративных систем до прошивок для космических спутников.
Это могут быть следующие программы:
- высокотехнологичные, с инновационными функциями, как, например, мощные нейросети;
- специализированные, то есть предназначенные, например, для микроконтроллера или системы на чипе;
- нагруженные, которые работают с большими объемами данных или занимаются интенсивными вычислениями — видеоигры, блокчейн-платформы и пр.
Это не исчерпывающий список. На C++, например, можно написать код для серверов известных сервисов. Музыкальная платформа Spotify использует для серверной части C++: сервис используют миллионы людей по всему миру, а музыка при этом должна проигрываться быстро и без задержек.
Что нужно знать разработчику на C++
Обычно для начала работы достаточно изучить синтаксис языка и работу с основными библиотеками, иметь общее представление об алгоритмах и структурах данных. C++ требует большего погружения и дополнительных знаний:
- алгоритмов. Как эффективнее реализовать то или иное действие, сократить количество вычислений и нагрузку на железо, заставить программу быстро работать — вопросы, с которыми C++-разработчик может сталкиваться часто. Без хорошего понимания алгоритмов не обойтись;
- информатики. Информатика, Computer Science, — это наука о компьютерах и о том, как они устроены. Разработчик на C++ взаимодействует с аппаратурой на более низком уровне, чем программисты на большинстве современных языков. Поэтому ему нужно разбираться в архитектуре компьютера и понимать, как адаптировать код к особенностям разного «железа»;
- математики. Без нее сложно реализовать алгоритмы, особенно в сферах, где многое связано с вычислениями: например в блокчейне или машинном обучении. Иногда разработчику могут пригодиться знания математики на уровне вуза.
Остальное зависит от сферы. Например, если разработчик решит развиваться в области встраиваемых систем, ему надо изучить низкоуровневые технологии: архитектуру систем, язык ассемблера, схемотехнику. Если захочет пойти в машинное обучение или анализ данных — теорию вероятности и математическую статистику.
В каждой сфере есть свои инструменты: в геймдеве это игровые движки, а в разработке десктопных приложений — фреймворки вроде Qt.
Сколько получают программисты на C++
Начинающему разработчику на C++ могут платить меньше, чем программистам на других языках. Но по мере набора опыта доход растет в десятки раз. Средняя зарплата разработчика на C++ в 2023 году — 162 000 рублей в месяц, а медианная — 131 000. Это данные по российским компаниям: в зарубежных оплата выше.
- Новичку готовы платить 40 000–80 000 рублей. Это немного для IT, но в целом соответствует средней зарплате джуна.
- Уже на уровне джуниор+ зарплата вырастает: от 80 000–100 000 рублей в месяц.
- Программисты среднего уровня получают от 100 000 до 200 000 рублей в месяц.
- Ведущие и узкоспециализированные разработчики могут получать от 300 000 рублей.
C++ нужно дольше учиться, и новичку не готовы платить больше, чем другим, — ему надо много узнать. Специалисты с опытом очень ценятся и могут зарабатывать большие деньги, особенно в сферах вроде телекоммуникаций или блокчейна.
Как стать C++-программистом и что для этого изучить
C++ не советуют изучать с нуля как первый язык программирования. Для многих он становится вторым или третьим после более простых языков вроде Python или JavaScript. Человек уже знает больше, лучше разбирается в IT, поэтому ему легче освоить сложную технологию. Но если вы готовы к вызовам, можно изучить C++ и первым языком.
Компьютерные науки. Их желательно освоить еще до знакомства с языком, потому что многое в C++будет сложно понять. Информатика рассказывает, как устроены компьютеры и данные, по какому принципу строится программное обеспечение, знакомит с алгоритмами и основными структурами. Например, тот же тип указателя проще понять, если человек уже знает, как данные хранятся в памяти компьютера.
Синтаксис языка. Синтаксис — это основные команды, типы, особенности работы с языком программирования. Базовые вещи можно освоить и без глубоких знаний в информатике, но чтобы понять больше, нужны дополнительные знания. Поэтому синтаксис C++ стоит изучать одновременно с компьютерными науками и подкреплять изученное на практике.
ООП и функциональное программирование. C++ отличается от C в первую очередь поддержкой объектно-ориентированного программирования. Многие программы пишутся на нем в парадигме ООП, поэтому даже начинающий разработчик должен быть с ней знаком и уметь реализовать принципы на C++. Cтоит побольше узнать про функциональное программирование. С++ нельзя назвать функциональным языком, но уклон в эту парадигму у него есть, и умение с ней работать может оказаться полезным.
Операционные системы и ПО для айтишников. C++ используют для системного программирования или создания программ, оптимизированных под конкретную архитектуру. Поэтому инструментов, которыми пользуется C++-разработчик, очень много: для Windows основной — это Microsoft Visual Studio, для macOS — Xcode IDE. Большой выбор инструментов для разработки на C++ есть в Linux. Например, Qt Creator, который стал очень популярным в последние годы. Вообще инструментов десятки, и выбирать можно любой для своего удобства.
Специализированные навыки. Все уже зависит от выбранной сферы. Например:
- в телекоме нужно разбираться в устройстве коммуникационных сетей, их архитектуре и инфраструктуре, знать, как эффективнее настраивать передачу данных;
- в машинном обучении понадобятся теория вероятности и статистика, умение работать с графиками и понимание теоретической базы ML. Пригодится знание специализированных фреймворков;
- в отрасли встраиваемых систем и низкоуровневого программирования понадобятся ассемблер, хорошее понимание «железа» и желательно навыки схемотехники;
- в разработке ОС нужно хорошо понимать, как устроены конкретная система и ее ядро, как в ней проходят процессы и хранятся данные;
- в геймдеве необходимо уметь работать хотя бы с одним игровым движком, понимать специфические особенности: как отрисовывается графика, рассчитывается физика предметов и так далее. Здесь не помешает знание пространственной геометрии и линейной алгебры.
Отталкивайтесь от навыков, которые перечислены в вакансиях по интересующему направлению. Например, если хотите писать на C++ игры, посмотрите, какие скилы требуют работодатели от новичков в геймдеве.
Если человек приходит в компанию на позицию джуна, то ему нужно знать лишь базовые конструкции языка — многого требовать не будут, так как понимают, что в течение полугода или года он значительно улучшит свои hard-скилы, главное, чтобы было желание.
Софт-скилы разработчика на C++
Для работы с C++ важны софт-скилы:
- аналитическое мышление — чтобы вдумчиво разбираться в сложных конструкциях;
- стремление постоянно учиться — в случае с C++ учиться и правда придется много;
- умение мыслить абстрактно — помогает решать нестандартные задачи;
- усидчивость — в C++ много ручной работы, нужно долго сидеть над задачей и концентрироваться на чем-то одном;
- хорошая память — вы ведь помните, что для работы с C++ нужно много дополнительных знаний?
Софт-скилы можно развить в процессе обучения и работы. Если на старте их не хватает, вы сможете усилить нужные навыки в будущем.
Стоит ли учить C++, если вы новичок
Обычно C++ рекомендуют изучать вторым или третьим языком. Иначе будет сложно погрузиться в структуры данных и устройство памяти компьютера. Но нет ничего невозможного. По C++ много документации, у него обширное сообщество, а основной синтаксис довольно простой; сложность — в необходимых дополнительных знаниях. Освоить C++ с нуля возможно, но понадобится много учиться.
Куда можно вырасти
Перспектив развития в IT-сфере для разработчика достаточно много. Если у человека есть опыт в программировании, то он со временем может перейти на другие позиции:
- project manager контролирует работу команды, общается с заказчиком, следит за сроками и отвечает за конечный результат;
- архитектор занимается построением IT-систем для решения бизнес-задач. Объясняет, как сделать программы правильнее и какие технологии использовать;
- product owner знает все о потребностях клиента и возможностях команды, о том, как их объединить;
- технический писатель занимается пользовательской документацией (FAQ, помощь), документацией внешних API и описанием внутренних систем проекта;
- тестировщик ищет ошибки и возможные сбои в программе, моделирует ситуации, которые могут возникнуть во время использования программ;
- DevOps-инженер умеет все и сразу: совмещает функции разработчика и сисадмина. Знает, какую архитектуру будет иметь приложение, и настроит сервера для его работы.
После C++ изучать другие языки программирования будет намного проще.