РЕЦЕНЗИИ
Спинеллис Д. Анализ программного кода на примере проектов Open Source. Пер. с англ. М.: Издательский дом "Вильямс", 2004. - 528 с.
Мир ПО - сегодня об этом можно говорить уже с определенностью - раскололся на две половины: традиционные программы, в которых программный код скрыт, что получается само собой при компиляции, и программы с открытым кодом, когда публикуются, при этом лицензионно защищаясь, их исходные тексты. Такие тексты могут быть скомпилированы (или перекомпилированы) пользователем, даже и не очень разбирающимся в тонкостях программирования. Кроме очевидных преимуществ открытого кода (он доступен для изучения, заимствования готовых решений и т. п.) такое ПО предоставляет пользователю принципиально иные возможности: он может перекомпилировать программу, предварительно внеся в исходный текст изменения, что допускается лицензионным соглашением, а также добавить или изъять соответствующие модули (авторские, собственные либо сторонних разработчиков). Недостаток таких программ заключается в отсутствии во многих случаях документации либо в слабом их документировании. И прежде чем использовать готовые решения, почерпнутые из подобного проекта, или пытаться встраивать дополнительные модули, требуется проанализировать исходный код программы, понять, как она функционирует, разобраться в ее структуре и в деталях работы.
О том, как проделать столь непростую работу по анализу кода, написанного профессионалами на языках высокого уровня, и идет речь в этой не совсем обычной книге. В ней приводятся методы аналитического прочтения кода, требующие знаний основных принципов практического программирования. Именно такие знания автор в первую очередь хочет донести до читателя, с тем чтобы продолжить вместе с ним дальнейший непростой путь. Цель издания - изучение методов эффективного анализа сложных проектов ПО, а не какого-либо языка - предполагается, что читатель уже владеет как минимум языками Си и C++ и опытом программирования, а также обладает некоторыми знаниями о языках Java и Perl.
Книга имеет практическую направленность и состоит из предисловия, одиннадцати глав, разбитых на параграфы, пяти приложений, обширного библиографического перечня, предметного указателя и списка источников приводимых эпиграфов. В нее вошло большое число примеров в виде фрагментов кодов с пояснениями и комментариями, а для лучшего усвоения и закрепления непростого материала даются многочисленные методически очень грамотно составленные упражнения, выполнение которых предполагает, что читатель в достаточной мере сумеет овладеть полученными знаниями, с тем чтобы их в дальнейшем уверенно применять на практике. Особое внимание г-н Спинеллис уделяет диаграммам, считая, что они способствуют углубленному изучению структуры программ. В издание включен компакт-диск (к сожалению, не ставший традиционным для многих выпускаемых сегодня компьютерных книг), на котором записаны все файлы исходного кода, упоминаемые в тексте, а для удобства читателя в приложении B приведен указатель имен этих файлов со ссылками на страницы.
После введения (глава 1) автор кратко рассказывает об основных элементах программ, о сложных типах и структурах данных в Си, о механизмах управления программами (главы 2-5), после чего переходит к анализу больших проектов (глава 6), рассматривает стандарты стиля программирования (глава 7).
В восьмой главе г-н Спинеллис освещает проблемы, которые могут возникнуть при работе с документацией. Девятая глава, насчитывающая более 70 стр., посвящена архитектуре сложных программ, десятая - дополнительным средствам программирования, таким, как регулярные выражения, компилятор для анализа кода и т. п. В заключительной, одиннадцатой главе дан масштабный пример (добавление в СУБД SQL-функции), наглядно демонстрирующий применение полученных знаний на практике.
Из приложений необходимо выделить последнее - Д, состоящее из одиннадцати небольших глав, в которых даны краткие и четкие рекомендации (с примерами) по анализу программного кода, основанные на обширном аналитическом материале всего труда.
В процессе изучения этой книги читатель приобретает уверенность, что нетривиальная работа по анализу сложного кода реально может быть доступна программистам разного уровня. И этим поистине уникальным трудом могут воспользоваться не только профессионалы, стремящиеся повысить свою квалификацию или выполняющие трудоемкую работу по изучению программного кода, но также студенты и преподаватели соответствующих специальностей.