В отношении к программированию использование вышедшего из обихода французского слова perle («перл») преследует лишь одну цель — подчеркнуть, что серьезное программирование сродни работе с жемчугом.

Джон Бентли, Жемчужины программирования. СПб.: «Питер», 2002. 272 с.: ил.
Появление второго издания книги Джона Бентли представляется очень своевременным: работа во множестве сред и с различных систем обедняет современную пользовательскую культуру написания текстов на языках программирования. Это связано, прежде всего, с тем, что деятельность современного программиста в основном сводится к подготовке текстов, описывающих отдельные фрагменты решения задач, вроде написания интерфейса, преобразования формата данных и т.п. Книга «Жемчужины программирования» родилась в недрах Bell Laboratories; в ней отражен очень важный аспект дисциплины программирования, лежащий между теорией и практикой и позволяющий при создании программы видеть не только необходимость написания текста, но доказательство, по крайней мере, самому себе, что это сделано наилучшим образом. Последнее обстоятельство и требует теоретического анализа созданного кода.

Книга опирается на цикл статей автора в журнале Communications of ACM, что, с одной стороны, определило ее высокий профессиональный уровень, а с другой — позволило обсудить материал с аудиторией весьма требовательных читателей. Первое издание книги, вышедшее в 1988 году, было переведено в издательстве «Мир». Второе, по утверждению Бентли, при тех же целях, что и у первого, «имеет более широкий контекст», связанный с развитием ИТ и продвижением в программировании для баз данных, пользовательских интерфейсов и сетей. Поэтому некоторые разделы старого издания книги выросли в главы, а другие превратились в разделы, также появились новые.

Сохранено деление книги на три части. В «Предварительных сведениях» автор говорит не столько о жемчужных зернах программирования, сколько о раковине, где обитает жемчужина. Здесь речь идет, по существу, о постановке задачи для программирования, которая обычно делается на естественном языке и требует уточнения. Затем автор показывает, как внимательное отношение к алгоритму решения задачи может привести к написанию эффективного кода программы. Далее в этой части книги он демонстрирует, насколько важно правильно структурировать данные задачи, чтобы программное обеспечение полнее отвечало требованиям, предъявляемым к нему пользователем. Кроме того, обсуждается вопрос о том, как убедиться, что код правильный — автор рассматривает проблему верификации программы. Наконец, читатель сможет познакомиться с реализацией на языке Си рассмотренных в предыдущих главах алгоритмов. По мнению Бентли, первая часть книги является ключевой, так как «иллюстрирует главную мысль: глубокие раздумья над обыденными жизненными ситуациями могут оказаться простой забавой, но могут принести и реальные практические выгоды».

«Производительность» — название второй части книги, в которой внимание читателей сосредоточено на эффективности программ. Естественно, автор рассматривает в первую очередь способы повышения производительности. К ним он относит выбор подходящего алгоритма, реорганизацию структуры данных, оптимизацию кода и использование наиболее выгодной аппаратной платформы. Автор, посвящая этому целую главу, советует читателю развивать навыки предварительных оценок производительности, которые сам с успехом демонстрирует на методах разработки алгоритмов, на оптимизации кода программ и используемой при их выполнении памяти.

Завершающая часть книги («Программный продукт») состоит из глав, которые посвящены программированию практически важных задач: сортировка, построение выборки на основе генерируемой последовательности случайных чисел, поиск в линейных и древовидных структурах, а также обработка «куч» и структур упорядоченных данных, используемых при сортировке массивов и анализе очередей с приоритетами. Наконец, последняя глава части книги знакомит читателя с программированием задач, связанных с обработкой разнообразных строк символов, поэтому автор и назвал ее «Жемчужная строка». Здесь читатель найдет описание задач со строками, полезные структуры данных для хранения строк, хэширование, сбалансированные деревья, массивы остатков и библиотеки для работы со строками.

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

Книга не только снабжает знаниями, но и побуждает творчески относиться к программированию, а уверенное балансирование между теоретическим представлениями (абстракциями) и большим числом практических примеров доставит читателю огромное удовольствие. Среди тех, кому данная книга окажется полезной, можно с уверенностью назвать студентов и преподавателей, а также творческих программистов-практиков. Преподавателям будет особенно интересен опыт, которым Джон Бентли щедро делится на страницах этой книги. Ну, а от прочтения эпилогов к изданиям книги, для которых автор выбрал форму интервью с самим собой, получит большое удовольствие даже искушенный гуманитарий.

Несколько замечаний. Первое много «новаций» в именах и фамилиях авторов цитируемых работ. В отечественных традициях Дьердя Полья именуют Полиа или Пойа, а его книга издана под названием «Как решать задачу?». Поэтому даже вездесущий «Яндекс» испытает проблемы с поиском «Полья», а в след за ним и студент не получит в библиотеке этой увлекательной книги при запросе ни по автору, ни по названию. Редактору также следовало посмотреть в учебник математического анализа, чтобы не давать ошибочных толкований символов O() и о().