Кое с чем, однако, согласны все. Так, почти каждый настаивает на важности написания хорошо читаемого кода; большинство считают самыми трудноуловимыми ошибки в коде с параллельными вычислениями; никто не думает, что все проблемы программирования решены, — многие все еще ищут новые пути к разработке программного обеспечения с помощью автоматического анализа кода, улучшения организации совместной работы программистов или путем использования (или создания) более эффективных языков программирования. Однако практически все согласны, что вездесущие многоядерные процессоры серьезно повлияют на процесс разработки программ.
Эти разговоры отражают состояние данной области на определенном этапе, и, конечно, отдельные вопросы, затронутые в книге, с течением времени станут представлять лишь исторический интерес. Но даже в такой молодой области, как программирование, история сможет многому нас научить. Кроме того, думаю, все поднятые в книге темы раскрывают глубинный смысл того, что же такое разработка программного обеспечения, как мы можем лучше создавать его и что будет полезно программисту сегодня и через несколько поколений.
В заключение о названии книги: мы назвали ее «Кодеры за работой» по аналогии с уже упомянутой серией «Писатели за работой» журнала «Paris Review» и книгой «Founders at Work» (Учредители за работой) издательства Apress, которая применяет к основанию технологической компании примерно тот же подход, какой эта книга пытается применить к компьютерному программированию.
Я пониманию, что «кодирование» — лишь часть более широкого понятия «программирование». И всегда верил, что нельзя быть хорошим кодером, не являясь при этом хорошим программистом, или быть хорошим программистом, не являясь хорошим проектировщиком, общительным и думающим человеком. Разумеется, на страницах книги поднимаются все эти, а также многие другие вопросы. Не сомневаюсь, что обсуждения, которые вы собираетесь прочитать, прекрасно это отражают. Приятного чтения!
1. Джейми Завински
Лисп-хакер[2], один из первых разработчиков 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. Я прочел статью про него и подумал, что это классный язык.
Сейбел: Ну да, не нужно иметь навороченную клавиатуру.[3] А в старших классах были компьютерные уроки?
Завински: В старших классах мы изучали Фортран. И все.
Сейбел: Как же вы пришли к Лиспу?
Завински: Я читал много фантастики. Мне казалось, что искусственный интеллект — это действительно классно, что компьютеры скоро покорят мир. И я решил почитать что-нибудь еще на эту тему. У меня в старших классах был приятель, Дэн Зигмонд, мы обменивались книгами и поэтому оба выучили Лисп. Однажды он пошел на встречу группы пользователей компьютеров Apple в Университете Карнеги-Мел-лон — там можно было просто обменяться программами, и Дэн надеялся добыть кое-что бесплатно. Он разговорился с каким-то студентом колледжа, и тот сказал: «Ого, пятнадцатилетний парень, который знает Лисп, — это фантастика. Спроси Скотта Фальмана насчет работы». Дэн так и поступил. Фальман взял его на работу. Тогда Дэн сказал: «Возьмите и моего друга», — то есть меня. Так что в итоге мы оба оказались у Фальмана. Думаю, он размышлял примерно так: «Раз уж эти школьники интересуются такими штуками, не будет большого вреда, если они поболтаются в лаборатории». Нам поручили самую простую грязную работу — надо было что-то перекомпилировать, когда выходила новая версия компилятора, и попробуй пойми, как это делается. Просто жуть. Представьте: двое ребят-школьников, а вокруг аспиранты занимаются языками программирования и искусственным интеллектом.
Сейбел: Значит, запустить программу на Лиспе вам впервые удалось в Карнеги-Меллоне?
Завински: Пожалуй, да. Какое-то время мы дурачились с языком XLISP, который использовался на Маках. Хотя, думаю, это было позже. Я там по-настоящему научился программировать (на рабочих станциях PERQ, установленных для проекта Spice) на языке Spice Lisp, который затем стал языком CMU Common Lisp. Странное это было место. Мы узнавали, что такое разработка программного обеспечения, на ежедневных собраниях — просто слушали и все. Но встречались и действительно забавные персонажи, например парень, который был кем-то вроде нашего менеджера — присматривал за нами. Звали его Скеф Хоу-ли — этакий белобрысый детина довольно дикого вида. Выглядел просто устрашающе. Говорил он мало. Сколько раз, бывало, сижу я в своем отсеке — работаю, что-то делаю, пишу программу на Лиспе. И тут, шаркая, подходит босой Скеф с кружкой пива и становится позади меня. Я ему: «Привет», — а он в ответ буркнет что-то или вообще промолчит. Просто стоит и смотрит, как я жму на клавиши. Я что-то делаю, и тут он вдруг: «Пффф, ошибка», — и уходит. А я остаюсь в полном недоумении. Такой дзэнский подход: учитель стукнул меня палкой — значит, надо помедитировать.
Сейбел: Я связался по электронной почте с Фальманом, и он написал, что вы были талантливы и быстро всему учились. Но он также припомнил вашу недисциплинированность. «Мы потихоньку пытались научить его работать в команде, научить писать такой код, чтобы вы или кто угодно еще мог его понять и через месяц». Вы помните эти уроки?