мощной штукой. Я освоил Smalltalk позже, в Иллинойском университете, когда его приспособили для работы на компьютерах Sun того времени. Работало все медленно.
Сейбел: Сменим тему. Как вы распознаете талантливого программиста?
Айк: Недавно мы наняли такого - он был другом одного из самых могучих умов в нашей компании. То ли студент последнего курса, то ли бакалавр - кажется, еще не закончил колледж. Он познакомился с парнем, который работал у нас, - оба они OCaml-программисты. Он размышлял о проблемах, которые были поставлены в моем статическом анализе. По его ответам на вопросы не скажешь, что он еще мальчик. Кое-кто из наших говорил: “Да что он такого великого сделал? Мы берем только звезд, зачем тратить на него время?”
Я отвечал: “Нет, ребята, вы не правы. Надо брать специалистов, пока они молоды. Он сделал много чего для себя на OCaml; он знает не только исходный язык, но и рабочую среду, он разобрался с системными методами и написал на OCaml операционную систему - пусть пока игрушечную. Но это стоящий парень”. Я даже не дал ему никакого теста - просто слушал его рассказ о том, что и почему он сделал. Он не пережевывал эту вечную жвачку насчет шаблонов C++. У нас, к сожалению, есть и такие мальчики. Милые люди, в чем-то неплохие программисты, могут работать на Java. Но нам нужен был кто-то необычный, а этот парень был необычным.
Поэтому главной проблемой стало убедить людей, что его возраст и отсутствие большой практики ничего не значат. Но мы взяли его, и он стал суперзвездой. Он придумал инструменты для статического анализа; сперва создавал их на платформе Berkeley Oink с открытым кодом, а потом на GCC в качестве плагинов вместе с разработчиками GCC. Сейчас он активно взялся за наши программы для мобильников: делает элементарное профилирование, выводя отметки времени через printf, ищет, где можно снизить издержки.
Разговаривая с ним, я понял, что он талантлив. Хорошо было и то, что его рекомендовал блестящий программист, - такие люди тянутся друг к другу и обычно не рекомендуют посредственностей. Они хотят работать с такими же блестящими программистами. Может показаться, что я выдумываю, но для меня это и правда один из способов распознать талант. Наверное, именно поэтому мы берем к себе суперпрограммистов. Думаю, все люди из Valgrind оказываются у нас. Некоторые из них могут все и совсем не выделываются.
Сейбел: Итак, это один из способов проводить собеседование: дать человеку поговорить о собственных проектах.
Айк: Да. Я никому не даю головоломок. Некоторые из наших, правда, дают. И это меня тревожит, поскольку влияет на отсев кандидатов.
Сейбел: Можно ли сразу выявить нужного человека?
Айк: Сомневаюсь. В Google дают поиграть в пики, так что у них есть сколько-то народа, отлично решающего головоломки. Но они не всегда обладают здравым смыслом и способны на зрелые суждения. Так что я сомневаюсь. Пожалуй, в какой-то мере это необходимо, ведь человек с хорошо подвешенным языком необязательно силен в программировании. Надо посмотреть, как он принимает решения прямо на месте, без обдумывания. Мы даем людям чисто практические задачи. Ни головоломок, ни продвинутой математики - задачи по программированию.
Проверяйте знание C++, поскольку C++ - сложная штука. Это что-то вроде базовой проверки, вовсе не решающий аргумент. Прошел человек такую проверку - хорошо, нет - тревожный сигнал. Для приема на работу нужно что-то еще. Нужны подробности: что человек сделал, каков его подход к программированию, с какими языками он работал.
Кроме того, мне, видимо, нравятся необычные люди. Я не имею в виду всякие странности. Я не хочу нанимать человека, с которым трудно сработаться, - нам нужны таланты. Нужны те, кто мыслит нестандартно.
На последнем курсе меня сильно впечатлила книга Пирсига “Дзэн и искусство ухода за мотоциклом”. Еще я много читал Платона и других древних философов. В философском плане я склонялся к идеализму. Полагал, что обратный порядок байтов лучше прямого, так как байты меньшего порядка располагаются по меньшим адресам - в этом есть какая-то гармония, геометрическая правильность. Но попробуйте прочесть шестнадцатеричный дамп! Важны практические вещи, важны подробности. Есть известная фреска “Афинская школа”, на которой Аристотель указывает вниз, а Платон вверх. Так вот теперь я на стороне Аристотеля. С возрастом я становлюсь все скептичнее и все больше интересуюсь тем, что реально работает.
Когда я опрашиваю потенциальных кандидатов, то мне очень сложно не увязнуть в мелочах, в практических вопросах. Этот парень знает OCaml? Хорошо. Но стоит ли брать его на работу? Только из-за этого - нет. Но он еще делал что-то для себя, умеет решать задачи с ходу, думает о проблемах компиляции или анализа. Значит, возьмем. Но, возможно, главным доводом здесь была рекомендация его друга, блестящего программиста.
Сейбел: Программирование все еще доставляет вам удовольствие?
Айк: Да. Это как привычка. Тут есть некая загадка. Меня привлекает не задача создать работающий код, а скорее поиск верной идеи в духе соотношения 90/10, как в нью-джерсийской философии. Вы создаете хорошее теоретическое ядро, которое не решит всех ваших проблем, но если вы попадаете на оставшиеся 10%, то ничего страшного. На этом пути можно добиться успеха: код остается сравнительно небольшим и несложным, и есть некая игра в переходе от теории к реализации. Вот это мне по-прежнему нравится, все так же волнует меня. Я обдумываю такие проблемы по ночам и не могу заснуть.
Сейбел: А есть то, что со временем вам стало нравиться меньше?
Айк: Ну, не знаю... Наверное, C++. Мы научились пользоваться всеми его свойствами, которых слишком много. Система типизации в нем, пожалуй, лучше, чем в Java. Но мы все еще применяем отладчики и компоновщики 1970-х - полный идиотизм! Не понимаю, как мы до сих пор их терпим.
Нетерпение и неприязнь к примитивным инструментам - вот из-за чего я старался совершенствоваться в программировании. Наш код сегодня испещрен проверками утверждений, и они фатальны. Но именно это помогает мне, особенно когда я применяю к коду тот самый принцип 90/10, не удовлетворяющий всем инвариантам. Я что-то упустил, утверждение срабатывает, и вдруг - раз! - я понимаю, как его исправить.
Даже сейчас я часто убеждаюсь в собственных недостатках, когда слишком усердно оптимизирую что-нибудь. Рисуя себе радужную картину, я забываю о какой-нибудь важной проблеме. Это всегда испытание для меня, ведь программист должен быть оптимистом. Считается, что мы параноики и невротики, вечно озабоченные чем-то персонажи Вуди Ал-лена, но на самом деле параноику нечего делать в программировании.
Сейбел: Как вам кажется, программирование - это удел молодых?
Айк: Думаю, у молодых огромные преимущества, прежде всего психологические. Им не хватает лишь мудрости! Становишься старше, работаешь медленнее - но ты усвоил горькие уроки и хочешь передать свой опыт следующему поколению. Я вижу, как они отворачиваются от меня и сами усваивают эти уроки, - и сжимаю кулаки.
Но человек знающий, который старается быть в курсе всего, не обязательно должен выдавать много кода. Нет, конечно, объем продукции тоже важен. Но что первостепенно для меня - и об этом мы много беседовали в Netscape, когда там искали главного инженера, - это найти человека, не менеджера, а того, кто своим авторитетом заставит других программистов писать код в нужном духе. Ведь один программист просто не справится со всеми задачами.
Вот эта возможность воздействовать на людей, когда они перенимают твой подход и твой опыт, так что в результате получается код, непосильный для одного, так же важна для меня, как возможность сидеть ночами и писать в одиночку собственный длиннющий код.
Я по-прежнему работаю слишком много, а теперь у меня еще и маленькие дети. Моя жена - славная девушка, но ей не очень нравится, когда я засиживаюсь за работой. Ведь я занимаюсь не только программированием, но и вот этими, более важными вещами. В случае с JavaScript нам надо было развивать язык. Это требовало не то что проповеднического пыла, но умения заставить людей думать о