Кодеры за работой. Размышления о ремесле программиста
Шрифт:
Фицпатрик: Да. Если просто хочешь по-быстрому что-то исправить, то вот тебе все зависимости. Связь с людьми устанавливается достаточно быстро. Все отлично работает.
Так или иначе, когда у вас есть чистая работающая сборка, забейте на все и просто сделайте одно долбаное изменение. Измените заголовок окна на «Брэд говорит „Hello world"». Измените хоть что-нибудь. Пусть там все ужасно, просто начните вносить изменения.
Затем по ходу работы пишите патчи. Думаю, это лучший способ начать диалог. Если участвуешь в списке рассылки и пишешь что-то вроде: «Привет, я хочу добавить возможность X», человек, поддерживающий эту систему, скорее всего, ответит: «Какого хрена, я занят. Отвали. Терпеть
Возможно, это заденет того, кто поддерживает этот код, и он решит: «Слушай, не могу поверить, что вот на ЭТО потрачено столько сил. Ведь так просто сделать правильно». Или: «Боже, столько работы — и все впустую. Надеюсь, больше этим путем не пойдут». И тогда тебе ответят.
Это лучший путь завязать диалог. Даже в Google я часто начинаю так разговор с командой разработчиков, с которыми не знаком. Исправив ошибку в их коде, я прежде всего посылаю им патч по электронной почте и говорю: «Ребята, что вы об этом думаете?» Или на внутренней ревизии кода говорю им: «Вот описание. Что вы об этом думаете?» Они могут, конечно, сказать: «Черт, нет, это совершенно некорректное исправление».
Сейбел: Вы читаете код ради собственного удовольствия или только тогда, когда это нужно вам по работе?
Фицпатрик: Иногда читаю. Я беру исходный код Android просто так, без видимой причины. То же самое с Chrome: когда его код стал открытым, я сделал зеркало репозитория и стал изучать код. И тоже самое сделал с Firefox и с Open Office. Пользуешься какой-то программой, а потом получаешь доступ к ее исходному коду и можешь на него взглянуть.
Сейбел: У таких программ объем кода довольно велик. Читая код просто ради интереса, как глубоко вы вникаете?
Фицпатрик: Как правило, я просто делаю конвейер из find в less («найти среди значений меньше, чем») и стараюсь понять структуру каталогов. Потом что-то привлекает мое внимание или я нахожу что-то, чего не понимаю. Я беру файл наугад, чтобы получить общее впечатление от него. Затем случайным образом прыгаю по коду, пока не надоест, и тогда снова беру произвольный кусок и начинаю разбираться с ним.
Я не раз выполнял сборку проекта, одновременно читая его код, поскольку эти задачи вполне можно выполнять параллельно, особенно если сборка проекта оказывается сложной. Собрав в конце концов проект, я могу поиграть с кодом, если захочу.
Сейбел: Значит, когда вы читаете хороший код, то он соответствует уже известным вам паттернам или вы открываете для себя новые? Но не всякий код хорош. Каковы первые признаки плохого кода?
Фицпатрик: Ну, я стал достаточно придирчивым, поработав в Google с его очень строгими стандартами оформления кода для всех языков. Для наших шести или семи основных языков есть очень четкие стандарты оформления кода, в которых сказано: «Вот так мы располагаем код. Так называем переменные. Так расставляем пробелы и отступы, используем такие-то паттерны и соглашения, так объявляем статические поля».
Мы стали выкладывать это и в Интернете в качестве справочного руководства для удаленных сотрудников, которые участвуют в наших проектах. Мы хотим иметь строго документированную политику, поэтому не говорим просто: «Нам не нравится, как вы оформляете код».
Сейчас, работая над проектом на Си, первым делом я добавил стандарт оформления кода. Поскольку проект зрелый и в нем участвуют многие,
Сейбел: Вам приходилось заниматься парным программированием?
Фицпатрик: Думаю, это довольно занятно и полезно во многих случаях. Иногда надо просто подумать и побыть одному. Не думаю, что это полезно всегда, но это однозначно весело.
Я запускаю слишком много проектов. И завершаю их, так как иначе чувствую за собой вину, но я определенно слишком часто переключаюсь с одного на другое и слишком распыляю силы. Вот почему мне нужно парное программирование — оно заставляет меня сидеть на одном месте целых три часа, или два, или хотя бы только час, и работать над одной задачей с другим человеком, и при этом я не скучаю. Если приходится заниматься скучным патчем, мне говорят: «Да ладно, нам же нужно это сделать», — и мы доводим это дело до конца.
Я люблю работать один, но в этом случае я постоянно перепрыгиваю между задачами. Я всегда беру в самолет запасные батареи для ноутбука, на котором есть полная среда разработки и локальный веб-сервер. Я запускаю веб-браузер и что-нибудь тестирую. При этом в браузере открываю дополнительные вкладки и набираю «reddig» или «lwn» — сайты, которые читаю постоянно. Автозаполнение, жму Enter — и получаю сообщение об ошибке. Я делаю так несколько раз в минуту. Черт! Поступаю ли я так же на работе? Посещаю ли я эти сайты постоянно, не задумываясь? Это ужасно. У одного моего приятеля правила для iptables [27] настроены таким образом, что при попытке подключиться к определенным IP-адресам в определенное время дня происходит перенаправление на страницу с надписью «Работать надо!». Я до этого еще не дошел, но, видимо, и мне уже нужно нечто подобное.
27
iptables — утилита командной строки, стандартный интерфейс управления работой брандмауэра netfilter для ядер Linux версий 2.4 и 2.6. — Прим. науч. ред.
Сейбел: Что вы думаете о владении кодом? Важно ли человеку владеть кодом индивидуально или предпочтительнее — командой?
Фицпатрик: Не думаю, что у кода должен быть владелец. И, по-моему, никто на самом деле не думает о пользе владения. Вот как это устроено в Google: есть одно огромное дерево с общим корнем и единая система сборки всего кода. Поэтому каждый может взять и поменять что угодно. Но существуют ревизии кода (code review), и у папок есть владельцы, как минимум двое у каждой, на случай, если один из них уволится или уйдет в отпуск.
Для сохранения кода в репозитории требуется выполнение трех условий. Нужно, чтобы кто-то посмотрел код и сказал, что он выглядит нормально. Нужно иметь специальный сертификат удобочитаемости (readability) по данному языку, который доказывает, что ты знаком с его стандартом. Еще нужно одобрение одного из владельцев этой папки. Так что если ты владелец папки и имеешь такой сертификат по этому языку программирования, остается лишь найти кого-то, кто скажет: «Да, выглядит хорошо». Это достаточно хорошая система, поскольку в этом случае получается как минимум двое владельцев, а может быть, и двадцать или тридцать. Если немного поработать с базой кода, кто-нибудь добавит тебя в число владельцев. Мне кажется, это отличная система.