Книга: Джоэл и снова о программировании
Назад: Глава одиннадцатая. Сглаживание шрифтов, антиалиасинг и субпиксельная прорисовка
Дальше: Глава тринадцатая. Общая картина

Глава двенадцатая . Счет на дюймы

7 июня 2007 года, четверг

— Кто-то не выключил радио в ванной? — спросил я Джареда. Играла тихая классическая музыка.
— Нет, это снаружи. Это началось, пока ты был в отъезде, и теперь происходит каждую ночь.
Мы живем в Нью-Йорке, в многоквартирном доме. Со всех сторон нас окружают соседи. Мы уже привыкли к тому, что снизу смотрят ТВ-шоу, а у ребенка в квартире над нами есть любимая игра: бросить на пол горсть шариков, а потом броситься за ними самому. Я пишу эти строки, а в это время он носится по комнатам, круша мебель. Скорей бы он повзрослел и занялся пейнтболом.
Однако классической музыки по ночам раньше не бывало.
Что еще хуже, это была какая-то романтическая музыка в стиле «Буря и натиск», и я впал в неистовство, вместо того чтобы провалиться в сон.
Наконец, музыка смолкла, и я смог уснуть. Но в следующую полночь музыка заиграла вновь, доводя меня до изнурения, причем опять звучала какая-то ерунда самодовольного Вагнера с помпезными крещендо, будившими меня, стоило только задремать, и мне пришлось разглядывать кошачьи фотографии, сидя в гостиной, пока около часа ночи это наконец не прекратилось.
На следующую ночь мое терпение лопнуло. Когда около полуночи послышалась музыка, я оделся и начал обследовать здание. Я крался по коридорам, прислушиваясь у каждой двери и пытаясь определить, откуда доно-
сятся звуки. Я высовывался из окон и нашел незапертую дверь в вентиляционную шахту, где музыка была заметно громче. Я поднимался и спускался по лестнице, прислушиваясь к окну на каждой площадке, пока не убедился, что источником проблемы была квартира милой пожилой миссис C — прямо под нами, № 2B.
Я не поверил, что миссис C в свои шестьдесят бодрствует в столь поздний час или спит под такую громкую музыку, разве что она нарочно задержалась, чтобы послушать передачу из какого-нибудь цикла «Кольцо Нибе-лунгов» на канале классической музыки.
Как оказалось, ничего подобного.
Я заметил, что музыка включалась каждую полночь и выключалась ровно в час ночи. Это навело меня на мысль о радиобудильнике с заводской настройкой на срабатывание в 00:00.
Не смея разбудить старушку из-за одного лишь подозрения, что музыка доносится из ее квартиры, в отчаянии я вернулся к себе и занялся разглядыванием xkcd. Я был подавлен и зол, потому что не смог решить проблему. Я мучился и злился весь следующий день.
Вечером я постучал к миссис C. Управляющий сказал, что через день она уезжает на все лето, поэтому если проблемы связаны с ее квартирой, лучше разобраться с ними безотлагательно.
— Извините за беспокойство, — сказал я, — дело в том, что каждый раз около полуночи из вентиляционной шахты за нашими квартирами доносится громкая классическая музыка, и это мешает мне заснуть.
— О нет, это не я, — возразила она, как и ожидалось. Конечно, это не ее вина: наверняка она ложится спать вовремя и никогда не включает громкую музыку, чтобы не беспокоить соседей.
Я высказал предположение, что она туговата на ухо и может просто не заметить, что в соседней комнате посреди ночи завывает эта штука. Или что у нее слишком крепкий сон.
Мне пришлось потратить на уговоры несколько минут, прежде чем она все же согласилась посмотреть, нет ли какого-нибудь радиобудильника в той комнате, что подо мной.
Он был там. Прямо на окне, под окном моей спальни. Увидев, что он настроен на самый классический из музыкальных каналов, я понял, что виновник найден.
— А, это? Понятия не имею, как им пользоваться. Даже не трогаю его, -сказала она. — Выключу его совсем.
— Не нужно, — сказал я, отключил будильник, вырубил звук и, следуя синдрому навязчивых состояний, выставил точное время.
Миссис C умоляла простить ее, но, в сущности, она была не виновата. Даже я (я!) далеко не сразу понял, как управлять этим чертовым будильником, — а ведь я кое-что знаю о радиобудильниках, не сомневайтесь. Интерфейс пользователя был ужасен. У бедной старушки не было ни единого шанса.
Значит, виноват радиобудильник? В какой-то мере. Им было слишком сложно пользоваться. Там был будильник, который срабатывал каждые сутки, даже если весь день его никто не трогал, — не самое лучшее решение. После отключения питания этот сигнал устанавливался на полночь, хотя семь утра — более разумный выбор для настройки по умолчанию.
Почему-то последние несколько недель я ко всему отношусь чересчур критически. Я всюду ищу недостатки, а найдя, упорно думаю, как их исправить. Это особое состояние ума, свойственное всем программистам на этапе окончательной отладки нового продукта.
Последние несколько недель я дописываю документацию для очередной важной версии FogBugz. Описывая что-нибудь, я проверяю, действительно ли это работает так, как полагается, или делаю снимки экрана. И чуть ли не каждый час раздается сигнал тревоги: «Да что же это? Все должно работать не так!»
Поскольку речь о программе, я всегда могу ее исправить. ХА-ХА! Шутка! Я уже не смогу разобраться в этом коде. Я просто регистрирую ошибку, а исправит ее тот, кто догадается, что нужно сделать.
Дэйв Вайнер (Dave Winer) пишет: «Чтобы создать пригодную для использования программу, нужно бороться за каждое исправление, каждую функцию, каждое мелкое удобство, если это облегчит жизнь хотя бы одному пользователю. Кратчайших путей здесь нет. Удача имеет значение, но победа зависит не от нее, а от упорной борьбы за каждый дюйм» (www. scripting, com/2002/01/12. html).
В коммерческих программах — тех, которые вы продаете другим людям, — счет идет на дюймы.
Каждый день вы делаете маленький шаг вперед. Какая-то функция заработала чуть-чуть лучше. Ваш будильник устанавливается по умолчанию на семь утра вместо полуночи. Маленькое усовершенствование, которое мало кому пригодится. Один дюйм.
И таких мелочей тысячи.
Чтобы находить их, нужен особый, критический склад ума. Вы должны преобразовать свой ум, так чтобы замечать любые недостатки. У ваших близких едет крыша. В семье хотят вас убить. Если, идя пешком на работу, вы видите тупой водительский маневр, только собранная в кулак воля не даст вам пойти и объяснить этому водителю, что он чуть не убил вон того бедного ребенка в инвалидном кресле.
И пока вы исправляете одну мелкую деталь за другой, шлифуете, доводите, полируете и отделываете все укромные уголки своего продукта, происходит нечто удивительное. Дюймы складываются в футы, футы -в ярды, а ярды — в мили. И в результате появляется действительно прекрасный продукт. Продукт, который замечательно выглядит, интуитивно понятно работает и от которого люди в восторге. И когда один из миллиона пользователей этого продукта попытается сделать то, что не придет в голову прочим, он обнаружит, что это не только возможно, но и работает великолепно: даже в кладовках вашей программы мраморные полы, дубовые двери и стены, обшитые панелями полированного красного дерева.
И это признак замечательного программного продукта.
Поздравляю команду FogBugz 6.0, умеющую с удивительным успехом вести борьбу за дюймы, выпустившую сегодня свою первую бета-версию и готовящуюся к выпуску окончательной версии в конце лета. Это лучший из когда-либо созданных ею продуктов. Он приведет вас в восторг.

 

Назад: Глава одиннадцатая. Сглаживание шрифтов, антиалиасинг и субпиксельная прорисовка
Дальше: Глава тринадцатая. Общая картина