Десять программистских книг, которые потрясли мир, но все еще неизвестны в России
 
06.04.2004
Андрей Терехов


 
стр. 1
стр. 2 >>

Список Андрея Терехова, как и любой субъективный список, довольно спорен, но мы публикуем его, потому что книги, о которых он пишет, действительно хороши и, к сожалению, малоизвестны у нас. Сам Андрей несколько лет преподавал в СПбГУ, и тот факт, что его кафедра дала России единственную команду, побеждавшую на студенческой олимпиаде по программированию АСМ, вполне может служить достаточной рекомендацией составителю. — В.Г.

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

Поэтому я очень обрадовался, когда в середине 1990-х российские и украинские издательства начали одну за другой штамповать переводные книжки по программированию. Случилось это, надо сказать, своевременно: российские авторы уже почти ничего не писали, а издания конца 70-х—начала 80-х, осевшие в библиотеках, мягко говоря, перестали удовлетворять. Вскоре я собрал неплохую подборку трудов по программированию (пришлось даже купить книжный шкаф).

Однако полному счастью мешало одно досадное обстоятельство: мои представления о том, какие книги достойны перевода, почему-то сильно расходились с мнением издателей. И за последние десять лет мало что изменилось. При желании за это время можно было собрать богатейшую коллекцию книг о программировании на всех версиях Visual Basic, начиная с 3.0 и заканчивая VB.NET, но действительно полезные можно было пересчитать по пальцам. Поэтому я взял за правило при поездках за рубеж посещать книжные магазины. Кстати, не могу сказать, что в заокеанских магазинах процент приличных книг на эту тему выше, чем в России, но американцы, как обычно, берут не умением, а числом: в США объем полиграфической продукции таков, что всегда можно найти книги, заслуживающие внимания.

Покупка любой книги на Западе — это Поступок, последствия которого приходится тщательно взвешивать. Поэтому многие магазины поощряют чтение книг «не отходя от кассы» — ставят в салоне кресла, продают кофе и вовсе не настаивают на том, чтобы люди, перелистывающие томик, обязательно его купили! Но даже таких льготных условий, как показывает практика, мало, чтобы завлечь американцев в книжные магазины, а вот русские люди быстро превращаются в завсегдатаев. Сколько часов я провел в одном таком магазине во время командировки в США в 2000 году, только богу известно, — могу лишь сказать, что прочел не меньше десятка книг по программированию, а затем увез их в Россию целый чемодан.

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


1 Tom DeMarco, Timothy Lister, «Peopleware»

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

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

2 Steve McConnell, «Code Complete»

Написанная в 1993 году, когда не существовало ни Java, ни .NET, ни рефакторинга, эта книга во многом устарела. Однако до сих пор, на мой взгляд, она остается лучшей книгой по software construction.

У меня сложилось свое мнение о том, почему на свете так мало толковых пособий по разработке программ: хорошие программисты не хотят писать книжек по software construction — для них это слишком очевидно (Стив Макконнелл — лишь исключение, подтверждающее правило), а неумехи в принципе не могут написать ничего хорошего и от досады переходят в лагерь противников, утверждая, что разработка ПО — вовсе не главное в программной инженерии, а главное — это Процесс Разработки По Великой и Непогрешимой Методологии (неважно по какой, лишь бы с большой буквы).

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

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

3 Gerald Weinberg, «Psychology of Computer Programming»

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

Дело в том, что я сторонник теории распространения знаний через анекдоты. По моим представлениям, все это работает примерно так: программисты собираются в курилке или за кружкой пива и рассказывают друг другу «истории с полей» (у американцев это называется war stories).

Подход, разумеется, не научный, и эффективность передачи знаний таким образом немногим выше нулевой отметки. Однако все остальные способы почему-то еще хуже. Именно по этой причине такие книги, как «Вайнберг», остаются популярными и переиздаются через четверть века после первого издания без единого изменения в тексте! (Кстати, таких книг очень мало — я сумел вспомнить лишь Вайнберга, «Peopleware», ну и Брукса, конечно.)

Только подумайте — за прошедшие двадцать пять лет Фортран и Кобол перестали быть самыми продвинутыми языками программирования; подавляющее большинство современных программистов не знает, что такое писать в кодах, но вопросы, обсуждающиеся в «Psychology of Computer Programming», по-прежнему актуальны. Так что, покуда программирование остается созидательной областью человеческой деятельности, эта книга не покинет списка бестселлеров.

4 Steve Maguire, «Writing Solid Code»

Во времена моей юности продвинутые программисты любили щеголять термином defensive programming (защитное программирование). Он был как пропуск в высший свет: либо ты знаешь, что сие означает, и произносишь два красивых словечка, причмокивая губами и закатывая глаза (тогда ты, несомненно, крутой программист), либо удивленно хлопаешь ресницами, и тогда ты зеленый ламер. Вот только в ответ на расспросы «знатоки» отделывались общими словами про вселенскую полезность assert’ов и проверки переданных в функцию параметров. Короче, все что-то слышали про defensive programming, но никто про это толком рассказать не мог.

Так было до тех пор, пока за дело не взялся Стив Магвайр, программистский гуру из Microsoft, успешно работавший над такими продуктами, как Word и Excel на платформах Windows и Macintosh. В книге отражен бесценный опыт нескольких поколений программистов, отважно сражавшихся со своими и чужими программами на языке С — языке, прославившемся невероятным количеством разбросанных тут и там грабель. «Writing Solid Code» учит, как на эти грабли не наступить. Многие программисты скажут, что книга давным-давно устарела, и будут по-своему правы — нынешние языки программирования неуклонно движутся в сторону усиления статического контроля типов и тем самым оставляют все меньше места для случайных синтаксических ошибок. Но и это не панацея, так как никакой компилятор никогда не отследит off-by-one errors и не заставит программистов избегать рискованных трюков. Наверное, именно по этой причине в Microsoft все еще рекомендуют «Writing Solid Code» всем новоприбывшим разработчикам.

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


 
стр. 1
стр. 2 >>

<<"Три К" сертификации для IT-специалистов
Все материалы номера
Искусство принадлежит народу >>