Кодеры за работой. Размышления о ремесле программиста - Питер Сейбел


Программисты - люди не очень публичные, многие работают поодиночке или в небольших группах. Причем самая важная и интересная часть их работы никому не видна, потому что происходит у них в голове. Питер Сейбел, писатель-программист, снимает покров таинственности с этой профессии. Он взял интервью у 15 величайших профессионалов: Кена Томпсона, создателя UNIX, Верни Козелла, участника первой реализации сети ARPANET, Дональда Кнута, Гая Стила, Саймона Пейтон-Джонса, Питера Норвига, Джошуа Блоха, Брэда Фицпатрика, создателя Живого Журнала, и других. Все они "подсели" на программирование еще в школе. Тогда, на заре зарождения отрасли, лишь в немногих учебных заведениях читались курсы по компьютерным наукам. Поэтому будущим гуру приходилось покорять профессиональные вершины самостоятельно, но всех их отличает творческое горение и полная самоотдача любимому делу.

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

Содержание:

  • Об авторе 1

  • Благодарности 1

  • Введение 1

  • 1. Джейми Завински 2

  • 2. Брэд Фицпатрик 13

  • 3. Дуглас Крокфорд 23

  • 4. Брендан Айк 32

  • 5. Джошуа Блох 40

  • 6. Джо Армстронг 48

  • 7. Саймон Пейтон-Джонс 56

  • 8. Питер Норвиг 65

  • 9. Гай Стил 73

  • 10. Дэн Ингаллс 82

  • 11. Питер Дойч 91

  • 12. Кен Томпсон 100

  • 13. Фрэн Аллен 108

  • 14. Берни Козелл 115

  • 15. Дональд Кнут 126

  • Библиография 135

Кодеры за работой. Размышления о ремесле программиста

Амелии

Об авторе

Питер Сейбел - писатель-программист или программист-писатель. Получив высшее филологическое образование и какое-то время проработав журналистом, пленился Сетью. В начале 1990-х программировал на Perl для журнала "Mother Jones" и портала Organic Online. Участвовал в революции Java как сотрудник WebLogic, позже преподавал программирование на Java на заочных курсах при Калифорнийском университете Беркли. В 2003 году оставил работу архитектора транзакционной системы сообщений, основанной на Java, планируя за год освоить язык Лисп. Вместо этого два года писал книгу "Practical Common Lisp" (Common Lisp на практике), получившую премию Jolt Productivity Award. С тех пор работает "главной обезьяной" Gigamonkeys Consulting: учится учить, заниматься тай-цзи и быть отцом. Проживает в Беркли (Калифорния) с женой Лили, дочерью Амелией и собакой Мелани.

Благодарности

Прежде всего я хотел бы поблагодарить всех своих собеседников, которые любезно согласились потратить свое время и без которых эта книга была бы просто брошюркой с вопросами без ответов. Кроме того, я благодарен Джо Армстронгу и Берни Козеллу и их семьям за то, что предложили мне остановиться у них в Стокгольме и Виргинии. Еще одна особая благодарность - Питеру Норвигу и Джейми Завински, которые не только наговорили собственные интервью на мой диктофон, но и помогли мне связаться с другими будущими героями этих интервью.

Пока я путешествовал по всему свету, проводя интервью, меня приютили еще несколько семей: благодарю за гостеприимство Дэна Уэйнреба и Черил Моро (Бостон), Гарета и Эмму Маккоуэнов (Кембридж, Англия), а также моих родителей, которые предоставили мне отличный плацдарм для действий в Нью-Йорке. Кристофер Родс помог мне заполнить паузу между интервью экскурсией по Кембриджскому университету; благодаря ему и Дэйву Фоксу тот вечер закончился обедом и походом по кембриджским пабам.

Дэн Уэйнреб не только приютил меня в Бостоне, но и был самым усердным рецензентом на протяжении всей работы над этой книгой с той самой поры, когда я только выбирал потенциальных собеседников. Зак Бин, Люк Горри, Дэйв Уолден и моя мама тоже читали рукопись и своевременно меня подбадривали. Зак к тому же - что для моих книг уже традиция - является автором некоторых слов на обложке, на этот раз подзаголовка книги. Алан Кэй внес замечательное предложение включить Дэна Ингаллса и Питера Дойча. Скотт Фальман рассказал мне много полезного о начале карьеры Джейми Завински, а Дэйв Уолден прислал материалы по истории корпорации BBN Technologies, чтобы я смог подготовиться к интервью с Берни Козеллом. Если же я кого-то забыл, примите мою благодарность и вместе с нею извинения.

Спасибо издательству Apress, особенно Гари Корнеллу, который и предложил написать эту книгу, Джону Вакка и Майклу Бэнксу за их предложения, а также моему редактору Кэндейс Инглиш, которая исправила бесчисленные ошибки.

Наконец, самые искренние слова благодарности моей семье - и большой, и малой. Обе мои мамы - родная и теща - приходили присмотреть за ребенком, чтобы я мог еще немного поработать; мои родители на неделю приютили моих жену и малышку, позволив мне сделать последний мощный рывок. И главная благодарность - жене и дочери. Лили и Амелия, хотя иногда мне требуется некоторое время на работу, без вас, девочки, она не имела бы смысла. Я люблю вас.

Введение

Если не считать работу, проделанную Адой Лавлейс - аристократкой XIX века, которая придумала программы для так и не законченной "Аналитической машины" Чарльза Бэббиджа, - компьютерное программирование как область человеческой деятельности появилось совсем недавно: Конрад Цузе представил свой электромеханический компьютер Z3, первую работающую вычислительную машину общего назначения, в 1941 году, всего 68 лет назад. И всего 64 года прошло с тех пор, как шесть женщин - Кей Антонелли, Джин Бартик, Бетти Холбертон, Мартин Мельцер, Фрэнсис Спенс и Рут Тейтельбаум, - служивших в американских "вычислительных войсках" и составлявших вручную баллистические таблицы, были привлечены к созданию программ для ЭНИАК - первого электронного цифрового компьютера общего назначения. Среди ныне живущих многие - старшие представители поколения "бэби-бума" и все родители "бэби-бумеров" - увидели свет, когда в мире не было ни одного программиста.

Теперь, разумеется, все иначе. Программисты заполонили все вокруг. Согласно данным американского Бюро трудовой занятости, в 2008 году в США примерно один из каждых 106 работников - всего более 1,25 млн человек - был разработчиком программного обеспечения или инженером-программистом. Это не считая профессиональных программистов за пределами США, студентов и программистов-любителей, а также тех, кто официально занимается чем-то другим, но тратит сколько-то времени - порой даже много времени - на то, чтобы подчинить компьютер своей воле.

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

Эта книга предлагает читателю нестандартный подход к понятию программирования. Она следует традиции, заложенной журналом "Paris Review", когда-то пославшим двух преподавателей проинтервьюировать романиста Э. М. Форстера; впоследствии все подобные интервью были объединены в сборник "Writers at Work" (Писатели за работой).

Я беседовал с пятнадцатью в полной мере состоявшимися программистами, имеющими большой опыт работы: с такими гениями кода, как Кен Томпсон, создатель операционной системы UNIX, и Берни Козелл, участник первой реализации сети ARPANET; с программистами, сочетающими выдающиеся академические заслуги с невероятными практическими навыками, - Дональдом Кнутом, Гаем Стилом и Саймоном Пейтон-Джонсом; промышленными исследователями - Фрэн Аллен из IBM, Джо Армстронгом из Ericsson, Питером Норвигом из Google; с выпускниками научно-исследовательского центра Xerox PARC Дэном Ингаллсом и Л. Питером Дойчем; с разработчиками ранних версий Netscape Джейми Завински и Бренданом Айком; с участниками проектирования и реализации языков программирования, применяемых сегодня для построения веб-приложений, - тем же Айком, Дугласом Крокфордом и Джошуа Блохом; и наконец с Брэдом Фицпатриком, создателем Живого Журнала (Live Journal) и одним из способнейших программистов эпохи Интернета.

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

Поскольку однозначные решения всех этих проблем пока не найдены, неудивительно, что ответы оказались довольно разными. Джейми Завински и Дэн Ингаллс подчеркивали важность запуска кода сразу после его написания, а Джошуа Блох говорил о проектировании API и тестов, помогающих кодировать до этапа реализации. Что касается Дональда Кнута, то он поведал, что сделал эскиз полной версии системы компьютерной верстки ТеХ еще до того, как написал первую строку кода. А вот разные мнения относительно языка Си. Фрэн Аллен считает, что язык Си - причина снижения интереса к компьютерным наукам в последние два десятилетия, а Берни Козелл называет Си "самой большой угрозой для безопасности современных компьютеров". В то же время Кен Томпсон утверждает, что угрозы для безопасности создают сами программисты, а не языки, а Дональд Кнут считает указатели в Си "одним из самых потрясающих усовершенствований в нотации", виденных им. Некоторые из моих собеседников высмеивали утверждение, будто формальные доказательства корректности помогают улучшить качество программ, но Гай Стил прекрасно проиллюстрировал их силу и в то же время ограниченность возможностей.

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

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

В заключение о названии книги: мы назвали ее "Кодеры за работой" по аналогии с уже упомянутой серией "Писатели за работой" журнала "Paris Review" и книгой "Founders at Work" (Учредители за работой) издательства Apress, которая применяет к основанию технологической компании примерно тот же подход, какой эта книга пытается применить к компьютерному программированию.

Я пониманию, что "кодирование" - лишь часть более широкого понятия "программирование". И всегда верил, что нельзя быть хорошим кодером, не являясь при этом хорошим программистом, или быть хорошим программистом, не являясь хорошим проектировщиком, общительным и думающим человеком. Разумеется, на страницах книги поднимаются все эти, а также многие другие вопросы. Не сомневаюсь, что обсуждения, которые вы собираетесь прочитать, прекрасно это отражают. Приятного чтения!

1. Джейми Завински

Лисп-хакер, один из первых разработчиков Netscape и владелец ночного клуба, Джейми Завински (Jamie Zawinski, JWZ) принадлежит к той избранной группе хакеров, которых узнают как по настоящим именам, так и по трехбуквенным инициалам.

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

Он работал в Калифорнийском университете в Беркли с Питером Норвигом, который описал его как "одного из лучших программистов, которых он когда-либо нанимал", а затем в Лисп-компании Lucid, где участвовал в разработке редактора Lucid Emacs, позже переименованного в XEmacs, которая в итоге пришла к большому расколу проекта Emacs - одному из самых известных в истории свободного ПО.

В 1994 году он наконец покинул компанию Lucid и мир Лиспа и перешел в Netscape, где стал одним из первых разработчиков UNIX-версии броузера Netscape Navigator, а позже - почтового клиента Netscape.

В 1998 году Завински, как и Брендан Айк, стал одним из основателей mozilla.org - организации, которая занималась переводом броузера Netscape в проект с открытым исходным кодом. Однако год спустя, разочарованный в отсутствии прогресса на пути к выпуску продукта, он покинул проект и приобрел ночной клуб DNA Lounge в Сан-Франциско, которым владеет до сих пор. В настоящее время Завински отдает все свои силы борьбе с Калифорнийским управлением по контролю за потреблением алкоголя, рассчитывая превратить клуб в место встречи любителей живой музыки всех возрастов.

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

Сейбел: Как вы научились программировать?

Завински: О, это было так давно, что я едва помню. Впервые я использовал компьютер для программирования, наверное, в восьмом классе. У нас было несколько компьютеров TRS-80, и мы дурачились с Бейсиком. По-моему, это вообще были внеклассные занятия. Помнится, невозможно было даже сохранять программы, так что мы просто вводили те, что печатались в журналах и так далее. Затем я прочел стопку книг. Помню, я читал книги по языкам, которые не мог использовать на наших компьютерах, и писал на бумаге программы на языках, о которых только прочитал.

Сейбел: Что это были за языки?

Завински: Один из них - APL. Я прочел статью про него и подумал, что это классный язык.

Сейбел: Ну да, не нужно иметь навороченную клавиатуру. А в старших классах были компьютерные уроки?

Завински: В старших классах мы изучали Фортран. И все.

Сейбел: Как же вы пришли к Лиспу?

Завински: Я читал много фантастики. Мне казалось, что искусственный интеллект - это действительно классно, что компьютеры скоро покорят мир. И я решил почитать что-нибудь еще на эту тему. У меня в старших классах был приятель, Дэн Зигмонд, мы обменивались книгами и поэтому оба выучили Лисп. Однажды он пошел на встречу группы пользователей компьютеров Apple в Университете Карнеги-Мел-лон - там можно было просто обменяться программами, и Дэн надеялся добыть кое-что бесплатно. Он разговорился с каким-то студентом колледжа, и тот сказал: "Ого, пятнадцатилетний парень, который знает Лисп, - это фантастика. Спроси Скотта Фальмана насчет работы". Дэн так и поступил. Фальман взял его на работу. Тогда Дэн сказал: "Возьмите и моего друга", - то есть меня. Так что в итоге мы оба оказались у Фальмана. Думаю, он размышлял примерно так: "Раз уж эти школьники интересуются такими штуками, не будет большого вреда, если они поболтаются в лаборатории". Нам поручили самую простую грязную работу - надо было что-то перекомпилировать, когда выходила новая версия компилятора, и попробуй пойми, как это делается. Просто жуть. Представьте: двое ребят-школьников, а вокруг аспиранты занимаются языками программирования и искусственным интеллектом.

Сейбел: Значит, запустить программу на Лиспе вам впервые удалось в Карнеги-Меллоне?

Дальше