четверг, 2 июля 2009 г.

Немного о книге Джеймса Коплиена "Программирование на C++. Классика CS"

Я эту книгу читал уже несколько лет назад, поэтому речь не идет о полноценной рецензии, просто недавно я достал ее с полки, полистал и решил выписать некоторые интересные цитаты, а в месте с ними и свои мысли об этой книге. Первое, что приходит в голову, когда узнаешь, как эта книга называется в оригинале - это что-то вроде: "сколько же выпили переводчики, чтобы оригинальное название, которое звучит "Advanced C++ Programming Styles and Idioms" перевести как "Программирование на С++"? Хорошо хоть о С++ не забыли, а то можно было бы перевести просто как "Программисту" или еще что-то в этом роде.
На самом деле, книга не просто о С++, в ней речь как раз и идет продвинутых идиомах языка, о которых позднее будут писать Саттер и Мейерс, что с учетом даты выхода оригинального издания (это сентябрь 1991 года!) выглядит просто потрясающе. В книге описываются шаблоны проектирования (хотя используется термин "идиома", потому что термина "шаблоны проектирования" в то время еще не было, книга вышла за 3 года до выхода знаменитой книги Банды Четырех).
В книге приводится отличное определения принципа замещения Лисков (см. ниже в этом посте) и определения таких отношений между классами и объектами, как "IS-A", "HAS-A", "USES-A" и другие. Конечно, многие темы уже не столь актуальны сегодня. О многих проблемах гораздо лучше писали те же Саттер и Мейерс, но сам факт, это отличная книга, которая помогла бы множеству разработчиков ... лет эдак 10 назад. Но даже в момент выхода русскоязычного издания в 2005 году она оставалась весьма полезной и актуальной.
Теперь, собственно, к цитатам.
Не сказать, чтобы их было слишком много, но они весьма интересны и познакомиться с ними будет полезно любому разработчику, не зависимо от языка программирования или специализации.
Синтаксис языка до определенной степени формирует наше восприятие, но простое описание синтаксиса в "руководстве пользователя" станет всего лишь отправной точкой. Структура наших программ (а следовательно, и тех систем, которые мы строим) в основном определяется стилем и идиомами, используемыми для выражения архитектурных концепций.
Стиль отличает истинное мастерство от простой удачи. Эффективный стиль воспитания ребенка, программирования и вообще всего на свете строится на основе личного опыта или опыта других. Программист, который умеет правильно связывать возможности языка программирования с потребностями приложения, пишет превосходные программы. Но чтобы выйти на этот уровень, необходимо от правил и механического запоминания перейти к идиомам и стилю, а в конечном счете - к концептуальным и структурным абстракциям.
Предисловие. Изучение языка программирования

Изучение языка программирования имеет много общего с изучением естественного языка. Знание базового синтаксиса позволяет программисту писать простые процедуры и строить из них нетривиальные программы - подобно тому, как человек со словарным запасом в несколько тысяч иностранных слов способен написать нетривиальный рассказ. Но настоящее мастерство - совсем другое дело. Рассказ может быть нетривиальным, но от этого он не станет читаться "на одном дыхании", подчеркивая свободу владения языком его автора. Изучение синтаксиса и базовой семантики языка сродни 13-часовым курсам немецкого для начинающих: после прохождения таких курсов вы сможете заказать колбаски в ресторане, но для работы в Германии журналистом или поэтом их наверняка окажется недостаточно. Различие кроется в идиоматике языка.
Предисловие. Изучение языка программирования
 
В программировании, как и в естественных языках, пригодность и выразительность языковых конструкций базируется на важных идиомах. Хорошие идиомы упрощают работу прикладного программиста, подобно тому как идиомы любого языка обогащают общение. Программные идиомы являются "выражениями" семантики программирования, пригодными для многократного использования в том же смысле, в котором классы служат для многократного использования архитектурных решений и кода. В программировании, как и в естественных языках, пригодность и выразительность языковых конструкций базируется на важных идиомах. Хорошие идиомы упрощают работу прикладного программиста, подобно тому как идиомы любого языка обогащают наше общение. Программные идиомы являются "выражениями" семантики программирования, пригодными для многократного использования в том же смысле, в котором классы служат для многократного использования архитектурных решений и кода.
Предисловие. Изучение языка программирования
 
Как сказал Страуструп, хорошие навыки программирования и проектирования являются результатом личного вкуса, проницательности и опыта.
Глава 1. Проектирование и язык
 
Принцип замещения Барбары Лисков: ...если для каждого объекта o1 типа S существует объект o2 типа T такой, что для всех программ P, определенных в контексте T, поведение P не изменяется при замене o1 на o2, то S является базовым типом для T.
Глава 6. Случайное наследование – омонимы в мире типов

3 комментария:

  1. На полке в магазине часто путаю эту книгу с книгой Страуструпа. Видимо, на это и рассчитывали жуликоватые издатели :о))

    Спасибо за описание, теперь постараюсь приобрести их обе.

    ОтветитьУдалить
  2. Не за что. Книга действительно стоящая:)

    ОтветитьУдалить
  3. Эта книга - лучшее, что я читал по программированию (а читал много чего - и Мейерса и Саттера, и даже Буча). Как кто-то высказался про нее: книга которая переворачивает сознание. Согласен!

    Коплиен можно сказать отец -основатель. С нее все началось - и функторы и идиомы конверт-письмо (pimpl) и многое другое. В 92 году да такое на С++.

    Я считаю каждый сильный С++ обязан ее прочетсь и полюбить )

    ОтветитьУдалить