Программист-прагматик. Путь от подмастерья к мастеру

Хант Эндрю

Томас Дэвид

Приложение А

Информационные ресурсы

 

 

Авторы затронули в книге весьма широкий круг вопросов программирования, и этому есть объяснение: вопросы рассматривались с высоты птичьего полета. Но если бы им было уделено то внимание, которого они заслуживают, то объем книги стал бы больше на порядок.

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

В разделе «Профессиональные общества» приведены координаты IEEE (Institute of Electrical and Electronical Engineers – Институт инженеров по электротехнике и радиоэлектронике) и ACM (Association of Computing Machinery – Ассоциация по вычислительной технике). Мы рекомендуем программисту-прагматику вступить в ряды одного (или обоих) из этих обществ. Ниже в разделе «Собираем библиотеку» указаны периодические издания, книги и интернет-сайты, которые содержат высококачественную и ценную информацию (или просто-напросто забавны по своему содержанию).

В книге содержится много ссылок на программные ресурсы, доступные через Интернет. В разделе «Интернет-ресурсы» приводятся их адреса (URL) с кратким описанием. Но в силу природы Интернета многие из этих адресов могут устареть к моменту выхода книги в свет. Для того чтобы найти более свежие ссылки, можно воспользоваться одной из поисковых систем или же посетить наш интернет-сайт: www.pragmaticprogrammer.com и просмотреть соответствующий раздел.

И наконец, в приложении содержится библиографический список.

 

Профессиональные общества

У программистов существует два профессиональных объединения мирового уровня. Association of Computing Machinery – ACM (Ассоциация по вычислительной технике) и Institute of Electrical and Electronical Engineers – IEEE (Компьютерное общество института инженеров по электротехнике и радиоэлектронике). Всем программистам рекомендуется вступить в одно (или оба) из этих обществ. Кроме того, разработчики, проживающие вне США, могут вступить в соответствующие национальные объединения (примером может служить 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 () дают оперативное и всестороннее освещение разнообразных тем и языков, таких как perl, уасс, sendmail, внутренней организации Windows и регулярных выражений.

Интернет

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

• Slashdot. Под заголовком «News for nerds. Stuff that matters» (Новости для дебилов. Материал со значением) скрывается один из крупнейших сайтов сообщества Linux. Помимо регулярно обновляемых новостей из мира Linux сайт предлагает информацию по модным технологиям и проблемам, которые волнуют разработчиков.

• Cetus Links. Тысячи ссылок на тему объектно-ориентированного программирования.

• WikiWikiWeb. Центральная база данных шаблонов и обсуждение шаблонов (в Портленде, США). Не являясь особо выдающимся ресурсом, данный сайт представляет собой интересный эксперимент по коллективному редактированию идей.

 

Интернет-ресурсы

Приведенные ниже ссылки на ресурсы, доступные в Интернете, были действительны во время работы над книгой, но (Сеть есть Сеть!) к моменту выхода ее в свет могут сильно устареть. В этом случае можно попробовать общий поиск по именам файлов или же зайти на сайт Pragmatic Programmer (www.pragmaticprogrammer.com) и проверить имеющиеся на нем ссылки.

Текстовые редокторы

Emacs и vi – не единственные межплатформенные редакторы, но они распространяются бесплатно и находят широкое применение. Пролистав любой специализированный журнал (например Dr. Dobbs), можно найти ряд коммерческих альтернатив вышеуказанным редакторам.

Редактор Emacs

Редакторы Emacs и XEmacs имеют версии как для платформы Unix, так и для Windows.

[URL 1] Редактор Emacs

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

[URL 2] Редактор XEmacs

Отпочковавшись от классического редактора Emacs несколько лет назад, XEmacs отличается более корректными внутренними командами и более изящным интерфейсом.

Редактор vi

Существует как минимум 15 различных клонов редактора vi. Редактор vim переносится на большинство платформ и является хорошим выбором при работе в различных программных средах.

[URL 3]The Vim Editor

Цитата из документации: «Редактор vi содержит большое количество усовершенствований: многоуровневая отмена команд, многооконный интерфейс с буферами, выделение синтаксиса, редактирование в командной строке, дополнение имен файлов, экранная справка, визуальный выбор объектов, и т. д.»

[URL 4] Редактор elvis

Усовершенствованный клон редактора vi с поддержкой X.

[URL 5] Emacs Viper Mode

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

Эти ресурсы, относящиеся к языку Perl, предоставляются фирмой O'Reilly.

[URL 9] The Python Language

Объектно-ориентированный язык программирования Python является интерпретируемым и интерактивным, обладает хитроумным синтаксисом и большим количеством верных поклонников.

[URL 10) SmallEiffel

SmallEiffel.loria.fr

Компилятор GNU Eiffel работает на любом компьютере, снабженном компилятором ANSI С и средой выполнения Posix.

[URL 11] ISE Eiffel

Фирме Interactive Software Engineering принадлежит авторство программы Design by Contract; она реализует на коммерческой основе компилятор Eiffel и сопутствующие инструментальные средства.

[URL 12] 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

Весьма динамичный язык, ведущий свое начало от Objective-С.

[URL 16] The Beowulf Project

Проект посвящен построению высокопроизводительных компьютеров из сетевых кластеров, состоящих из недорогих Linux-блоков.

[URL 17] iContract – Design by Contract Tool For Java

Данное инструментальное средство использует формализм предварительных условий, выходных условий и инвариантов, реализовано в виде препроцессора для Java. Использует наследование, реализует кванторы существования и многое другое.

[URL 18] Nana – Logging and Assertions for С and С++

Улучшенная поддержка проверки утверждений и регистрации в С и С++. 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

Популярный браузер, применяемый при реорганизации (язык Smalltalk).

[URL 21] DOC++ Documentation Generator

 

DOC++ представляет собой систему документирования для C/C+ + и Java, которая генерирует выходные файлы в форматах LATEX и HTML для просмотра документации непосредственно из заголовка С++ или файлов класса Java.

[URL 22] xUnit – Unit Testing Framework

 

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

[URL 23] The Tel Language

 

Язык Tel (Tool Command Language) является языком сценариев, разработанным для упрощения процедуры встраивания в приложение.

[URL 24] Expect – Automate Interaction with Programs

Расширение expect, построенное на языке Tel [URL 23], позволяет создавать сценарии взаимодействия с программами. Помимо помощи при составлении командных файлов, которые, например, осуществляют вызов файлов с удаленных серверов или расширяют возможности оболочки, expect приносит пользу и при регрессионном тестировании. Графическая версия expectk позволяет оборачивать приложения пользователя с графическим интерфейсом в оконный интерфейс.

[URL 25] Т Spaces

Цитата с web-страницы: «Т Spaces представляет собой сетевой коммуникационный буфер с функциональными возможностями баз данных. Он осуществляет связь между приложениями и устройствами в сети с гетерогенными компьютерами и операционными системами. Т Spaces обеспечивает следующие средства: коллективной связи, работы с базами данных, переноса файлов (основанные на URL) и оповещения о событиях».

[URL 26] javaCC – Java Compiler-Compiler

Генератор грамматического разбора, связанный с языком Java.

[URL 27] The bison Parser Generator

Генератор bison получает на входе описание грамматики и генерирует из него исходный текст соответствующей программы грамматического разбора на языке С.

[URL 28] SWIG – Simplified Wrapper and Interface Generator

SWIG представляет собой инструментальное средство разработки, стыкующее между собой программы, написанные на языках С, С++ и Objective-C, с языками высокого уровня, такими как Perl, Python, Tcl/Tk, а также Java, Eiffel и Guile.

[URL 29] The Object Management Group, Inc.

Фирма Object Management Group, Inc. является «распорядителем» различных спецификаций для разработки распределенных объектно-базирующихся систем. К числу работ этой фирмы относятся CORBA (обобщенная архитектура брокера объектных запросов) и ПОР (протокол передачи сообщений между сетевыми объектами через Интернет). Сочетание этих спецификаций дает возможность объектам связываться друг с другом, даже если они написаны на разных языках и выполняются на компьютерах различных типов.

Инструментальные средство UNIX, работающие в среде DOS

[URL 30] The UWIN Development Tools

Фирма Global Technologies, Inc., Old Bridge, NJ

Пакет UWIN предоставляет библиотеки динамической компоновки (DLL) Windows, которые эмулируют большую часть библиотечного интерфейса уровня Unix С. Используя данный интерфейс, фирма Global Technologies, Inc. перенесла большое число инструментальных средств из командной строки Unix в систему Windows. См. также [URL 31].

[URL 31] The Cygnus Cygwin Tools

Фирма Cygnus Solutions, Sunnyvale, CA

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

[URL 32] Perl Power Tools

Данный проект посвящен повторной реализации классического набора команд Unix на языке Perl, что дает возможность их использования при работе со всеми платформами, поддерживающими Perl (их довольно много).

Средствауправленияисходнымтекстомпрограмм

[URL 33] RCS – Revision Control System

Система управления исходным текстом программ 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

Инструментальное средство управления версиями (ориентированное на процесс), которое применяет к ним существующие стандарты проекта (например, проверку прохождения тестов для возвращаемых программных кодов).

[URL 36] ClearCase

www.rational.com

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

[URL 37] MKS Source Integrity

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

[URL 38] PVCS Configuration Management

Система управления исходным текстом программ, очень популярная при работе в Windows.

[URL 39] Visual SourceSafe

Система управления версиями, интегрируемая с инструментами визуальной разработки фирмы Microsoft.

[URL 40] Perforce

www.perforce.com

Менеджер конфигурирования программного обеспечения «клиент-сервер».

Прочие инструментальные средства

[URL 41] Winzip – Archive Utility for Windows

Фирма Nico Mak Computing, Inc., Mansfield, CT

Утилита архивирования файлов, работающая в среде Windows. Поддерживает форматы zip и tar.

[URL 42] The Z Shell

Оболочка, предназначенная для интерактивной работы и содержащая мощный язык сценариев. В оболочку 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

Стоит посмотреть раздел «Structuring Use Cases with Goals» и так называемые шаблоны сценариев использования.

[URL 47] Martin Fowler's Home Page

Мартин Фаулер является автором книги «Analysis Patterns» и соавтором книг «UML Distilled» и «Refactoring: Improvingthe Design of Existing Code». На домашней странице автора обсуждаются его книги и работа с UML.

[URL 48] Robert С. Martin's Home Page

Неплохое собрание статей ознакомительного плана по объектно-ориентированным методам, включая анализ зависимости и метрики.

[URL 49] Aspect-Oriented Programming

Описывается методика придания функциональности программному коду с позиций ортогональности и описательности.

[URL 50] JavaSpaces Specifications

Linda-подобная система для Java, поддерживающая распределенное сохранение состояния объекта и распределенные алгоритмы.

[URL 51] Netscape Source Code

www.mozilla.org

Исходный текст браузера Netscape.

[URL 52] The Jargon File

Eric S. Raymond

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

[URL 53] Eric S. Raymond's Papers

Статьи Эрика Раймона «The Cathedral and the Bazaar» и «HomesteadingNoosphere», в которых описаны психосоциальные основы и смысл движения Open Source.

[URL 54] The К Desktop Environment

Цитата с web-страницы: «KDE представляет собой мощную графическую настольную среду для рабочих станций Unix. KDE является интернет-проектом, открытым в полном смысле этого слова».

[URL 55] The GNU Image Manipulation Program

Gimp является бесплатной программой по созданию, композиции и ретушированию изображений.

[URL 56] The Demeter Project

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

Другие источники

[URL 57] The GNU Project

Фонд Free Software Foundation, Boston, MA

Фонд «Free Software Foundation» – это некоммерческая благотворительная организация, осуществляющая сбор средств на проект GNU. Целью проекта GNU является создание завершенной, бесплатной UNIX-подобной операционной системы. Многие из попутно разработанных инструментальных средств уже стали отраслевыми стандартами.

[URL 58] Web Server Information

Ссылки на домашние страницы, находящиеся более чем на 50 web-серверах. Часть из них является коммерческими продуктами, другие же распространяются бесплатно.