Сесть за клавиатуру меня вынудил опыт работы с одной прикладной программой. Сама программа является довольно продвинутым инструментом оптического дизайна - из семейства OSLO, если кому-нибудь это о чем-то говорит. Так вот, эта программа хороша, имеет очень широкие возможности для разработки оптических систем. Но есть и серьезная проблема, можно сказать, туча, постоянно затмевающая безоблачный небосвод свободного изыскательства. Эта грозная туча - пользовательский интерфейс.
Ни в коей мере не становясь в позу критика и не осуждая разработчиков, хочу сказать, что их детище натолкнуло на серьезные размышления об основополагающих принципах интерфейсостроения. "Как дальше жить, и где ж нам парковаться?" ((c) В. Вишневский)
Заморское слово "интерфейс" обозначает совокупность средств обмена (информацией). Человек и машина существенно отличаются по возможным средствам ввода и вывода информации. У человека это зрение, слух, вкус, обоняние, осязание. У машины - любое устройство, способное преобразовать некие, условно говоря, "сообщения" (нажатие клавиши, движение мыши) в электрический сигнал. Для эффективной работы этих систем необходимо их эффективно сопрячь.
Так как зрение является основным каналом получения человеком информации о внешнем мире, то неудивительно, что для передачи данных в направлении "машина -> человек" изначально был избран именно визуальный канал (да и рисовать изображения оказалось неизмеримо легче, чем генерировать звуковые сигналы похожей информативности).
Ну а в другом направлении - "человек -> машина" - символическая языковая информация вводилась с помощью рук человека, как общепризнанного средства воздействия на окружающий мир.
Эволюция интерфейсов электронной вычислительной техники шла от перфокарт и перфолент как средств ввода информации и устройств печати для вывода. Тут удобством интерфейса даже и не пахло.
Позже появились дисплейные терминалы - клавиатура и алфавитно-цифровой дисплей с пользовательским интерфейсом командной строки. Работа немного ускорилась и упростилась. Но все ждали лучшего...
Наконец, третье поколение - с увеличением вычислительной мощности и возможностей графического отображения информации появились уже прекрасно знакомые нам графические интерфейсы пользователя, так называемые WIMP (Windows-Icons-Menus-Pointing - "Окна - Иконки - Меню - Указатели"). За счет простоты в обращении и скорости (не нужно было набирать в командной строке длинные наборы команд, достаточно подвести указатель к нужному месту и кликнуть) интерфейс завоевал огромнейшую популярность и сослужил неоценимую службу для продвижения вычислительной техники "в массы". Следующее поколение - пост-WIMP интерфейсы (см., например, статью Эндрю ван Дэма "Пользовательские интерфейсы нового поколения" на сайте www.osp.ru). Нельзя не согласиться с автором, что идеалом общения человек-машина был бы обмен информацией на мысленном уровне. Типа такого: "А посчитай-ка ты мне, дружок, та-а-а-а-а-кой небольшой интегральчик..." И в голове сразу: "Шеф, Вы неправильно задали пределы интегрирования! Программа вычисления интегралов выполнила недопустимую операцию и будет закрыта. Перезагрузите, пожалуйста, всю систему. Ваш головной мозг, в первую очередь":) А пока этого нет, немного моих мыслей о том, каким можно было бы сделать уже имеющийся в наличии дисплейно-клавиатурно-мышиный интерфейс, как модифицировать саму философию общения человека и машины.
Какие проблемы есть в наличии у нашего WIMP'а? На собственном опыте пришлось многократно убедиться (это же утверждают многие), что основными недостатками WIMP-интерфейсов именно для профессиональных приложений являются, во-первых, резкое возрастание сложности освоения интерфейса, из-за чего большинство юзеров, особенно начинающих, используют только малую часть возможностей программы, боясь заблудиться в ее дебрях; во-вторых, из-за наличия возможностей, до которых непросто добраться, пользователь вынужден проводить большую часть времени, манипулируя с интерфейсом - тыкаясь в закладки, выбирая подпункты из многочисленных меню разного уровня, отвечая на те или иные запросы и сообщения программы, а не решая свои задачи. Одним из следствий этого является появление узких специалистов по настройке и программированию приложений - как связующего звена между программой и пользователем (типичный пример - пакет "1C: Бухгалтерия"). Все это лишь усложняет получение конечного результата - решение задачи. Встроенные макроязыки большинства прикладных пакетов, которые создаются с целью упростить пользование и охватить все их возможности, не спасают положения. Они сродни языкам программирования высокого уровня и оторваны от естественного человеческого языка, поэтому очень часто лишь усложняют освоение системы (в программе OSLO тоже есть макроязык - упрощенный клон Си, но никак не могу заставить себя его освоить:)).
На мой взгляд, все эти недостатки во многом являются следствием самой философии WIMP-интерфейса, а не только непрофессионального программирования.
Рядовой пользователь хочет простых и понятных вещей: чтобы программа не заслоняла себя от него, не отгораживалась лабиринтами настроек всякий раз, когда ему нужно сделать что-либо простое, а с другой стороны, чтобы он мог легко адаптировать ее и для решения сложных задач, причем желательно без изучения томов инструкций и руководств по программированию.
На сегодняшний день решение видится мне в сочетании возможностей WIMP-интерфейса и диалога с программой посредством легко расширяемого символического языка, сродни интерпретируемым языкам программирования и скриптовым языкам, что позволит пользователю относительно легко настроить программу под свои нужды.
Знакомы ли Вы, уважаемый читатель, с концепцией языка программирования Форт? Если нет (к сожалению, сегодня он не на слуху), то кратко расскажу. Он создан американцем Чарльзом Муром еще в 1970 году специально для программирования работы с внешним оборудованием. Заложенная в него идея - максимальная расширяемость и гибкость. В языке есть базовый словарь, состоящий из нескольких десятков слов - базовых процедур, программист самостоятельно конструирует новые слова-процедуры, правила работы с ними и вносит их в словарь. После этого можно уже работать с новыми словами по новым правилам. Рассказывать об этом замечательном языке можно очень долго - отсылаю всех заинтересованных в интернет. Там все и найдете.
Так вот, преимущество языка Форт в том, что человек, решая свою конкретную задачу, "убивает сразу трех зайцев": во-первых, получает программу, решающую его задачу, а во-вторых, параллельно сам конструирует специальный язык, подходящий для решения такого класса задач. И потом, чтобы решить подобную задачу, остается воспользоваться уже готовым языком. Просто и со вкусом!
Более того, знания пользователя в данной области и умение работать с программой растут синхронно росту возможностей программы - ведь он сам программирует ее, они учатся вместе! Время, потраченное на создание своего языка, окупится с лихвой. Акцент здесь именно на легкости освоения Форт-подобного языка, по сравнению с объектно-ориентированными языками, популярными сегодня. Вместо толстых руководств - брошюрка справочника базовых команд и книжка по теме, например, "Бухгалтерский учет" или "Алгоритмы обработки изображений"...
Еще одно преимущество такого рода языкового интерфейса в том, что с его помощью проще и даже красивее реализовывать общение профессионального пользователя с машиной тогда, когда появятся средства звуковой коммуникации между ними, а это уже не за горами.
Пока здесь больше вопросов, чем ответов. Например, как соединить Форт-концепцию с графическим интерфейсом, ведь это фактически язык командной строки...
Надеюсь, что мои размышления послужат легким пинком к действию программистам-профессионалам:-). Уж больно хочется хорошего интерфейса!
Александр КУПРЕЕВ,
HonorHim@mail.ru