Сейбел:Вы занимались парным программированием, когда садишься за компьютер и начинаешь писать код вместе с коллегой?
Армстронг:Да, с Робертом. Робертом Вирдингом. Мы делали это, когда оба продирались через дебри, не понимая толком, что делаем. А если не знать толком, что делаешь, очень полезно работать с человеком, который и сам в таком же положении. Если один программист сильнее другого, то для более слабого это плюс - он наблюдает за работой более опытного. Можно многому научиться. Но если разница между ними слишком велика, чтобы чему-то научиться, то попросту чувствуешь себя дураком. Ну, а заниматься парным программированием с программистом твоего уровня, когда оба не знают, что делают, довольно прикольно.
Есть еще то, что я назову особыми задачами. Я не возьмусь за них, если у меня простуда или если я в плохой физической форме. Я знаю, что написание программы займет три дня, что мне надо спланировать свой день, не читать почту, работать, не отвлекаясь, четыре часа подряд. Я делаю это дома, зная, что меня не потревожат. Мне требуется полное сосредоточение. И не думаю, что парное программирование тут поможет. Слишком много помех.
Сейбел:А что это за особые задачи?
Армстронг:Представьте, что у вас есть сборщик мусора - это императивное кодирование, - где надо не забыть пометить все регистры. Или, допустим, вы делаете лямбда-поднятие в компиляторе, где черт ногу сломит. Вы даете новые ярлыки всем переменным, у вас есть четыре-пять слоев абстрактных типов данных, перемешанных между собой, фреймы стека с разными вещами - и вы понимаете, что вам надо очень серьезно поразмыслить. Нужна концентрация.
Я работаю над задачами по настроению. Иногда совсем нет вдохновения - тогда думаю, кого бы пойти отвлечь, или читаю почту. А иногда чувствую, что вот сейчас время писать какой-нибудь трудный код. Чтобы работать над кодом, надо быть в нужном состоянии. А разве это возможно, если работаешь в паре? Из двоих всегда один не в настроении, хочет читать почту и все такое.
Сейбел:Скажите, а с Робертом Вирдингом вы занимались последовательным парным программированием - когда посылают друг другу куски кода и переписывают их?
Армстронг:Да, когда работают поочередно. Иногда у меня была программа, которая требовала двух-трех недель. Я говорил Роберту: “Ну, с меня достаточно, забирай”. И он забирал. Каждый раз, когда это происходило, обратно возвращалось нечто неузнаваемое. Роберт безжалостно кромсал код, потом пересылал мне, и я его так же безжалостно кромсал.
Сейбел:Но это приносило пользу?
Армстронг:О, да. Я был в восторге, когда ему удавалось что-то улучшить. Мы продвигались очень хорошими темпами. Роберт был склонен к обобщению. Однажды я нашел переменную - отслеживал ее в 45 подпрограммах, и в конце концов выяснилось, что она ни разу не использовалась, хотя присутствовала в 45 различных функциях. Я спросил: “Зачем эта штука - она ни разу не используется?” И Роберт ответил: “Зарезервирована под будущее расширение”. Я ее убрал.
Я решил написать специализированный алгоритм, убирающий все, что не нужно в данной конкретной программе. Чем более специализированными они были, тем короче становились. А когда Роберт брал мою программу, она удлинялась, делаясь более универсальной. Думаю, это философия UNIX: программа должна делать то, что от нее требуется, и ничего больше. У Роберта была другая философия: программа должна быть частным случаем некоей более общей программы. Поэтому мы попеременно добавляли то общего, то специального.
Сейбел:Похоже на глубокое философское расхождение. Была ли польза от того, что программа металась между двумя крайностями?
Армстронг:Была. Каждый цикл оказывался улучшен. Думаю, программа в целом очень выиграла - больше, чем если бы ее писал один из нас.
Сейбел:Расскажите, как вы проектируете программы. Может быть, приведете пример, связанный с ОТР?
Армстронг:ОТР проектировали я, Мартин Бьёрклунд и Магнус Фрё-берг. Над первоначальным проектом работали только мы трое. Мы собирались каждое утро за чашкой кофе, долго беседовали - час, два часа - и за это время исписывали всю доску. Я сразу же писал всю документацию, а они - весь код. Правда, иногда я тоже выдавал фрагмент-другой кода. И когда я писал документацию и понимал, что не могу что-то описать, мы это меняли. Или они приходили ко мне со словами: “Программа не будет работать, мы поняли сегодня утром, потому что вот это не так, и это, и это”. К концу дня у нас была вся нужная документация и весь нужный код - или достаточно того и другого, чтобы работать. И на этом мы успокаивались.
Читать дальше
Конец ознакомительного отрывка
Купить книгу