Сейбел:Бывает ли так, что, написав уже порядочный кусок кода, вы сталкиваетесь с необходимостью пересмотреть свой первоначальный план?
Фицпатрик:Бывает. Но я начинаю с самых сложных кусков или с тех частей, в которых не уверен, и пытаюсь реализовать их в первую очередь. Я стараюсь не оставлять ничего сложного или потенциально неожиданного под конец: я предпочитаю с самого начала решить наиболее трудные вещи. Причина, по которой я так и не завершил ряд своих проектов (друзья говорят, что их целая куча), связана с тем, что я начинал с наиболее сложной части проекта, изучал то, что хотел изучить, и не возвращался к оставшейся неинтересной части.
Сейбел:Можете ли вы дать совет программистам-самоучкам?
Фицпатрик:Всегда старайтесь делать что-нибудь чуть более трудное, чем раньше, то, что вам не по зубам. Читайте чужой код. Я слышал это много раз, но дошло только со временем. Несколько лет я писал много кода, не читая чужой код. Потом я попал в Сеть, а там сплошь и рядом открытый код, в развитии которого каждый может принять участие.
Но я был до смерти перепуган, предполагая, что не смогу в нем разобраться, ведь автором этого кода был не я, и все его устройство не укладывалось у меня в голове.
Потом я начал делать патчи для Gaim, программу мгновенного обмена сообщениями под GTK, начал копаться в коде - и увидел его в целом, я понял это, просто рассматривая отдельные фрагменты кода. После просмотра чужого кода я понял (не могу сказать, что полностью понимаю собственный код), что начал видеть паттерны. “Так, отлично. Я понял структуру, по которой он строится”.
И тогда я начал действительно получать удовольствие от чтения кода, потому что, не понимая некоторый паттерн, задавался вопросом: “Какого хрена они сделали это именно так?” - и начинал изучать код внимательнее. Потом говорил себе: “Ух ты, да это же и правда отличный способ решения этой проблемы, мне понятно, как он оправдывает себя”. Я бы делал это и раньше, но боялся, поскольку считал, что если код не мой, то я не смогу его понять.
Сейбел:А каким образом вы читаете чужой код? Вы начинаете с того, что читаете код, чтобы понять его в общих чертах, или читаете только тогда, когда нужно внести какие-то исправления?
Фицпатрик:Обычно я хочу что-то исправить. Или просто читаю чужой код, если действительно уважаю его автора. Может, это помогает осознать, что он тоже смертный, и не стоит его боготворить. Или узнать из его кода что-нибудь полезное.
Сейбел:Допустим, вы знаете, какие изменения хотите внести. Как вы поступаете?
Фицпатрик:Прежде всего нужно достать архив исходников или получить последнюю версию из SVN и заставить эту проклятую штуку компилироваться. Преодолеть это препятствие. Для большинства оно оказывается самым сложным из-за дополнительных зависимостей в системе сборки или из-за неверных предположений об уже установленных библиотеках. Иногда мне хочется, чтобы крупные проекты шли с образами виртуальных машин, с полностью настроенным окружением для сборки.
Сейбел:Вы имеете в виду что-то вроде VMware?
Фицпатрик:Да. Если просто хочешь по-быстрому что-то исправить, то вот тебе все зависимости. Связь с людьми устанавливается достаточно быстро. Все отлично работает.
Так или иначе, когда у вас есть чистая работающая сборка, забейте на все и просто сделайте одно долбаное изменение. Измените заголовок окна на “Брэд говорит „Hello world"”. Измените хоть что-нибудь. Пусть там все ужасно, просто начните вносить изменения.
Затем по ходу работы пишите патчи. Думаю, это лучший способ начать диалог. Если участвуешь в списке рассылки и пишешь что-то вроде: “Привет, я хочу добавить возможность X”, человек, поддерживающий эту систему, скорее всего, ответит: “Какого хрена, я занят. Отвали. Терпеть не могу возможность X”. Если же напишешь что-то вроде: “Я хочу добавить возможность X. Я думал сделать такой вот патч”, - а это совершенно неверный путь - но ты говоришь: “Но я думаю, что это неправильно. Думаю, что правильный путь - это реализовать X”, более сложный путь, и тебе, скорее всего, ответят что-то вроде: “Черт, он старался и, смотрите, пошел совершенно неверным путем”.
Возможно, это заденет того, кто поддерживает этот код, и он решит: “Слушай, не могу поверить, что вот на ЭТО потрачено столько сил. Ведь так просто сделать правильно”. Или: “Боже, столько работы - и все впустую. Надеюсь, больше этим путем не пойдут”. И тогда тебе ответят.
Читать дальше
Конец ознакомительного отрывка
Купить книгу