Русский Журнал
СегодняОбзорыКолонкиПереводИздательства

Gateway | Невод | Интер(офф)вью | Бессрочная Ссылка | НасНет | ГлобусНет | Интер(акти)вью | Дурацкий Музей | Кафедра | Русская сеть: истории | Конец прекрасной эпохи
/ Net-культура / Gateway < Вы здесь
Хакеры и художники (окончание)
Оригинал статьи - здесь

Дата публикации:  29 Мая 2003

получить по E-mail получить по E-mail
версия для печати версия для печати

Перевод Анастасии Грызуновой

Хакеры - творцы, а не ученые, следовательно, метафору следует искать не в науках, но среди других творцов. Чему еще учит нас живопись?

Во-первых, на примере живописи мы узнаем - проверяем, во всяком случае, - как учиться хакерству. Рисовать учишься, главным образом рисуя. С хакерством - то же самое. Большинство хакеров постигает ремесло вовсе не изучением курсов программирования в колледже, но созданием собственных программ - начиная лет с тринадцати.

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

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

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

Еще творцы учатся на примерах. Для художника музей - справочная по художественным техникам. Сотни лет элементом традиционного обучения художников являлось копирование работ великих мастеров, потому что копирование заставляет пристальнее вглядываться, как сделано полотно.

Писатели тоже так делают. Бенджамин Франклин учился писать, резюмируя основные пункты эссе Эддисона и Стила, а затем пытаясь их воспроизвести. Рэймонд Чандлер то же самое проделывал с детективными рассказами.

И хакеры могут учиться программировать, изучая качественные программы, - не только снаружи, исходники тоже. Один из наименее известных плюсов программирования с открытыми исходниками в том, что оно сильно упростило обучение программированию. Когда я учился, нам приходилось в основном изучать примеры из книг. Единственный тогдашний большой кус кода - Unix, но даже он не был открытым исходником. Большинство тех, кто его читал, изучали незаконные фотокопии в книге Джона Лайонза, написанной в 1977 году, но разрешенной к публикации лишь в 1996-м.

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

Этому мы могли бы у живописи поучиться. По-моему, хакерам следует действовать именно так. Глупо рассчитывать, что спецификации программы окажутся идеальными. Уж лучше признать это сразу и писать программы так, чтобы менять спецификации на лету.

(Структура крупных корпораций этого не позволяет, так что и здесь у стартапов преимущество.)

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

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

Звучит парадоксом, но великое полотно должно быть лучше, чем должно быть. . Создавая портрет Джиневры де Бенчи (Национальная галерея), Леонардо поместил за ее головой можжевеловый куст. В нем он тщательно прописал каждый листик. Многие художники полагали, что это просто фон, обрамление для головы. Кто станет пристально изучать куст?

Не таков Леонардо. Он тщательно работал над каждым фрагментом - все равно, будут его тщательно разглядывать или нет. Он был как Майкл Джордан. Неумолим.

Неумолимость - ключ к победе: невидимые детали все вместе становятся видимы. Проходя мимо портрета Джиневры де Бенчи, люди нередко обращают на него внимание, даже не взглянув на табличку с подписью "Леонардо да Винчи". Все невидимые детали вместе образуют нечто потрясающее, словно тысяча едва слышимых голосов, что поют в унисон.

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

Будь хакер простым исполнителем, превращающим спецификацию в код, он бы работал с начала до конца, будто канаву копал. Но если хакер - творец, следует учитывать вдохновение.

В хакерстве, как и в живописи, работа происходит циклами. Иногда новый проект захватывает так, что готов работать по шестнадцать часов в сутки. А иногда ничего особо не цепляет.

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

В хакерстве это буквально значит оставлять баги. Мне нравится отладка: во время отладки хакерство получается прямолинейным, каким его все и считают. Есть конкретная проблема, и нужно ее решить. Программа должна делать X. А она делает Y. Что не так? Ты понимаешь, что в итоге победишь. Расслабляет, как стену красить.

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

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

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

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

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

Господи, как я ошибался. Выяснилось, что умение смотреть чужими глазами - практически ключ к успеху. Сопереживание - совершенно не обязательно самопожертвование. Вовсе нет. Если понимаешь чужую точку зрения, совсем не значит, что станешь действовать в чужих интересах. В некоторых ситуациях - на войне, к примеру, - действуешь ровно наоборот4.

Большинство творцов творят для людей. А чтобы привлечь аудиторию, требуется понять, что ей нужно. Почти на любом живописном полотне - люди, потому что люди интересуют людей.

Быть может, сопереживание - единственное важнейшее различие между хорошим хакером и великим. Некоторые хакеры очень умны, но с точки зрения сопереживания - просто солипсисты. Таким людям трудно создавать великое ПО5: они не видят продукт глазами пользователя.

Чтобы проверить, насколько людям дается сопереживание, понаблюдайте, как они разъясняют технические вопросы собеседнику, ничего не смыслящему в технологиях. У всех есть знакомые, вообще-то умные, но комически не способные решить эту задачу. Если спросить их за ужином, что такое язык программирования, они отвечают примерно так: "Ну, высокоуровневый язык - то, что использует компилятор на входе для генерирования объектного кода". Высокоуровневый язык? Компилятор? Объектный код? Человек, не знающий, что такое язык программирования, этих слов уж точно не знает.

Программное обеспечение отчасти само себя объясняет. Поэтому, чтобы написать хорошее ПО, следует понимать, как мало понимает пользователь. Он обратится к ПО без малейшей подготовки, и лучше пусть ПО не обманет пользовательских ожиданий и сделает, что должно, потому что пользователь инструкций читать не станет. Лучшая известная мне система с этой точки зрения - "макинтош" 1985 года. Он делал то, что обычно ПО не делает: просто работал6.

Исходники тоже должны себя объяснять. Если бы мне требовалось научить людей единственной фразе о программировании, я бы научил их цитате, приведенной в начале "Структуры и интерпретации компьютерных программ":

Программы пишутся, чтобы люди их читали, и лишь иногда - чтобы машины их выполняли.

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

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

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

К сожалению, простого ответа нет. Слава всегда сильно запаздывает. Как свет далекой звезды. Живопись пользуется признанием из-за великих полотен, созданных пятьсот лет назад. Тогда этим полотнам придавали гораздо меньше значения, нежели сегодня. В те времена людям показалось бы крайне странным, что когда-нибудь Федерико да Монтефельтро, герцог Урбино, будет известен в основном как парень со странным носом на картине Пьеро делла Франческо.

Да, я признаю, что сейчас хакерство - не так круто, как живопись, однако следует помнить, что и живопись во времена расцвета не казалось такой уж крутой.

С некоторой долей уверенности можно утверждать: сейчас - дни расцвета хакерства. В большинстве других областей великие работы были созданы раньше. Живопись, созданная в период между 1430 и 1500 гг., остается непревзойденной по сей день. Шекспир появился, когда только возник профессиональный театр; Шекспир вознес его на такие вершины, что любой драматург по сей день живет в его тени. Альбрехт Дюрер сделал то же самое с гравюрами, а Джейн Остин - с романистикой.

Это повторяется снова и снова. Новая среда возникает и захватывает людей так, что те за первую пару поколений выжимают из ее возможностей почти все. Судя по всему, хакерство сейчас находится как раз в этой фазе.

Во времена Леонардо живопись не была такой классной, какой ее сделали его работы. Насколько крутым окажется хакерство, зависит от того, что нам удастся сделать с этой новой средой. Если вдуматься, временная задержка с признанием - достоинство. Общаясь с человеком, который пишет компилятор или ядро Unix, знаешь, по крайней мере, что он это делает не ради того, чтобы девчонок снимать.

Примечания

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

back5Кроме текстовых редакторов и компиляторов. Для них хакерам сопереживание не требуется, потому что типичные пользователи - сами хакеры.

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

back7. Упростить чтение программ не означает забить их комментариями. Я бы развил мысль Эбелсона и Сассмена: языки программирования должны создаваться для выражения алгоритмов и лишь изредка - чтобы сообщать компьютерам, как их выполнять. Хороший язык программирования объясняет ПО лучше английского. Комментарии нужны лишь в том случае, если в программе какой-то ляп, про который нужно читателю сообщить, - как на дороге, где стрелки висят лишь на резких поворотах.


поставить закладкупоставить закладку
написать отзывнаписать отзыв


Предыдущие публикации:
Пол Грэм (Paul Graham), Хакеры и художники /23.05/
Из множества типов людей хакеры и художники - самые похожие. И те, и другие творцы. Как композиторы, архитекторы и писатели. Проблема в том, что ПО, приносящее деньги, и ПО, которое интересно писать, особо не пересекаются. Если хочешь денег, надо браться за проблемы, которые бесплатно никто не решит, настолько они чудовищны.
Карлин Лиллингтон (Karlin Lillington), Изобретатель киберпространства отступает в настоящее /13.05/
Карлин Лиллингтон беседует с Уильямом Гибсоном, чьи работы повлияли на кинорежиссеров, писателей, технологов, ученых и тысячи простых людей.
Эрик Шмидт (Eric Schmidt), "Google работает не так, как обычная корпорация..." /06.05/
Изложение интервью исполнительного директора самой модной корпорации.
Джеймс Беннетт (James C. Bennett), Англосфера: букварь (1) /29.04/
Теория Англосферы изучает реальность, в которой практически по любому критерию успешного гражданского общества (благосостояние, политические свободы, общественное доверие, новые компании, инновации) государства Англосферы оказываются на вершине, а с ними - только скандинавские страны и несколько примкнувших, вроде Швейцарии.
Джеймс Беннетт (James C. Bennett), Англосфера: букварь (2) /29.04/
Проблема не в отсутствии творческого подхода, энергии или предпринимательского зуда в неанглоговорящих странах. Проблема в том, что творчество расцветает, предприятия открываются, а базовая система социальных, экономических и политических институтов замедляет их рост.
предыдущая в начало следующая
Пол Грэм (Paul Graham)
Пол Грэм
(PAUL GRAHAM)
URL

Поиск
 
 искать:

архив колонки:





Рассылка раздела 'Gateway' на Subscribe.ru