Б. Страуструп - Дизайн и Эволюция C++. 2006 (1160775), страница 47
Текст из файла (страница 47)
Это легкая часть работы. Самое трудное, но и самое интересное, — овладение новыми методами проектирования и программирования, Большинство опытных программистов, с которыми я беседовал, говорят, что для глубокого освоения Сч+ и тех способов абстрагирования донных и объектноориентированного программирования, которые поддерживаются языком, им потребовалось от полугода до полутора лет.
При этом учились они прямо на рабочем месте и продолжали писать программы, но в этот период использовали С++ «осторожно». Если у вас есть возможность посвятить некоторое время исключительно изучению С++, то вы освоитесь быстрее, но у вас не будет возможности применить новые идеи к реальным проектам, а без этого обретенная уверенность может оказаться обманчивой. Обьектно-ориентированные проектирование и программирование — это практические, а не теоретические дисциплины. Если их не применять на практике или применять толька к «игрушечным» примерам, то могут появиться негативные последствия.
Замечу, чта овладение языком С++ — эта прежде всего изучение методов проектирования и программирования, о не деталей. Рекомендую сначала проштудировать хороший учебник по С++, затем какую-нибудь книгу по проектированию, например [Воось, 1991~, где есть прекрасные содержательные примеры на пяти языках 1Ада, СЮЗ, С++, Згпа111а1« и ОЬ1ес! Разса1).' Больше всего в этой книге мне нравится изложение концепций проектирования и главы, где подобраны примеры. Взгляд на язык с точки зрения проектировщика резко контрастирует со скрупулезным изучением деталей определения языка, ведущимся обычно по книге АкМ, в которой содержится много полезной информации, но ничего не сказано о том, как писать программы на С++.
При изучении С++ важно все время помнить о ключевых концепциях, чтобы не запутаться в технических деталях. При этом условии и изучение, и использование языка станут приятным и продуктивным делом. Даже поверхностное знание С++ может оказаться преимуществам по сравнению с владением С, а уж если приложить усилия к пониманию абстракций данных и объектно-ориентированных методов, то пользы будет намного больше». Надо учитывать и современное состояние инструментальных средств и библиотек. Имея более зашишенную среду, например включаюшую по умолчанию ' Во втором издании кпигв 1ВоосЬ, 1993~ используется только С++, .'ФИИИИИИ3 Пользователи и приложения 7.3.
Пользователи и приложения Один аспект применения С++ никак не давал мне покоя: слишком многие приложения, с ним связанные, были довольно-таки необычными. Конечно, это могло быть потому, что такие приложения интереснее обсуждать, но я склонен подозревать, что причина более серьезна. Сила С++ в гибкости, эффективности и переносимости, поэтому его можно применять в проектах, где используются необычное оборудование, нестанлартная операционная среда или требуется интерфейс с другими языками. Пример такого проекта — система лля Уолл Стрит, которая должна была работать на мейнфреймах совместно с программами, написанными на СОВОГО, на рабочих станциях вместе с Еогггап-программами, на ПК вместе с модулями на С и в сети, которая связывала все это оборудованис, Данный пример убедительно свидетельствует о том, что с помощью С++ можно разрабатывать передовое промышленное материальное обеспечение.
В этом отношении он заметно отличается от языков, использующихся в основном для экспериментов — промышленных, академических — или для обучения. Конечно, С++ находит широкое применение как в экспериментальных и исслеловательскпх работах, так и в образовательных целях. Но его роль в промышленных программах обычно является определяющим фактором при выборе проектного решения. 7З.1.
Первые пользователи Вначале мирок С зч1гп С1аээеэ и С++ был совсем небольшим. Его характерной особенностью было изобилие личных контактов, которые способствовали обмену всесторонние проверки во время исполнения, и небольшую четко определенную библиотеку базовых классов, в рискованные эксперименты с С++ можно пуститься и несколько раныпе.
Это позволит сместить акпенты от языковых средств С++ к тем методам программирования и проектирования, которые он поддерживает. Не стоит с головой погружаться в синтаксис и несущественные техничсскис детали языка, как зто любят делать программисты с большим стажем. Нередко такой интерес — нс что иное, как обычное нежелание изучать новыс методы программирования. В каждой учебной группе и в каждом проекте обязательно находится кто-то, кто не может поверить, что Сь+ может быть достаточно эффсктивсп, и потому старается нс выходить за рамки испытанного С-подмножества. Только зная о конкретных результатах измерения произволительностп отдельных средств С++ и написанных на нем системах (например, [Кпьэо, 19881, 1йпэзо, 1990), 1КеНег, 1992]), можно преодолеть стойкое убеждение, что средства более удобные, чем в С, обязательно должны требовать больших затрат.
Пользователи, убежденные в том, что эффективность — аспект несущественный, также есть в каждой учебной или проектной группе. Они проектируют до такой степени обобщенные системы, что их медленная работа заметна даже на самом современном оборудовании. К сожалению, это обы шо нс видно в программах, которые пишутся во время обучения, поэтому проблемы из-за пренебрежительного отношения к ним проявляются лишь позже, уже в реальных проектах. НгИИИИИИ1; Заинтересованность и использование пдеямл и быстрому решению возникающих проблем. Тогда я мог лично разбираться в проблемах пользователей, исправлять ошибки в С1гопг и библиотеках, а иногда даже вносить изменения в язык.
Я уже упоминал в разделах 2.14 и 3.3.4, что в то время пользователями были в основном исследователи и разработчики пз Ве!! 1.аЬк 7.3.2. Сферы применения С++ К сожалению, многие пользователи не документируют свой опыт, а некоторые организации считают его чуть ли не государственной тайной. Поэтому до программистов и администраторов доходят не только правдивые данные о языках и методах программирования, по и много мифов, неточной, а иногда и откровенно ложной информации.
Отсюда постоянное дублирование усилий и повторение известных опшбок. Пель этого раздела — показать несколько областей, в которых использовался С++, и побудить разработчиков документировать свой опыт, чтобы пм могло воспользоваться все сообщество пользователей. В каждой из упоминаемых областей трудились, по крайней мере, два человска в течение нс менее двух лет. Самый больп1ой из известных мне документированных проектов состоит из 5 млн строк на С++ и разрабатывался коллективом из 200 человек свыше семи лет. Итак, области использования С++: анимация, автономные логружаемые аппараты, бпллинговые системы (в сфере телекоммуникаций), управление кегельбапом, трассировка монтажа печатных схем, САП/САМ, моделирование химических пропессов, управление агентством по продаже автомобилей, САЯЕ, компиляторы, матобеспеченпе для пультов управления, моделирование циклотрона, системы баз данных, отладчики, системы поддержки принятия решений, обработка цифровых фотографий, электронная почта, управление вышивальной машиной, экспертные системы, автоматизация производства, финансовая отчетность, телеметрия поле~он, обмен валют, перевод денежных сумм, генеалогические исследования, управление газоперекачивающими станциями и биллинговые системы для них, графика, описание аппаратуры, управление больничными архивами, управление промышленным роботом, моделирование набора машинных команд, интерактивные мультимедийные средства, магнитогидродинамика, обработка медицинских образов, медипинский монгпоринг, управление ракетами, управление ипотечной компанией, сетевые протоколы, системы управления и администрирования сетей, мониторинг сетей, операционные системы (реального времени, распределенные, рабочих станций, мейнфреймов, объектно-ориентированные), среды программирования, страховой бизнес, моделирование ударных волн, управление бойнями, программное обеспечение коммутаторов, инструментальные средства для тестирования, трейдерские системы, обработка транзакций, системы передачи данных, управление транспортным парком, пользовательские интерфейсы, видеоигры, виртуальная реальность.
7.4. Коммерческая конкуренция Среди программистов, в прессе, на конференциях и в электронных средствах всегда велись (да и сейчас ведутся) споры о том, какой язык лучший и кто победит Коммерческая конкуренция .611ИИИИИ в борьбе за пользователей. Я считаю такие дебаты бессмысленными и свилстельствуюшими о недостатке информации, но от этого онп не становятся менее значимыми для программиста, руководителя или профессора, которые должны выбрать язык программирования для следующих проектов. Люли спорят о языках программирования с поистине религиозным ожесточением и зачастую полагают, что выбор языка — самая важная часть работы. Поэтому принятие решения огб использовании того или иного языка может стать серьезной проблемой как для отдельного программиста, так и для целой организации.
Этот вопрос релко решается удовлетворительно, а еше реже сделанньш выбор беспристрастно документируется, чтобы другие могли извлечь из этого пользу. Ко всему прочему, в организациях по разным причинам считают, что управление разработкой, сделанной на нескольких языках, — слишком трудоемкий процесс. Проблема усугубляется и тем, что проектировшики языков и разработчики компиляторов не считают важной задачу взаимодействия между выбранным языком и всеми остальными.