elizarov


Блог Романа Елизарова


Previous Entry Share Next Entry
Языки которые должен знать программист: С++
elizarov

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

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

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

Конечно, знать C++ можно только условно: недавно был принять стандарт C++11, в то время как даже предыдущий стандарт вызывал трудности у производителей компиляторов в плане полного соответствия стандарту. Тем не менее, знание языка C++ позволяет программисту понять связь между конструкциями высокого уровня и низкого уровня. Все языки более высокого уровня, которые полностью скрывают от программиста низкоуровневые "детали реализации", так или иначе реализованы на Си или на C++. Последний набирает популярность в этой области в связи с доступностью компиляторов C++ для все более широкого класса платформ. Любая попытка программиста разобраться в принципах работы, производительности и других деталях любого современного языка программирования с большой вероятностью уткнется в код написанный на C++. В любом случае, все разработчики современных популярных языков программирования знают язык C++, анализируют его слабые и сильные места. След от его идиом и концепций можно найти практически всюду: как в Java, так и в C#, как в JavaScript, так и в Python.


  • 1
Что-то мне подсказывает, что в истребителях может и не быть ООП, а быть какое-нибудь синхронное программирование на соотв. языках.

А какой след C++ можно найти в JavaScript?

Конструкции throw и try-catch, ключевые слова new и this. Даже однострочные комментарии через два слэша. Всё это уходит в корнями в C++. Конечно, можно пойти и дальше и отследить из каких языков это пришло в C++, но ни один из них сейчас не используется.

C++ мог бы быть гоооораздо проще, если бы не надо было бы поддерживать совместимость с Си.

Как таковой, цели поддерживать совместимость с Си перед языком C++ не стоит, да и нет в нем совместимости даже с C99. Однако, C++ ставит целью поддержку низкоуровнего программирования. Вот взаимодействие этого с конструкциями высокого уровня и создает неиллюзорные сложности.

Темплейты забыты, которые к ООП, в принципе, отношения не имеют. Да и запрещены почти во всех mission critical

угу в mission critical запрещены, зато разрешены в performance critical, где ооп запрещен :)))

Это совершенно другая парадигма.

Когда-то на курсах я изучал Delphi. Basic я уже знал. За год изучения я сделал несколько программ - в т.ч. солидный рей трейсер и векторный редактор.

Повинуясь моде, я поспешил выкинуть на свалку свои знания и влиться в сообщество великих программистов С++. За несколько лет его изучения - я так и не сделал ничего превзошедшего учебные поделки на Delphi. А так же наблюдал как я - уже опытный не могу заимплементить на С++ "визард" нормально, а параллельно начинающий студент начал и довёл до беты систему мониторинга и контроля датчиков, сигнализаций и прочего (для банка :) ).

Но... Дельфи не модно.

Т.е. уже по факту я могу сказать что С++ на много лет и во много раз уменьшил мою продуктивность.

Я искренне доволен, что сейчас пишу на джаве, т.к. она позволяет работать на порядки быстрее. Остаётся только поражаться что до сих пор "серьёзные разработчики" не пишут десктопных игр на ней... Хорошо хоть ИЛ-2 есть.

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

Годный ответ - спорить абсолютно не хочется :)

Но, чисто субъективно, возможно, изучение, к примеру, SICP (схема) и чистого С - дало бы лучшие результаты. Или С и джавы. Или С и питона. Но SICP обязательно :)

> В С++ большое внимание уделено именно объектно-ориентированному программированию и именно оно ставится во главу угла в его стандартных библиотеках.

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

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

  • 1
?

Log in

No account? Create an account