Ликвидация приложений
С каждой новой версией ваша любимая программа выполняет данную задачу в два раза дольше.
Линкольн Спектор
Современная структура программного обеспечения, состоящая из операционной системы и выполняемых под ней приложений, изначально является модальной. Это означает, что для того, чтобы интерфейс был немодальным, требуется подход, при котором не используются приложения в их современном виде.
Поскольку жесты (например, те, с помощью которых вызываются команды) из одного приложения не могут быть доступными в другом приложении, вы должны знать о том, какое приложение в данный момент является активным. Но вы не можете знать это наверняка, когда в локусе вашего внимания находится задача, которую вы пытаетесь выполнить. Поэтому иногда вы будете применять жесты, которые либо не будут давать результата, либо будут давать неправильный результат. Отдельной, создаваемой прикладными программами, стоит проблема, что средства одного приложения являются недоступными, когда вы находитесь в другом приложении. Например, ситуация может быть такой: вы хотите выполнить некоторую задачу, которую могли бы выполнить в приложении A. Но вы находитесь в приложении B, в котором аналогичной команды нет. Специалист по вычислительной технике Дан Свайнхарт (Dan Swinehart) назвал такую ситуацию «дилеммой вытеснения» (dilemma of preemption) (Tesler, 1981, с.90).
Известны три подхода к решению дилеммы вытеснения. Наиболее распространенный метод заключается в том, чтобы каждое приложение снабдить всеми средствами, которые пользователю могут понадобиться. Этот метод обсуждался в разделе 5.1, где было указано, что в каждом персональном компьютере имеется множество различных текстовых редакторов. Большинство текстовых процессоров содержит в себе множество разных текстовых редакторов. Например, типичный текстовый процессор имеет более простой текстовый редактор для ввода шаблона в диалоговое окно поиска, чем тот, который используется для работы с основным текстом. При таком подходе приложения расширяются до колоссальных размеров, поскольку каждое их них должно решать огромное множество задач, которые имеют второстепенное значение с точки зрения его основной задачи.
Например, мой текстовый процессор имеет встроенную программу для рисования, с помощью которой я могу создавать простые рисунки, без необходимости выходить из редактора. В то же время, моя программа для рисования графики имеет встроенный текстовый редактор, с помощью которого я могу включать в рисунки форматированные блоки текста без необходимости выходить из программы рисования. Средства рисования в текстовом редакторе и средства редактирования текстов в программе для рисования хуже, чем программы, которые разработаны специально для соответствующих задач. В идеале все команды и возможности как программы для рисования, так и текстового редактора должны быть доступными для пользователя в любой момент.
Аналогичным образом в каждой программе имеются средства для сохранения и открытия именованных файлов. Однако эти средства работают по-разному и имеют разные возможности в разных программах. Это приводит к путанице, трудностям в использовании и создает огромный объем избыточного программного обеспечения, которое требует оплаты, усилий на изучение, ведения документации, а также адекватного размера оперативной памяти и места на диске. То же самое касается и множества других возможностей (например, печати), которые дублируются (или очень похожи) в разных программах.
Эти проблемы в некоторой степени были учтены производителями и разработчиками. Ряд компаний разработали программное обеспечение, которое позволяет включать в единый составной документ (compound document) части, созданные в разных приложениях. Когда вы щелкаете мышью по любой точке в таком документе, автоматически активизируется приложение, в котором эта часть составного документа была создана. Этот метод позволяет избежать открытия явным образом соответствующих приложений при работе с составным документом. Конечно, для создания такого документа пользователю все равно приходится вручную запускать приложения, создавать части составного документа и затем собирать их в единое целое (обычно с помощью операций вырезания и вставки или перетаскивания).
Хотя этот метод и создает некоторое, самое небольшое удобство, дилемма вытеснения с помощью него не решается, что можно видеть на разных примерах (OpenDoc компании Apple, NextWave компании HP, OLE компании Microsoft и их производные).
Когда вы работаете в одной из частей составного документа, у вас в распоряжении нет программных средств, которые используются для создания других частей. Более того, такой документ как бы не имеет границ, и его поведение неожиданным образом меняется в зависимости от места. Таблица и электронная таблица могут выглядеть одинаково, но одна действует по правилам текстового процессора, а другая — по правилам программы электронных таблиц. Это является злодейской модальностью, поскольку единственным признаком вашего местоположения является изменяющееся при щелчке меню, которое обычно расположено далеко от локуса внимания. Как мы уже знаем, это является неэффективным средством извещения пользователя о текущем состоянии системы. Хотя необходимо сказать, что абсолютного средства, конечно, здесь быть не может. Оригинальным методом устранения режимов, которые присущи приложениям, было использование оконной парадигмы. Алан Кэй (Alan Кау) из компании Xerox PARC предложил перекрывающиеся окна (overlapping windows) для того, чтобы частично устранить модальность приложений. Он также хотел убрать разделение между операционной системой и приложениями, но успеха добился, главным образом, в том, чтобы сделать функционирование операционной системы видимым в форме так называемого рабочего стола. На то время это было действительно продвижением вперед, но, как выразился Ларри Теслер (Larry Tesler) из компании PARC, «окна, в некотором смысле, — это режимы в овечьей шкуре» (Tesler, 1981, с. 94). Это означает, что окна, по сути, не устраняют модальность приложений, но позволяют сделать видимыми и доступными одновременно множество приложений. Идея, предложенная Кэем, и другие идеи, возникшие на основе использования окон, стали важным шагом вперед, результатом которого люди пользуются более десяти лет. Однако проблема режимов и дилемма вытеснения, порожденная существованием приложений, так и не были решены. С того времени овечья шкура поизносилась, и из нее все чаще стал выглядывать на нас волчий зуб.
В разделе 5. 8 будет рассмотрен один из способов того, как можно окончательно разделаться с этим волком. Калькулятор или компьютер? Не секрет, что многие из нас держат рядом со своим компьютером калькулятор. Почему же нам требуется это примитивное устройство, когда в нашем распоряжении имеется целый компьютер? Причина в том, что для выполнения простых арифметических действий на компьютере нам приходится предпринять настолько изощренные манипуляции, что они могли бы быть достойны представления в цирке. Представим, что вы сидите за компьютером и набираете какой-то текст в текстовом процессоре и вам необходимо узнать, сколько стоит одна упаковка Phumuxx, при том, что 375 упаковок стоят $248.93. На моем компьютере мне приходится открывать окно калькулятора. Для этого я переношу руку с клавиатуры на мышь, с помощью которой выполняю команду выбрать и перетащить (click-and-drag), чтобы открыть окно калькулятора. Затем я переношу руки обратно на клавиатуру и ввожу нужные цифры или же долго сначала вырезаю их из текста, а потом вставляю в поле калькулятора. Потом мне нужно нажать еще пару клавиш и, наконец, скопировать полученный результат из окна калькулятора в документ. Иногда дело осложняется тем, что окно калькулятора открывается прямо поверх того места, где находятся необходимые мне числа. В этом случае я должен также использовать мышь, чтобы переместить окно калькулятора в другое место и продолжить операцию. Проще достать карманный калькулятор и с помощью него сделать все намного быстрее. Более удачным решением было бы использование специальной кнопки Вычислить (Calculate) или сквозной команды меню, с помощью которой можно было бы вычислить выделенное арифметическое выражение (такое, например, как 248.93/375) в любой среде, будь это текстовый процессор, программа коммуникации или рисования, презентационное приложение или просто рабочий стол. Другими словами, это пример универсальной функции, применимой в любом месте. С помощью эксперимента, в котором участвовал опытный оператор компьютера (и владелец калькулятора), я смог определить, что общее время, которое понадобилось оператору, чтобы во время использования текстового процессора достать калькулятор, включить его, выполнить простую операцию сложения и переместить руки обратно на клавиатуру компьютера для продолжения работы, составило около 7 с.
Затем я измерил время, которое понадобилось ему на использование встроенного калькулятора. При этом оператору было необходимо переместить курсор к меню в верхней части экрана, найти программу калькулятора, открыть ее, получить сумму и затем щелкнуть по окну текстового процессора, чтобы вернуться к своей работе. Это заняло около 16 с. Тому же оператору было предложено выполнить арифметическую операцию в середине документа при использовании компьютера Canon Cat со встроенной клавишей <Вычислить> и возможностью выполнять арифметические операции внутри документа. Время составило 6 с (цифры вводились с помощью верхнего ряда клавиш). Таким образом, в этом случае не было выгоды во времени от использования внешнего калькулятора. Кроме того, в компьютере Canon Cat после вычисления результат оставался в документе на случай, если пользователю требовалось вставить туда результат. В то же время, этот результат оставался выделенным, поэтому пользователь при необходимости мог легко его удалить нажатием на клавишу <Delete>. В системе должна быть доступной также и другая возможность: в любом месте, где пользователь может ввести цифры, он должен иметь возможность ввести арифметическое выражение и вычислить его. Такие команды, как
- проверить орфографию в текущей выборке;
- использовать текущую выборку как арифметическое выражение и вычислить его;
- передать текущую выборку по электронной почте;
- передать текущую выборку по факсу;
- перейти по данному URL;
- выполнить текущую выборку как программу, написанную на языке Java или любом другом языке,