Почему 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) ты супер-гуру-маньяк плюсов
Для остальных это ад.
Достаточно написать что ты сеньор и далее много текста с частными случаями, ничего в общем не опровергающими, и тебе поверят
По всем пунктам уже разжевали. Я много лет писал чувствительные к скорости выполнения части приложений, которые почти наверняка установлены или были установлены у вас на компьютере и/или телефоне.
И правда жизни в том, что на C++ прямо сейчас пишется очень много именно нового кода, потому что альтернативы нет. Здесь в долине тусовка довольно тесная, и я прекрасно вижу, что Facebook, Microsoft, Google, Amazon пишут великие тонны абсолютно нового C++ кода прямо сейчас в то время, как LinkedIn, например, на сервере весь в жаве, включая критичные части, от чего они иногда серьезно страдают.
Ну так, чтобы уж не без аргументов:
1) Активное использование стека, placement new, свои аллокаторы, устранение false sharing и прочих проблем с кешем при полном сохранении ООП. Да, C умеет то же самое, но там нет ООП.
2) Он универсален точно так же, как и C. Если что-то не работает, не используй это. Моя библиотека в одном популярном мессенжере много лет назад компилировалась под 11 таргетов на С++03 включая все мобильные платформы, и там был STL.
3) Прямо сейчас так выглядит мой текущий проект. Он активно работает на >миллиарде устройств без крешей (за исключением "космических лучей", на таких масштабах довольно веселые эффекты, но это единицы в день).
4) Он полезен как универсальный фундамент для изучения любого императивного языка в ООП. Большего брейнфака нет ни в одном подобном языке, поэтому если ты хорошо знаешь C++, ты знаешь их все.
5) Уже говорил в начале.
братулец, C++ требует от программиста более высокой культуры написания кода, чем другие языки. тут нельзя малодушничать, лениться или давать волю эмоциям ;]
Почему Вы тогда стали C++ Senior, если для Вас в нем столько минусов?
Так и что же учить в таком случае? :)
В пользу C++ есть один, но несокрушимый аргумент: у C++ НЕТ альтернатив.
Давайте отключим GC и получим, что ява с отключенным gc всего в 2 раза медленней плюсов без такового.
Аргументация уровня «Бог»
Не напригай ж о п у. Плюсы как были лучше других и мощнее так и будут и кстати вирусы на C++ ,так что не обязательно устраиваться программистом в какую нибудь компашку.)
"Современные конфиги и оптимизаторы для C# и Java позволяют им работать на равных. Попробуйте отключить GC и вызывать его руками. Получите разницу всего в 1-1.5 раза."
Что-то Вы какие-то сказки про скорость Java рассказываете, что-то посерьезней HelloWorld-то оптимизировали по скорости? А по потреблению памяти? А мультитредовый проект оптимизировали хоть раз?
Ну откуда вы лезете? Вы хоть понимаете разницу между компилируемых и интерпретируемых языков? Только не надо говорить про jit компиляцию и тому подобную динамическую ересть.
Комментарий удален модератором
Для бизнеса важна скорость внедрения больше, чем производительность. Подтверждений тьма, тот же веб не пишется на сях, хотя это возможно. Поэтому между ‘быстро запрогать’ и ‘запрогать, чтобы работало быстро’ почти всегда перевес к первому хоть и не абсолютный(например web based мобильные приложения против нативных). Бизнесу важно проверить гипотезу, выйти на рынок, заработать как можно скорее и потом оптимизировать.
И да, наши мощности почти никогда не нагружены на 100%, поэтому ‘надо сделать самый оптимизированный продукт’ чаще всего звучит как ‘я умею только си, джава и пайтон для лохов’ - непродуктивный буллшит зажравшегося прогера, которому вы до сих пор почему-то доверяете. Нет потребности в повсеместной оптимизации. Если у вас на сайте полтора человека и для загрузки страницы нужно сорок sql запросов это не значит, что нужно оптимизировать. Скорее всего ваш сайт так и будут посещать полтора человека, даже если вы будете отдавать его статикой моментально. Любая оптимизация должна быть оправдана экономически, а не теоретически, поэтому написанное лишь неимоверно субъективное и необоснованное практически мнение.
Я рад, что вы постигли с++ и получаете в среднем 75 тыс в России. Этим можно субъективно гордиться, но объективно это так себе результат, в долине с++ не сдался почти никому. На что брать ориентир айтишнику, если не на долину.
Так и есть и чем дальше - тем важнее быстрее запуститься неважно на чем, а потом, если стартап поддержан инвестициями или прибылью, уже набрать коллектив и переписать с нуля. Поэтому максимально быстрые на старте технологии сейчас крайне актуальны, а C/C++/Go уже потом вводятся, когда нагрузки появляются серьезные.
Что в Долине сейчас рулит? Javascript? Node.js?
Ну, наверно на каких-то этапах так и есть. Так автор вроде бы и не спорит.
Просто кто-то любит запиливать прототипы, а кто-то оптимизировать. Программисты разные быают.
Да, но, к большому сожалению, поэтому у нас естть электрон приложения, которые жрут память, как не в себя, и медленно работают.
Комментарий недоступен
Вся статья пронизана одной мыслью - С++ - лучший язык в мире.
Нет, нет и нет.
"большинство программ легко переносится с платформы на платформу"
ЧЕВООООО?? Автор когда-нибудь пытался перенести проект с винды, написанный с плотным участием условного WinAPI, на условную линуху? Просто гигантское количество человеко-часов потратишь на то, что бы это все перенести, а потом еще в 2 раза больше, что бы это работало хотя бы так же быстро, как тот же самый проект на питоне, написанный за пару часов.
С++ нормально использовать, как частичный функционал для проектов. Например, на Java через JNI. Но разрабатывать полноценные проекты - не стоит тех усилий.
Ты за пару часов на Python или Java поднимешь сервер с API, удобно запуская это все через systemd и имея очень комфортную скорость работы, или будешь месяц пытаться запустить тот же самый API сервер на С++, который будет работать в лучшем случае в 1.5 раза быстрее, что не будет являться критичным, потому что пользователю будет плевать, загружается страничка у него 50 мс, или 75 мс. А за этот месяц на Python ты сможешь сделать шикарную асинхронную архитектуру, которая будет делать все если не быстрее, то столько же.
И в итоге все все равно упрется в I/O - сеть или БД :)
Да, время загрузки не имеет значения, конечно. Сеть у вас бесконечная, а скорость света уже преодолели. Только вот глупые Гугл, Яндекс, Амазон оптимизируют время загрузки.
ну по тестам там питон не в полтора раза, а на порядок медленнее
У Java много билиотек написанных на Java. Но вот если оставить Python на едине с Python, скорость окажется очень печальной). Множество библиотек Python просто биндинги C/C++ билиотек, что позволяет хоть какую-то производительность выдерживать. Вообщем, чтобы Вам удобно было писать на Python, множество программистов пишут на C/C++. Я уж молчу про GIL.
В 2к18 учить С++ имеет смысл если хочешь идти разгребать легаси говно или идти прогать в какую-нибудь гос.контору.
Комментарий недоступен
Комментарий недоступен
TensorFlow / Caffe2 / MXNET / CNTK и еще тонна тулов для ML/DL.
Комментарий недоступен
Зачем это на VC?
VC растет, сюда с хабра переезжают люди, блоги компаний и т.д., в аудитории портала давно не один программист.
Реклама можт
Выбор технологии для проекта один из важнейших.
цпп хейтерам: интересно, на чем написаны компиляторы, интерпретаторы и vm вашего любимого ЯП, БД и т.д. и т.п.;)
обычно на голых сях без плюсов
Комментарий недоступен
А так же всякие дрова, железо различное...
Компилятор go написан на go. Да и у многих языков программирования так же. У Python использутся plain C, потому что плюсы им нафиг не сдались.
UPDATE: tl;dr я не прочитал, что написали ниже и написал примерно то же самое, этот коммент можно не читать
В основном же всё на C написано, не на плюсах :)
Например:
- Python (тот, который CPython)
- Postgres
- ядро Linux
Исключение: Qt и KDE - там да, плюсы
- Java уже переписали на Java
- Новые БД пишут не на С++
- Как вам написали выше, остальные ЯП тоже уже давно сами на себе пишут
Вы товарищ от жизни отстали, засиделись за вашим легаси на крестах, а мир то меняется, в 21 век уже как 18 лет вошли. Оглядитесь, Java официально в нейтив компилится, интринсики внедряет и прочую низкоуровщену. Так и без работы можете остаться, хотя ковыряние в легаси на ваш век хватит.
Если хотите быстрее начать зарабатывать хорошие деньги, лучше выбрать другие языки: Go, JavaScript, Python, Java. Выбирая плюсы, надо отчетливо осознавать, что во первых, сам язык не из простых с кучей нюансов и подводных камней, во вторых, ниши в которых он востребован или схлопывается или год от года отвоевывают другие языки. Курсы только познакомят вас с языком, но если вы хотите стать профессиональным С++ разработчиком придется приложить немало усилий и потратить годы практику. Я долгое время писал на плюсах, недавно сменил стек на Go и ни капли не жалею
Ну вот на счет Go у меня лично есть большие сомнения - сейчас это выглядит так, будто Go словил хайп и на этой волне некоторые компании начали на него переходить. Однако это не означает, что он закрепится как Java, C# или даже PHP.
а если начинать с нулевых знаний, то сколько времени надо потратить на изучение Go, javascript, phyton, java чтобы хорошо зарабатывать?
А ещё Котлин
Ложка хороша к обеду?
Ваш выбор:Электрон. Вместе с ложкой ещё кусок дерьма:)))
Статью писал какой-то отчаянный нуб без опыта поддержки этого говна в реальном продакшене.
вы сейчас гик брейнсу бизнес разрушаете! астанавитесь!
Гикбрейнс называет себя образовательным порталом.
Штош....
Комментарий недоступен
Ну это как писать, что лед холодный. Можно, только это и так все знают
Какая мокрая вода, а теперь попробуйте вчерашних юристов за 2 месяца обучить на каких-то курсах, JS с React они как-то в своей голове ещё уместить смогут, отверстают пару формочек, посчитают себя спецами и пойдут просить 100 рублей в нерезиновой.
Как вы им плюсы впаривать будете? Изучать долго и сложно, особенно гуманитариям, быстрого результата сразу не увидеть, джунам платят мало, предложений по работе намного меньше, всем же сайтики пилить нужно, все остальные же, с языком в том или ином виде уже знакомы, «продвигать» его не на техническом ресурсе, а на попсовом VC, очень странный подход.
Все приложения рано или поздно мигрируют в веб. Для веба писать сервисы на плюсах тяжеловато. Имхо перспектива плюсов в разрезе веба: маргинальные фичи с агрессивной оптимизацией(читай костылирование на низком уровне) и поддержка всего, что уже написано. Еще геймдев, где это будет долго востребовано, но очень тяжелые условия, на грани рабства.
Комментарий недоступен
Откуда сведения про тяжелые условия?
Вообще все, что связано с графическим программированием. 3D редакторы, видеоредакторы, фотошопы и т.д.
Комментарий недоступен
Это всё накипело в процессе работы. Я не выбирал, лол.
От синтаксиса у новичка может быстро пропасть интерес к обучению.
Комментарий недоступен
До сих на полке пылится толстая книга Бьерна Страустрапа, купленная почти 15 лет назад. Видимо так её никогда и не открою
Комментарий удален модератором
а что на С++ пишут в mail,ru, если не секрет, конечно? ;]
еще мне интересно, сколько у них прогеров с нуля, которые пришли к ним после их курсов, и зачем они там такие. может картриджи заправляют на C++... но маил об этом предпочитает умалчивать обтекаемыми фразами : подите и сами спросите у них. лол...
в mail.ru на C пишут https://ru.wikipedia.org/wiki/Tarantool , например
Игры
Maps.me (на 80% или около того)
VC превращается в Хабр :D
Комментарий недоступен
Ну ну. Только в современном мире, где нужно быстро делать прототипы, изучать спрос на продукт и т.п. он совсем не подходит.
Ибо дорого и очень долго. И тогда все вспоминают про python и js.
Ребят а "С", "С++" и "1С" - это разве не то, что создал господь бог и архитектор вселенной?
:DD))
И ни слова про Rust, все те же плюсы что в плюсах, но более дружелюбно и безопасно (от микроконтроллеров до серверов в Dropbox).
А на производительность и эффективность использования железа у C++ больше нет монополии, хвала LLVM и приветствуем Scala Native, Kotlin Native, Crystal и другие языки.
Комментарий удален модератором
Комментарий недоступен
GeekBrains конечно х р е нь, но плюсы как были мощным так и будут, с его помощью все что хочешь на компьютерном железе сделаешь.
Норм статья
Да тут ботва фсбэшная набежала, потомк что зная С++ ты напремую взаимодействуешь с железом а значит банкоматы как семечки щелкать и это малая часть ЯП
Как то не серьезно,живем же в рыночной экономике,а любой человек вам скажет что в текущем рынке си с плюсами актуален только в офисах.
Так что где же тут актуальность ?
Поясните мысль, пожалуйста