Рецензии на книгу
"Практика программирования"


05.07.2006
PC Week (портал)
Александр Чубуков
http://kis.pcweek.ru/Year2005/N14/CP1251/Opinions/chapt5.htm

ИД “Вильямс” (www.williamspub-lishing.com) выпустил в свет очередную книгу из серии “Программирование для профессионалов” известного компьютерного издательства Addison-Wesley. Это уже восьмое (дополненное и исправленное) издание, что само по себе говорит о постоянном интересе к данному неординарному труду со стороны становящегося все более многочисленным сообщества программистов, к которому принадлежат и российские разработчики.

Ценность книги состоит прежде всего в том, что в ней отражен и, главное, обобщен долголетний многосторонний опыт создания ПО на разных языках высокого уровня (прежде всего Си, C++, Java, Awk, Perl) и в разных средах (Unix, Linux, MS Windows, Mac). Ее авторы — классики в области программирования, чьи труды не пылятся на полках, а всегда под рукой, причем не только у начинающих программистов, но и у профессионалов. Они лично выполнили верификацию программного кода для русскоязычного издания, что свидетельствует об их отношении к россиянам-программистам как достойным коллегам.

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

К сожалению, с переводом не повезло: переводчик, взваливший на свои плечи еще и функции редактора, испытывает проблемы не только с пониманием текста, с компьютерной терминологией, но и с русским языком. Здесь можно обнаружить такие “перлы”, как, например, “отдельные слова, разделенные пустым пространством” (с.

91), или “Слово “bug” (“клоп”), употребляемое в программировании...” (с. 139) и т. п. Дословный перевод и, видимо, слабое понимание смысла того, о чем идет речь, и приводит к появлению “клопов” и “пустого пространства” между словами.

Необходимым условием для изучения этой интересной нестандартной книги является опыт программирования на Си, C++ или Java. Большая часть примеров относится к операционным системам Unix и Linux, но и программисты, работающие в средах Windows и Macintosh, также смогут найти для себя немало интересного.

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

Первая глава посвящена важной теме — стилю написания кода. В ней наглядно показано, что на отладку и сопровождение хорошо написанной программы тратится гораздо меньше сил и времени, а главное, она более стабильна и надежна в работе по сравнению с той, в которой стилю представления кода не уделено должного внимания. Во второй главе дается краткий обзор основных алгоритмов и структур данных, имеющихся, как правило, во всех программах, после чего (гл. 3) авторы переходят к сравнительному анализу архитектуры и быстродействия нескольких вариантов программы, которая написана на разных языках и в которой построен алгоритм, реализующий цепи Маркова.

В четвертой главе рассматриваются проблемы, требующие решения при разработке программы: выбор оптимального интерфейса, инкапсуляция данных, управление ресурсами, обработка возникающих при функционировании программы ошибок.

Искусству отладки простых и сложных программ посвящена пятая глава, а их последующему тестированию — следующая, шестая.

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

Множество оригинальных примеров в виде текстов и фрагментов программного кода, используемых в качестве иллюстративного материала, их толковые описания и комментарии помогают читателю не только разобраться в многочисленных обсуждаемых нетривиальных проблемах, но и существенно пополнить личную “копилку мудрости”, с тем чтобы в своей практике иметь возможность обоснованно выбирать оптимальную архитектуру программы, оптимизировать ее быстродействие, с учетом действующих стандартов добиваться надежной и стабильной работы, а в дальнейшем при необходимости выполнять ее доработку и сопровождение.

“Практика программирования” ориентирована на широкий круг читателей, имеющих дело с разработкой ПО на разных языках и с различными ОС, в первую очередь на профессионалов, не желающих останавливаться на достигнутом, и руководителей подразделений по разработке ПО. Она может быть полезна преподавателям и студентам соответствующих специальностей, начинающим и прикладным программистам.




10.10.2005
Открытые системы (портал)
Рузайкин
http://www.osp.ru/pcworld/2005/04/094.htm

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

Б. Керниган, Р. Пайк Практика программирования М.: Издательский дом «Вильямс». 2004, 288 с.: ил.

Данный труд свидетельствует о большом опыте авторов в области программирования, и это отражено не только в том, что настоящее издание является переводом восьмого американского, но в этом можно убедиться, обнаружив множество других книг тех же авторов в списках рекомендуемой литературы практически после каждой главы. Приятным обстоятельством является проверка авторами для русского издания всех включенных в него примеров. Коды, приведенные в книге, были протестированы в пяти-шести программных средах, их электронная форма доступна на сайте http://tpop.awl.com, посвященном книге.

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

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

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

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

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

Следующая глава посвящена тестированию программ для проверки их функциональных возможностей после написания или доработки. Рассмотрено тестирование, выполняемое вручную и автоматически, в частности стрессовое тестирование, когда программа нагружается большим объемом данных, сгенерированных автоматически.

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

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

«Практика програмирования» написана, по замыслу авторов, для студентов, прослушавших несколько курсов по программированию и вычислительной технике и желающих поднять свой статус в программировании практических задач. Также она может оказаться полезной и для тех, кто пишет программы лишь время от времени. Дело в том, что приведенные в книге сведения позволят повысить эффективность программирования и в этом случае.




Rambler Top100