Более или менее традиционным методом реагирования в данном случае является подача звукового сигнала и, возможно, мелькание экрана или панели меню для того, чтобы показать, что вы делаете что-то неправильно; после чего иногда может появиться диалоговое окно с сообщением, что совершается недопустимое действие. Однако такая реакция не подобает для человекоориентированного интерфейса, поскольку выдаваемое сообщение необходимо закрывать, и любые введенные символы теряются, что приводит к нарушению нашего аналога Первого закона робототехники Азимова, суть которого сводится к тому, что все содержание пользователя является священным.
   Также неприемлемо, чтобы система изменяла выбранную вами точку ввода на какую-то другую внутри документа или за его пределами. Вы уже решили, что хотите видеть, и машина не должна изменять это решение. Ряд вариантов позволяет не нарушить когнитивные принципы разработки человекоориентированных интерфейсов. Например, экран может разделяться, и в одной его части может отображаться заблокированный текст с курсором, а в другой части может появляться вводимый вами текст, скажем, сразу после заблокированного текста. Другим решением может быть выдача поверх текста полупрозрачного слоя с сообщением о том, что вы пытаетесь изменить текст, который является заблокированным; причем вводимый вами текст может появляться в этом же слое в уже выделенном виде так, чтобы вы могли при желании сразу же перенести его в любое другое место. Как только вы перенесете этот текст, полупрозрачный слой автоматически исчезает.
____________
   В большинстве систем передача электронной почты осуществляется с помощью особого приложения. В обсуждаемой здесь системе процесс отправки электронного сообщения состоит из выбора текста, выбора адреса и выполнения команды Send (Отправить). Так как выполнение почти всякой операции начинается с определения выборки и заканчивается назначением какой-то команды, стандартная последовательность действий становится привычной, и поэтому операция по отправке электронного сообщения кажется состоящей из одного шага, а не из трех разных шагов.
   Каталог адресов электронной почты в данном случае содержит просто список электронных адресов или любой список, включающий имена и соответствующие адреса. Такой каталог является обычным текстом, а не специальным механизмом. Допустим, что вы хотите отправить электронное сообщение своему дяде Герману. Вы вводите текст и выделяете его. Затем с помощью клавиши «LEAP» переходите к пункту Герман Джэксонили к другому имени, под которым ваш дядя фигурирует в списке, и выделяете его электронный адрес. И, наконец, вы вводите или выбираете из меню команду Send и выполняете ее, как было описано выше, с помощью клавиши «Command». Вместо одного имени, конечно, вы можете выбрать целый список имен для осуществления рассылки.
   Другой способ заключается в том, чтобы специальная команда отправки электронных сообщений использовала первую строку выделенного текста как адрес, вторую строку – как тему сообщения, а остальную часть выборки – как тело сообщения. Какая-нибудь другая команда может использоваться для прикрепления выборки к электронному сообщению. Безусловно, разные разработчики будут предлагать несколько разных методов отправки электронных сообщений, из которых разумный пользователь приобретет только один.
   Что касается получения электронной почты, здесь можно предложить несколько необычный метод, который, однако, на практике работает лучше, чем это может показаться сначала. В тот момент, когда приходит электронное сообщение, перед текущей позицией курсора сразу же вставляются два символа документа, между которыми размещается поступающее содержание получаемого сообщения. Естественно, во время приема сообщения вы можете не прерывать свою работу. Никакое специальное окно или сообщение «Вам пришла почта» не требуется. Вы можете игнорировать полученное электронное сообщение или прочитать его в процессе получения. В любой момент, как во время получения электронного сообщения, так и после этого, вы можете выделить его и переместить куда-нибудь. Опытный пользователь, скорее всего, предусмотрит для этого специальное место, обозначив его надписью вроде «E-mail-хранилище» или «Здесь e-mail» или как-нибудь иначе, чтобы сюда можно было быстро перейти с помощью клавиши «LEAP» и в свободное время прочитать полученные сообщения (которые могут сохраняться в этой области автоматически, так же как и оказываться в фокусе по их получении). Ценность этого метода состоит в том, что электронная почта вместе с присоединенной к ней информацией поступает автоматически и видимым образом и становится частью вашего текста, – о том же, как переместить текст в любое место, вы уже знаете. Загрузка присоединенных файлов происходит в фоновом режиме, поэтому работа пользователя не прерывается, а сама информация, во избежание вирусного заражения, может быть помещена в неисполняемую карантинную область. Разработчики также могут предусмотреть команду для сбора всей недавно полученной почты и помещения ее в какую-то область в пользовательской среде.
   Шифрование осуществляется через выделение какого-то текста и применение к этой выборке команды шифрования. Зашифрованный текст может быть оставлен на том же месте, переслан по электронной почте или использован другим образом. Расшифровка производится аналогичным способом.
   Любые возможности, поставляемые современными приложениями, также соответствуют этой ментальной модели. Рассмотрим электронные таблицы. Если выборка синтаксически построена как алгебраическое выражение, то при использовании команды Calc это выражение сохраняется, и на его месте отображается результат вычисления. Другая команда позволяет выполнить обратный процесс и показать сохраненное выражение, которое при необходимости можно отредактировать и вычислить снова. Полностью функциональную электронную таблицу можно получить в случаях, если: в выражениях допускается использовать переменные, величинам можно давать имена, синтаксис допускает использование относительных ссылок, ряды данных можно подписывать и выражения можно организовывать в таблицы. Однако это несколько больше, чем просто электронные таблицы, поскольку ссылки на использованные в них значения могут быть вставлены в любом месте внутри текста, и любое значение в тексте можно под определенным именем включить в электронную таблицу. Таким образом, даже без помощи специальных механизмов результаты, помещенные в электронную таблицу из какого-то отчета, могут быть также использованы во введении к этому отчету, а значения, указанные в тексте отчета, могут быть использованы в электронной таблице. В результате между текстом, почтой, электронными таблицами или любым другим типом содержания в этом смысле нет резкого разделения.

6.4.1. Вырезать и вставить

   В обычных интерфейсах также имеется и другая проблема, связанная с методом «вырезать и вставить» (cut-and-paste). При использовании этой функции многие пользователи сталкивались с ситуацией, когда какая-то часть работы пропадала после случайного повторения операции вырезания до того, как первый вырезанный отрывок был вставлен. Когда текст удален, он не должен исчезать в небытии, и особенно он не должен перемещаться в невидимый буфер вырезания. Одно из решений может заключаться в том, чтобы помещать вырезанный текст в конце какого-то документа, в котором собираются удаленные элементы. Такой документ может быть самым обычным текстовым документом. (Желательно также, чтобы имелась специальная команда для более радикального удаления.) Важным здесь является то, что с удаляемым текстом не происходит ничего мистического, и для обнаружения документа, содержащего удаленный текст, не требуется использовать какие-то специальные команды или методы. Для этой цели такой документ может начинаться с обычного текста, например: «Этот документ содержит удаленный текст». Пользователь может ввести любую фразу в качестве целевого объекта поиска в этом документе, и, конечно, любая фраза из удаленного текста также может быть использована для выполнения поиска, как будто она и не является удаленной.
   •  Любой человекоориентированный метод удаления не отличается в работе от других команд;
   •  ничего не подвергает риску при удалении или перемещении текста;
   •  не использует особый буфер или другое скрытое место «системного уровня», в которое текст перемещается;
   •  удаляет отдельные символы таким же образом, как и отрывки, состоящие из множества символов;
   •  допускает отмену или повторение действия.

6.4.2. Сообщения пользователю

   Всегда поступайте правильно. У некоторых людей это будет вызывать одобрение, у остальных – удивление.
Марк Твен

   Когда вы пытаетесь написать текст сообщения об ошибке, пожалуйста, остановитесь и переделайте интерфейс таким образом, чтобы условие, при котором это сообщение об ошибке вызывается, не возникало. Другими словами, сообщение об ошибке сигнализирует именно об ошибке, но о той, которая имеется обычно в структуре системы или интерфейса, а не совершается со стороны пользователя. В некоторых случаях работа по устранению сообщений об ошибках, которую мы выполняли с моими коллегами, приводила нас к осознанию, что основополагающие проектные решения были неверными и поэтому требуется внести в проект соответствующие поправки. В этом, и только лишь в этом отношении, сообщения об ошибках могут быть весьма полезными. Например, при разработке одного пакета для выполнения арифметических вычислений, на первый взгляд, казалось, что не существует способа избежать выдачи сообщения об ошибке в тех случаях, когда пользователь пытается выполнить деление на 0. Однако более удачным методом является выдача значения, названного «неопределимо». [48]В арифметическом стандарте No.754 Института инженеров по электронике и электротехнике (IEEE (Institute for Electrical and Electronic Engineers)) для этой цели используется выражение NaN, что означает «не является числом» (not a number). Следует отметить, что арифметические операции, применяемые к неопределимым значениям, являются вполне определимыми (например, неопределимо + 3 = неопределимо), а полученные в таких вычислениях результаты являются более полезными и информативными, чем просто остановка вычислений. Использование значения неопределимо также позволяет решить проблему, возникающую в тех случаях, когда команда Calculate применяется к объекту, который синтаксически не является арифметическим выражением. В этом случае информация о том, что что-то произошло неправильно, становится локусом внимания пользователя, т. е. искомым результатом. Еще более информативным методом была бы замена значения неопределимо на деление на 0или другие сообщения в зависимости от конкретного случая. Арифметически они все будут вести себя так же, как значение неопределимо.
   Другим примером, когда желание устранить сообщение об ошибке повлияло на выбор аппаратного обеспечения, является проект по созданию системы Macintosh. Этот же пример иллюстрирует решение типа «ставка на все состояние», которое часто избирается при создании нового продукта. В тот момент мы пытались подобрать для Macintosh запоминающее устройство. Жесткие диски были тогда слишком дорогими. Накопители на гибких дисках 5,25 дюйма были наиболее широко распространенными, однако ряд других технологий начинал уже вытеснять их. Группа разработчиков системы Macintosh решила использовать накопители 3,5 дюйма, что впоследствии оказалось правильным решением, т. к. остальной мир персональных компьютеров поступил так же. Если бы компания IBM, например, приняла другое решение, пользователям, возможно, было бы труднее достать дискеты для «Мака» (Мас – сокр. от Macintosh).
   Тем не менее, наш выбор в пользу накопителя компании Sony был предопределен с точки зрения человекоориентированности интерфейса. В большинстве марок дисководов, которые мы рассмотрели, извлечение дискеты производилось с помощью нажатия на кнопку на корпусе дисковода. К сожалению, в этих дисководах ничего не было предусмотрено для предотвращения преждевременного извлечения дискеты до выполнения сохранения текущей работы. Поэтому требовалось использовать специальное сообщение, которое предупреждало бы пользователя о том, что он совершил ошибку: «Вы извлекли дискету, с которой был считан текущий документ. Для сохранения вашей работы на дискете, пожалуйста, вставьте ее снова в дисковод». Естественно, если пользователь уже отошел от компьютера, унеся дискету с собой, то это создаст трудности для следующего пользователя. Позже я узнал, что существует дисковод без кнопки «Извлечь». Процесс извлечения в этом дисководе выполнялся только по команде компьютера. Теперь, если вы хотели извлечь дискету, то подавали об этом сигнал компьютеру, а компьютер проверял, можно ли выполнить эту команду. Если команда на извлечение диска может привести к потере данных или другим проблемам, система исправляла ситуацию, прежде чем выполнить команду. Итак, мы решили использовать дисководы с самоизвлечением, и в то время, когда царствовали накопители на гибких магнитных дисках, такое решение было одним из многих факторов, сделавших компьютер Macintosh более простым в использовании, чем его конкуренты.
   Если выдается сообщение, которое не требует ответа от пользователя, оно может быть устранено. Если по каким-то причинам сообщение непременно должно быть выдано, оно может быть отображено как прозрачный слой, как об этом говорилось в разделе 5.2.3. Если сообщения будут выдаваться в виде прозрачных слоев, лежащее под ними изображение на экране останется видимым, и работа с ним может быть продолжена, как если бы сообщения и не было вовсе. Другими словами, для удаления сообщения с экрана не требуется выполнять никаких специальных действий. Вы можете просто продолжить свою работу, глядя на экран сквозь выданное сообщение. Само же сообщение исчезает при первом выполненном действии (перемещение курсора в данном случае не является действием). В отличие от стандартного диалогового окна, для удаления сообщения с экрана пользователю не требуется выполнять дополнительных действий. Сообщение никогда полностью не заслоняет информацию на экране, что является общей проблемой современных интерфейсов.
   Иногда утверждается, что в отдельных случаях пользователь все же должен ответить на выданное сообщение (например, из юридических соображений). Однако, по моему мнению, в суде это может быть подвергнуто сомнению, ибо пользователи закрывают окна с такого рода сообщениями по привычке (автоматично), и поэтому закрытие окна сообщения не может означать, что пользователь прочитал или хотя бы заметил выданное сообщение (см. раздел 2.3.2).
Сообщения: учебный пример
   Одним из интересных решений, полученных в результате устранения набора сообщений об ошибках, является набор методов, разработанных доктором Джеймсом Уинтером (James Winter) для сохранения и загрузки информации из внешней памяти в компьютере Canon Cat. Пользователям графических интерфейсов знакомы сообщения, которые в большом количестве выдаются в процессе сохранения или загрузки информации. Например, пользователю может быть дано предупреждение о том, что он пытается закрыть не сохраненный файл. Изначально я предложил, чтобы имелось две команды для сохранения и открытия данных, каждая из которых подается с помощью специальной клавиши. Как я уже говорил, файловая структура в системе не предусмотрена. [49]
   Доктор Уинтер показал, что требуется только одна команда и что такой интерфейс будет более безопасным. Моей первой мыслью было, что такая система не будет работать – это обычная реакция на все хорошие и радикальные идеи. «В конце концов, – думал я, – что может быть проще, чем предложенные мной две команды?» Однако метод доктора Уинтера работал именно так, как он говорил. Метод был использован в промышленно выпускаемой модели и оказался вполне успешным и популярным. В частности, были устранены многие ошибки, которые совершаются при сохранении и загрузке информации и зачастую приводят к потере данных.
   Для реализации идеи доктора Уинтера должны быть определенные предпосылки. В частности, в компьютере Canon Cat уже не использовалось понятие файлов в привычном смысле этого слова. Вся информация сохранялась в пользовательской рабочей среде. Съемные запоминающие устройства (в то время это были устройства на гибких дисках) содержали то же количество информации, что и память, поэтому вся рабочая среда могла быть сохранена как в памяти, так и на гибком диске. В то время возникла ментальная модель, в соответствии с которой можно было попеременно использовать разные рабочие среды. Эта идея многим пользователям казалась очень удобной. После переключения на другую рабочую среду компьютер фиксировал все внесенные в нее изменения, и каждый диск имел свой уникальный серийный номер, полученный из суммирования имеющихся на нем данных.
   Идея Уинтера заключалась в следующем. Использовалась только одна команда под названием DISK. При ее выполнении производился анализ ситуации, и автоматически совершалось необходимое действие. Для того чтобы показать, как работает эта система, Уинтер составил простую таблицу, в которой отразил, какие действия будут выполнены системой при различный условиях применения команды DISK. Далее приводится центральная часть этой таблицы.
 
 
   Если вы загрузили в память компьютера рабочую среду с диска и не изменили ее, состояние памяти остается «не измененным». Если этот диск находится в машине, и вы нажали на клавишу «DISK», больше ничего делать не нужно – содержание памяти автоматически сравнивается с содержанием диска. Если же диск был извлечен и заменен на другой («измененное» состояние диска), система стирала память и производила загрузку с нового диска, т. к. системе известно, что копия текущей рабочей среды имеется на дискете и поэтому не будет потеряна. В третьем случае дискета может быть чистой (пустой, не использованной), что означает, вероятно, желание пользователя сделать копию рабочей среды, что системой и выполняется. Форматировать дискеты пользователю не требуется, поскольку эта операция выполняется автоматически при необходимости. Если система совершает ошибку в каком-либо из этих случаев, данным не причиняется ущерба.
   Не трудно разобраться и с остальной частью таблицы. Выражение «выдача предупреждения» означает извещение пользователя о том, что рабочая среда и содержание дискеты были изменены, и любое последующее действие может привести к потере данных, и что для сохранения изменений система рекомендует пользователю вернуться к начальному диску или нее сохранить рабочую среду на чистом диске. После выполнения одного из этих двух действий нажатие на клавишу «DISK» позволит загрузить новую рабочую среду. Также был предусмотрен способ принудительной загрузки. Кроме того, система автоматически выполняла команду «DISK», если рабочая среда была изменена, но не использовалась в течение нескольких минут, что увеличивало уровень безопасности в системе.
   Вначале Уинтер предложил даже более простой метод, основанный на использовании накопителя, способного определять, вставлен ли в него диск, и извлекать его по программной команде. К сожалению, эти устройства были произведены компанией Sony, и мы не смогли убедить компанию Canon, которая конкурировала с Sony, использовать их, что является одним из примеров того, как пользователей вынуждают страдать из-за корпоративной гордости. Если бы был использован накопитель компании Sony, нам тогда вообще не понадобились бы команды управления дисководом. Действия системы определялись бы только с помощью кнопки «Извлечь» на самом дисководе и по состоянию используемого диска в соответствии с вышеприведенной таблицей. В компании Apple, которая не производила дисководов для гибких дисков, мы смогли бы использовать дисковод компании Sony, но в тот момент, когда я составлял технические требования для проекта Macintosh, я еще не знал о ценной идее доктора Уинтера.
   При тестировании в учебных классах учителя часто давали хорошие отзывы о команде DISK. Кроме того, что она почти не требовала времени на изучение и что при ее использовании не тратилось время на форматирование дискет, эта команда также позволяла избежать одной из самых частых ситуаций, в которых происходила потеря данных: если один студент уходил, забыв сохранить свои данные, а другой студент вставлял свою дискету и нажимал на клавишу «DISK», на экран выдавалось предупреждение. Второму студенту в этом случае приходилось либо бежать на поиски первого, либо сохранять данные на пустом диске, поскольку до тех пор, пока это сохранение не выполнено, второй студент не сможет загрузить данные со своей дискеты!
   Команда DISK, разработанная Уинтером, довольно проста в использовании. Все инструкции сокращаются до следующей: если вы хотите выполнить какое-либо действие с участием дисковода, нажмите на клавишу «DISK». Также эта команда позволяла автоматически сохранять информацию. Концепция, формулируемая как «один диск – одна рабочая среда», также позволила существенно упростить пользовательскую ментальную модель. Компьютер Canon Cat стал неким «окном», с помощью которого можно было как бы заглянуть в дискету и увидеть ее содержание.
   Было высказано предположение, что команда DISK создает модальность. Такая ситуация может возникнуть, только если воспринимать команду DISK как комбинацию команд Загрузить и Сохранить, представленную одной клавишей. Однако если вы не знаете ничего об этих командах, используемых в обычных системах, вы можете воспринимать клавишу «DISK» как команду типа «делай то, что нужно сделать с помощью дисковода». В этом случае, как показало тестирование, модальных ошибок не происходит.
   Если в вашем компьютере все еще используются дисководы для гибких дисков, то вы, наверное, знаете, что перед использованием дискет их необходимо сначала отформатировать либо приобрести предварительно отформатированные дискеты. В компьютере Canon Cat форматирование дискеты производилось перед сохранением на ней данных таким образом, что, казалось, это не занимает времени, и пользователь мог даже не думать об этом процессе. Так как пользователь не получает никакой пользы от возможности контролировать процесс форматирования, он может даже и не знать о его существовании. Это является еще одним примером, иллюстрирующим следующий принцип: не предоставляйте пользователю тех средств управления, которые должны работать всегда или никогда.

6.4.3. Упрощение входа в систему

   При входе в большинство систем пользователи выполняют больше работы, чем это необходимо. Сначала требуется сообщить, кто вы, для чего вы указываете свой «идентификатор», «онлайновое имя» или «системное имя», и затем вводите свой пароль. Как предполагается, с помощью имени вы сообщаете системе о том, кто вы, а пароль позволяет предотвратить несанкционированный доступ к вашей учетной записи.
   На самом деле вы дважды сообщаете системе о том, кто вы. По логике вещей все, что от вас должно требоваться в этом случае, – набрать пароль. И это не снизит безопасность вашей системы. Вероятность угадывания чьего-либо имени и пароля зависит от выбора пароля, его длины и т. д. Тогда как определить чье-либо онлайновое имя можно довольно просто. На самом деле оно обычно не скрывается, чтобы через него можно было взаимодействовать с его владельцем. Плохо подобранный пароль (например, использование в качестве пароля клички вашей собаки) является самой частой причиной недостаточной безопасности.
   Утверждение, что ввод двух разных цепочек символов увеличивает надежность, ошибочно. Если онлайновое имя состоит из j символов, а пароль – из k символов, то пользователь для входа в систему должен ввести j+k символов, и только k символов из этой суммы являются неизвестными для потенциального нарушителя вашей безопасности. Если пароль был выбран случайным образом (что является самым лучшим методом) из набора в q символов, вероятность угадать учетную запись пользователя с первой попытки равна 1/q‘k.
   Удлинение пароля даже на один символ и отказ от использования имени уменьшают вероятность угадывания пароля на величину q и избавляют пользователя от необходимости вводить лишние j-1 символов, к тому же в двух полях (вместо одного). Убрав поле для имени и увеличив минимальную длину пароля на один символ, мы получаем большую степень безопасности, используем меньше экранного пространства и достигаем большей простоты использования. Мы не теряем ничего. Для некоторых программ имеет смысл использовать менее банальные методы обеспечения безопасности (как, например, использование «отпечатков голоса» (voiceprinting) или пальцев, или других неизменяемых физических характеристик пользователя), хотя в этом случае вы не сможете сказать своему доверенному лицу, как войти под вашей учетной записью.
   Здесь возникает следующий вопрос: как обеспечить уникальность символьных паролей? Как избежать случаев, когда два или более пользователей выберут одинаковый пароль? Можно предоставить системе самой назначать пароли. Однако это приведет к тому, что генерируемые системой пароли будут плохо запоминаемыми (как, например,