Выбираем язык программирования: что нужно знать о С++
Рассказываем, для чего нужен язык С++, сколько получают разработчики, и сравниваем C++ и другие языки.
vlada_maestro / shutterstock
Сейчас С++ — один из самых популярных языков программирования. Например, в рейтинге TIOBE за декабрь 2019 года он занял четвёртое место (на первых трёх — Java, Python и C).
С++ можно найти почти везде: в играх, программах и в таких гигантах, как Google и YouTube. Даже в Facebook*, который написан почти только на PHP, есть С++. Также его используют в продуктах Adobe.
Это объектно-ориентированный язык, основанный на языке С. В девяностые годы Бьёрн Страуструп пытался добавить в С классы и объекты, но в итоге получилось не расширение, а целый новый язык. Как и в С, в С++ можно работать с данными на низком уровне (хотя и с ограничениями) и с указателями.
У С++ сильная (строгая) типизация: разные типы переменных нельзя использовать в одном выражении, а неявные преобразования не выполняются автоматически. Это даёт уверенность, что «всё пойдёт по плану» и переменные не поведут себя неожиданно. С другой стороны, за эту уверенность приходится платить гибкостью языка.
Плюсы, минусы и особенности C++
Плюсы
- Поддержка объектно-ориентированного программирования (ООП). ООП помогает сделать код проще, и его быстрее писать. Большой цикл статей про ООП.
- Высокая скорость.
- Возможности для работы с данными на низком уровне — то есть на уровне, близком к аппаратному. Благодаря этому на С++ можно писать драйвера, микроконтроллеры.
- Популярность:
- Для С++ создано много библиотек и компиляторов.
- С++ используется практически везде (несколько примеров мы уже привели выше).
- Синтаксис С++ похож на синтаксис 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 нередко сравнивают, потому что оба — популярные высокоуровневые объектно-ориентированные языки. Какие у них различия?
- Зависимость от платформы: при компиляции программа на Java сначала переводится в особый байт-код с помощью интерпретатора. Благодаря этому код в Java можно запустить на любой платформе. С++ при компиляции переводится в машинный код, поэтому это платформо-зависимый язык.
- Указатели: огромная часть работы в С++ — работа с указателями, а в Java их нельзя использовать.
- В Java нет многих комплексных функций, которые есть в С++, — например структур, указателей и объединений.
- Многопоточность поддерживается в Java, но не в С++.
- Уровень языка: и Java, и С++ — высокоуровневые языки, но на Java работать на низком уровне не получится, в отличие от С++.
С++ против C
C и С++ просто нельзя не сравнить: мы уже знаем, что они близки хотя бы из-за истории создания C++, но в чем-то же они должны различаться?
Вот эти различия:
- Объекты и классы. Ради них всё и затевалось: желание создать C с поддержкой ООП — причина, по которой появился С++.
- Синтаксис. Несмотря на то что синтаксисы С и С++ очень похожи, они не идентичны: например в С для управления памятью используются функции malloc (), calloc () и free (), а в С++ это New и Delete. Функции ввода и вывода тоже различаются: в C это scanf () и printf (), а в С++ — Cin и Cout.
- Сохранность данных выше в С++, чем в C.
- Ссылки. C поддерживает только указатели, а C++ — ещё и ссылки.
- Уровень языка. С++ работает на высоком уровне, а С — ближе к машинному коду.
- Использование. Из предыдущего пункта вытекает и различие в применении: C вы найдёте в первую очередь в операционных системах и драйверах. С++ для этого тоже используют, но ещё на нём пишут и разные приложения, игры и многое другое.
Подытожим
Итак, С++ — непростой язык. Он быстрый, популярный, даёт много возможностей, применение ему найдётся почти везде, а программисты на С++ в среднем получают больше других разработчиков. Но всё это приходит в одной упаковке со сложным синтаксисом и работой с указателями и памятью.
Стоит ли его учить новичку? Если вам интересно разобраться в том, как работает память компьютера, вы дружите с математикой и уже немного разбираетесь в программировании — почему бы и не попробовать? А если вы пока не уверены в своих силах, то стоит начать с более дружелюбных языков, а к С++ перейти, когда немного наберётесь опыта.