Кодеры за работой. Размышления о ремесле программиста
Шрифт:
Завински: Я до сих пор пишу новые скринсейверы - только ради развлечения и только на Си.
Сейбел: Применяете ли вы какую-нибудь интегрированную среду разработки?
Завински: В основном Emacs. Правда, недавно я портировал XScreen-Saver на OS X. Я сделал это так: реализовал заново Xlib на базе Cocoa (графической основе Маков), поэтому мне не пришлось переписывать код всех скринсейверов. Они все еще обращаются к Xlib, но я реализовал все соответствующие методы. Сделано это было на Objective-C, который оказался отличным языком программирования, и работа доставила
Сейбел: Работая в компании Lucid, что вы узнали по технической части кроме политической составляющей разработки Emacs?
Завински: Работая там, я точно стал более хорошим программистом. Во многом потому, что был окружен действительно очень умными людьми. Все, кто там работал, были великолепны. Просто здорово находиться в коллективе, в котором, если кто-то скажет: “Это чепуха” или “Нужно сделать это вот так”, - можно просто верить на слово, не сомневаясь, что он знает, о чем говорит. Это было на самом деле здорово. Не скажу, что раньше я не бывал среди умных людей, но это был именно коллектив высококлассных специалистов в равной степени.
Сейбел: А насколько велика была команда разработчиков?
Завински: В компании было человек 70 - точно не знаю, и около 40 из них разработчики. В команде Energize было 20-25 человек. Все разработчики делились по направлениям. Кто-то работал над компиляторами, кто-то над серверной частью базы данных. Кто-то работал над пользовательским интерфейсом, не связанным с Emacs. Я и еще двое-трое занимались интегрированием Emacs с внешним окружением. Так получилось, что я работал в основном над Emacs, пытаясь сделать так, чтобы нашим редактором Emacs 19 можно было пользоваться, чтобы он не падал то и дело и чтобы под ним запускались все пакеты, которые должны запускаться.
Сейбел: То есть вы хотели, чтобы Emacs, который являлся составной частью вашего продукта, был полнофункциональной версией Emacs.
Завински: Изначально мы не собирались включать Emacs в наш продукт. Идея была такая: на вашей машине уже стоит Emacs, вы берете наш продукт, и они совместно работают. Например, на вашей машине установлен компилятор GCC и наш продукт, и они совместно работают.
Кажется, одним из первых кодовых названий нашего продукта было что-то вроде Hitchhiker (попутчик), так как идея была в том, что он будет брать и интегрировать все имеющиеся у вас инструменты - заставит их “общаться” между собой, предоставив им необходимый уровень коммуникации.
Но это не сработало. Мы стали выпускать собственные версии GCC и GDB, потому что не успевали за изменениями этих систем, по крайней мере, успевали не всегда. То же самое было и с Emacs. Поэтому мы выпустили все целиком. В конце концов мы пошли таким путем: “Так, мы заменили Emacs. Черт. Нам пришлось это сделать, поэтому нужно заставить его работать нормально”. Только на режим эмуляции vi я потратил уйму времени.
Сейбел: И это несколько недель вашей жизни, которые вам никогда не хотелось бы пережить снова.
Завински: И не говорите.
Сейбел: Почему вы ушли из компании Lucid?
Завински: Lucid разваливалась. Людей то и дело отправляли в неоплачиваемый отпуск. Я разослал письма своим знакомым: “Привет, кажется, мне скоро будет нужна новая работа”. Одним из них был Марк Андрессен. Он сказал: “Забавно, что ты об этом упомянул, ведь на прошлой неделе мы как раз создали компанию”. Так я нашел работу.
Сейбел: Итак, вы ушли в Netscape. Над чем вы работали?
Завински: Я практически сразу начал работать над версией броузера для UNIX. К тому моменту было написано совсем немного кода - результат нескольких дней работы. Немногим больше было сделано для версий под Windows и Мак. Модель системы состояла из крупного куска бизнес-логики, независимой от платформы, и небольшой части кода, отвечающего за представление для каждой платформы.
Сейбел: Это был полностью новый код?
Завински: Полностью новый. Большинство основателей компании Netscape были разработчиками броузера NCSA/Mosaic. Они разработали разные версии, которые по сути представляли собой три разные программы. И все шестеро, делавших это, оказались в Netscape. Они не использовали повторно старый код, но уже решали подобную задачу ранее.
Сейбел: То есть они просто начали писать код с чистого листа?
Завински: Именно так. Я никогда не видел код броузера Mosaic (кстати, я до сих пор его не видел). Как раз в это время у нас были судебные разбирательства: университет утверждал, что мы использовали их код, но мы, кажется, как-то уладили этот вопрос. Ходили слухи, будто мы действительно использовали их код, но мы этого не делали.
И зачем? Каждый хочет попробовать еще раз заново, верно? Во время разработки программы находишь ответы на многие вопросы, и, получив шанс выкинуть все и начать с нуля, конечно же, воспользуешься этим шансом. Во второй раз все должно получаться гораздо лучше. И действительно получается. Например, общепринятая архитектура не предоставляла возможность параллельной загрузки изображений. А ведь это действительно важная возможность. Поэтому мы разработали лучшую архитектуру.
Сейбел: Но это похоже на классический случай синдрома второй системы.
Завински: Вот именно.
Сейбел: Так как же всем вам удалось его избежать?
Завински: Самым святым для нас были сроки. Или мы выпустим новый продукт за полгода, или умрем, пытаясь это сделать.
Сейбел: Как вам удалось справиться со сроками?
Завински: Мы осмотрелись и поняли, что если не сделаем это за полгода, кто-нибудь опередит нас. Поэтому мы решили, что справимся с этим за шесть месяцев.