четверг, мая 29, 2008

Concepts, Techniques, and Models of Computer Programming

Вот я и стал счастливым обладателем CTM.

Володя, что это за книжка? — спросите вы.

Отвечаю: “Concepts, Techniques, and Models of Computer Programming” — пожалуй, самый полный набор самых полезных идей в программировании.

Все мы знаем, что есть функциональное программирование, логическое, объектно-ориентированное. Есть ленивые вычисления, строгие. Есть concurrency с message passing, есть с shared state. Бывает недетерминизм, бывает программирование в ограничениях, да чего только не бывает.

К сожалению, не всему учат в институтах. Обо многом мы узнаем по крупицам, перерывая кучу сайтов, статей, ньюс-групп, форумов. В итоге в голове часто имеется помойка из разрозненных знаний.

Вот для наведения порядка в голове и нужны такие книги.

Авторы поставили перед собой задачу последовательно, шаг за шагом, изложить самые распространенные и полезные концепции в программировании.

Начинают с декларативного программирования (в их варианте чуть больше, чем чисто функциональное или prolog без поиска), переходят к concurrency (сначала message passing), потом добавляют состояние, объекты, shared state concurrency, доходят до логического программирования, а дальше и до распределенного программирования и программирования в ограничениях. И все это только концепции (можете называть их парадигмами, хотя авторы предпочитают более строгое «вычислительная модель»). А к каждой концепции прилагается еще и куча техник.

В отличии от SICP, в CTM не дается реализация всех моделей с нуля, что несколько расстраивает, т.к. не достигается такой уровень понимания. В книге используется kernel language подход, где для объяснения очередной вычислительной модели выбирается минимальное подмножество языка и объясняется семантика этого подмножества. Из-за такого подхода иногда появляется ощущение, что читаешь лекционный материал, а не семинарский (как SICP). С другой стороны CTM — учебник для 2-го курса — тут надо не только кодить учить. А чтобы рассказать обо всех идеях, используя подход SICP (interpreter approach, по их классификации), пришлось бы раздуть 900 страниц (в формате 20х25 см) тысяч до 3-х.

В качестве языка авторы используют собственную разработку — язык Oz. Но как SICP не является учебником по Scheme, так и CTM — не учебник по Oz. Это книги по Программированию.

В общем, книга явно must read, особенно для тех, кто еще совсем не знаком с изложенными в ней идеями и не собирается учить десять языков, чтобы в них разобраться.

Пойду читать дальше, чего и вам желаю.