Выбираем язык программирования: что нужно знать о С++

Рассказываем, для чего нужен язык С++, сколько получают разработчики, и сравниваем C++ и другие языки.

Сейчас С++ один из самых популярных языков программирования. Например, в рейтинге TIOBE за декабрь 2019 года он занял четвёртое место (на первых трёх — Java, Python и C).

С++ можно найти почти везде: в играх, программах и в таких гигантах, как Google и YouTube. Даже в Facebook, который написан почти только на PHP, есть С++. Также его используют в продуктах Adobe.

Это объектно-ориентированный язык, основанный на языке С. В девяностые годы Бьёрн Страуструп пытался добавить в С классы и объекты, но в итоге получилось не расширение, а целый новый язык. Как и в С, в С++ можно работать с данными на низком уровне (хотя и с ограничениями) и с указателями.

У С++ сильная (строгая) типизация: разные типы переменных нельзя использовать в одном выражении, а неявные преобразования не выполняются автоматически. Это даёт уверенность, что «всё пойдёт по плану» и переменные не поведут себя неожиданно. С другой стороны, за эту уверенность приходится платить гибкостью языка.


Мария Грегуш

В бэкграунде — программирование, французский язык, академическое рисование, капоэйра. Сейчас учит финский. Любит путешествия и Балтийское море.


Плюсы, минусы и особенности C++

Плюсы

  • Поддержка объектно-ориентированного программирования (ООП). ООП помогает сделать код проще, и его быстрее писать. Большой цикл статей про ООП.
  • Высокая скорость.
  • Возможности для работы с данными на низком уровне — то есть на уровне, близком к аппаратному. Благодаря этому на С++ можно писать драйвера, микроконтроллеры.
  • Популярность:
  1. Для С++ создано много библиотек и компиляторов.
  2. С++ используется практически везде (несколько примеров мы уже привели выше).
  • Синтаксис С++ похож на синтаксис C, С# и Java, так что переключаться между этими языками достаточно легко.
  • Совместимость с C благодаря тому, что С++ создавался на его основе.

Минусы

  • Небезопасность: С++ даёт большую свободу действий, но и не удержит вас от ошибок. А лёгкий доступ к памяти делает его уязвимым не только во время хакерских атак, но и при неосторожной работе.
  • Зависимость от платформы: написать на С++ портативный код (такой, который бы работал на разных платформах) очень сложно.
  • Синтаксис строгий и «многословный»: код читается хуже, чем в некоторых других языках (например в Python).
  • Сложность: у С++ сложный синтаксис и маленькая стандартная библиотека, а ещё надо разбираться в указателях и работе с памятью, поэтому учить его нелегко, особенно с нуля.

Спорные стороны

  • Указатели: для многих разработчиков они очень важны. Некоторые языки не позволяют с ними работать, что однозначно даёт С++ преимущество. С другой стороны, при программировании на С++ работа с указателями неизбежна, то есть разбираться с ними придётся волей-неволей. Неправильное использование указателей может привести к неприятным последствиям, как, например, крах программы или искажение памяти.
  • Нет автоматической сборки мусора: программисту приходится всё делать самому. Иногда возможность управлять ресурсами полезна, но в некоторых случаях это создаёт лишние сложности. В любом случае на это придётся тратить дополнительное время.
  • Маленькая стандартная библиотека по сравнению с другими языками (например c Java).

Для чего используют С++

С++ широко используется, начиная с игр (вот несколько известных: Counter-Strike, World of Warcraft и StarCraft) и 3D-анимаций и заканчивая программным обеспечением для самолётов.

Вот некоторые сферы использования С++:

  • драйверы;
  • микроконтроллеры;
  • программное обеспечение, операционные системы;
  • прикладные приложения — медиаплееры, браузеры, текстовые редакторы;
  • нейросети;
  • игры для компьютера;
  • игры для Xbox и PlayStation;
  • проекты, где важно строго контролировать память.

Что должен знать программист С++ и сколько он зарабатывает

Требования к программистам С++ обычно высокие. Надо хорошо разбираться в базовых алгоритмах и структурах данных, нередко требуется и знание разных библиотек и фреймворков, математики и других языков (часто — Python). Это не удивительно: на С++ чаще всего разрабатываются сложные комплексные проекты, и без этих знаний не обойтись.

Высокие требования отражаются и на зарплатах: на HH.ru и Яндекс.Работе редко можно встретить предложения с зарплатой ниже 100 тысяч рублей, а большинство предложений попадает в диапазон от 170 до 230 тысяч.

Есть предложения и для новичков и стажёров: таких вакансий меньше, а зарплаты в этой группе примерно от 40 до 80 тысяч рублей в месяц.

В Москве  конце января — феврале 2020 года было около 1000 вакансий на HH.ru и больше 400 на Яндекс.Работе.

Сравниваем С++ и другие языки

С++ против Java

С++ и Java нередко сравнивают, потому что оба — популярные высокоуровневые объектно-ориентированные языки. Какие у них различия?

  1. Зависимость от платформы: при компиляции программа на Java сначала переводится в особый байт-код с помощью интерпретатора. Благодаря этому код в Java можно запустить на любой платформе. С++ при компиляции переводится в машинный код, поэтому это платформо-зависимый язык.
  2. Указатели: огромная часть работы в С++ работа с указателями, а в Java их нельзя использовать.
  3. В Java нет многих комплексных функций, которые есть в С++, — например структур, указателей и объединений.
  4. Многопоточность поддерживается в Java, но не в С++.
  5. Уровень языка: и Java, и С++ — высокоуровневые языки, но на Java работать на низком уровне не получится, в отличие от С++.

С++ против C

и С++ просто нельзя не сравнить: мы уже знаем, что они близки хотя бы из-за истории создания C++, но в чем-то же они должны различаться?

Вот эти различия:

  1. Объекты и классы. Ради них всё и затевалось: желание создать с поддержкой ООП — причина, по которой появился С++.
  2. Синтаксис. Несмотря на то что синтаксисы С и С++ очень похожи, они не идентичны: например в С для управления памятью используются функции malloc (), calloc () и free (), а в С++ это New и Delete. Функции ввода и вывода тоже различаются: в это scanf () и printf (), а в С++ — Cin и Cout.
  3. Сохранность данных выше в С++, чем в C.
  4. Ссылки. поддерживает только указатели, а C++ — ещё и ссылки.
  5. Уровень языка. С++ работает на высоком уровне, а С — ближе к машинному коду.
  6. Использование. Из предыдущего пункта вытекает и различие в применении: вы найдёте в первую очередь в операционных системах и драйверах. С++ для этого тоже используют, но ещё на нём пишут и разные приложения, игры и многое другое.

Подытожим

Итак, С++ — непростой язык. Он быстрый, популярный, даёт много возможностей, применение ему найдётся почти везде, а программисты на С++ в среднем получают больше других разработчиков. Но всё это приходит в одной упаковке со сложным синтаксисом и работой с указателями и памятью.

Стоит ли его учить новичку? Если вам интересно разобраться в том, как работает память компьютера, вы дружите с математикой и уже немного разбираетесь в программировании — почему бы и не попробовать? А если вы пока не уверены в своих силах, то стоит начать с более дружелюбных языков, а к С++ перейти, когда немного наберётесь опыта.

На нашем курсе «Профессия разработчик на С++ с нуля» вы не только изучите основы разработки на C++, но и приобретёте более продвинутые навыки. А в конце курса напишете свои первые игры на Unreal Engine 4.

Курс

Профессия разработчик на С++
с нуля


Вы пройдёте полный курс по С++ и прикладной курс по Unreal Engine 4. Вы научитесь работать с многопоточностью, использовать инструменты и средства разработки: Git, GCC, GDB. Вам будет проще найти работу программиста в геймдеве.

Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox