Интерфейс: новые направления в проектировании компьютерных систем
Шрифт:
Хорошо разработанные компьютеры и информационные устройства снабжаются аккордными клавиатурами (chord keyboards), чтобы в программном обеспечении можно было предусматривать распознавание одновременного нажатия нескольких клавиш. Старые и более примитивные компьютеры имели клавиатуры, в которых только некоторые специальные клавиши (например, «Shift») можно было одновременно нажимать вместе с другими клавишами. Аккордные клавиатуры позволяют решить ряд сложных интерфейсных проблем. Например, рассмотрим наложение символов. Требуется логически ясный метод создания двух символов в одном месте. Например, для того чтобы сделать знак доллара с помощью наложения буквы s и вертикальной черты (|), должна быть предусмотрена возможность одновременного нажатия клавиш:
sV |V |^ s^
Это не мешало бы совмещенному нажатию на клавиши, которое обычно происходит при большой скорости набора и при котором клавиша, нажатая первой,
tV t^ hV h^ eV e^
а вот так (приведем один из множества возможных вариантов):
tV hV eV t^ h^ e^
Современные клавиатуры и их программное обеспечение допускают использование таких совмещенных нажатий клавиш, что называется циклическим буфером (rollover). Большинство клавиатур имеют n-клавишный циклический буфер. Это означает, что система сможет различить n-е количество одновременно нажатых клавиш. С учетом человеческой анатомии коэффициент n вряд ли должен превышать 10, хотя с технической точки зрения вообще нет надобности его ограничивать, если компьютер оснащен аккордной клавиатурой.
С учетом общепринятого метода создания наложений с помощью нажатия на одну клавишу во время того, как удерживается другая, знаки ударения и диакритические символы могут также рассматриваться как налагаемые символы и вводиться аналогичным образом. Например, в компьютере Macintosh букву e, как в слове Dupre, можно набрать с помощью сложной последовательности клавиш:
OptionV eV^^ eV e^
Обратите внимание на то, что здесь используется модальный метод типа «глагол-существительное», что является нарушением собственных принципов компании Apple. Кроме того, этот метод работает непоследовательно. Если вы используете нижеприведенную последовательность, то будет получена кавычка, за которой стоит буква t, а не буква t со знаком ударения, как можно было бы ожидать: [50]
50
Если вы используете OptionV eV^^ tV t^ для того, чтобы напечатать t с ударением, вы опять будете неправы.
OptionV tV^^ tV t^
Если же наложение выполнять с помощью квазирежима, ввод знаков акцента и других диакритических символов упрощается и делается более последовательным:
eV 'V ^ e^
Вы нажимаете на букву е и, удерживая ее, нажимаете на символ ударения. То же самое сочетание можно получить и в обратном порядке:
'V eV e^ ^
Логически нет никакой разницы, в каком порядке вы выполняете эту операцию.
Кроме того, наложение символов полезно для написания математических и других специальных символов, а также в языках программирования (например, APL). Может возникнуть вопрос: почему вместо наложения символов нельзя просто включить нужные символы в шрифтовые наборы, ведь наши дисплеи являются полностью растровыми? Действительно, так можно поступить, однако не все захотят тратить время на разработку новых символов и их установку в каждый шрифтовой набор, в котором мы хотим их использовать. С другой стороны, вряд ли в современном компьютере нельзя получить те же возможности, которые были легко доступны с помощью обычных механических печатных машинок.
Наложение не должно ограничиваться только двумя символами. Любые символы могут налагаться друг на друга, как, например, в следующей последовательности:
ShiftV sV Shift^ |V /V /^ |^ s^
Такая последовательность даст в результате знак доллара, перечеркнутый косой чертой. Функция наложения символов должна ограничиваться скорее только лишь эстетическими соображениями и доступностью для чтения, чем аппаратными или программными соображениями.
Если используются n-клавишный циклический буфер и описанные выше методы наложения, то для обратной связи во время набора интерфейс может временно отображать пару налагаемых друг на друга символов в виде смежных символов. Смысл этого заключается в том, что интерфейс не может отличить одновременное нажатие клавиш при быстром наборе от одновременного нажатия с целью наложения символов друг на друга до тех пор, пока клавиши. не отпущены, после чего слияние накладываемых символов происходит автоматически. Также хочу добавить, что требуется радикальная реформа клавиатуры, связанная с удалением клавиши «CapsLock». Эта клавиша порождает режим.
6.5. Письмо от одного пользователя
Когда я работал над проектом для большой компании, один опытный пользователь программного обеспечения, производимого этой компанией, написал письмо, которое иллюстрирует некоторые идеи этой книги. Приводимые ниже высказывания в кавычках взяты из этого письма.
• «Этот программный пакет показался
• «Пользователь должен нажимать клавишу «Enter» или щелкать кнопкой мыши намного чаще, чем это требуется для ввода полезной информации». При вводе данных в поле нет необходимости в том, чтобы пользователь нажимал клавишу «Enter» или «Return» или вообще что-либо делал еще. Когда пользователь переходит к следующему полю или окну или использует меню или кнопку, система должна автоматически принять введенные данные.
Использование клавиши «Tab» вместо клавиш со стрелками для перемещения по полям также создавало проблемы. Два поля на экране допускали свободное форматирование текста. В этих полях пользователь мог применять клавишу «Tab» для создания отступов или списков, и поэтому клавиша «Tab» не давала возможности перейти на следующее поле. Тяжело было смотреть на пользователя, который много раз и безуспешно нажимал на клавишу «Tab», чтобы попытаться перейти на следующее поле. [51]
51
Возможно, клавиша «Следующее поле» (Next Field) была бы полезным дополнением к современным клавиатурам.
Эти примеры иллюстрируют две распространенные проблемы в интерфейсах. Первая связана с использованием клавиши «Return» для разделения полей. Эта привычка уходит далеко в то время, когда несколько десятков лет назад в прикладных системах, работающих в режиме разделения времени, а также в приложениях для микрокомпьютеров использовались ограничения, принятые для телетайпных машин. Вторая проблема связана с функциональной перегрузкой клавиш «Return» и «Tab», в результате которой в полях, допускающих свободный ввод текста, они означают одно, а в более коротких полях – другое.
• «Когда выбирается опция поиска, курсор должен появляться в соответствующем текстовом окне так, чтобы пользователь мог начать вводить информацию без необходимости щелкать мышью внутри поля или нажимать на кнопку Tab». Это частный случай следующего общего принципа: если пользователь в следующий момент может выполнить только одно действие, пусть это действие выполнит компьютер.
• «Ненужные диалоговые окна, наверное, являются главной причиной бесполезной траты времени и вызывают раздражение у пользователя». Речь идет о тех диалоговых окнах, которые предназначены для сообщения пользователю о том, что произошло, и для своего закрытия требующие нажатия кнопки мыши или клавиши «Enter». Другого выбора не остается – продолжить можно, только лишь кликнув по окну. Это другой частный случай приведенного выше принципа (если пользователь далее может выполнить только одно-единственное действие, пусть его выполнит компьютер). Как пишет автор в другом месте своего письма: «Важно, чтобы всякий раз, когда пользователь должен взаимодействовать с каким-то диалоговым окном, это взаимодействие давало полезный результат». Это можно обобщить до следующего утверждения: каждый раз, когда пользователь должен вступить во взаимодействие с компьютером, это взаимодействие должно предполагать получение полезного результата. Перемещение к следующему шагу в работе само по себе не является полезным результатом.
Далее автор письма продолжает сетовать, что одно из диалоговых окон просто «сообщает пользователю, что элемент уже введен в список» в том случае, когда название или номер существующего предмета вводится в окно для новых элементов. Чтобы продолжить, вам требуется убрать это диалоговое окно. Вместо этого автор предложил, чтобы появлялись три кнопки: оставить элемент, удалить элемент из списка или перейти к его редактированию. Хотя вариант автора является лучшим, чем изначальный, мы все же можем предложить еще более лучшую схему. Описанная проблема отчасти связана с идеей, что ввод нового элемента отличается от редактирования или удаления элементов. Предложим более простой метод: пользователь вызывает форму и вводит дескриптор элемента. Если он является новым, элемент вводится, и пользователь продолжает работу, как предполагалось. Если элемент уже имеется в списке, данные о нем сразу же вызываются, чтобы пользователь мог увидеть, что элемент уже существует. После этого пользователь может редактировать их. Естественно, удаление – это один из способов редактирования.