Шрифт:
Сейбел: Велика ли разница между вашим первоначальным подходом к программированию, или стилем программирования, и сегодняшним взглядом на эти вещи?
Фицпатрик: Я прошел через множество стилей: сначала объектно-ориентированный, потом функциональный, а затем непонятная смесь того и другого. Вот почему я люблю Perl. С его уродливым синтаксисом, с накопившимся за много лет багажом и изъянами, он никогда не парит мне мозги, задавая стандарт оформления кода. Любой стиль, который вам нравится, хорош. Можно сделать свой код красивым и последовательным, но нет никакого стандарта, определяемого самим языком. Только после перехода в Google я перестал много писать на Perl.
После работы над Живым Журналом я много занимался тестированием. Особенно когда начал работать с другими людьми. Однажды я осознал, что написанный код никуда не исчезает, и мне придется сопровождать его до конца своих дней. Я получаю комментарии к постам в бло-ге, написанным мною 10 лет назад. «Привет, я нашел этот код и нашел в нем ошибку». И мне внезапно приходится исправлять этот код.
Сейчас я сопровождаю огромный объем кода, над которым работают и другие люди, и если в нем будет хоть какая-то заумь, наверняка найдутся те, кто не сможет понять некоторые мои идеи. Поэтому каждый раз, когда пишу что-то сложное, я обязательно создаю тест, который громко сообщит пользователю о том, что тот запутался. Мне приходилось заставлять многих писать тесты, в основном тех, кто работал на меня. Я пишу тесты, чтобы защитить свой собственный код от поломок, поэтому когда код написан, я говорю: «Вы в самом деле уверены, что он работает? Напишите тест. Докажите мне это». И в какой-то момент человек понимает, что все это окупится, особенно при последующем сопровождении.
Сейбел: Когда вы начали работать с другими людьми?
Фицпатрик: Где-то под конец учебы в колледже. Тогда я стал нанимать других, особенно в Портленде, куда вернулся после колледжа.
Первые работники занимались только технической поддержкой, то есть никакого кода не писали. Затем понемногу я начал брать на работу и программистов. Первым был мой приятель по Сети Брэд Уиттакер: у каждого из нас был сайт с названием вроде BradleyLand или Bradley World, так что мы нашли сайты друг друга. Я опережал его в области веб-программирования на год или два, и он спрашивал меня: «Слушай, как ты это сделал?», — шла ли речь об HTML, фреймах, CGI или Perl. Потом мне начали предлагать проекты, и те, что мне не нравились, я передавал ему. И вот однажды нам достался такой крупный проект, что ни один из нас самостоятельно его бы не потянул, и мы сказали заказчику: «Для этого проекта нужны двое». И он отправил нас в Пенсильванию. В Питтсбург? Я вообще не знаю восточное побережье, ведь сам я с западного. Или в Филадельфию? В общем, туда, где любят чизстейки.
Сейбел: Это Филадельфия.
Фицпатрик: Да. Мы там встретились впервые, в каком-то дешевом отеле, но у меня было такое чувство, будто я его уже знаю. Он был очень общительный. Пошел в туалет в моем номере и даже не закрыл дверь, хотя я стоял рядом. Я сказал что-то вроде: «Отлично, будь как дома».
Казалось, будто мы знаем друг друга лет пять, хотя на самом деле никогда не встречались. И мы начали работать над проектом вместе.
Он перебрался в мою просторную спальню, мы выкинули из кухни почти все, поставили компьютерные столы и там работали. Мы просыпались в 10-11 утра, работали до полудня, сидя в трусах, потом немного смотрели телевизор, после чего трудились в непрерывном режиме до 3-4 часов ночи. Потом к нам на лето присоединился еще один мой приятель — он учился в Университете Вашингтона. Летом после первого курса колледжа мы работали втроем. Мой третий друг жил в центре города. Он приезжал утром на метро, от станции катил до нас на скейтборде. Сидел на скамеечке рядом с домом и работал по Wi-Fi, пока мы не просыпались и не впускали его.
Когда нас стало трое, места оказалось уже маловато, и я предложил: «Давайте снимем офис». Мы сняли офис и сказали друг другу: «Столько места! Давайте возьмем еще людей». Мы понемногу росли, и через пару лет нас стало уже 12 человек. Живой Журнал становился все популярнее, но и нагрузка повысилась, так как я занимался персоналом.
Моя мама тоже занималась персоналом, и мы с ней постоянно ссорились, потому что она работала на меня. Мне даже пришлось выработать правила: «Мама, если ты звонишь мне, это должно быть по личному делу либо по работе. Либо то, либо это. Нельзя перескакивать с личных дел на работу и обратно». Я просто бросал трубку, когда она так делала. А когда она перезванивала, я говорил ей: «Все, хватит». Так что нервотрепки хватало. Мама была счастлива, когда я продал это дело, — она больше на меня не работала, и мы перестали ссориться.
Сейбел: Ваша компания тогда работала и по контрактам или занималась только Живым Журналом?
Фицпатрик: В основном Живым Журналом. Мы также пытались запустить фотохостинг, но Flickr нас уделал. Видимо, наш сервис был переусложнен — с прекрасными абстракциями и возможностью встраивания куда угодно. Создавая новый инфраструктурный компонент для Живого Журнала, мы спрашивали себя: «Как это будет работать с FotoBilder?», так что все начали делать абстрактным. Memcached был абстрактным, потому что не было смысла завязывать его с Живым Журналом. Потом мы создали файловую систему наподобие GFS [20] и очередь заданий. Мы создавали эти компоненты, чтобы они могли работать с любым из наших продуктов, но еще и потому, что чем меньше в системе запутанных взаимозависимостей, тем легче ее поддерживать. Даже если это требует больше работы, убрать часть зависимостей — уже большое дело. Поэтому мы начали создавать все эти обобщенные компоненты.
20
GFS (Google File System) — распределенная файловая система компании Google, кластерная система, оптимизированная для работы с большими блоками данных по 64 Мбайт и обладающая повышенной защитой от сбоев. — Прим. науч. ред.
Сейбел: Интересно было бы услышать о развитии Живого Журнала, о том, как вы начинали и как в процессе усваивали необходимые уроки.
Фицпатрик: Все начиналось с одного компьютера с UNIX. На нем одновременно работали несколько пользователей, но постепенно Живой Журнал вытеснил их всех.
Сейбел: Выполнялся как набор CGI-скриптов?
Фицпатрик: Да. То был, кажется, CGI в самом буквальном смысле — пожертвуй всем и умри. Тот провайдер приставил ко мне одного парня. У меня были проблемы, потому что сервер все время сдыхал, и я сказал ему: «Я плачу десять долларов в месяц. Почему он не работает?» Парень ответил: «Ага, сделай-ка вот это». Вскоре я освоил UNIX и понял, что происходит на самом деле.
Затем я переделал все под FastGCI, настроил Apache и вырубил обратный поиск по DNS. После того как все эти этапы пройдены, упираешься в ограничения ввода/вывода или в ресурсы процессора. Потом я получил собственный выделенный сервер, но он был только один, и когда он умирал, у меня начинались проблемы с ресурсами. Я дал доступ на него своим друзьям и просто оставил страницу регистрации открытой. Потому друзья пригласили своих друзей, которые, в свою очередь, пригласили своих друзей, хотя сайт не задумывался как общедоступный. Страница регистрации осталась открытой случайно. Так что потом я поместил на страницу новостей Живого Журнала объявление: «Помогите. Нам нужно купить серверы».