| 1. Два плюса | |
| Разница | |
| С и C++ являются двумя совершенно разными языками. Мне всегда был непонятен этот штамп работодателя, нечто вроде «На работу требуется программист. Требования: C/C++, WinAPI, …». Работодатель как бы намекает на то, что эти языки очень похожи, если не почти одинаковы. Этот же штамп можно встретить во многих резюме соискателей. | |
| Бьярн Страуструп считает, что «С++ это улучшенный C». В чем-то он прав, однако не стоит воспринимать его слова слишком близко к сердцу. C++ это один из очень немногих языков программирования, который предоставляет сразу несколько парадигм программирования и проектирования, при этом не навязывая ни одну из них как основную. Более того — каждая отдельно взятая задача может быть решена с использованием своей, наиболее подходящей для ее решения парадигмы. На сегодняшний день C++ это, пожалуй, единственный язык программирования промышленного масштаба, предоставляющий столь уникальные возможности. Все остальные языки программирования так или иначе навязывают вам какую-то основную библиотеку (например .NET или JRE) и (или) какую-то доминирующую парадигму. | |
| | |
| Последствия | |
| Многие люди, начинавшие с языка C, считают, что C++ — нечто похожее на C, как бы логическое его продолжение. Программируя на C++ они пытаются развивать идеи, идиомы, парадигмы (что там еще?) языка C. Аналогичные ошибки по неопытности допускают программисты, пытающиеся, например, применять объектно-ориентированный или процедурный подходы в функциональных языках. Однако, если функциональный язык попросту исходя из своей грамматики не позволит написать большое приложение с неверным подходом, то язык C++ позволит рыть себе яму с помощью языка C сколь угодно долго. | |
| К сожалению, многие программисты считают, что их программа станет объектно-ориентированной сразу же после того, как они начнут использовать классы, просто переместив туда все свои глобальные переменные, связав сами классы отношением наследования; что их программирование — это теперь метапрограммирование сразу же после того, как они заменят обычные классы и функции на шаблонные; что они получат все преимущества от той или иной парадигмы, просто внедрив в свою программу несколько элементов этой самой парадигмы. | |
| Для начинающего программиста нет ничего хуже чем в один прекрасный день проснуться с мыслью «Все, теперь я знаю C++». Развитие на этом тут же останавливается. | |
| C++ — гораздо более тонкий инструмент, нежели C. Неумелое обращение с ним может принести (а зачастую и приносит) гораздо больше неприятностей, чем неумелое обращение с тем же C. Многие из тех, кто по каким-либо причинам не любят язык C++, или хотя бы ООП как парадигму, в свое время просто стали жертвами таких вот программистов, ужаснувшись их «C++-но ООП-шными» творениями, и решив, что такие уродливые программы это и есть детища мультипарадигменного языка C++ во всей своей красе. Полученные впечатления можно сравнить с впечатлениями человека, ни разу не употреблявшего алкоголь, которого напоили техническим спиртом. Если вы встретите в форуме человека, который назовет использование C++ или объектного подхода для решения простой задачи «стрельбой из пушки по воробьям» — будьте снисходительны и проявите сострадание, так как перед вами типичная жертва. | |
| Американцы пишут в инструкциях к микроволновым печам «В печи нельзя сушить кошку». Я бы предложил на всех книгах по C++ писать «В C++ нельзя программировать на C». Большинство программистов, считающих себя «программистами на C++», к сожалению, постоянно сушат кошек в микроволновке. | |
| | |
| Резюме | |
| Чтобы научиться качественно решать задачи по средствам языка C++, нужно усвоить одну простую истину — C и C++ это два разных языка программирования. Причина, по которой сегодняшнее количество действительно хороших программистов на языке C++ столь мало, заключается в том, что мало кто эту разницу понимает. | |