Первоклассные хакеры. Часть 2
АрхивМненияПродолжение статьи. Где водятся первоклассные хакеры, что они любят, зачем они нужны, как отличить их от обыкновенных программистов, можно ли самому стать таким же, и почему Google так опасен для Microsoft.
Продолжение. Начало статьи читайте здесь.
Дурацкая работа
Совершенно очевидно, какие задачи будут неинтересны нашим хакерам: это те, в которых, вместо решения нескольких значительных и ясно определенных проблем, инженер сталкивается с кучей небольших и неестественных. Один тяжелый случай такого рода - создание интерфейса к программе полной ошибок. Или, например, адаптация какого-нибудь ПО к сложной и неправильно определенной модели отдельно взятого пользователя. Для хакера, такие задачи - медленная и мучительная смерть.
Отличительная черта такого рода задач в том, что они ничему не учат человека, занимающегося их решением. Например, создание компилятора языка интересно хотя бы потому, что такая работа позволяет разобраться в том, как устроены компиляторы. А вот написание интерфейса к неправильно работающей программе не научит ничему, поскольку ошибки несистематичны. Так что хакеры избегают дурацкой работы не только из чистоплотности и снобизма. В большей степени это вопрос самосохранения, поскольку борьба с подобными искуственными проблемами ведет к деградации инженера. Первоклассные хакеры избегают их из тех же соображений, что и манекенщицы избегают чизбургеров.
(Кстати, мне кажется, что когда люди говорят о "смысле жизни", они имеют в виду именно это. Само это выражение звучит странно; жизнь - это ведь не высказывание, которое может иметь смысл. Но жизнь может определятся качеством, которое очень похоже на "смысл". В работе над компилятором инженер решает много отдельных задач, но все они попадают в ту или иную категорию типовых, что похоже на выделение полезного сигнала. Соответственно, решение несистематических, нетиповых задач больше напоминает шум.)
Разумеется, некоторые задачи, по определению, относятся к категории дурацких. При благоприятной конъюнктуре, работа над некоторыми такими задачами может быть весьма прибыльна. Компания, которой удастся привлечь к работе над дурацкими задачами первоклассных хакеров, может оказаться очень успешной. Но как это сделать?
Одно из мест, где такое возможно - это стартапы. В нашей фирме системным администратором работал Роберт Моррис*. Это было все равно, что пригласить Rolling Stones на празднование Бар-Мицвы. Нанять специалиста такого высокого класса на такую неинтересную работу совершенно невозможно. Но ради развития своей собственной компании люди готовы на любую рутину **.
*) Роберт Моррис - профессор в Массачусетском технологическом иституте (MIT). В 1988 году написал так называемый "червь Морриса", который считается первым в истории компьютерным червём, распространявшимся по интернету.
**) Эйнштейн занимался проектированием нового типа холодильника (и даже получил патент).
Большие компании решают эту проблему, разделяясь на части. Они привлекают толковых людей, приглашая их в отдельный исследовательский отдел, куда не добираются конечные пользователи со своими неинтересными проблемами*. При такой организации исследовательский отдел выполняет роль генератора идей, которые, возможно, смогут использовать остальные отделы компании.
*) Не так просто сказать, чем именно занимаются исследователи в компьютерной области. Для начала, я бы сказал, что они пишут программы, в которых нет очевидной потребности. Не думаю, что эта статья направит первоклассных хакеров на поиски работы в исследовательских отделах компаний. Едва ли им захочется потратить три часа на встречу с менеджером по продуктам по вопросу об интеграции корейской версии программы Word билда 13.27 с говорящей скрепкой.
Однако это не единственно возможный подход. Методика программирования "снизу вверх" предлагает иной способ специализации внутри компании: можно привлечь толковых инженеров к производству инструментария для создания продукта компании. В таком случае 99% кода конечного продукта окажется написано профессионалами, но вместе с тем, они, как и в случае с выделенным исследовательским отделом, будут почти полностью изолированы от конечных пользователей. Производители инструментария будут иметь конечных пользователей, но ими окажутся собственные разработчики компании*.
*) Что-то похожее долгое время происходило в области строительства. Если Ваш дом был построен несколько сот лет назад, то тогдашние строители делали все сами. Но постепенно строители переходили на сборку дома из готовых компонентов, изготовленных третьими фирмами. Как и в случае с макетированием книг на персоналке, это дало людям свободу для эксперимента, иногда разрушительного, но, в целом, подобная специализация, очевидно, эффективнее.
Возможно, если бы в Microsoft использовали подобный метод разработки, то их программы не содержали бы такого количества ошибок, поскольку наиболее критичные части кода (вроде управления памятью) были бы написаны наиболее толковыми инженерами. Вместо того чтобы писать программу Word полностью на языке С, можно было бы создать инструмент - специальную высокоуровневую среду разработки, и собрать Word из кусочков, подобно конструктору Lego.
Кучкование
Помимо интересной работы, первоклассные хакеры любят работать вместе. Хорошие инженеры сами собой собираются в группы, порой весьма значительные, как это случилось в компании Xerox*. По этой причине у Вас не получилось бы привлечь тем больше первоклассных хакеров, чем лучше условия Вы бы создали для них. Эта тенденция собираться в колонии, меняет линейную зависимость количества хакеров от качества условий на квадратичную. В конечном счете, возникает ситуация "все или ничего". В любой момент времени на рынке существуют десятки мест, где первоклассные хакеры хотели бы работать. Если ваша компания не в их числе, то у Вас не просто будет меньше хакеров, их Вам не достанется вовсе.
*) Графический интерфейс пользователя в том виде, в котором мы его знаем (окна, иконки, меню), появился в исследовательском центре Xerox PARC в семидесятые годы.
Однако одно наличие в команде первоклассных хакеров не гарантирует успех компании. Например, у Google и ITA дела идут отлично, в этих компаниях в данный момент собрались первоклассные хакеры, но вот у компаний Thinking Machines и Xerox все не так здорово. Некоторое время хорошо работала компания Sun, но если выбрана неправильная бизнес-модель, то даже лучшие хакеры не смогут спасти компанию.
Тем не менее, я считаю, что при прочих равных условиях компания, которой удалось привлечь первоклассных хакеров, получает громадное конкурентное преимущество. С этим согласятся не все. Когда мы обсуждали перспективы молодых компаний в девяностых годах прошлого века, некоторые говорили, что программистские фирмы никогда не добьются успеха на рынке, даже если будут разрабатывать отличное ПО. Выиграют, как считали эти люди, те, кто раскрутит торговые марки, организует мощные каналы сбыта и заключит выгодные контракты.
Они действительно верят в такую модель и, мне кажется, я знаю почему. Возможно, множество инвесторов надеются найти, по крайней мере, подспудно, новую фирму Microsoft. Разумеется, если ваш кумир - Microsoft, вам не стоит инвестировать в компании, которые создают качественное ПО. Но эти инвесторы заблуждаются: молодой компании едва ли удастся пойти по пути Microsoft, если только какая-нибудь другая компания не готова в нужный момент лопухнуться и стать, таким образом, очередной IBM.
Было бы ошибкой ориентироваться на Microsoft, потому что их успех базируется на счастливом стечении обстоятельств. В этом смысле история Microsoft не характерна. Если не учитывать присутствие Microsoft на рынке, то окажется, что по-настоящему хорошие продукты превалируют на рынке. Потому инвесторам следует искать новые Apple или Google.
Думаю, что Билл Гейтс все это знает. И беспокоит его не то, что Google не принадлежит Microsoft, а то, что в Google работают первоклассные хакеры*.
*) Google гораздо опаснее для Microsoft, чем Netscape. Возможно, это даже самая опасная компания из всех существовавших до сих пор. Не в последнюю очередь, потому что Google полна решимости бороться. На их страничке отдела кадров написано, что одна из их главных ценностей - не быть монстром. Для компании, занимающейся продажей соевого масла или горнопроходческого оборудования подобное заявление выглядело бы эксцентрично. Но мне кажется, что всем нам, людям из ИТ-отрасли, совершенно очевидно, что означает это заявление.
Как распознать первоклассного хакера
Так кто же из множества людей работающих в ИТ-области, относится к настоящим хакерам? Как распознать первоклассного хакера при встрече? Оказывается, не так просто. Даже сами хакеры не всегда могут сказать. Сейчас я совершенно уверен, что мой друг Тревор Блэквел - первоклассный хакер. Вы могли прочитать на Slashdot заметку о том, как Тревор разработал и сделал свой собственный Segway. Замечательная деталь этого проекта кроется в том, что все ПО для самоката Тревор написал за один день (на языке Python, кстати). Для Тревора это нормально. А когда я первый раз встретил его, мне показалось, что он полный идиот. Я увидел его в офисе Роберта Морриса бормочущим то о том, то о другом, и я помню, как стоял позади Тревора и жестами пытался намекнуть Роберту, что пора бы выгнать его. Потом Роберт рассказал мне, что и он поначалу ошибся насчет Тревора. Ко времени их первой встречи Тревор как раз начинал проектировать новую схему, причем ход работы он записывал в блокноте, который всегда носил с собой. К тому же, он только что вернулся из Канады, прихватив с собой сильный канадский акцент и модную прическу в стиле "кефаль".
Задача распознавания хакера усложняется еще и тем, что, несмотря на репутацию ребят замкнутых и нелюдимых, хакеры иногда стараются выглядеть умно. Когда я учился в университете, я время от времени проходил мимо лаборатории искусственного интеллекта в MIT. Там было неуютно. Все говорили очень быстро и непонятно. Через некоторое время, я понял в чем тут дело. Нет необходимости соображать также быстро, достаточно просто произносить слов больше, чем необходимо для изложения сути дела.
При таком низком отношении сигнал/шум трудно понять, кто есть кто на самом деле. Да я и сейчас этого не знаю. Трудно судить и по резюме. Похоже, что единственный способ оценить возможности инженера - поработать вместе с ним над какой-нибудь задачей.
Вот почему высокотехнологические оазисы возникают вокруг университетов. Активная составляющая там не столько профессура, сколько студенты. Небольшие новые компании образуются в кампусах благодаря тому, что университеты привлекают молодых и талантливых людей и дают им возможность работать сообща. Наиболее талантливые находят друг друга и объединяются для работы над своими собственными проектами.
Поскольку нам не удастся узнать первоклассного хакера иным способом, кроме как поработав вместе с ним, сами хакеры не могут оценить, насколько хорошо они работают. До некоторой степени дело обстоит так и в прочих областях человеческой деятельности. Я заметил, что выдающиеся люди не особенно высоко оценивают свои собственные возможности, но не перестают поражаться некомпетентности окружающих. Люди, которых я встречал, и которые безупречно выполняли свою работу, как правило, не считали, что работают хорошо. Они, как правило, считали себя ленивыми и несообразительными, жаловались на то, что их голова работает как следует только один день из десяти, и что их увольнение - лишь вопрос времени.
Хакерам особенно трудно определить свой уровень из-за сложностей сравнения их работы. В большинстве областей с этим все просто. В соревнованиях по бегу на 100 метров через 10 секунд Вы узнаете, кто лучший. Даже в математике, как кажется, существуют согласованные оценки сложности тех или иных проблем и качества тех или иных решений. Но программирование больше похоже на литературу. Кто может сказать, какой из двух романов лучший? Уж наверняка не авторы.
В случае с хакерами, по крайней мере, другие хакеры могут оценить уровень работы, поскольку, в отличие от писателей, хакеры сотрудничают друг с другом в работе над задачей. Но хакер не может оценить уровень своей работы, так что если мы спросим первоклассного хакера, насколько хороши результаты его деятельности, то он, скорее всего, ответит, что не знает. И не потому что скромничает, он действительно не знает.
И никто из нас не знает, за исключением людей, когда-либо работавших с нами. Все это ставит нас в странную ситуацию - мы не знаем своих героев. Хакеры, получившие известность, оказались знаменитыми случайно, вследствие неожиданного пиара. Иногда мне требуется привести пример первоклассного хакера, и я совершенно теряюсь. Первое, что приходит в голову - это мои друзья, но использовать их имена как-то неудобно. Может, мне стоит назвать имена Ричарда Столлмена или Линуса Торвальдса или Алана Кея или что-то в этом духе. Но, строго говоря, я не знаю этих людей, и мне трудно сказать что-либо об их профессионализме.
Если и существует свой Майкл Джордан в программировании, то никто, включая его самого, об этом не знает.
Как стать первоклассным хакером
И наконец, вопрос, которым, должно быть, задаются все программисты: как стать первоклассным хакером? Не знаю, возможно ли воспитать самого себя в таком ключе. Очевидно, что раз человек может сам загубить свою карьеру, то наверно, он может и построить ее, став первоклассным хакером.
По-видимому, самое главное для хакера - это интересная работа. Вспоминая моих знакомых хакеров, я осознаю, что еще одно из их общих качеств - чрезвычайная неохота выполнять работу, которая им не нравится. Не знаю, что это - причина или следствие. Возможно и то и другое.
Чтобы сделать что-либо хорошо, обязательно любить эту работу. До тех пор пока Вам удается сохранять любовь к программированию, результаты будут высокими. Старайтесь сохранить свой интерес к программированию в том же состоянии, каким он был в 14 лет. Если Вам кажется, что Ваша нынешняя работа не развивает Вас профессионально, то это, вероятнее всего, именно так и есть.
Лучшие хакеры, как правило, умные люди, но ведь это справедливо и для других профессий. А существует ли какое-либо уникальное качество, характерное только для хакеров? Я спрашивал об этом друзей, и первое, что они называли, было любопытство. Я всегда предполагал, что умные люди любопытны; это любопытство - прямое следствие их знаний. Но судя по всему, хакеры особенно любопытны, в первую очередь, насчет того, как все устроено. И это объяснимо, поскольку программы, по сути, гигантские описания того, как работают те или иные устройства.
Несколько из моих респондентов отметили свойство хакеров концентрироваться на решении задачи. Как сказал один из моих друзей, они умеют изолироваться от внешнего мира. Мне кажется, это так. Я слышал о нескольких хакерах, которые не могли работать уже после пол-кружки пива. Так что, возможно, программирование требует особой способности фокусироваться на одной проблеме. Вероятно, первоклассные хакеры могут поддерживать в собственной голове несколько контекстов так, что, обдумывая строчку кода, они представляют себе работу всей программы. Джон Макфи писал, что успехом в баскетбольной карьере Билл Брэдли обязан, прежде всего, экстраординарному периферийному зрению. Глаз нормального человека имеет угол обзора в 47 градусов по вертикали. У Билла Брэдли было 70: он мог видеть корзину когда смотрел в пол. Может быть, первоклассные хакеры имеют аналогичные врожденные способности. (Тут я слегка лукавлю, используя упрощенный язык, который трудно оспорить в суде.)
Все это объясняет проблему с кубиклами. Может быть, тем людям, которые организуют работу офиса, не требуется особая концентрация для выполнения своих функций, и потому они не понимают, что для хакера работа в кубикле едва ли производительна.
Еще одно отличие хакеров от просто умных людей, которое я подметил, кроется в том, что хакеры менее политкорректны. Только находясь в своей среде, конечно, когда они чувствуют, что могут свободно излагать свою точку зрения, не рискуя быть побитыми камнями окружающими. И мне кажется, я понимаю, почему политическая некорректность может оказаться полезным качеством программиста. Дело в том, что программы могут иметь очень сложную структуру, а в руках хорошего хакера они очень динамичны. В такой ситуации полезно иметь привычку проверять то, чему все привыкли верить.
Можно ли воспитать в себе все эти качества? Не знаю. Во всяком случае, можете попытаться не подавлять их в себе. Итак, мой единственный совет: если это вообще возможно, сознательно стать первоклассным хакером, заключите сами с собой соглашение: Вы более не обязаны браться за дурацкую работу (при условии, конечно, что ваши родные от этого не пострадают), а взамен обещайте себе всегда выполнять свою работу качественно. Все первоклассные хакеры, которых я знаю, похоже, заключили с собой подобное соглашение. Хотя, возможно, у них просто не было выбора.
Автор хотел бы поблагодарить Джессику Ливингстон, Роберта Морриса и Сару Харлин за вычитывание ранних версий этой статьи.