Философия программирования Win95. Глава 1

Разное

Отсканированная мной книга Лу Гринзоу "Философия программирования Windows 95/NT", глава 1. Обсуждение, исправление опечаток и вопросы - в комментариях.

Добро
пожаловать в реальный мир


The Universe is not hostile, nor yet is it friendly. It is simply indifferent.

Преподобный Джон Г. Холмс

All suffering is caused by ignorance of the nature of reality
and the craving, attachment, and grasping that result from
such ignorance.

Вторая Великая Истина Будды

Suffering can be ended by overcoming ignorance and attachment.

Третья Великая Истина Будды

От слов Джона Холмса веет холодом. Но я думаю, что для того сложного мира,
в котором обитают наши программы, мира, состоящего из миллионов экранов
пользовательских компьютеров, далее его характеристика все-таки была бы
слишком оптимистичной. Это не праздный пессимизм; наоборот, если бы я пес-
симистично относился к программированию, я никогда не сел бы за написание
этой книги и давно сменил бы профессию. Но я очень хорошо знаю по своему
опыту, как ошеломляюще часто программы начинают давать сбои, будучи
брошенными во взбаламученный котел широкой популяции пользователей.
При этом чем меньше «энергичность» ваших программ, тем более рискованной
и ненадежной может быть их работа - об этом я и собираюсь подробно рас-
сказать в этой главе.

Windows 95 крупным планом

Давайте прислушаемся к мудрым словам Будды и попробуем избавить себя от
лишних страданий - разберемся, что представляет из себя операционная сис-
тема Windows 95 в действительности, и чем она на самом деле не является.

Еще задолго до ее окончательного появления на свет масса людей крити-
ковала Windows 95 за то, что она не является стопроцентно 32-разрядной,
multi-все-и-вся, TURBO (The Ultimate Really Better Overall) и т. д. Эти
критики были правы в оценке фактов, и я не хотел бы спорить с теми, кто
говорит, что шумиха по поводу выхода Windows 95 была просто поразитель-
ной. Но теперь продукт уже вышел, и я считаю все эти споры античной
историей. Значение имеет только следующее: что именно находится в этом
черном ящике, как хорошо оно работает, и - главное для моей книги - во что
все это выливается для нас, программистов.

Была и другая, большая группа людей, поначалу разочарованных в Win-
dows 95, и я был одним из них. Продукт имеет множество мелких странностей
и откровенных ошибок, которые я нахожу очень раздражающими, особенно
если учесть, что это было первое серьезное усовершенствование Windows за по-
следние годы. К счастью, большинство самых досадных проблем (с точки
зрения конечного пользователя) связаны с программой Проводник (Explorer),
а это означает, что мы можем их избежать просто путем замены этой части сис-
темы. (При этом я не хотел бы дальше разжигать эту дискуссию, размахивая
моим перечнем претензий к Проводнику. Я полагаю, всякий технически
грамотный читатель этой книги смог бы и без моей помощи составить
впечатляющий список пороков Проводника.)

В то же время в Windows 95 явно есть много того, что должно понравиться
пользователям. Например, наиболее примечательным для опытных пользовате-
лей является серьезно улучшенное управление ресурсами. Для тех, кто привык
выжимать максимум из компьютера, одного этого уже почти достаточно для
перехода на Windows 95. В тот день, когда я получил мою копию финальной
версии Windows 95, я (в отличие от апгрейда к очередной бета-версии) сразу
же установил ее на тот компьютер, где храню мои деловые записи и прочие
важные данные. И тотчас же получил значительный выигрыш: я имел возмож-
ность держать одновременно запущенными Stickies!, Lotus Organizer, Word for
Windows, Access и Visual С++ и при этом иметь 76% свободных ресурсов.
Фактически, одной из самых больших моих проблем при работе с Windows 95
является теперь преодоление привычки выгружать и перезапускать одну и ту
же программу по несколько раз за сеанс. Как и большинство из вас, я действо-
вал таким образом в течение ряда лет, хотя логической необходимости в этом
никогда не было. Теперь эта гимнастика с мышью больше не нужна - намного
эффективнее просто запускать программы тогда, когда они необходимы (или
даже раньше), а затем оставлять их бездельничать на панели задач.

Все дело в том, что Windows 95, по сравнению с Windows 3.1,
совершенно другой зверь. Windows 95 поощряет попытки пользователей рабо-
тать по-другому. Когда я пишу эти слова, никто не знает, как быстро смогут
разные категории пользователей освоить Windows 95 и принять ее. Но уже се-
годня все мы можем быть уверены, что присутствие этой операционной системы
на рынке настольных компьютеров будет очень значительным, и что она с боль-
шой вероятностью будет доминантной ОС (в абсолютных показателях) на бли-
жайшие годы.

 

Публичные и приватные программы

Одной из ключевых концепций, изложенных в данной книге, является отличие
публичных и приватных программ.

Приватными программами я называю те, которые будут использоваться
только вами (их разработчиками) или очень ограниченным кругом других
людей, чьи навыки, требования и компьютеры хорошо известны. Под «очень
ограниченным кругом» я имею в виду не пару дюжин ваших ближайших
друзей, а максимум пять-шесть человек, да и то лишь в жестко контролируе-
мых условиях. А определение «хорошо известны» следует понимать буквально:
известны вам лично, причем ваши знания о них и о том, как они будут исполь-
зовать вашу программу, относятся к каждому конкретному человеку, а не ко
всем в совокупности. Например, для объявления программы приватной недос-
таточно сказать, что она будет использоваться инженерами по гидравлике,
которые часто пользуются компьютерами и потому считаются грамотными
пользователями. Такие размашистые обобщения слишком часто служат оправ-
данием для срезания углов в программах.

Никогда не забывайте: даже если вы твердо уверены, что вы полностью
контролируете распространение вашей программы, на самом деле это не так.
Ваша программа запросто получит широкое, неофициальное распространение
без вашего ведома (конечно, если она не является настолько специализирован-
ной, что лишь несколько человек в мире смогут понять, что она делает, и без
посторонней подсказки счесть ее полезной для себя). Я видел немало случаев
такого ненамеренного распространения в прошлом, а ныне - когда пользова-
тели повсюду связаны локальными сетями и модемами, как никогда раньше -
вероятность такого случая еще больше.

Некоторые придерживаются той крайней точки зрения, что, как только вы
даете попользоваться вашей программой другому человеку, программа пересе-
кает черту и становится публичной. Я понимаю такую точку зрения, но все же
считаю ее экстремальной. Например, моя жена Лиз работала системным анали-
тиком и программистом в течение 16 лет, и она определенно разбирается в
компьютерах и программах. Я могу легко отдать ей (или некоторым моим зна-
комым консультантам в области компьютеров) программу «приватного
качества», сказать, что эта программа еще не готова для «премьеры», и дальше
ни о чем не беспокоиться. Однако такие ситуации являются скорее
исключениями.

Публичные программы - прямая противоположность приватным. Они
распространяются среди большого числа людей и будут использоваться в неиз-
вестных условиях и ситуациях. Это подразумевает раздачу программы более,
чем шести пользователям, или людям, которых вы не знаете, или использова-
ние этой программы на компьютерах с характеристиками, сильно отличными
от вашего или вообще заранее неизвестными. Публичной программой может
быть что угодно - от простой утилиты для принтера, которую вы написали и
поместили на общий сетевой диск в офисе, до таких широко распространенных
названий, как WordPerfect или сама Windows 95. В первом случае вы могли не
иметь намерения увидеть эту маленькую утилиту работающей за пределами ва-
шей компании; и вы могли бы даже вставить в ее интерфейс соответствующее
заявление. Но будьте уверены - если эта утилита представляет хоть какой-то
интерес для широкого круга пользователей, она уйдет. Кто-нибудь из ваших
коллег возьмет копию для выполнения работ, взятых на дом, его ребенок уви-
дит программу и начнет раздавать ее копии своим друзьям, один из друзей вы-
ложит ее на несколько BBS (чтобы получить признание ровесников не просто
за публикацию крутой программы, а за публикацию программы, которая явно
не предназначалась для широкого распространения; ведь запретный плод так
сладок). В мгновенье ока утилита, которую вы сваяли за час небрежного
кодирования, оказывается в пользовании тысяч людей.

(Я должен отметить, что Фредерик Брукс упоминает классификацию
программ на приватные и публичные в своей классической работе «The Myth-
ical Маn-Month», на странице 164. Как мне кажется, он использует эти
термины в том же смысле, что и я в этой книге, хотя он касается этой концеп-
ции лишь мимоходом. Для протокола: я не заимствовал эти термины у Брукса;
я впервые начал пользоваться ими еще до того, как прочел его книгу, и это
случайное совпадение - лишь еще один из маленьких приятных жизненных
сюрпризов.)

 

Насколько публичное публично?

Даже когда вы предназначаете программу для публичного использования,
вы можете столкнуться с сюрпризами. Проектируя Stickies!, мою условно бес-
платную программу, я предполагал, что она будет использоваться как простая,
удобная программа для напоминаний, с достаточными возможностями базы
данных, чтобы пользователи могли отслеживать и запоминать прошедшие об-
суждения, идеи и тому подобное. Я разговаривал со многими людьми о том,
как они используют Stickies! и, как правило, слышал, что эксплуатируется она
в значительной степени именно так, как я и задумывал (со случайным
исключением в лице одного любителя генеалогии, который с помощью Stickies!
отслеживал предков и потомков).

Но в один прекрасный день я получил факс, приковавший мое внимание.
На нем была отпечатана какая-то военная символика, и послан он был полков-
ником американских вооруженных сил, который просил меня связаться с ним
по поводу программы Stickles!. Я позвонил и имел очень интересный разговор
с этим джентльменом, желавшим приобрести копию моей программы. Он сооб-
щил, что использует ее для хранения информации о месте службы 30 генералов
и 600 полковников, а также их подчиненных. Это было намного более «серьез-
ным» применением Stickies!, чем я когда-либо представлял. Как вы можете до-
гадаться, мне было приятно, когда этот клиент сообщил мне, что перед таким
важным использованием программы он пробовал всерьез «выкручивать ей
руки», и что она прошла все тесты. Вы можете возразить, что, мол, всякая
публичная программа должна быть достаточно надежна, чтобы не имело
значения, кто и как ее использует; программы либо работают правильно, либо
элегантно отказываются работать, не теряя при этом данных. Фактически, это
точно совпадает с моим собственным мнением. Но все же такие звонки, как
этот, удивительно способствуют тому, чтобы лишний раз задуматься о пробле-
мах качества.

Между приватными и публичными программами нет внутренне присущих
им различий. Различия являются внешними по отношению к программам и
диктуются тем, как они распространяются, как и кем они используются. Было
бы здорово, если бы у компилятора или компоновщика существовал бы ключ,
при помощи которого мы могли бы заставить программу оставаться приватной.
Но я не предвижу появление подобной возможности в ближайшем будущем.
 

Этика и метафоры

Приватные программы не очень интересны в свете проблем, обсуждаемых
в этой книге. Если вы пишете программу для своего личного пользования, де-
лайте это так, как вам хочется. Пишите ее на каком-нибудь экзотическом языке
(возможно, даже на том, для которого вы сами создали компилятор или
интерпретатор), если вас увлекают вещи такого сорта. Нe обременяйте вашу
программу такой немыслимой ношей, как одна дополнительная строка, осуще-
ствляющая проверку ошибки. Даже не думайте беспокоить ее и заставлять вы-
давать предупреждение перед форматированием винчестера в ответ на опцию
командной строки типа /TERMINATOR:YES. Лупите сами себя. Это ваше
микрокоролевство, и вы в нем правитель, поэтому ваше дело, что там творить.
Но только потом не приходите ко мне в слезах, когда ваша программа вдруг
превратится в самонаводящуюся ракету с ужасающей точностью попадания.

Публичные программы - совсем другое дело. Когда ваша программа «вы-
ходит на публику», она буквально становится инкапсулированным отражением
вашей философии и сценария вашего личного поведения, которые будут рабо-
тать на компьютерах других людей, имея доступ к жизненно важной
информации - воплощениию великих дел ваших пользователей, их денег,
времени и усилий. Уже одного этого отличия между приватными и публичными
программами должно быть достаточно для того, чтобы мы пересмотрели подход
к программированию (хотя, повторюсь, судя по качеству современного
коммерческого программного обеспечения, этого явно не происходит).

Есть другой момент, который полезно иметь в виду во время написания
публичной программы, и который традиционно тяжел для запоминания
программистами: когда вы закончили ее писать, программа только начинает
свою жизнь. Вы можете быть довольны ей, когда выпустите в свет, но только
лишь в этот момент в игру вступят мириады ранее сделанных вами предполо-
жений о Windows, о пользователях и их системах, о компромиссах между удоб-
ством и производительностью, и о том, как все эти факторы будут взаимодей-
ствовать. Неважно, сколько часов ушло на проектирование, кодирование и
тестирование вашей программы, она - лишь безжизненная вереница нулей и
единиц до тех пор, пока люди не запустят ее и не извлекут из этого пользу. Вот
когда происходит волшебство. В этом смысле хорошее программное
обеспечение очень напоминает хорошую беллетристику или другое произведе-
ние искусства: среди всех человеческих изобретений они ближе всех находятся
к истинному волшебству, потому что способны изменять жизнь далеких, неиз-
вестных автору людей.

Если вы позволите мне провести еще одну аналогию, я часто представляю
программу как скрипку. Вообще говоря, в скрипке нет ничего волнующего. Не-
много лакированного дерева с витиеватыми прорезями, кусочки металла и ка-
кие-то струны. Бездушный, скучный и даже немного забавный вид. Но вложите
скрипку в руку Ицхака Перельмана, и она вдруг покажется почти живой, спо-
собной выжать эмоции у слушателей и рассказать о чем-то почти членораз-
дельно. Неплохо для такого простецкого изобретения (или для строки нулей и
единиц).
 

Знакомьтесь: это ваши пользователи

Но достаточно метафор. Вернемся к реальному миру и к реальным людям,
которые будут использовать ваши программы. Как я отмечал выше и в других
местах (например, в моей статье «Dialog Вох» в июльском номере Windows
Magazine за 1995 год), мир Windows навсегда изменился в 1994 году, задолго
до выхода Windows 95. И произошло это благодаря неожиданному всплеску
продаж персональных компьютеров домашним пользователям. Различные ана-
литики и компании еще за несколько лет до того момента оптимистично пред-
сказали грядущий взлет этого рынка. В конечном итоге, причиной этого не
были ни теплые и пушистые удобства Apple Macintosh или Windows, ни какие-
либо другие намеренные усилия по заманиванию некомпьютеризованной дичи
в электронные силки. Причиной была простая хладнокровная экономика: пред-
ложите приличные компьютеры достаточно дешево, и народ сбежится покупать
их для домашнего пользования, в большинстве своем - для детей. Именно это
и произошло. Соотношение производительность/цена в конце концов дос-
таточно выросло (при весьма низкой входной цене), компьютерные продажи
взлетели, и база потенциальных заказчиков у большинства производителей ПО
драматически изменилась. (Никогда не забывайте Первый Закон Лу о
Компьютерах: хорошая экономическая инициатива кроет флеш-рояль.)

В старые добрые дни компьютеры были вотчиной лабораторных экспертов,
носивших белые халаты и посвящавших себя преодолению собственноручно
созданных сложностей. Сегодня, вероятно в отместку за прошлое, главным
направлением стали персональные компьютеры, и миллионы их владельцев
теперь изучают DOS и Windows (в особенности Windows 95), компьютерную
аппаратуру и прикладное программное обеспечение, игры и прочую чепуху. И
все это происходит одним гигантским глотком. А это значит, что вы больше не
можете надеяться на высокий уровень компьютерной грамотности у пользова-
телей ваших публичных программ. Например, ваша публичная программа
больше не может блаженно игнорировать некоторые ситуации, предполагая,
что «пользователи будут знать, как это сделать». На мой взгляд, такие предпо-
ложения всегда были ненадежны; а теперь они и вовсе неправильны.
 

Игры, в которые играют люди

Я не собираюсь затевать истерию «избиения тупых пользователей» (как
это делают многие программисты) ни в этой книге, ни где-либо еще, потому что
пользователи заслуживают уважения с нашей стороны. Ведь все как раз на-
оборот: без пользователей наши программы - не более, чем нули и единицы,
а мы - кучка пижонов, занимающихся непонятно чем. Но я все же думаю, что
имеет смысл привести несколько примеров того, что порой вытворяют
компьютерные новички (да и не новички тоже). Я наблюдал подобные случаи
в течение последних нескольких лет, и эти эпизоды на многое открыли мне
глаза...

В Дебаты, вызванные ошибкой процессора Intel при вычислениях с пла-
вающей точкой, нужно рассматривать как огромную неоновую вывес-
ку, объявляющую в адрес всей компьютерной индустрии, что Мир Из-
менился. Каждая основная версия каждого микропроцессора имеет по
крайней мере некоторые ошибки. Это не новость. Учитывая жуткую
сложность микропроцессоров, это также и не сюрприз. Тем не менее,
когда ошибка процессора Pentium всплыла на поверхность, это стало
воистину главной темой для обсуждения всей компьютерной (и около-
компьютерной) общественностью. Джим Лаудербек, тогда работавший

в PC Week, а теперь - главный редактор Windows Sources, давал ин-
тервью CNN, и весь мир, казалось, сидел и внимательно слушал.
Вначале Intel повела себя неумело и плохо, говоря, что производитель
процессора сам решит, так ли уж нужен исправленный чип для тех
работ, которые пользователи делают на своих компьютерах. (Это был
еще один из сымпровизированных жизнью IQ-тестов. Большинство
людей согласится, что здесь Intel потерпела полный провал.) Такой от-
вет мог бы быть приемлемым (хотя по-прежнему высокомерным) в
середине 80-х. Но в середине 90-х, после превращения индустрии
персональных компьютеров в нечто сравнимое с рынком компонентов
для стереоаппаратуры, такой ответ был заслуженно осмеянным
грубым промахом. Intel, к своей чести, в конце концов поняла это и
предложила бесплатную замену Pentium всем желающим.

В Я встречал пользователей, которые думают, что динамические библио-
теки (DLL) - это некоторая разновидность чисто текстовых конфи-
гурационных файлов, и изменяют их при помощи текстовых редак-
торов. И далее появление на экране разного бинарного мусора вовсе не
настораживает и не разубеждает этих людей. Они просто игнорируют
все нечитабельное, пролистывают файл туда-сюда, пока не увидят
фрагмент текста, который, как им кажется, относится к необходимому
изменению, редактируют этот фрагмент, сохраняют файл и снова за-
пускают программу. Затем они звонят в службу технической под-
держки.

В В офисе клиента, которого я консультировал, я однажды застал их
директора по маркетингу за следующим занятием: он запускал Win-
dows, программу-редактор, что-то вводил в документ, в течение не-
скольких секунд что-то выискивал, беспорядочно тыкая в разные
кнопки на экране, после чего выключал компьютер из сети. Пока я на-
блюдал за ним, он повторил эту процедуру несколько раз. В конце
концов я понял, что происходило: этот человек просто не знал, как
удалить текст и начать новый документ. А включение/выключение
компьютера просто оказалось ближайшим решением его проблемы.
(Да, забыл упомянуть: клиентом являлась компьютерная компания.)

В Во время разговоров с пользователями Stickies! я почти каждую не-
делю слышал от них об одной и той же проблеме: многие новички с
трудом догадываются, что поверхность стола (desktop) в Windows на
самом деле трехмерна. Снова и снова я слышу, что «Stickies! сначала
показывает мои заметки, а потом вдруг исчезает! Куда она девается?»
Конечно же, ответ таков, что никуда программа не девается. Просто
пользователь ткнул мышкой в окно какой-то другой программы, оно
получило фокус ввода, всплыло на передний план согласно z-order и
накрыло собой другие окна, включая окно Stickles!. Некоторые поль-
зователи даже спорили со мной и заявляли, что Windows, вероятно, не
может так себя вести, потому что это бессмысленно.

В Стандартный диалог Save As - знакомый элемент Windows даже для
новичков. Но он может привести к небольшой путанице, связанной с
форматами файлов. Например, пользователям приходит в голову
мысль, что, если вы хотите сохранить графику в PCX-файле вместо
BMP-файла, то вы можете просто воспользоваться функцией Save As:
достаточно выбрать *.РСХ в списке типов файлов, и графика будет
сохранена так, как нужно. К сожалению, некоторые пользователи во-
обще не знают о том, что существуют различные форматы файлов, а
не только различные соглашения о названиях файлов. Поэтому они по-
лагают, что диалог Save As является только лишь удобным способом
сохранить файл под другим именем. В зависимости от используемой
программы, они запросто могут открыть этот диалог, заглянуть в спи-
сок форматов и, не найдя там «PCX-файлы», просто набрать в поле
для имени файла «FRED.PCX» и нажать ОК. Конечно же, они не по-
лучат при этом PCX-файла, а получат BMP, или TIFF, или что-то
другое. Вот почему так важно, чтобы ваши собственные форматы фай-
лов были самоидентифицирующимися. (Эта тема подробно рас-
сматривается в главе 9.)

В Понаблюдайте за тем, как пользователи сохраняют файлы, и вы скоро
заметите, что многие из них не обращают внимания на те части диало-
гов Save As и Save, которые предназначены для работы с каталогами.
Такие пользователи просто набирают желаемое имя файла и жмут
кнопку ОК, непреднамеренно позволяя программе поместить файл в
том каталоге, на который в данный момент указывает диалог. И если
вдруг этот каталог оказывается малопримечательным в их системе или
открытым случайно, он практически становится могилой сохраненного
файла, потому что в следующий раз, когда пользователь попробует
добраться до этого файла, ему покажется, что файл исчез. И даже если
файл будет сохранен в нужном месте, достаточно того, чтобы диалог
File|Open в следующий раз открылся в другом каталоге - снова будет
казаться, что файл потерян. Этот пример показывает, как просто мож-
но облегчить жизнь своим пользователям: сделайте так, чтобы все эти
стандартные диалоги открывались в подходящем каталоге.

В Я видел работника, который совершал апгрейд от DOS 5.0 к DOS 6.0
путем копирования каталога C:DOS с одной машины на другую. (Он
считал, что запуск программы-апгрейда был бы слишком хлопотным.)
Результат получился варварским (в буквальном смысле этого слова -
подобным вторжению чужаков); поскольку работала по-прежнему DOS 5.0,
а все внешние команды (например, FORMAT.COM) нахо-
дились в С:DOS и были от новой версии; естественно, они отказыва-
лись нормально работать с предшествующей версией DOS.

Пользователи-новички не являются для нас ни добром, ни злом; просто их
действия несколько отличаются от того, что вы ожидаете. И это особенно
верно, если вы круглосуточно окружены программистами и опытными пользо-
вателями.

Даже тогда, когда пользователи не занимаются исследованиями всяких за-
коулков, они совершают самые разнообразные действия, которые кажутся им
совершенно обоснованными, но могут создать для вашей программы абсолютно
катастрофические условия. Они постоянно будут совершать такие вещи, как ус-
тановка вашей программы на один компьютер (в строгом соответствии вашим
инструкциям), а потом попытка установки ее на другой, путем простого
копирования файлов, принадлежащих, как им кажется, этой программе. Мно-
гие простые правила, воспринимаемые программистами как очевидные (вроде
необходимости закрыть программу перед тем, как «снаружи» делать что-то с
файлом, загруженным в нее), просто-напросто непостижимы для пользовате-
лей. В некоторых случаях Windows оградит вас от этих проблем, но чаще от-
ветственность по-прежнему возлагается на программистов.

Я хотел бы еще один, последний раз подчеркнуть: я привел все эти
примеры (некоторые из них достаточно анекдотичны) не для того, чтобы сму-
тить или тем более обидеть компьютерных пользователей-новичков; я расска-
зываю эти истории потому, что, взятые вместе, они составляют наглядную и
поучительную повесть о программировании середины 90-х годов.
 

Любовь приходит и уходит, а программы
остаются


Один из более коварных побочных эффектов этого наплыва новых пользо-
вателей связан с тем, что они терпеть не могут обновлять программное
обеспечение. Они покупают компьютер в каком-нибудь магазине и используют
те же самые копии DOS, Windows и пучка других программ, полученных вме-
сте с компьютером, до тех пор, пока не обновят всю систему в целом (лет этак
через несколько). В конце концов, все работает нормально, так зачем тратить
деньги на изменение чего-либо?

Вопрос об апгрейдах напоминает мне об одной из самых интересных цитат,
известных мне. Эти слова принадлежат сотруднику Microsoft и взята из ок-
тябрьского номера Windows Magazine за 1994 год:

Стив Балмер сообщил, что от 5.5 до 7 процентов пользователей
MS-DOS перешли на версию 6.0, и что лишь 24 процента зареги-
стрированных пользователей перешли с
Windows 3.0 на Windows 3.1.
Что же касается прикладного программного обес-
печения, то соответствующие показатели для
Word и Excel в сред-
нем колеблются между 20 и 30 процентами.


Даже если предположить, что можно сделать некоторую поправку на
пиратство (например, компания, располагающая сотней компьютеров, поку-
пает только один апгрейд и затем использует его на всех системах), и что Mi-
crosoft, вероятно, вычисляет показатели для Windows, деля количество
зарегистрированных апгрейдов на общее количество проданных лицензий
(включающее OEM-лицензии, часть которых реально не используется и нико-
гда не будет обновлена), все же я нахожу оценку 24% неожиданно низкой.
Вспомните, насколько отвратительной казалась Windows 3.0 при сравнении с
Windows 3.1? Этот переход был прародителем всех последующих «само собой
разумеющихся» апгрейдов (и состоялся он еще перед серьезным вступлением
в игру рынка домашних компьютеров), тем не менее процентное отношение так
и не превысило одну четверть.

Я часто представляю себе новых компьютерных пользователей похожими
на обычных домовладельцев. Они могут строить планы серьезного обновления
своего дома в один прекрасный день (например, добавления ванной комнаты
или перепланировки кухни), но до того момента они не станут делать никаких
изменений. Для многих компьютерных пользователей смена важной
программы или (содрогнитесь!) операционной системы есть нечто столь же
неприятное (каждому по-своему), как примирение со строительными работами
внутри собственного жилища.

Такое нежелание обновлять программное обеспечение имеет весьма серьез-
ные последствия для программистов, поскольку операционная система явля-
ется как раз той частью «хозяйства» пользователей, которую они меняют осо-
бенно неохотно. Это значит, что любые ошибки в первой коммерческой версии
Windows 95 или любой ее последующей версии станут перманентными
дырками в киберпространстве, вокруг которых нам всем придется ма-
неврировать. В какой-то степени так было всегда, и программам всегда прихо-
дилось учитывать более ранние версии операционной системы (или, по крайней
мере, им следовало это делать). Но мир изменился, и сейчас этот фактор на-
много более важен, чем. несколько лет назад.
 

Как не следует относиться к пользователям-новичкам

Я уже слышу, как толпа разогревает свои текстовые редакторы возгласами
«это не моя вина.../невозможно сделать все на свете.../пользователи должны
сами нести ответственность за свои системы...» Если вы из этой категории, по-
звольте мне сэкономить ваши усилия: я не собираюсь предлагать вам
стремиться делать свои программы полностью защищенными от дураков.

Я знаю, что сделать это невозможно, потому что всегда найдутся люди, которые
будут совершать самые причудливые действия (например, выключать из сети
компьютер в то время, как ваша программа записывает данные в дисковый
файл, а потом ожидать, что она будет нормально работать при следующем за-
пуске).

Более того, я не думаю, что вам следует украшать ваши программы
многочисленными подсказками и нянчиться с пользователем, пытаясь уберечь
его от совершения малейшей ошибки. Даже решение о том, что подходит под
определение «нянчиться», а что нет, может оказаться трудным. Определенно,
я жду от текстовых процессоров и других документно-ориентированных
программ выдачи предупреждения в том случае, когда я пытаюсь завершить
работу, не сохранив предварительно сделанные мной изменения. Но даже та-
кой простой уровень защиты может применяться неправильно и раздражать.
Например, программа Resource Workshop от Borland будет ошибочно говорить,
что RES-файл, который вы открыли для просмотра, изменен, хотя этого на са-
мом деле не было такое поведение сводит меня с ума. Еще более
раздражающим был один инструмент разработки, который я однажды исполь-
зовал: в его состав входил сложный редактор для специальных
структурированных файлов, который позволял перепрыгивать с экрана на
экран, изменять ноля, и много чего еще, но никак не мог делать такую
мудреную операцию, как предупреждающий писк при попытке выйти, не
сохранив сделанную работу. Когда я спросил разработчика этого редактора,
почему он так себя ведет, мне было сказано, что для осуществления моих по-
желаний потребовалось бы слишком много труда. Далее для инструментария
разработчика это совершенно неприемлемо.

Пользователь и в самом деле должен нести какую-то ответственность за
свой компьютер и за то, что на нем происходит. Но моя точка зрения
заключается в том, что пограничная линия между вашей ответственностью и от-
ветственностью пользователя сместилась одновременно с изменением уровня
всеобщей компьютерной грамотности. Юристы часто упоминают термин «тест
здравомыслящего поведения», который означает, что при рассмотрении той
или иной ситуации они спрашивают себя: «Что будет делать или чего будет
ожидать в данной ситуации здравомыслящий человек?» (здесь можно вставить
бесплатную улыбку юриста). В нашей области определение «здравомыслящего
пользователя» в значительной степени изменилось за последние 12-18 месяцев
(на момент написания этих строк) и будет продолжать меняться в быстром
темпе по крайней мере ближайшие несколько лет. А это, в свою очередь, изме-
няет определение «здравомыслящей программы». В каком-то смысле я нахожу
это довольно ироничным, поскольку я всегда считал, что в среднем программы
должны быть намного более удобными и любезными, чем было до сих пор.
Многие программисты отвергают такую идею, ссылаясь на миф о том, что все
их пользователи знают (или должны знать), что они делают, а если они этого не

знают, что ж, тогда пользователи сами виноваты в своей безграмотности,
ведь оберегать пользователей от их собственного невежества - не дело
экзальтированных программистов. Ныне, под воздействием непреодолимых
экономических стимулов, заставляющих программистов быть более услужли-
выми, как опытные пользователи, так и новички в конце концов начинают до-
биваться больших удобств (что, вообще говоря, должно было происходить и
раньше).


Как нужно относиться к пользователям - новичкам и гуру

По сути, ответ на этот вопрос растворен во всей книге. Нет той пресловутой
единственной серебряной пули, которую я мог бы вам дать. Разве что в
главах 2 и 3 я представлю набор конкретных рекомендаций по разработке
программного обеспечения для Windows 95, которые, на мой взгляд, помогут
справиться с этой серьезнейшей проблемой.

Первый шаг, который все мы должны сделать, - скорректировать модель
менталитета нашего среднего или типичного пользователя. Авторы бел-
летристики часто говорят о наличии у них ментальной модели своих типичных
читателей. Имея свой собственный беллетристический опыт, я убежден, что все
авторы действительно имеют в своей голове такую модель при работе, даже
если они не говорят о ней так явно. Присутствие такого мифического типичного
пользователя как раз и привносит те самые разнообразные предположения о
том, что годится и что не годится в окончательном результате работы.

Намного более сильное воздействие на нашу работу оказывает наша фило-
софия проектирования и реализации программ, что является темой следующих
двух глав.
  

Поразительное происшествие с CON.TXT и другие
устройства-разрушители

Одну из самых странных вещей в Windows 3.1 и Windows 95
я открыл совершенно случайно. Почти целый день я занимался ко-
пированием файлов под управлением Windows for Workgroups
3.11, используя File Manager от Central Point. Мне нравится этот
заменитель стандартной программы File Manager, потому что он
изящно оперирует с ZIP-архивами как с каталогами, позволяя мне
увернуться от ужасно расточительной проблемы с размерами кла-
стеров в FAT (см. главу 2, где эта проблема обсуждается более
подробно).

Я хотел скопировать простой текстовый файл в новый файл с
именем CON.TXT в том же каталоге. Тогда я нажал F8, File Man-
ager открыл приглашение для ввода имени выходного файла, я
ввел строку CON.TXT и ударил по клавише Enter. Вместо того,
чтобы скопировать один файл в другой, как я того ожидал, Win-
dows скопировала исходный файл прямо на экран моего
монитора - в текстовом виде, прямо поверх всей картинки Win-
dows. Это не было ни DOS-окном, ни чем-либо подобным. По-
смотрите на рисунок 1.1, чтобы увидеть пример аналогичного ка-
зуса в Windows 95 (такое вытворяет в Windows 95 программа НО-
LYCOW.EXE, которую вы найдете в Web-библиотеке).

Ответ, конечно же, в том, что CON.TXT (или просто CON,
или CON.что-угодно) является в DOS названием устройства, и
любая попытка открыть файл с таким именем и записать что-либо
в него приводит к открытию консольного устройства, а не диско-
вого файла. Вопрос о том, почему Windows/DOS недостаточно
умна для понимания разницы между CON.TXT и CON, имеет чис-
то академическое значение. Главное в этом случае (и во многих
других примерах из этой книги) заключается в следующем: не
важно, правильно или неправильно, умно или глупо, но это проис-
ходит именно так, и как раз нам, программистам, придется это
расхлебывать и искать пути в обход таких ловушек.

Как только я увидел проблему в действии, я обнаружил, что
наши надежные друзья - стандартные диалоги - достаточно
умны и проверяют введенные имена файлов на предмет совпаде-
ния с именами устройств. Разумеется, это лишь частичная защит;!,
поскольку не все приглашения для ввода имени записываемого
файла осуществляются через стандартные диалоги. Например, тот
же File Manager от Central Point запрашивает у пользователя имя
выходного файла при помощи своего собственного диалога, затем
(как видно из поведения этой программы) делает типичную
проверку на существование файла с таким именем, и, если все вы-
глядит нормально, совершает копирование.

В качестве другого теста, я связался с CompuServe при помо-
щи Proсomm Plus for Windows 2.0 и выбрал файл для перекачки
на свою машину. Затем я указал, что хочу скачать этот невинный
файл себе под именем CON.ZIP. Вместо того, чтобы разукрасить
мой экран всяческим бинарным мусором, как я того ожидал, Pro-
eomm и Windows зависли намертво, и мне пришлось выключить и
включить питание компьютера, чтобы вернуть машину в работо-
способное состояние.

Не довольствуясь стопором на CON.TXT, следующим я
провел аналогичный эксперимент с PRN.TXT, в результате ко-
торого появился системно-модальный диалог, сообщивший:

System Error
Cannot write to the device PRN.
Make cure the network is working. If it is a local drive,
check the disk and the device driver.1

Попытка записать в COM1.TXT привела к еще более понятно-
му разъяснению: я получил другой системно-модальный диалог, с
тем же самым текстом, что и выше (с точностью до замены PRN на
СОМ1), но на этот раз система намертво повисла, и мне опять
потребовалось перезагружать компьютер. Запись в NUL.TXT, по-
видимому, отправила текстовые строки куда-то к черту на кулички.

Если вы желаете увидеть всю эту пиротехнику в действии, за-
пустите программу HOLYCOW.EXE (она находится в каталоге
HOLYCOW по адресу http://www.symbol.ru/russian/library/
prof_prog/source/chap01) под Windows 95 или Windows 3.1. Эта
программа использует CON.TXT в качестве имени файла. Но
перед тем, как делать что-либо с этой программой, пожалуйста,
примите необходимые меры: для защиты ваших данных и других
программ. Нет смысла рисковать без необходимости.

Мой друг Фил Юргенсон говорит, что в его Windows 3.1 HO-
LYCOW.EXE всего лишь поменяла цвет мышиного курсора. Если
и вы увидите что-либо отличное от текста на экране, пожалуйста,
дайте мне знать об этом.

Непосредственный, основной урок, вытекающий из этой ис-
тории, состоит, конечно же, в том, что нужно быть осторожнее с
именами файлов, которые вы используете. CON и некоторые из его
«приятелей» должны отслеживаться либо при помощи стандартных
диалогов, либо в вашем собственном коде. (Кстати, это применимо
только к Windows 3.1 и Windows 95. Запустите HOLYCOW.EXE
под управлением Windows NT 3.51, и ваш экран не будет раз-
украшен текстом. Правда, в этой операционной системе есть другой
занятный глюк: попросите File Manager из Windows NT 3.51 поис-
кать на вашем диске С: файл с именем «con.txt», и вам ответят, что
в каждом каталоге найден искомый файл с именем «con>>.)

В более широком смысле, мораль сей истории такова, что вы
никогда не можете быть уверены, что охватили все платформы в
вашей публичной Windows-программе. Сюрпризы будут возни-
кать всегда, а вам придется лишь обеспечивать достаточную гиб-
кость реакции на них и ваших программ.

Рис. 1.1. Использование CON в качестве имени файла.