Интерфейс: новые направления в проектировании компьютерных систем.

5.1. Унификация и элементарные действия.

Сущности не должны множиться без необходимости. Уильям Оккамский.

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

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

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

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

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

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

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

Для создания человекоориентированного интерфейса для компьютеров или компьютерных систем (таких, например, как Palm Pilot) важным шагом является обеспечение одинаковых правил для всех случаев, в которых вводится или редактируется текст. Например, в Macintosh или Windows вы не можете при вводе имени файла сделать его орфографическую проверку, поэтому, если вы не уверены в правильности написания слова рандеву (randezvous), которое вы хотите использовать в качестве имени файла,[27] то вам придется вводить его наугад или открыть текстовый процессор и набрать в нем (или скопировать) это слово, чтобы проверить правильность написания. Могу предположить, что если бы я подал разработчикам программного обеспечения идею о том, чтобы пользователь мог проверять орфографию файловых имен, то они, весьма вероятно, и добавили бы такую возможность, но такое особое добавление, – которое, вероятно, было бы решено в виде какого-нибудь нового элемента в одном из системных меню (скорее всего, меню Правка), – только бы увеличило и без того абсурдную сложность программного обеспечения. Наилучшим решением здесь было бы упрощение на основе уже описанной идеи, заключающейся в том, что одна команда орфографической проверки должна применяться к любому тексту, независимо от того, какую роль он играет в данный момент.

Разработка интерфейсов должна быть основана на идее, что любые объекты, которые выглядят одинаково, одинаковы. Этот принцип может существенно упростить интерфейс с точки зрения как пользователя, так и разработчика и может быть применен не только в отношении текстов. Любой объект в этом случае становится состоятельным. Если пользователь не может по виду объекта на экране определить, что с ним можно и чего нельзя делать, это означает, что ваш интерфейс не удовлетворяет критерию видимости, который мы обсуждали в разделе 3.4. Тем самым вы ставите пользователя в положение, при котором ему необходимо догадываться о том, какие операции допустимы и к каким последствиям они могу привести. Техника создания интерфейсов, при которой пользователю в результате приходится догадываться о возможностях элементов программного обеспечения, является более подходящей для разработки игр, чем прикладных инструментов.

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

5.2. Каталог элементарных действий.

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

Сенсорные графические планшеты могут регистрировать угол наклона пера, что связывает с каждой указанной пользователем позицией еще два числовых значения. Эти значения редко используются за исключением тех случаев, когда пользователь занимается рисованием от руки. Музыкальные клавиатуры позволяют ввести в компьютер как скорость, так и силу, с которой клавиша нажимается. Кроме того, существуют такие устройства, как джойстики и устройства ввода трехмерных данных. Тем не менее, в большинстве случаев используется обычная клавиатура и стандартное, двухмерное ГУВ. В этом разделе будут рассмотрены, главным образом, стандартные устройства ввода и вывода данных. Во многих случаях будет понятно, каким образом излагаемые принципы могут быть распространены и на более необычные физические или даже ментальные интерфейсы. Полагаю, что ясная таксономия и перечень элементарный действий, а также выполняемых с их помощью операций, могут быть весьма полезными для обсуждения и разработки интерфейсов.

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

Указание. Пользователь может указать на то или иное содержание.

Выделение. Пользователь может выделить какое-то содержание.

Активизация. С помощью «клика» пользователь может активизировать содержание.

Модификация или использование (с помощью команд):

Генерация. Модификация из «пустого» в «непустое».

Удаление. Модификация из «непустого» в «пустое».

Перемещение. Вставка содержания в одно место и одновременное его удаление из другого.

Трансформация. Преобразование в другой тип данных.

Копирование. Содержание может быть отправлено или получено от внешнего устройства или скопировано в другую область внутри системы. Например, содержание можно распечатать, отправить по электронной почте, сохранить на жестком диске, копировать в другой документ и т. д.

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

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

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

Для начала нам следует определить несколько методов отбора и выделения содержания, к которому предполагается применить какую-то операцию. Эти методы будут рассмотрены в разделе 5.2.1.

5.2.1. Подсветка, указание и выделение.

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

Когда пользователь наводит курсор на какие-то объекты, они должны быть подсвечены. Типичным объектом в текстах является символ. Подсветка единичного объекта при перемещении курсора без каких-то других действий со стороны пользователя (как, например, нажатие на кнопку мыши) является указанием (indication). С помощью указания пользователь может в любой момент знать, на какие объекты он указывает с точки зрения системы. В очень многих современных системах пользователь должен догадываться о том, что будет выделено или активировано при нажатии на кнопку ГУВ. Если догадка неверна, пользователю придется сделать другую попытку, что приводит к потере времени и сил. Указание может быть особенно полезным, когда объекты, которые пользователь хочет выделить, имеют небольшие размеры или расположены близко друг к другу, или перекрывают друг друга, или их границы неясны. Указание необходимо в тех случаях, когда интерфейс разработан в соответствии с принципом видимости.

Подсвечивание, используемое для указания, не должно быть слишком контрастным или ярким, чтобы движение курсора не вызывало раздражение. В некоторых случаях полезно, чтобы указание объектов не происходило, если скорость перемещения курсора превышает определенное пороговое значение. Следует обратить внимание на то, что чем меньше объект (т. е. чем меньше визуальный угол указанного объекта), тем больший контраст должен использоваться для его указания – однако это вопрос эргономический.

Указание недостаточно используется в современных системах. Активное использование указания в разработке интерфейса позволяет существенно сократить количество щелчков мышью в сравнении с современными интерфейсами. По сути дела, указание часто может заменить клик мышью, и вместо двойного щелчка можно делать только один, как при выборе ссылки в броузере. Допустим, что пользователь хочет убрать неактивное окно с экрана. В каждом окне имеется кнопка Закрыть. Для этого как в операционной системе Windows, так в Macintosh пользователь должен сначала щелкнуть по окну, чтобы сделать его активным, и только потом нажать на кнопку Закрыть. Этот лишний щелчок, который делается для активизации того окна, которое пользователь, на самом деле, хочет закрыть, вызывает особое раздражение. Но если бы окно можно было активизировать всего лишь перемещением к нему курсора, то для закрытия окна одного нажатия на кнопку мыши было бы достаточно. Конечно, если вы разработаете систему, в которой активизация происходит только в определенных местах или при определенных условиях, то тем самым вы создадите модальное противоречие, которое будет только сбивать пользователей с толку. Активизация должна происходить системно. Поскольку такой подход становится более известным, спрос на него со стороны пользователей увеличит его распространение.

Выделение (selecting) – это процесс, с помощью которого пользователь указывает, что один или несколько объектов имеют особый статус, который может быть воспринят системой. Как результат процесса получается выборка (selection). Обычно пользователь делает выборку с целью применения к ней в ближайшем времени команды. В отличие от менее постоянного указания, выделение, обозначающее выборку, является более устойчивым и сохраняется, даже если пользователь отведет курсор в сторону. Пользователь может выделить объект, щелкнув по кнопке ГУВ, указывающего на него. Кроме того, пользователь может сделать выделение расположенных рядом объектов с помощью вырисовывания прямоугольника или другой фигуры, при этом все объекты, которые окажутся в области фигуры, будут выбраны. Другим удобным способом отбора является создание многоугольника или произвольной фигуры. В этом случае все объекты, оказавшиеся внутри фигуры, будут выбраны после того, как пользователь замкнет ее границу. После того как выбор сделан, предыдущая выборка должна стать старой выборкой (old selection). (В большинстве современных систем старая выборка просто-напросто отменяется (deselect).) Этот процесс может быть многократно повторен, поэтому пользователь может создать дополнительно к первой старой выборке вторую старую выборку, третью и т. д. – вплоть до n-й старой выборки. У математика здесь, скорее всего, возникнет желание назвать текущую выборку нулевой старой выборкой. Выделение, с помощью которого обозначается выборка, должно быть более заметным и отличаться от того, которое используется для указания. Выделенные старые выборки также должны хорошо отличаться друг от друга – возможно, с уменьшением визуального контраста для более старых выборок. Для легкого распознавания старых выборок они могут иметь буквенно-цифровые обозначения.

Выборка может включать как отдельный объект на экране, так и геометрическую область, или же быть составной из различных выборок. В большинстве современных интерфейсов пользователь делает составные выборки – в том числе и разрывные – из набора отдельных выборок, для чего необходимо сделать начальную выборку. Затем, как правило, пользователь может нажать клавишу «Shift» и, удерживая ее и находясь, таким образом, в квазирежиме, щелкнуть по другим объектам, чтобы присоединить их к общей выборке или отсоединить их от нее.

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

Первая проблема заключается в отсутствии видимости и может быть легко решена с помощью, например, экранной подсказки. Вторая проблема заключается в том, что при составлении выборки имеется большой риск совершения ошибки. Более удобный способ создания сложных выборок состоит в наличии специальной команды, с помощью которой текущая выборка определяется как объединение старого и текущего выделения. Такая команда позволила бы пользователю сосредоточиться на создании выборки, не заботясь о том, что было выбрано до этого. Только после подтверждения текущего выделения она может быть добавлена к составной выборке. Возможность обращения к старым выборкам и обозначения каждой из них особой подсветкой позволяет применять команды с множеством аргументов, как, например, использование двух аргументов для команды взаимозамены двух выборок. Сравните метод перестановки двух участков текста, который вы используете сейчас, с другим методом: создание двух выборок и затем применение команды перестановки.

В большинстве существующих сегодня систем команды Отменить (Undo) и Повторить (Redo) нельзя применить к процессу создания выборок. Это не совсем оправданно, поскольку ошибки при создании выборок случаются довольно часто. Необходимым элементом любого человекоориентированного интерфейса являются универсально применимые команды Отменить и Повторить. Число или уровни допустимой отмены выполненных команд должны ограничиваться только лишь объемом доступной памяти. Команды Отменить и Повторить должны быть всепроникающими и применяться к любой операции, которая логически может быть повторена или отменена. Также эти команды должны быть обратными друг другу (инверсивными) – опять же в той мере, насколько это логически возможно. Это означает, что выполнение команды Повторить после команды Отменить или выполнение команды Отменить после команды Повторить не должно приводить к изменениям в содержании. Очевидно, что эти команды не должны применяться к самим себе. Операторы Отменить и Повторить являются основополагающими, и их функция настолько важна, что в будущих системах для них должна быть предусмотрена специальная клавиша. Команда Повторить должна назначаться следующим образом: Shift↓Undo↓↑↑. На клавише должны быть ясно обозначены два слова: Отменить (Undo) и Повторить (Redo) (рис. 5.1). Такая клавиша могла бы с большей пользой заменить собой вызывающую много проблем клавишу «Caps Lock».

5.2.1. Подсветка, указание и выделение. 5.2. Каталог элементарных действий. 5. Унификация. Интерфейс: новые направления в проектировании компьютерных систем.

Рис. 5.1.Клавиша Отменить/Повторить (Undo/Redo)

Что касается третьей проблемы, то в разделе 3.2, посвященном переключателям, я уже говорил, что в челокекоориентированном интерфейсе переключатели вообще не должны использоваться. В данном случае простым решением проблемы могло бы быть использование одной команды или квазирежима для добавления объекта к выборке, а другой команды или квазирежима – для удаления объекта из выборки. При попытке добавить к выборке объект, который там уже имеется, или удалить из выборки объект, которого в ней нет, сама выборка останется неизменной.

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

Локус внимания всегда находится на каком-то физическом, ментальном или отображаемом объекте. То же самое можно сказать и о системном фокусе. Например, в существующих текстовых процессорах при перемещении курсора внутрь документа (действие, которое само по себе не должно быть необходимым) он может быть расположен между двумя буквами, и, таким образом, может показаться, что никакой объект не является фокусом системы. На самом деле в фокусе находятся две буквы – та, которая слева и может быть удалена командой Delete,[28] и та, которая справа и где появится следующая введенная буква.

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

5.2.2. Команды.

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

Некоторые команды (как, например, Отменить) не обязательно могут применяться к выборкам. Другие команды действуют только по отношению к текущей выборке – как, например, команда, которая удаляет текущую выборку. Некоторые из этих команд вводятся с клавиатуры. Однако число клавиш на клавиатуре меньше, чем количество возможных команд. Каждая дополнительная клавиша-модификатор (как, например, «Shift», «Alt», «Command», «Control» или «Option») позволяет удвоить число клавиатурных команд. Полная клавиатура, в которой любая комбинация клавиш может быть воспринята компьютером, допускает астрономическое число сочетаний клавиш. Например, программное обеспечение, в котором предусмотрено использование любых трехклавишных дваждыквазимодальных сочетаний на 110-клавишной клавиатуре, позволяет передать более одного миллиона команд с помощью только одного жеста. Однако широкое использование клавиш-модификаторов, особенно в сочетаниях клавиш, очень часто приводит к появлению чрезвычайно сложных комбинаций, в которых можно просто «сломать пальцы». Кроме того, комбинации редко бывают запоминаемыми или понятными. (Знаете ли вы, какое действие выполняет на вашем компьютере сочетание «Control»+«Shift»+«Option»+«\»?) Запомнить различные сочетания клавиш не просто. Такое запоминание является недопустимым требованием к памяти пользователя. Кроме того, такие команды нарушают критерий видимости, если только в системе каким-то образом не отображается то, какой результат будет получен при применении той или иной команды. Конечно, если в отдельных случаях какой-то из этих жестов не может быть выполнен или если жест имеет разные значения в разные моменты, это означает модальность системы по отношению к данному жесту, что приводит к проблемам, которые обсуждались в главе 3.

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

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

Command↓ v↓↑↑

которое используется для вставки, кроме того, что клавиша v расположена рядом с клавишей c, используемой в сочетании

Command↓ c↓ ↑↑

которое запоминается несколько лучше, поскольку с может напоминать слова «вырезать» (cut) или «скопировать» (copy).

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

Я хочу купить 3+4 рубашек

При нажатии на клавишу «Вычислить» он будет преобразован в следующий текст:

Я хочу купить 7 рубашек

До нажатия на клавишу «Вычислить» 3+4 было обычным текстом, Он ничем не отличался от остального текста, за исключением того, что он был выделен. Пять символов (включая пробелы), из которых состояла выборка, можно было переместить или удалить, или же к ним могла быть применена любая другая обычная команда текстового процессора. Но в данном случае была использована операция Вычислить. Пользователю не потребовалось открывать окно калькулятора или вызывать специальное приложение.

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

Перед обсуждением такого механизма рассмотрим требования, которым должен отвечать новый метод вызова команд:

• Этот механизм не должен быть модальным

• Он должен включать любое число команд (в частности, он не должен ограничиваться количеством клавиш на клавиатуре)

• Пользователь должен иметь возможность вызывать команду непосредственно с клавиатуры

• Пользователь должен иметь возможность вызывать команду с помощью графического устройства ввода

• Использование механизма не должно требовать изобилия специальных клавиш

• Механизм не должен порождать большого количества квазирежимов

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

Я хочу купить 3+4 рубашек вычислить

Выделим сумму 3+4, и затем выделим слово вычислить, при этом сумма станет старой выборкой.

В другом методе, который предоставляет пользователю всю мощь командной строки, при нажатии на клавишу «Command» вызывается выбранная команда. Если для выполнения команды требуется аргумент, то в его качестве используется старая выборка. В данном методе сама команда удаляется, а результат вычисления становится левой выборкой.

Я хочу купить 7 рубашек

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

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

Такой подход имеет ряд преимуществ. Например, онлайновые руководства автоматически содержат примеры использования команд, которые в нем описываются. В современных системах команды, имеющиеся в меню, могут как иметь, так и не иметь своего клавиатурного аналога. Однако при таком подходе каждая команда, описанная в меню последовательностью символов, имеет свой клавиатурный эквивалент. Это обеспечивается не благодаря стараниям разработчиков, а по самой природе такой системы. Как команда из меню, так и клавиатурный эквивалент имеют одинаковое написание. И большинство пользователей будут чаще использовать именно клавиатурный эквивалент. Другим преимуществом этого подхода является то, что вы можете составить меню только из тех команд, которые вы используете, просто набрав их в список с помощью текстового процессора. Конечно, если вы постоянно изменяете список, а не просто, скажем, добавляете к нему новые команды, то теряется преимущество их привычного расположения.

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

Если для команд не использовать особый шрифт или цвет, то придется предусматривать другие правила для обозначения того, что какое-то слово или последовательность слов следует рассматривать как единую команду. Разумнее было бы избежать использования каких-то из существующих сегодня условностей, которые используются для группировки отдельных слов в одну единицу, разделенную пробелами или другими символами. Например, если бы у нас была команда, которую мы бы хотели назвать «преобразовать изображение в формат JPEG», то по существующим правилам нам пришлось бы написать ее в виде преобразовать. изображение.в. формат. JРЕG, «преобразовать изображение в формат JPEG» или преобразовать_изображение_в_формат_JРЕG. Такие способы написания являются слишком «компьютерными», неудобными и унылыми, особенно для тех, кто только знакомится с компьютерами. Синтаксис, который мы выбираем для написания команд, не должен исключать пробелы или символы новой строки. Любые ограничения, накладываемые на набор допустимых символов, используемых для набора команд, в будущем приведут к проблемам. Более того, любые подобные ограничения пользователю придется учитывать при назначении команде имени. Следует также иметь в виду и другой принцип, заключающийся в том, что использование обычаев, которые не совпадают с традициями обычной речи, приводит к возникновению непонимания между пользователем и компьютером. Следует сделать так, чтобы машина подстраивалась под нас, а не подстраивать обычаи естественной речи под то, что проще решить с точки зрения программирования.

Еще одно взаимодействие ввода с клавиатуры и создания выборки вызывает проблемы в сегодняшних интерфейсах. В человекоориентированном интерфейсе ввод с клавиатуры не замещает выделенный текст и не отменяет выделение текущей выборки. Это отличается от распространенного правила, в соответствии с которым ввод символов замещает содержимое текущей выборки, что время от времени приводит к проблемам в тех случаях, когда новый материал неожиданным для пользователя образом удаляет текст, который он не собирался удалять. Идея, что при вводе символов они должны замещать выборку, стала использоваться для того, чтобы сэкономить на одном нажатии клавиши – в большинстве редакторов, чтобы заместить текстовый блок, вы можете просто выделить его и начать ввод. Без этого правила пользователю придется сначала выделить некоторый текст, затем нажать «Backspace» или «Delete» и потом вводить новый текст. В способе, который используется сегодня, экономится только лишь нажатие на клавишу «Backspace», при этом при первом нажатии текст исчезает и замещается текстом, который вводится далее. Это происходит независимо от того, находился ли замещаемый текст на экране или нет и (обычно) состоял ли он из нескольких символов или трех четвертей вашего документа. Таким образом, вне локуса вашего внимания вы можете удалить текст в 40 страниц. Если вы вовремя заметите это, то, наверное, сможете отменить действие. Но если же вы не заметите удаление, и если ничего не подскажет вам, что текст был удален, вам может не повезти. Человекоориентированный интерфейс никогда не подвергает работу пользователя риску. Экономия одного нажатия на клавишу куплена за слишком большую цену. Случайная потеря хотя бы одного символа может означать потерю части телефонного номера или адреса электронной почты, которая не может быть восстановлена из оставшейся части. Удаление текста должно проходить явным образом по желанию пользователя и не быть побочным эффектом другого действия.

Понятие локуса внимания позволяет точно определить, что мы определяем как побочный эффект. Побочный эффект – это следствие применения команды, при котором изменяется содержание или события, которые не находятся в локусе вашего внимания. В только что рассмотренном случае в локусе вашего внимания находится текст, который вставляется, а побочным эффектом является удаление. Устранение побочных эффектов должно быть одной из целей для разработчика человекоориентированпого интерфейса.

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

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

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

Функцию перетаскивания, которой может быть оснащен ГУВ, можно также использовать вместо прокручивания. Вы можете захватывать какую-то часть документа и с помощью этого устройства перемещать ее: верх или вниз – в узких документах, и во всех направлениях – в широких документах. Когда курсор перетаскивания (который в некоторых из сегодня существующих системах разумно отображается в виде руки) достигает границы экрана, прокручивание продолжается в выбранном направлении до тех пор, пока пользователь не отпустит устройство перетаскивания или не вернет курсор обратно внутрь окна. Метод прокручивания с помощью полос прокрутки может приводить к путанице. В частности, при нажатии на кнопку со стрелкой вниз содержимое экрана прокручивает вверх. Если же использовать стрелки, повернутые в другую сторону, это создаст только еще большую путаницу. Кроме того, кнопки со стрелками на полосе прокрутки имеют небольшие размеры и поэтому требуют больше времени при использовании, а, как хорошо показывает анализ по закону Фитса, возможность захватывать элементы в любой части документа является намного более быстрым способом.

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

5.2.3. Экранные состояния объектов.

Элементы человекоориентированного интерфейса должны быть доступными для начинающего пользователя и эффективными для опытного пользователя, причем переход от одного к другому не должен требовать переучивания. Хороший интерфейс должен давать одну ментальную модель, которая подходит для обоих классов пользователей, с учетом, конечно, того факта, что по отношению к одним частям системы мы можем быть опытными пользователями, а по отношению к другим – начинающими. В предыдущем разделе было предложено, чтобы клавиша, выполняющая некоторый текст как команду, могла быть применена к выделенному тексту независимо от его происхождения. В результате выполняется определенная команда, при условии, что выделенный текст является именем этой команды, – в противном же случае никакого действия следовать не должно. Хорошо, если бы для ввода команд можно было использовать квазирежим с помощью удерживания клавиши «Command». Однако это удобство в существенной мере зависело бы от эргономичности клавиши «Command». В целом, такая возможность улучшила бы использование систем с командной строкой, которые многим нравятся за скорость и удобство работы, но, в то же время, многими ненавидятся за трудность в изучении. Улучшения здесь два: вы можете подавать команды в любом месте и в любое время, а т. к. команды аналогичны представленным в меню, то можно легко переходить от меню к непосредственной подаче команд и обратно.

Ввод команд требует специального места, а также времени на то, чтобы его найти, поэтому удобнее, чтобы пользователь мог ввести команду в любом месте, где находится курсор, и в тот момент, когда это требуется. После выполнения команды введенное имя команды должно быть удалено с тем, чтобы имена команд не оказались разбросанными по всему содержанию. С другой стороны, если вы выполняете команду из списка, то удаление имени команды нежелательно, поскольку список, по сути дела, является меню. Создание такого меню не должно требовать ничего, кроме как напечатать список команд, выделить его и затем применить к нему команду (например, Создать Меню (Make Menu)), чтобы назначить командам особый стиль, который обычно используется для написания команд, а также чтобы заблокировать этот список во избежание его случайного изменения.

Приведем некоторые другие команды, изменяющие состояние текста. С помощью команды Заблокировать (Lock) можно просто запирать текст или другое содержание. Заблокированное содержание можно просматривать, выделять и копировать, но нельзя изменять или перемещать. Обратная команда – Разблокировать (Unlock) – может быть применена к выделенному содержанию для его разблокировки при условии, что оно было заблокировано (в противном случае команда не дает никакого результата, т. е. она не должна быть переключателем). С помощью другой команды – Заблокировать с паролем (Lock with Password) – можно заблокировать старую выборку, используя текущую выборку в качестве пароля. Эта команда также имеет обратный аналог (Разблокировать по паролю (Unlock with Password)). Возможность заблокировать какое-то содержание может быть довольно полезной. Например, она может использоваться для создания стандартных форм для заполнения. Неизменные элементы формы могут быть заблокированы, в том числе и по паролю, при этом простое блокирование позволит предотвратить случайные изменения, а блокирование по паролю – несанкционированные изменения. Если бы электронная инструкция по использованию некоторой компьютерной системы входила в набор текстов, с которыми компьютер изначально поставлялся, – что в общем является неплохой идеей, – то такое руководство, вероятно, блокировалось бы производителем по паролю еще на заводе.

Команды Экранная блокировка (Screen Lock) и Экранная разблокировка (Screen Unlock) позволяют заблокировать и разблокировать позиции объектов, выделенных на экране. С помощью этих команд пользователь может создавать меню, которые будут сохранять свое место на экране, в то время как другие объекты перемещаются под ними. Можно даже связывать позицию меню с днем недели (насколько такая возможность является полезной – это уже другой вопрос). Чтобы использовать эту команду, вы размещаете объект в требуемой позиции на экране, выделяете его и применяете команду Экранная блокировка. Также должна быть версия этой команды с использованием пароля для тех случаев, когда нежелательно, чтобы пользователь мог изменить позицию того или иного меню.

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

5.2.3. Экранные состояния объектов. 5.2. Каталог элементарных действий. 5. Унификация. Интерфейс: новые направления в проектировании компьютерных систем.

Рис. 5.2. Эффективность прозрачного сообщения об ошибке на фоне текста составляет 1

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

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