Сейбел: А о магистратуре думали?
Фицпатрик: Да. Было бы интересно, но я был слишком занят.
Сейбел: Вы читаете современную компьютерную литературу?
Фицпатрик: Мы с друзьями посылаем друг другу статьи — хорошие такие статьи. Я, например, недавно читал статью насчет изменения размеров фильтров Блума во время выполнения. Потрясающая статья. Статьи с конференций по системам хранения данных, как из промышленных кругов, так и из академических, о разных прикольных системах — я стараюсь читать все это. Что-то попадалось насчет Reddit[26], то ли приятель прислал мне статью, то ли в чьем-то блоге была ссылка на нее.
Сейбел: Вы упомянули о статьях из научных и промышленных источников. Как по-вашему, сегодня есть место, где эти источники сливаются?
Фицпатрик: Иногда у меня и правда возникает такое впечатление. Но часто интереснее читать статьи, основанные на практическом опыте, ведь они пытаются решать реальные проблемы, и их решения работают, в отличие от мыслей вроде: «Мы думаем, будет очень прикольно, если...». Из научного мира исходит много безумных идей, которые на самом деле не работают, так и оставаясь безумными идеями. Может быть, позднее эти идеи превратятся в коммерческие продукты.
Сейбел: Как вы проектируете программное обеспечение?
Фицпатрик: Я начинаю с интерфейсов между некоторыми элементами. Какие методы более свойственны системе — удаленные вызовы или запросы? Если речь идет о хранилищах, я пытаюсь понять, какие запросы будут более частыми. Какие нужны индексы? Как данные будут читаться с диска? Потом я пишу заглушки для различных частей системы, развивая их со временем.
Сейбел: Вы пишете заглушки, чтобы можно было писать тесты до написания остального кода и выполнять их по ходу разработки?
Фицпатрик: Более того. Я всегда проектирую ПО именно таким способом, даже без применения тестов. Сначала я проектирую интерфейсы и хранилища данных, а затем берусь за их реализацию.
Сейбел: В каком виде осуществляется проектирование? Псевдокод? Реальный код? Каракули на белой доске?
Фицпатрик: Обычно я беру редактор и пишу заметки с псевдокодом для схемы базы данных. Доведя ее до ума, создаю реальную схему и копирую/вставляю все скрипты, чтобы удостовериться в том, что операторы create table работают. После этого приступаю непосредственно к реализации. Я всегда начинаю с файла spec.txt.
Сейбел: Бывает ли так, что, написав уже порядочный кусок кода, вы сталкиваетесь с необходимостью пересмотреть свой первоначальный план?
Фицпатрик: Бывает. Но я начинаю с самых сложных кусков или с тех частей, в которых не уверен, и пытаюсь реализовать их в первую очередь. Я стараюсь не оставлять ничего сложного или потенциально неожиданного под конец: я предпочитаю с самого начала решить наиболее трудные вещи. Причина, по которой я так и не завершил ряд своих проектов (друзья говорят, что их целая куча), связана с тем, что я начинал с наиболее сложной части проекта, изучал то, что хотел изучить, и не возвращался к оставшейся неинтересной части.
Сейбел: Можете ли вы дать совет программистам-самоучкам?
Фицпатрик: Всегда старайтесь делать что-нибудь чуть более трудное, чем раньше, то, что вам не по зубам. Читайте чужой код. Я слышал это много раз, но дошло только со временем. Несколько лет я писал много кода, не читая чужой код. Потом я попал в Сеть, а там сплошь и рядом открытый код, в развитии которого каждый может принять участие.
Но я был до смерти перепуган, предполагая, что не смогу в нем разобраться, ведь автором этого кода был не я, и все его устройство не укладывалось у меня в голове.
Потом я начал делать патчи для Gaim, программу мгновенного обмена сообщениями под GTK, начал копаться в коде — и увидел его в целом, я понял это, просто рассматривая отдельные фрагменты кода. После просмотра чужого кода я понял (не могу сказать, что полностью понимаю собственный код), что начал видеть паттерны. «Так, отлично. Я понял структуру, по которой он строится».
26
reddit.com — социальный новостной сайт, на котором зарегистрированные пользователи могут размещать ссылки на какую-либо информацию в Интернете. Как и другие подобные сайты, reddit поддерживает систему голосования за понравившиеся сообщения — наиболее популярные из них оказываются на главной странице сайта. —