Авторы затронули в книге весьма широкий круг вопросов программирования, и этому есть объяснение: вопросы рассматривались с высоты птичьего полета. Но если бы им было уделено то внимание, которого они заслуживают, то объем книги стал бы больше на порядок.
Книга начинается с утверждения, что программисты-прагматики должны постоянно учиться. В данном приложении приводится перечень источников информации, которые могут им в этом поспособствовать.
В разделе «Профессиональные общества» приведены координаты IEEE (Institute of Electrical and Electronical Engineers – Институт инженеров по электротехнике и радиоэлектронике) и ACM (Association of Computing Machinery – Ассоциация по вычислительной технике). Мы рекомендуем программисту-прагматику вступить в ряды одного (или обоих) из этих обществ. Ниже в разделе «Собираем библиотеку» указаны периодические издания, книги и интернет-сайты, которые содержат высококачественную и ценную информацию (или просто-напросто забавны по своему содержанию).
В книге содержится много ссылок на программные ресурсы, доступные через Интернет. В разделе «Интернет-ресурсы» приводятся их адреса (URL) с кратким описанием. Но в силу природы Интернета многие из этих адресов могут устареть к моменту выхода книги в свет. Для того чтобы найти более свежие ссылки, можно воспользоваться одной из поисковых систем или же посетить наш интернет-сайт: www.pragmaticprogrammer.com и просмотреть соответствующий раздел.
И наконец, в приложении содержится библиографический список.
У программистов существует два профессиональных объединения мирового уровня. Association of Computing Machinery – ACM [55] (Ассоциация по вычислительной технике) и Institute of Electrical and Electronical Engineers – IEEE [56] (Компьютерное общество института инженеров по электротехнике и радиоэлектронике). Всем программистам рекомендуется вступить в одно (или оба) из этих обществ. Кроме того, разработчики, проживающие вне США, могут вступить в соответствующие национальные объединения (примером может служить British Computer Society – BCS – Британское компьютерное общество).
Члены профессиональных обществ пользуются рядом преимуществ. Конференции и собрания дают возможность общения людям с общими интересами, а специальные секции и технические комитеты позволяют участвовать в выработке стандартов и рекомендаций, используемых во всем мире. Многое можно почерпнуть из их публикаций, в которых ведутся «высоколобые» дискуссии по практическим вопросам и «приземленные» разговоры по компьютерной теории.
Мы серьезно относимся к чтению книг. Как было замечено в разделе «Портфель знаний», хороший программист учится постоянно. Постоянное нахождение программиста в курсе выходящих книг и периодики способствует такому обучению.
Люди, подобные авторам книги, хранят старые журналы и периодику до тех пор, пока вес стопки не будет достаточен для превращения нижних экземпляров в алмаз. Вот некоторые периодические издания, рекомендуемые авторами.
• IEEE Computer. Рассылается по подписке членам Компьютерного общества Института инженеров по электротехнике и радиоэлектронике. Этот журнал сосредоточен на практических аспектах, но не чужд и теории. Некоторые номера посвящены конкретной тематике, другие же представляют собой просто сборники интересных статей. Говоря языком связистов, журнал обладает хорошим соотношением «сигнал-шум».
• IEEE Software. Не менее ценная публикация Компьютерного общества Института инженеров по электротехнике и радиоэлектронике, издаваемая раз в два месяца и нацеленная на программистов-практиков.
• Communications of the ACM. Основной журнал, получаемый всеми членами Ассоциации по вычислительной технике; на протяжении десятилетий является отраслевым стандартом и опубликовал больше основополагающих статей, чем любой другой источник.
• SIGPLAIM. Журнал выпускается секцией языков программирования, входящей в ассоциацию АСМ, распространяется среди членов АСМ. В нем часто публикуются спецификации языков программирования, наряду с тематическими статьями для всех, кто любит «копать вглубь».
• Dr. Dobbs Journal. Ежемесячный журнал, распространяемый по подписке и продающийся в киосках. Этот журнал непрост для восприятия, но его статьи охватывают как практические аспекты, так и чистую теорию.
• The Perl Journal. Поклонникам Perl стоит подписаться на этот журнал (www.tpj.com).
• Software Development Magazine. Ежемесячный журнал, посвященный общим вопросам управления проектами и разработки программного обеспечения.
Существует несколько еженедельных газет для разработчиков и менеджеров. Эти газеты в основном представляют собой сборники фирменных пресс-релизов, перекроенных в статьи. Тем не менее, их содержание представляет ценность – оно позволяет быть в курсе событий, не отставать от объявлений о выходе новых продуктов и следить за возникновением и распадом отраслевых альянсов. Но от них не стоит ожидать наличия глубоко проработанных технических материалов.
Книги по компьютерной тематике весьма дороги, но при тщательном выборе они становятся хорошим вложением денег. Вот некоторые из них, понравившиеся авторам:
• Object-Oriented Software Construction, второе издание. Эпическое произведение Бертрана Мейера, посвященное основам объектно-ориентированного программирования, общим объемом 1300 страниц [Меу97Ь].
• Design Patterns. Конструктивный шаблон описывает метод решения конкретного класса задач на более высоком уровне по сравнению с фразеологизмом на языке программирования. Эта неоклассическая книга [GHJV95], написанная «бандой четырех» (группа авторов Erich Gamma, Richard Helm, Ralph Johnson и John Vlissides. – Прим. пер.), содержит описание 23 базовых конструктивных шаблонов, включая Proxy, Visitor и Singleton.
• Analysis Patterns. Сокровищница высококлассных архитектурных шаблонов, выбранных из множества реальных проектов и переработанных в виде книги. Относительно быстрый способ перенимания опыта моделирования, полученного в течение многих лет [Fow96].
• The Mythical Man Month. Классическое произведение (не так давно переработанное) Фреда Брукса, о «подводных камнях», появляющихся в ходе организации команд разработчиков [Вго95].
• Dynamics of Software Development. Серия коротких очерков о разработке программного обеспечения в больших командах, сосредоточенных на динамике взаимодействия членов команды между собой, а также между самой командой и внешним миром [МсС95].
• Surviving Object-Oriented Projects: A Manager's Guide. «Вести с переднего края», сообщенные Алистером Кокбэрном, иллюстрируют многие опасности и ловушки, подстерегающие вас при управлении объектно-ориентированным проектом, особенно если это ваш первый проект. Г-н Кокбэрн дает подсказки и методики, позволяющие читателю решать наиболее общие проблемы [Сос97Ь].
• Unix. У.Р. Стивенс написал несколько прекрасных книг, включая «Advanced Programming in the Unix Environment» и «Unix Network Programming» [Ste92, Ste98, Ste99].
• Windows. Книга Маршалла Брэйна «Win32 System Services» [Bra95] является кратким справочником по низкоуровневым интерфейсам прикладных программ. Труд Чарльза Петцольда «Programming Windows» [Pet98] стал своего рода Библией для разработчиков графических сред пользователя Windows.
• С++. Получив проект на языке С++, нужно бежать (а не идти) в книжный магазин и хватать книгу Скотта Мейера под названием «Effective С++» и к ней, возможно, книгу «More Effective С++» [Меу97а, Меу96]. При построении систем существенных размеров может понадобиться книга Джона Лакоса «Large-Scale С++ Software Design» [Lak96]. В поисках более сложных методик стоит обратиться к труду Джима Коплина под названием «Advanced С++ Programming Styles and Idioms» [Сор92].
Кроме того, книги из серии Nutshell издательства O'Reilly (www.ora.com) дают оперативное и всестороннее освещение разнообразных тем и языков, таких как perl, уасс, sendmail, внутренней организации Windows и регулярных выражений.
Найти в Интернете нужную информацию трудно. Вот несколько ссылок, которые проверяются авторами как минимум раз в неделю.
• Slashdot. Под заголовком «News for nerds. Stuff that matters» (Новости для дебилов. Материал со значением) скрывается один из крупнейших сайтов сообщества Linux. Помимо регулярно обновляемых новостей из мира Linux сайт предлагает информацию по модным технологиям и проблемам, которые волнуют разработчиков.
www.slashdot.org
• Cetus Links. Тысячи ссылок на тему объектно-ориентированного программирования.
www.cetus-links.org
• WikiWikiWeb. Центральная база данных шаблонов и обсуждение шаблонов (в Портленде, США). Не являясь особо выдающимся ресурсом, данный сайт представляет собой интересный эксперимент по коллективному редактированию идей.
www.c2.com
Приведенные ниже ссылки на ресурсы, доступные в Интернете, были действительны во время работы над книгой, но (Сеть есть Сеть!) к моменту выхода ее в свет могут сильно устареть. В этом случае можно попробовать общий поиск по именам файлов или же зайти на сайт Pragmatic Programmer (www.pragmaticprogrammer.com) и проверить имеющиеся на нем ссылки.
Emacs и vi – не единственные межплатформенные редакторы, но они распространяются бесплатно и находят широкое применение. Пролистав любой специализированный журнал (например Dr. Dobbs), можно найти ряд коммерческих альтернатив вышеуказанным редакторам.
Редакторы Emacs и XEmacs имеют версии как для платформы Unix, так и для Windows.
[URL 1] Редактор Emacs
www.gnu.org
Новейший «крупнокалиберный» редактор, обладающий всеми возможностями своих предшественников. Кривая обучения Emacs почти вертикальна, но вас ждет щедрое вознаграждение по мере овладения тонкостями работы. Редактор также содержит отличную программу чтения почты и новостей, адресную книгу, календарь и дневник, приключенческую игру…
[URL 2] Редактор XEmacs
www.xemacs.org
Отпочковавшись от классического редактора Emacs несколько лет назад, XEmacs отличается более корректными внутренними командами и более изящным интерфейсом.
Существует как минимум 15 различных клонов редактора vi. Редактор vim переносится на большинство платформ и является хорошим выбором при работе в различных программных средах.
[URL 3]The Vim Editor
ftp://ftp.fu-berlin.de/misc/editors/vim
Цитата из документации: «Редактор vi содержит большое количество усовершенствований: многоуровневая отмена команд, многооконный интерфейс с буферами, выделение синтаксиса, редактирование в командной строке, дополнение имен файлов, экранная справка, визуальный выбор объектов, и т. д.»
[URL 4] Редактор elvis
www.fh-wedel.de/elvis
Усовершенствованный клон редактора vi с поддержкой X.
[URL 5] Emacs Viper Mode
http://www.cs.sunysb.edu./"kifer/emacs.html
Viper представляет собой набор макрокоманд, которые придают редактору Emacs внешнее сходство с редактором vi. Некоторые могут поставить под сомнение разумность шага, заключающегося в расширении самого большого редактора в мире с целью эмулирования другого редактора, характерной чертой которого является компактность. Другие, напротив, считают, что он объединяет в себе лучшее из двух цивилизаций – Emacs и vi.
[URL 6] The GNU C/C++ Compiler =» www.fsf.org/software/gcc/gcc.html
Один из наиболее популярных в мире компиляторов С и С++. Он также работает с Objective-C. (Во время работы над книгой проект egcs, который вначале отпочковался от gcc. находился в процессе воссоединения с последним.)
[URL 7] The Java Language from Sun
java.sun.com
Домашняя страница Java, включающая загружаемые SDK, документацию, средства обучения, новости и т. д.
[URL 8] Perl Language Home Page
www.perl.com
Эти ресурсы, относящиеся к языку Perl, предоставляются фирмой O'Reilly.
[URL 9] The Python Language
www.python.com
Объектно-ориентированный язык программирования Python является интерпретируемым и интерактивным, обладает хитроумным синтаксисом и большим количеством верных поклонников.
[URL 10) SmallEiffel
SmallEiffel.loria.fr
Компилятор GNU Eiffel работает на любом компьютере, снабженном компилятором ANSI С и средой выполнения Posix.
[URL 11] ISE Eiffel
www.eiffel.com
Фирме Interactive Software Engineering принадлежит авторство программы Design by Contract; она реализует на коммерческой основе компилятор Eiffel и сопутствующие инструментальные средства.
[URL 12] Sather
www.icsi.berkeley.edu/'sather
Sather является экспериментальным языком программирования, ведущим свое происхождение от Eiffel. Его задача – поддерживать функции высшего порядка и итерационной абстракции, а также Common Lisp, CLU или Scheme и быть таким же эффективным, как С, С++ или Fortran.
[URL 13] Visual Works
www.objectshare.com
Основной ресурс для среды VisualWorks Smalltalk. Некоммерческие версии для Windows и Linux распространяются бесплатно.
[URL 14] The Squeak Language Environment
www.squeak.cs.uiuc.edu
Squeak представляет собой бесплатно распространяемую и переносимую реализацию – Sma!ltalk-80, написанную на Squeak; может генерировать код на С для повышения производительности.
[URL 15] The ТОМ Programming Language
www.gerbil.org/tom
Весьма динамичный язык, ведущий свое начало от Objective-С.
[URL 16] The Beowulf Project
www.beowulf.org
Проект посвящен построению высокопроизводительных компьютеров из сетевых кластеров, состоящих из недорогих Linux-блоков.
[URL 17] iContract – Design by Contract Tool For Java
www.reliable-systems.com
Данное инструментальное средство использует формализм предварительных условий, выходных условий и инвариантов, реализовано в виде препроцессора для Java. Использует наследование, реализует кванторы существования и многое другое.
[URL 18] Nana – Logging and Assertions for С and С++
www.cs.ntu.edu.au/homepages/pjm/nana-home/index.html
Улучшенная поддержка проверки утверждений и регистрации в С и С++. Nana также обеспечивает некоторую поддержку для программы Design by Contract.
[URL 19] DDD – Data Display Debugger
www cs.tu-bs.de/softech/ddd
Бесплатный графический интерфейс конечного пользователя для отладчиков Unix.
[URL 20] John Brant's Refactoring Browser
www.cs.uiuc.edu/users/brant/Refactory
Популярный браузер, применяемый при реорганизации (язык Smalltalk).
[URL 21] DOC++ Documentation Generator
www.zib.de/Visual/software/doc++/index.html
DOC++ представляет собой систему документирования для C/C+ + и Java, которая генерирует выходные файлы в форматах LATEX и HTML для просмотра документации непосредственно из заголовка С++ или файлов класса Java.
[URL 22] xUnit – Unit Testing Framework
www.Xprogramming.com
Представляет простую, но мощную концепцию; модуль тестирования структур xUnit является полной платформой для тестирования программного обеспечения, написанного на нескольких языках.
[URL 23] The Tel Language
www.scriptics.com
Язык Tel (Tool Command Language) является языком сценариев, разработанным для упрощения процедуры встраивания в приложение.
[URL 24] Expect – Automate Interaction with Programs
www.expect.nist.gov
Расширение expect, построенное на языке Tel [URL 23], позволяет создавать сценарии взаимодействия с программами. Помимо помощи при составлении командных файлов, которые, например, осуществляют вызов файлов с удаленных серверов или расширяют возможности оболочки, expect приносит пользу и при регрессионном тестировании. Графическая версия expectk позволяет оборачивать приложения пользователя с графическим интерфейсом в оконный интерфейс.
[URL 25] Т Spaces
www.almaden.ibm.com.cs/TSpaces
Цитата с web-страницы: «Т Spaces представляет собой сетевой коммуникационный буфер с функциональными возможностями баз данных. Он осуществляет связь между приложениями и устройствами в сети с гетерогенными компьютерами и операционными системами. Т Spaces обеспечивает следующие средства: коллективной связи, работы с базами данных, переноса файлов (основанные на URL) и оповещения о событиях».
[URL 26] javaCC – Java Compiler-Compiler
www.suntest.com
Генератор грамматического разбора, связанный с языком Java.
[URL 27] The bison Parser Generator
www.gnu.org/software/bison/bison.html
Генератор bison получает на входе описание грамматики и генерирует из него исходный текст соответствующей программы грамматического разбора на языке С.
[URL 28] SWIG – Simplified Wrapper and Interface Generator
www.swig.org
SWIG представляет собой инструментальное средство разработки, стыкующее между собой программы, написанные на языках С, С++ и Objective-C, с языками высокого уровня, такими как Perl, Python, Tcl/Tk, а также Java, Eiffel и Guile.
[URL 29] The Object Management Group, Inc.
www.omg.org
Фирма Object Management Group, Inc. является «распорядителем» различных спецификаций для разработки распределенных объектно-базирующихся систем. К числу работ этой фирмы относятся CORBA (обобщенная архитектура брокера объектных запросов) и ПОР (протокол передачи сообщений между сетевыми объектами через Интернет). Сочетание этих спецификаций дает возможность объектам связываться друг с другом, даже если они написаны на разных языках и выполняются на компьютерах различных типов.
[URL 30] The UWIN Development Tools
www.gtlinc.com/Products/Uwin/uwin.html
Фирма Global Technologies, Inc., Old Bridge, NJ
Пакет UWIN предоставляет библиотеки динамической компоновки (DLL) Windows, которые эмулируют большую часть библиотечного интерфейса уровня Unix С. Используя данный интерфейс, фирма Global Technologies, Inc. перенесла большое число инструментальных средств из командной строки Unix в систему Windows. См. также [URL 31].
[URL 31] The Cygnus Cygwin Tools
www.sourceware.cygnus.com/cygwin/
Фирма Cygnus Solutions, Sunnyvale, CA
Пакет Cygnus также эмулирует интерфейс библиотеки Unix С и предоставляет большой набор инструментальных средств, работающих в режиме командной строки Unix, при работе в операционной системе Windows.
[URL 32] Perl Power Tools
www.perl.com/language/ppt/
Данный проект посвящен повторной реализации классического набора команд Unix на языке Perl, что дает возможность их использования при работе со всеми платформами, поддерживающими Perl (их довольно много).
Средствауправленияисходнымтекстомпрограмм
[URL 33] RCS – Revision Control System
www.cyclic.com
Система управления исходным текстом программ GNU для Unix и Windows NT.
[URL 34] CVS – Concurrent Version System
www.cyclic.com
Система управления исходным текстом программ для Unix и Windows NT, распространяемая бесплатно. Расширяет возможности Revision Control System, поддерживая модель «клиент-сервер» и параллельный доступ к файлам.
[URL 35] Aegis Transaction-Based Configuration Management
www.canb.auug.org.au/"mil!erp/aegis.html
Инструментальное средство управления версиями (ориентированное на процесс), которое применяет к ним существующие стандарты проекта (например, проверку прохождения тестов для возвращаемых программных кодов).
[URL 36] ClearCase
www.rational.com
Управление версиями программы, рабочей областью и полной сборкой программы, управление процессом.
[URL 37] MKS Source Integrity
www.mks.com
Управление версиями и конфигурацией. Некоторые версии включают средства, позволяющие удаленным пользователям-разработчикам одновременно работать над одними и теми же файлами.
[URL 38] PVCS Configuration Management
www.merant.com
Система управления исходным текстом программ, очень популярная при работе в Windows.
[URL 39] Visual SourceSafe
www.microsoft.com
Система управления версиями, интегрируемая с инструментами визуальной разработки фирмы Microsoft.
[URL 40] Perforce
www.perforce.com
Менеджер конфигурирования программного обеспечения «клиент-сервер».
Прочие инструментальные средства
[URL 41] Winzip – Archive Utility for Windows
www.winzip.com
Фирма Nico Mak Computing, Inc., Mansfield, CT
Утилита архивирования файлов, работающая в среде Windows. Поддерживает форматы zip и tar.
[URL 42] The Z Shell
www.sunsite.auc.dk/zsh
Оболочка, предназначенная для интерактивной работы и содержащая мощный язык сценариев. В оболочку zsh было включено много полезных средств из оболочек bash, ksh и tcsh и добавлен ряд оригинальных элементов.
[URL 43] A Free SMB Client for Unix Systems
www.samba.anu.edu.au/pub/samba/
Дает возможность совместного использования файлов и других ресурсов из операционных систем Unix и Windows. Samba включает в себя:
• Сервер SMB, предоставляющий средства для работы с файлами и для печати (схожие со средствами, предоставляемыми Windows NT и LAN Manager) клиентам SMB, в роли которых могут выступать Windows 95, Warp Server, smbfs и др.
• Сервер имен Netbios, обеспечивающий, кроме всего прочего, поддержку функций браузера. По желанию пользователя Samba может быть главным браузером в локальной сети.
• Клиент SMB (схожий с клиентом ftp), позволяющий получать доступ к ресурсам ПК(дискам и принтерам) из Unix, Netware и других операционных систем.
[URL 44] The comp.object FAQ
www.cyberdyne-object-sys.com/oofaq2
Солидный, четко организованный список часто задаваемых вопросов по группе новостей comp.object.
[URL 45] extreme Programming
www.Xprogramming.com
Цитата с интернет-сайта: «При создании команды, способной быстро создать исключительно надежное, эффективное, четко структурированное программное обеспечение, в ХР используется весьма легковесное сочетание методик. Многие из методик ХР создавались и опробовались в части проекта СЗ фирмы «Крайслер», представляющего собой весьма успешную систему расчета заработной платы, написанную на языке Smalltalk».
[URL 46] Alistair Cockburn's Home Page
www.members.aol.com/acockburn
Стоит посмотреть раздел «Structuring Use Cases with Goals» и так называемые шаблоны сценариев использования.
[URL 47] Martin Fowler's Home Page
www.ourworld.compuseimcom/homepages/martinjowler
Мартин Фаулер является автором книги «Analysis Patterns» и соавтором книг «UML Distilled» и «Refactoring: Improvingthe Design of Existing Code». На домашней странице автора обсуждаются его книги и работа с UML.
[URL 48] Robert С. Martin's Home Page
www.objectmentor.com/home
Неплохое собрание статей ознакомительного плана по объектно-ориентированным методам, включая анализ зависимости и метрики.
[URL 49] Aspect-Oriented Programming
www.parc.xerox.com/csl/projects/aop/
Описывается методика придания функциональности программному коду с позиций ортогональности и описательности.
[URL 50] JavaSpaces Specifications
www.java.sun.com/products/javaspaces
Linda-подобная система для Java, поддерживающая распределенное сохранение состояния объекта и распределенные алгоритмы.
[URL 51] Netscape Source Code
www.mozilla.org
Исходный текст браузера Netscape.
[URL 52] The Jargon File
www.jargon.org
Eric S. Raymond
Определения дня многих общих (и не очень общих) терминов, применяемых в компьютерной индустрии, сдобренные хорошей дозой соответствующего фольклора.
[URL 53] Eric S. Raymond's Papers
www.tuxedo.org/~esr
Статьи Эрика Раймона «The Cathedral and the Bazaar» и «HomesteadingNoosphere», в которых описаны психосоциальные основы и смысл движения Open Source.
[URL 54] The К Desktop Environment
www.kde.org
Цитата с web-страницы: «KDE представляет собой мощную графическую настольную среду для рабочих станций Unix. KDE является интернет-проектом, открытым в полном смысле этого слова».
[URL 55] The GNU Image Manipulation Program
www.gimp.org
Gimp является бесплатной программой по созданию, композиции и ретушированию изображений.
[URL 56] The Demeter Project
www.ccs.neu.edu/research/demeter
Исследовательский проект, призванный упростить поддержку и развитие программного обеспечения с помощью адаптивного программирования.
[URL 57] The GNU Project
www.gnu.org
Фонд Free Software Foundation, Boston, MA
Фонд «Free Software Foundation» – это некоммерческая благотворительная организация, осуществляющая сбор средств на проект GNU. Целью проекта GNU является создание завершенной, бесплатной UNIX-подобной операционной системы. Многие из попутно разработанных инструментальных средств уже стали отраслевыми стандартами.
[URL 58] Web Server Information
www.netcraft.com/survey/servers.html
Ссылки на домашние страницы, находящиеся более чем на 50 web-серверах. Часть из них является коммерческими продуктами, другие же распространяются бесплатно.