Почему 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++ — это и есть настоящее программирование.
Как С++ синьёр скажу, что это полная чушь.
1) Он быстр
Нет. Он не быстр. Современные конфиги и оптимизаторы для C# и Java позволяют им работать на равных. Попробуйте отключить GC и вызывать его руками. Получите разницу всего в 1-1.5 раза.
Скорость компиляции у С++ в 20-50 раз медленнее. И растет не линейно. Проект может начать компилироваться часами просто из-за какой-то либы и шаблонов.
2) Он универсален
Нет. Он универсален только с версии С++11. Да и тащить приходится кучу сторонних библиотек (типа boost). И там тоже есть баги. С++ абсолютно не переносим. Компиляторы ловят разные ошибки разными способами. Если включить -Wall на MSVC и GCC, то они будут падать на разных ошибках и разных ворнингах. Ах, а чего только стоят средства отладки... для каждой платформы они абсолютно разные. Хочешь хорошо дебажить плюсцы - будь гуру линуха и его средств, и гуру винды и его средств.
3) Он активно поддерживается
Вы можете найти проекты, в которых рядом с сырой памятью (и фичами из С) будут фичи из С++17. Мммм, найс. Счастливой отладки.
4) Он полезен в качестве фундамента для обучения
Нет. Фундамент для обучения это С.
5) Он востребован
Нет. Он не востребован. Просто на нем было написано столько, что это физически переписать нереально. Поэтому приходится поддерживать эти все продукты.
Вывод:
С++ это как Perl или С. Круто только в 2х случаях:
1) ты студент
2) ты супер-гуру-маньяк плюсов
Для остальных это ад.
Достаточно написать что ты сеньор и далее много текста с частными случаями, ничего в общем не опровергающими, и тебе поверят
Опровергни хоть один пункт.
Основная идея плюсов: not pay for what you don't use, как раз ты не платишь за GC. Java без GC это весьма странное решение, тк оверхед на каждый класс 18 байт. В Java есть jit и в некоторых ситуациях он может дать буст, но на деле lto, pgo, bolt дают значительный рост производительности. Скорость компиляции никого не интересует, все большие проекты собираются в облаках и это занимает от силы 5 минут.
Он переносим. Кланг и гцц отлично собирают код под разными платформами. Msvc интересен только как среда для разработки, как компилятор он плох.
Сырые указатели это норм в случая листов, например. Если где-то идёт мешанина из new, то это проблема проекта. Но она вполне решаема санитайзерами, сейчас даже время жизни объектов можно проверить при сборке.
У нас все проекты, которые заработали, переписывают с питона c++. Работа найдётся всегда.
ПРЕКРАТИТЕ!
тут все-таки полно гуманитариев, пожалейте их мировосприятие.
Сразу видно, что вы понятия не имеете как происходит сборка плюсовых компонент. Достаточно взять немного "магии" на шаблонах из буста и полчаса компиляции вам обеспечено.
distcc ccache поищите. Хотя у нас своя реализация.
Всё равно это на порядки медленее, чем билды java. Не говоря уже про go
Не знаю что вы собираете, вот только что отправлял два коммита в проект на 4,5 млн строк кода. Статическая сборка с libc и прогон 3000 функциональных тестов/5000 юнит тестов заняли 15 минут. Может вы что-то делаете не так?
"C++ не быстр, потому что он всего в полтора раза быстрее C# (если отключить тому GC)." Лол