Сейбел: Вы все так же любите программировать, как и тогда, когда начинали?
Ингаллс: Да, я люблю само программирование. Последние пару лет были интересны, потому что я оторвался от той среды, к которой так привык, то есть Smalltalk и затем Squeak, где просто замечательный инструментарий. Пришлось сделать небольшой шаг назад, работая с JavaScript в браузерах и в обычных средах разработки. В итоге иногда отладка занимала у меня больше времени, чем я привык, но общий процесс появления идеи и воплощения ее в жизнь — это то, чем я продолжаю наслаждаться.
Сейбел: Как вы считаете, программирование — удел молодых?
Ингаллс: Нет, не думаю. Самое важное — это иметь способности к исследованию того, что происходит, и ту бесконечную энергию, которой, кажется, у меня больше нет. Но я все еще люблю взять проблему, посидеть над ней и сделать так, чтобы все заработало. Вот такая аналогия: я стал учиться играть на фортепьяно сравнительно поздно. Мне говорили: «О, вам надо было раньше начать, вы так быстро все схватываете». Хотя далеко я не продвинулся, но могу сделать вывод, что неверно, будто бы в молодости обучение всегда дается проще; у них просто больше времени. Когда я тратил достаточно времени, прогресс был.
Примерно то же самое я думаю и о программировании. Когда я оглядываюсь назад, на свою молодость, то понимаю, что тогда у меня времени было сколько угодно. Работай себе и работай. Сейчас же в моей жизни происходит и многое другое, у меня есть обязанности, которые не исчерпываются программированием. Это несколько отвлекает.
Сейбел: Программирование требует времени, но не нужны ли для него также и трудолюбие, и концентрация? Говорят, что это непрерывный процесс, что если отвлекать человека каждые пятнадцать минут, то он ничего не сделает, потому что требуется много времени даже для того, чтобы начать раскладывать идеи по полочкам в голове.
Ингаллс: Это мне напоминает то, что я когда-то сказал кому-то в PARC. У меня появились другие обязанности, кроме возни со Smalltalk, но мы уже сильно продвинулись на пути создания из него действительно очень продуктивной системы. Я пошутил, что спешу улучшить среду Smalltalk, чтобы в промежутках между этой деятельностью можно было наконец заняться нормальной работой. Так что я привык к тому, что у меня есть минут 15, и в это время я успевал посидеть и придумать что-нибудь полезное.
Другая сторона проблемы — то, что вы работаете с другими. Я работаю с молодежью, и это прекрасно. Возможно, я чуть больше размышляю о целях, политике и том, как заставить все работать, а они делают то, чего мне не хватает: у них достаточно времени для действительно глубокого проникновения в суть вещей.
Сейбел: О вас говорят как о хорошем руководителе проекта. Как вам удается возглавлять команду, чтобы люди работали успешно и эффективно?
Ингаллс: Просто я люблю то, что делаю. И мне нравится сотрудничать с другими. Они могут работать вглубь или вширь, так что несложно найти рабочие задачи для разных людей. Мне всегда нравилось работать с другими. Работа идет то лучше, то хуже — бывают разные фазы. Иногда понимаешь буквально все, что надо сделать, и нужно только сказать людям, что делать. А бывает и по-другому: не знаешь, что нужно сделать, и пытаешься это выяснить. Это два очень разных состояния.
Сейбел: Можете ли вы что-нибудь посоветовать по поводу того, как стать хорошим техническим лидером команды?
Ингаллс: Во-первых, нужно ясно дать понять, что вы пытаетесь сделать. Нужно обеспечить всем недвусмысленное представление о работе. Если вы в курсе дела, то можете сами увидеть, как собираетесь реализовать ту или иную идею, чтобы начать понимать, как она будет работать, если этим займутся несколько человек одновременно, и как все это увязать.
Иногда я работал над проектом — и мне было все понятно. Это удача, потому что когда кто-либо начинал испытывать затруднения, я мог сразу ответить, какие должны быть следующие шаги или как обойти возникшее препятствия. И люди чувствуют, когда ты действительно знаешь то, чем руководишь. Они немедленно понимают: да, этот мужик специалист. И это придает команде уверенности.
Сейбел: Бывало ли так, что слишком ясное представление о цели, наоборот, лишало людей мотивации: мол, раз все и так понятно, то доделывать это неинтересно?
Ингаллс: Ну, тут можно просто не вмешиваться в то, как они работают над своей частью общей задачи, и только иногда осуществлять самое общее руководство, когда требуется. Нередко это и к лучшему. Мне повезло долгое время работать со множеством сотрудников, которым я доверял. Очень важно доверять тем, с кем вместе работаешь. Еще один важный фактор — уверенность. Когда цель ясна, быть уверенным легко. Плохим управление бывает как раз тогда, когда беспокоишься, не чувствуешь себя в безопасности и боишься, что нужно постоянно за всем и за всеми следить.
Сейбел: Когда вы еще были рядовой рабочей пчелой, попадался ли вам действительно выдающийся руководитель?
Ингаллс: Лучшим боссом в моей жизни, конечно, был Алан Кэй. Я работал под его началом в Xerox, пожалуй, в ключевые годы моей жизни, и это была интересная комбинация, потому что он знал, чего хочет, но почти никогда не говорил, как я должен работать. При этом у него было столько технической смекалки во всем, что это делало его отличным критиком. И я, и мои коллеги отличались в то время большой продуктивностью, так что, полагаю, он чувствовал, что при таком уровне прогресса ему совершенно необязательно вмешиваться. Но он прикрывал и меня, и всех нас, и у него в голове была четкая картина того, что он хочет получить на выходе.
Сейбел: Когда люди работают в группе, какой подход лучше избрать? Тот, при котором у каждого разработчика есть свой кусок системы: «Вот это мой код, не трогайте его». Или вся команда занимается всем кодом, и любой может работать на всех участках?
Ингаллс: Не знаю. Вот как мы сейчас работаем над проектом Lively Kernel: у разных людей разные участки работы, но никаких преград при этом нет. Это во многом вопрос квалификации, концентрации или целей. Пытаюсь вспомнить, как мы работали в те времена, которые были действительно успешными. Никогда не работал в больших командах, так что действительно получается так, что в большинстве случаев люди единолично трудились каждый над своим кодом.
Сейбел: Если говорить об отладке, то какую самую страшную ошибку вам когда-либо удалось найти?
Ингаллс: Она была связана со сборкой мусора. Сборка мусора — самое плохое, потому что проблема проявляется намного позже того, как что-то случилось. Исправление таких сложных ошибок напоминает мне взлом кодов. Мой отец работал в Управлении стратегических служб, они там работали в командах и главным образом просто собирали информацию, чтобы быть в курсе дела. Затем появлялось закодированное сообщение с фрагментом чего-то, что они видели в новостях, и таким образом они его расшифровывали.
Примерно так же отслеживается ошибка. Когда я приступал к делу, мне помогала интуиция, чутье на то, что могло вызвать данную ошибку в данной ситуации. В тот раз, к примеру, я думал по меньшей мере сутки. Когда у меня наконец все получилось, я был просто в восторге, и мой сын, которому тогда было, кажется, четыре года, вручил мне «Приз великого отладчика».
Сейбел: Это было, полагаю, на Smalltalk. У вас был символический отладчик или вы смотрели шестнадцатеричные дампы памяти?
Ингаллс: Это был отладчик более низкого уровня, чем тот прекрасный отладчик Smalltalk. Деталей сейчас не приведу, но если находишь ошибку, она приводит к низкоуровневым отладчикам. То есть смотришь на память как на восьмеричные значения. И потом видишь, что один объект указывает на другой, а этого быть никак не может. И начинаешь думать: «Как такое могло случиться?» Там были закономерности, были догадки по поводу того, что именно могло вызвать ту или иную неполадку, так что на их основе и нужно было работать.