Многие учебные заведения преподающие компьютерные науки шарахаются от C++ как от чумы, полагая что этот язык а) чрезвычайно сложен для студентов и б) является нагромождением нелепостей, котрые скопились за долгую историю языка и которые могут непоправимо травмировать нежные детские души. В итоге в лучшем случае преподавание ведётся на живых языках таких как C и Java, а в худшем - на мертворождённых мутантах, плодах академического исступления, навроде Scheme или SmallTalk.
На рубеже 19-20 вв. зачастую студентов всё ещё учили латыни. Не для того, чтобы на ней разговаривать или писать работы - латынь уже тогда была мёртвым языком - а целиком лишь для гимнастики ума. По мнению преподователей овладевание латинской грамматикой упорядочивало мышление, учило стройно излагать мысли на письме и в устной речи. В отличие от латыни, C++ это живой постоянно развивающийся язык, по сей день один из наиболее популярных инструментов в инженерном мире.
Изучение C++ вместо Pascal или Java на инженерных факультетах полезно вот почему:
- На C++ можно изучать процедурное программирование точно так же как и на C или Pascal. В отличие от мёртвого Pascal, язык C++ до сих пор один из наиболее популярных; в отличие от C более строгая проверка типов в C++ приучает с младых ногтей избегать небрежности, которая так характерна для C.
- На C++ можно изучать объектно-ориентированное программирование, включая такие уровни абстракции как templates. За историю использования языка собран колоссальный опыт как ОО приёмов, так и применения templates. К примеру, аналоги templates появились в Java сравнительно недавно. Во многих других языках они до сих пор отсутствуют.
- На C++ можно изучать низкоуровневое программирование, т.к. благодаря одному из основных принципов языка - you don't pay for what you don't use - C++ всегда оставался близок к железу на котором он бежит, ничуть не уступая в этом C.
- На C++ можно и нужно изучать основные концепции исполнения программы такие как адресация памяти и операции с ней посредством пойнтеров, memory barriers и спекулятивное исполнение, стэк и механика вызова функции, передача по ссылке или по значению и многое другое. Студенты выросшиие на Java и Python имеют очень отдалённое представление об этих материях, что непосредственно сказывается на качестве их инженерных решений.
- На C++ можно и нужно изучать разработку софта как инженерную дисциплину. Те несуразности в C++ которые могут показаться на первый взгляд, при более пристальном изучении окажутся единственно верными решениями перед лицом неудобной, неукладывающейся в строгие академические рамки реальности в которой должен жить инженер. Каждое такое решение является продуктом мучительного поиска сильнейших людей в индустрии. Для абсолютно любого аспекта C++ можно найти разумное объяснение его существования. Оно будет задокументированно в качестве предложения в стандарт и одобренно большинством голосов комитета WG21 в ISO.
Изучение истории C++, предложений по изменению языка уже само по себе является интереснейшим курсом молодого бойца для будущего инженера. Подобные решения ему придётся принимать на протяжении всей карьеры и на своей собственной шкуре испытать неразрешимые противоречия между техническими требованиями и имеющимися возможностями.
Those who don't understand C++ are doomed to reinvent it, poorly.
no subject
Date: 2008-11-29 05:33 am (UTC)Да нет, конечно же. Именно что разговаривать и писать работы.
no subject
Date: 2008-11-29 05:45 am (UTC)