Почему C++ крут, актуален и бессмертен

Колонка от образовательного портала GeekBrains, автора курса «Разработчик С++».

В начале 80-х годов прошлого века сотрудник Bell Labs Бьёрн Страуструп после долгих мучений с существующими языками программирования провёл эксперимент со скрещиванием C и Simula. Он даже не рассчитывал, что его детище, получившее название C++, привлечёт столько внимания.

Однако тогда язык произвёл настоящий фурор: компилируемый, структурированный, объектно-ориентированный, невероятно упрощающий работу с большими программами и при этом имеющий огромный потенциал для развития. Такой, что ещё почти десятилетие потребовалось Страуструпу, чтобы наделить C++ всеми характерными особенностями. Развитие же продолжается до сих пор. К примеру, стандарт C++17 был принят в конце прошлого года.

Поэтому, если вы думаете, что C++ безнадёжно устарел, у нас для вас новость – отправить на пенсию его может только какая-нибудь невероятная технологическая революция. И вот почему.

Он быстр

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

Да, для реализации локальных нужд могут подойти C, Go или Rust, но если вы хотите изучить один язык, с помощью которого можно писать программы любой сложности, ваш выбор — C++.

В противовес этому часто ставится скорость написания кода, которая, например, у интерпретируемых языков на порядок выше. В этом есть доля истины — C #, Java и конечно же Python даже визуально занимают меньше места, с их помощью можно создавать сложные программы, затратив минимум времени. Однако подумайте, что лучше для конечного пользователя: время разработки приложения или его медленная работа? Ответ очевиден.

Он универсален

Компиляторы C++ есть на каждой операционной системе, большинство программ легко переносится с платформы на платформу, со средой разработки и библиотеками у вас точно не возникнет проблем. C++ — это демонстрация идеи классического программирования, когда 90% мыслей связано с кодом и лишь 10% с используемой периферией.

Достаточно просто вспомнить, где он используется: микроконтроллеры, IoT, роботы, десктопные и мобильные приложения, веб, игры, системы моделирования, прогнозирования, обработки статистики и в нейронных сетях. Везде. Просто не существует такой области программирования, где C++ был бы бесполезен.

Да, сегодня сложно найти приложение, которое бы «от» и «до» было бы создано на C++. Но частично его использует почти любой крупный проект, поэтому его знание всегда будет являться плюсом в резюме программиста.

Он активно поддерживается

Речь не только об обновлениях стандартов и постоянном внедрении улучшений. C++ имеют колоссальное сообщество программистов, которые постоянно делятся библиотеками, шаблонами и кодами, приходят на помощь новичкам и опытным коллегам. При этом, в силу того, что C++ достаточно сложный язык, оно не изобилует лентяями и людьми, которые могут по 10 раз наступать на одни и те же грабли, подталкивая туда же новичков.

В первую же очередь, огромное сообщество — плодородная почва для появления качественной литературы. По C++ есть несколько фундаментальных книг, по которым училось несколько поколений, есть новые, учитывающие все свежие изменения и актуальное ПО, есть масса интернет-ресурсов для обучения, в конце концов есть упомянутые стандарты.

Он полезен в качестве фундамента для обучения

Java, JavaScript, C #, как и огромное количество других популярных языков программирования, содержит в основе принципы C++. Именно поэтому учебные программы многих вузов содержат курс «плюсплюс», который идёт сразу за получением основ на C.

К примеру, принцип работы Java, одного из мощнейших языков современности, достаточно сложно понять, если не начать обучение с основ, которые впервые появились именно в C++.

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

Почти все популярные языки программирования, что были придуманы позднее, имеют упрощенные структуру и механизмы, а процесс изучения сводится к освоению синтаксиса и ПО. Это создаёт целую армию программистов, которые просто не понимают, что создают в половине кода.

Он востребован

Всё вышеописанное является причиной тому, что программисты C++ востребованы по всему миру, что не в последнюю очередь сказывается на зарплатах. Так, средняя зарплата по России составляет 75 тысяч рублей. Более того, в отличие от многих популярных языков, офисная работа с которыми предполагает переезд в крупный город, востребованность программистами C++ имеет распределённый характер.

Перейдя по ссылке выше, вы узнаете, что максимальная зарплата предлагается не в Москве, а в Самарской области (средняя — свыше 100 тысяч рублей), в топе — Калужская и Липецкая.

Ну и самое главное, почему C++ — настоящий must-know для амбициозного программиста: работая с ним, ты ощущаешь, что куда больше создаёшь, чем используешь. Достаточно сложный синтаксис, тысячи строк кода даже в простых программах, механизмы работы с памятью и периферией — поначалу всё это жутко бесит из-за постоянных ошибок. Но потом приходит дисциплина, опыт и ты понимаешь, что C++ — это и есть настоящее программирование.

С++ создавался на основе языка С, и при этом до определенного момента сохранял с ним совместимость. Следовательно, С++ вобрал в себя всю скорострельность языка С. C++ используется во всех сферах деятельности программирования: от высоконагруженных систем до программирования микроконтроллеров. На С++ можно написать как web-сервер, так и игры, любые компьютерные программы, компоненты и так далее.

С++ позволяет писать как в процедурном стиле, так и в объектно-ориентированном и функциональном. Так как язык используется всеми крупными компаниями, то они же его и поддерживают — есть целый комитет по стандартизации С++, в который входят все самые крупные ИТ-компании.

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

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

Алексей Кузнецов, программист Mail.Ru Group

Благодаря корням низкоуровневого языка C, С++ позволяет проводить агрессивную оптимизацию такого уровня, который просто недоступен на языках высокого уровня. Правда, за это приходится платить сложностью управления ресурсами, которая в отличие от языков высокого уровня ложится на программиста.

Я бы сказал, что C++ скорее не универсален, а широко распространён. Да, действительно, компиляторы есть под большинство существовавших и существующих платформ. Но найти приложение, которое «от и до» написано на C++, вовсе не так сложно.

C++ активно поддерживается — тут всё верно: есть очень большое сообщество программистов, десятки книг, сотни форумов. Ищущий всегда найдёт ответ. Язык действительно позволяет многое понять, цена — сложность, а значит время на изучение.

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

Вакансий действительно много: практически везде, где жёсткие требования к производительности, требуются программисты С++. «Работая с ним, ты ощущаешь, что куда больше создаёшь, чем используешь», – увы, это так, но это один из его недостатков. Я бы не стал преподносить это как достоинство.

Игорь Семенов, ведущий программист Mail.Ru Group
0
197 комментариев
Написать комментарий...
lllkkkaaa dereevna

Как С++ синьёр скажу, что это полная чушь.
1) Он быстр
Нет. Он не быстр. Современные конфиги и оптимизаторы для C# и Java позволяют им работать на равных. Попробуйте отключить GC и вызывать его руками. Получите разницу всего в 1-1.5 раза.
Скорость компиляции у С++ в 20-50 раз медленнее. И растет не линейно. Проект может начать компилироваться часами просто из-за какой-то либы и шаблонов.
2) Он универсален
Нет. Он универсален только с версии С++11. Да и тащить приходится кучу сторонних библиотек (типа boost). И там тоже есть баги. С++ абсолютно не переносим. Компиляторы ловят разные ошибки разными способами. Если включить -Wall на MSVC и GCC, то они будут падать на разных ошибках и разных ворнингах. Ах, а чего только стоят средства отладки... для каждой платформы они абсолютно разные. Хочешь хорошо дебажить плюсцы - будь гуру линуха и его средств, и гуру винды и его средств.
3) Он активно поддерживается
Вы можете найти проекты, в которых рядом с сырой памятью (и фичами из С) будут фичи из С++17. Мммм, найс. Счастливой отладки.
4) Он полезен в качестве фундамента для обучения
Нет. Фундамент для обучения это С.
5) Он востребован
Нет. Он не востребован. Просто на нем было написано столько, что это физически переписать нереально. Поэтому приходится поддерживать эти все продукты.
Вывод:
С++ это как Perl или С. Круто только в 2х случаях:
1) ты студент
2) ты супер-гуру-маньяк плюсов
Для остальных это ад.

Ответить
Развернуть ветку
Семен Смирнов

Достаточно написать что ты сеньор и далее много текста с частными случаями, ничего в общем не опровергающими, и тебе поверят

Ответить
Развернуть ветку
Ruslan Khasanbaev

Опровергни хоть один пункт.

Ответить
Развернуть ветку
Гала Перидоловна

Основная идея плюсов: not pay for what you don't use, как раз ты не платишь за GC. Java без GC это весьма странное решение, тк оверхед на каждый класс 18 байт. В Java есть jit и в некоторых ситуациях он может дать буст, но на деле lto, pgo, bolt дают значительный рост производительности. Скорость компиляции никого не интересует, все большие проекты собираются в облаках и это занимает от силы 5 минут.

Он переносим. Кланг и гцц отлично собирают код под разными платформами. Msvc интересен только как среда для разработки, как компилятор он плох.

Сырые указатели это норм в случая листов, например. Если где-то идёт мешанина из new, то это проблема проекта. Но она вполне решаема санитайзерами, сейчас даже время жизни объектов можно проверить при сборке.

У нас все проекты, которые заработали, переписывают с питона c++. Работа найдётся всегда.

Ответить
Развернуть ветку
Джек Воробей

ПРЕКРАТИТЕ!
тут все-таки полно гуманитариев, пожалейте их мировосприятие.

Ответить
Развернуть ветку
194 комментария
Раскрывать всегда