5.8. Команды и трансформаторы
5.8. Команды и трансформаторы
Хороший дизайн является более важным, чем вы думаете.
Рекс Хефтмэн
Когда сложность некоторого продукта или части программного обеспечения, или компьютерной системы превышает наши в ней потребности и создает трудности, это вполне оправданно вызывает в нас раздражение. Даже если нам требуется поработать с каким-то простым текстом, мы вынуждены разбираться в сотнях или, как в случае с Microsoft Office, даже тысячах команд и методов, которые нам не нужны. С другой стороны, если бы мы могли пользоваться этими командами по мере возникновения в них необходимости, это сняло бы ощущение избыточности и огромного когнитивного груза, даже если бы вся система стала от этого столь же сложной, каким являлось до этого само приложение.
Мечта о том, чтобы продукты были изначально действительно (а не внешне) просты и в то же время гибки, может быть достигнута на основе подхода, в котором система не должна быть сложнее, чем ваши потребности в данный момент, и при котором возможности системы можно наращивать постепенно. Чтобы понять, как это сделать, вспомним, что в разделе 5.1 было сказано о том, что почти все действия, выполняемые с помощью компьютера, включают содержание, которое вы вводите или получаете, и набор операций, которые вы применяете к этому содержанию. Также вспомним, что интерфейс для любой такой операции состоит из двух частей: выборе содержания и вызова операции. Например, в игре требуется убить монстра, или, выражаясь более прозаическим языком, выполнить операцию по изменению изображения монстра на изображение взрыва. Содержание выбирается с помощью курсора (курсор подводится к монстру), а операция вызывается с помощью клавиши на ГУВ. Между прочим, это довольно хороший интерфейс – быстрый и результативный.
Вызов команды для применения к выборке может дать три возможности:
• Операция может быть применена к выборке.
• Операцию бессмысленно применять к данной выборке.
• Операция может быть применена к данной выборке при условии, что эта выборка будет модифицирована.
В первом случае операция выполняется и содержание видоизменяется. Во втором случае содержание остается без изменения. В третьем случае для выполнения операции должен быть вызван другой процесс, с помощью которого выборка предварительно модифицируется.
Предположим, что вы выбираете часть фотографии, на которой изображен вид городской улицы, и пытаетесь применить к ней команду проверки орфографии. Вызов этой команды предполагает наличие некоторой последовательности символов (текста), но здесь обнаруживается фотография (растровое изображение). Одной из возможностей компьютера является возможность преобразовывать содержание из одного типа данных в другой.[39] В этом случае данные являются растровым изображением, а команда применима только к текстам, поэтому компьютер должен определить, имеется ли какой-нибудь трансформатор для преобразования растровых изображений в текст. Вообще такие трансформаторы существуют. Это так называемые программы для оптического распознавания символов (optical character recognition programs). Обычно программы для оптического распознавания знаков (OCR-программы) используются для конвертирования данных, полученных с помощью сканера, в текст, который можно редактировать. (Некоторые из цитат, которые приводятся в этой книге, были получены с помощью сканирования соответствующих статей и последующего использования OCR-программы для конвертирования полученного растрового изображения в текст.) Допустим, что в компьютере имеется такая программа. Тогда эта программа автоматически запускается и анализирует растровое изображение. Если программа обнаруживает какие-то распознаваемые символы (например, знак остановки и частично читаемый знак с надписью «Первая северная уица»), то начинается проверка орфографии этих текстов, в результате которой выдается сообщение о том, что обнаружено неизвестное слово «уица», и предлагаются возможные варианты исправления: «улица», «утица», «ушица», «лица».
Программное обеспечение вместо того, чтобы состоять из операционной системы и набора приложений, рассматривается человекоориентированным интерфейсом как набор команд, некоторые из которых являются трансформаторами, автоматически вызываемыми в тех случаях, когда тип данных, предусмотренных командой, не соответствует типу данных выбранного объекта. При этом может быть вызвано более одного трансформатора. Предположим, что с помощью одного трансформатора производится конвертация из А в В, а с помощью другого – из B в С. Если команда предусматривает обработку данных типа С, а данные выборки представляют собой тип А, то перед выполнением команды должны быть запущены два трансформатора. Если необходимых трансформаторов не имеется, никаких изменений с выборкой не производится. Пользователю при необходимости выдается специальное сообщение, а выборка остается без изменений.
При таком подходе вместо прикладных программ разработчики будут поставлять наборы команд, представляющие собой совокупность взаимосвязанных операций. Например, вместо программы для обработки фотоизображений разработчик будет предлагать ряд отдельных команд, которые в совокупности будут давать те же возможности, что и программа. Пользователь сможет устанавливать столько команд, сколько ему необходимо, вместо того, чтобы устанавливать целое приложение, из которого ему может понадобиться только некоторая часть. С помощью Интернета передовой разработчик сможет продавать свое программное обеспечение отдельными командами и даже предусмотреть скидки на покупку определенных наборов или определенного числа команд.
Когда пользователи сетуют на невероятную сложность приложений и просят, чтобы программы были проще, «без этих ненужных колокольчиков и свистков», разработчики отвечают, что облегченные («lite») версии программного обеспечения зачастую не имеют успеха на рынке. Неудачи с облегченными версиями программных пакетов могут быть объяснены следующим образом. Поскольку пользователь никогда не знает, какие именно возможности полного пакета могут ему понадобиться, он покупает весь пакет, т. к. это единственный способ получения этих возможностей. Если пользователь приобретет ограниченную версию по меньшей цене, единственный способ, каким он сможет обновить эту версию, – это купить полный пакет, даже если пользователь хочет получить только какую-то одну небольшую функцию из этой программы. Поэтому выходит, что лучше сразу покупать полную версию и примириться с ее сложностью. В результате не удивительно, что мы оказываемся как бы в ловушке. Более гуманным подходом было бы предоставление возможности покупать команды по отдельности.
В различных обзорах сообщается о большом количестве никогда не используемых элементов того или иного программного обеспечения. В последнее десятилетие это число возросло приблизительно с 15 % до почти 50 %. Это создает большой беспорядок. Если же вместо приложений использовать наборы команд, каждая из которых может быть установлена независимо от других, пользователи сведут показатели этой статистики почти до 0. Другими преимуществами такого подхода для разработчиков является возможность поступенчато улучшать свои продукты, а также более простым образом и чаще поставлять (т. е. продавать!) новые элементы приложений, поскольку в этом случае производителям не придется каждый раз выпускать весь пакет заново. Интернет является самым подходящим средством для осуществления таких многократных поштучных продаж.
Разработчики (необязательно те же, кто выпускает наборы прикладных команд) также могут производить трансформаторы. И они тоже могут продаваться поштучно. Если большинство пользователей регулярно использует большинство команд текстовой обработки, выпущенных разработчиком А, и разработчик В придумает какую-то полезную команду, которую разработчик А не поставляет, то разработчик В сможет продавать эту команду покупателям продукта, производимого разработчиком А. Однако разработчик В может использовать другую структуру данных. В этом случае он может предложить также и трансформатор для перевода из одной структуры данных в другую, и наоборот. Если продуктом, производимым разработчиком А, пользуется большое число потребителей, разработчик В может создать версию данной команды, работающую непосредственно со структурой данных, предусмотренной разработчиком А. Кроме того, третий разработчик (С) может специализироваться на разработке трансформаторов. Для пользователей может стать обычной практикой покупать трансформаторы именно у таких разработчиков, а для разработчиков команд – давать лицензии на соответствующие трансформаторы. Эта коммерческая структура частично уже существует сегодня, и различные компании (например, DataViz) специализируются на разработке трансформаторов.
Элементы такой компьютерной среды «команды плюс трансформаторы» также существуют, и их нетрудно будет собрать в единую рабочую систему. Для пользователей такие системы будут проще в использовании и более гибкими в сравнении с сегодняшними разработками, ограниченными применением приложений. Такое решение может уменьшить степень избыточности и сложности, снять проблему совместимости между приложениями и необходимость многократно решать одну и ту же проблему. Со временем операционная система может полностью исчезнуть из поля зрения пользователя. Если этого подхода будут придерживаться должным образом, то даже общепринятая версия операционной системы – рабочий стол – не сохранится в ее сегодняшнем виде.
Конечно, не все программы должны быть построены по описанному принципу. Игры, например, должны просто запускаться и работать самостоятельно. Запуск должен осуществляться обычным путем – с помощью выбора (мышью или другим способом) имени игры (возможно, из текста, включающего список имен игр) и затем использования команды Выполнить (Execute). В разделе 6.2 также будет описан альтернативный метод.
Учтивое программирование: приложения как гости
Представим, что вы были приглашены погостить в доме ваших хороших друзей Гримблсов. И даже их собака кажется вам очень милой. Единственная проблема – это портрет их любимой тетушки Астабьюлы, который висит над вашей кроватью. Этот портрет вызывает у вас и вашей жены нервную дрожь, и вы не можете даже спать в комнате, в которой на вас смотрит с портрета тетушка Астабьюла. Вы не решаетесь сказать обо всем этом Гримблсам. Как бы вы поступили в такой ситуации, будучи гостем в доме своих друзей?
• Сняли бы картину и сожгли ее.
• Спрятали бы ее в винном погребе, чтобы Гримблсы после месяца поисков обнаружили ее там.
• Поставили бы ее в шкаф, чтобы Гримблсы нашли ее немного раньше.
• Поставили бы картину в шкаф и потом, перед отъездом, вернули бы ее на свое место.
Любой учтивый гость знает, что вариант 4 является самым правильным. Принцип заключается в следующем: если ты делаешь по тем или иным причинам изменения в чьей-либо среде, позаботься о том, чтобы поставить все вещи на свои места до того, как вернется хозяин.
Современные компьютеры имеют множество параметров изменения рабочей среды, в том числе громкость динамиков, разрешение экрана и глубину изображения, вид меню, шрифт по умолчанию. В компьютере Macintosh имеются сотни настроек, а в IBM-совместимых компьютерах, работающих с операционной системой Windows и пакетом Microsoft Office, это число превышает тысячу. В чем же здесь параллель с визитом к Гримблсам? Если вы используете чью-либо машину и изменяете в ней какие-либо настройки, то перед уходом вы, как человек учтивый, должны вернуть все изменения обратно.
Многие программы для нормальной работы требуют определенного разрешения экрана, определенного числа бит на пиксел или какой-то другой настройки параметров. Если же параметры настроены в системе неправильно, поведение программы может варьироваться в диапазоне от благовоспитанного до грубоватого или даже варварского. Ниже приводятся реакции различных протестированных мной программ в случаях, когда параметры монитора не соответствовали требуемым:
1. Полный отказ системы, после которого приходилось вручную производить перезагрузку компьютера.
2. Полный отказ системы с выдачей непонятного числового сообщения, после чего приходится нажимать на кнопку Перезапуск, чтобы произвести перезагрузку компьютера.
3. Выдается сообщение об ошибке, в котором говорится о необходимости настроить параметры экрана. Когда вы нажимаете на кнопку OK, это приводит к полному отказу системы.
4. Выдается сообщение об ошибке, в котором говорится о необходимости настроить параметры экрана. После нажатия на кнопку OK вы можете открыть панель управления и выполнить необходимые настройки.
5. Выдается запрос о том, нужно ли выполнить изменение параметров экрана. Если вы нажимаете на кнопку OK, настройки автоматически изменяются. Если вы нажимаете на кнопку Отмена, запуск программы прекращается, а параметры экрана остаются без изменения.
6. Параметры экрана изменяются без всякого предупреждения, и программа запускается.
7. В специальном диалоговом окне выдается сообщение о том, что можно изменить настройки экрана. Если вы нажимаете на кнопку OK, настройки изменяются, и программа запускается. После завершения работы программы настройки автоматически возвращаются в начальное положение.
Читатель из будущего может подумать, что полный отказ системы – это уж слишком. Ни один из вышеприведенных вариантов нельзя назвать достойным вежливого гостя, хотя вариант 7 приближается к тому.
Наилучшим вариантом является сочетание, включающее запрос, упомянутый в пункте 5, и способ выхода из программы, описанный в пункте 7. В маловероятном случае того, что изменение настроек экрана может помешать прохождению другого, параллельного или фонового процесса, такой запрос позволит отказаться от запуска программы.
8. Параметры экрана изменяются без всякого предупреждения, и программа запускается. По завершении работы программы настройки устанавливаются в начальное положение.
Другими словами, при запуске программы она будет просто выполняться предусмотренным образом, не влияя на работу других программ. Это может служить определением благовоспитанной компьютерной системы. Но что произойдет, если две программы, требующие разных экранных настроек, одновременно будут выдавать какие-то изображения? Вероятно, это будет ситуация, когда лошадь будет отображаться с одной цветовой палитрой, а рыба с другим разрешением.
Вариант из пункта 7, который распространен и может показаться приемлемым, является неудачным, поскольку в нем выдается «диалоговое» окно, которое, по сути, не дает никакого диалога. Это просто злоупотребление, потому что на сообщенную информацию пользователь не может дать качественный ответ, что только приводит к пустой трате времени. (Метод прозрачных сообщений, описанный в разделе 5.2.3, позволяет решить эту проблему.)
Прикладные программы, по сути, являются бременем для пользователя, но раз уж нам приходится работать с ними, давайте сделаем так, чтобы они работали как следует (см. также Raskin, 1993). Обобщая сказанное, повторим, что программа, или в будущем команда, должна автоматически выполнять перенастройку параметров, если это необходимо для ее нормальной работы. После завершения работы программы (или прерывания пользователем) все параметры должны быть восстановлены в исходное положение. Если восстановление невозможно или может привести к нежелательным побочным последствиям, должно выдаваться специальное предупреждение, в котором сообщалось бы об этих последствиях и предлагалось бы пользователю решить: продолжить ли действие или нет.
В настоящее время мы не можем применять к одному экрану разные режимы разрешения одновременно. Но это уже проблема другого рода. Тем не менее, на мой взгляд, пользователи были бы довольны, если бы работа каждого интерфейса руководствовалась пунктом 8.
Данный текст является ознакомительным фрагментом.