Чтобы обеспечить взаимодействие пользователя с операционной системой и с прикладными программами необходим интерфейс: система передачи команд пользователя операционной системе и ответов системы обратно пользователю. Такое взаимодействие представляет собой «диалог» пользователя с компьютером на специальном языке, будь то язык, использующий знаки, похожие на слова и высказывания естественного языка, или язык изображений. На сегодня известны две принципиальные возможности организации интерфейса: графический интерфейс и командная строка.
Командная строка — приглашение оболочки, обозначающее готовность системы принимать команду пользователя, — в наиболее явной форме демонстрирует идею диалога. На каждую введенную команду пользователь получает ответ от системы: либо очередное приглашение, обозначающее, что команда выполнена и можно вводить следующую, либо сообщение об ошибке, представляющее собой высказывание системы о произошедших в ней событиях, адресованное пользователю. При работе в операционной среде с графическим интерфейсом происходящий диалог пользователя с системой не столь очевиден, хотя с точки зрения системы клик мышью в определенной области на экране аналогичен команде, введенной с клавиатуры, а ответ системы пользователю может быть представлен в виде диалогового окна.
Существует широко распространенное заблуждение, согласно которому графический интерфейс якобы представляет собой высшую и последнюю стадию развития пользовательских интерфейсов, а командная строка — это нечто примитивное и малополезное, если не устаревшее.
На самом деле, эта «иерархия» отражает не что иное, как порядок, в котором с двумя основными принципами организации интерфейсов познакомились пользователи персональных компьютеров. Вплоть до начала девяностых ПК были простыми и маломощными, поддержка графики и возможность комфортной работы с оконными графическими системами появилась на них недавно (даже в масштабе стремительно развивающейся информационно-технологической отрасли).
Однако за годы до этого графические интерфейсы уже широко применялись на рабочих станциях — конечно, более дорогом, редком и специализированном оборудовании. Если быть точными, то обе концепции в их более или менее современном виде сформировались примерно в одно время.
В 1967–68 гг. Дуг Энгельбарт представил прототип т. н. WIMP-интерфейса, т. е. интерфейса, использующего понятия окон (windows), пиктограмм (icons), меню (menus) и указателей (pointers), являющихся ключевыми и для сегодняшних графических пользовательских программ и сред.
В 1968–69 гг. Кен Томсон и Деннис Ричи представили первый выпуск ОС Юникс, по сути, явившейся прототипом системы современных понятий практической информатики, таких, как процессы и файлы. В Юникс содержался непротиворечивый, логичный и лаконичный язык работы с процессами и файлами, реализованный в пользовательском интерфейсе командной строки, который спустя полтора десятка лет стал стандартным пользовательским интерфейсом ОС.
За прошедшие тридцать лет в этих двух подходах к организации интерфейса мало что изменилось. Косметических улучшений за время существования парадигмы WIMP была придумана масса, а вот более или менее серьезных, при внимательном анализе, обнаруживается только два: интеграция звука и превращение графической (визуальной) среды в сенсуальную и начало эксплуатации концепции гиперссылок, в терминах которых можно переформулировать почти весь интерфейс.
Фредерик Брукс еще в 1995 г., обсуждая основные процессы, произошедшие в программной отрасли за 20 предшествовавших лет, назвал в числе «наиболее впечатляющих явлений» «триумф интерфейса WIMP»[8]. Всем, интересующимся темой, крайне рекомендуется прочитать эти четыре страницы, а заодно — и всю книгу.
Прошло еще пять лет, и мы можем отметить, что «триумф WIMP» на сегодня выглядит не то чтобы менее бесспорным, а менее однозначным, все более походя на пресловутое «триумфальное шествие советской власти» по обессиленным Первой мировой войной частям Российской империи и ее окрестностей. Во многих прикладных областях попытки внедрения WIMP стали скорее частью проблемы пользовательского интерфейса, чем частью ее решения.
«Сплошной» же WIMP-среды и вовсе нет нигде, кроме встроенных/специализированных систем: в любом окружении, претендующем даже не на универсальность, а просто на широкую сферу применения, элементы WIMP сочетаются с элементами другой интерфейсной модели — командной строки. Иногда это сочетание более органично (как в OFM, AppleScript и т. п.), а чаще эклектично, противоречиво и с фатальным для производительности исходом: фрагменты «рваной» командной строки встраиваются в диалоговые окна, разнообразные Мастера (Wizards) и окна установки предпочтений.
Если перечитать текст доклада, в котором идеи WIMP впервые были представлены широкой публике[9], станет понятна причина неудачи, постигшей попытки совмещения WIMP-интерфейса с командной строкой. WIMP предлагалась как средство манипулирования конкретными объектами («взять это и положить туда», «изменить такое-то свойство такого-то объекта»). Такой подход плохо совместим с основной задачей интерфейса командной строки, которая наиболее последовательно была разработана для ОС Юникс как средство формулирования абстрактных положений и команд («все ли файлы, лежащие в каталоге X, имеют формат Y?», «удалить все файлы, созданные до 01.01.2000 в которых упоминается Борис Ельцин» и т. п.).
При этом для большинства пользователей знакомство с командной строкой до недавнего времени отягощалось радикальным сокращением и изменением, которым язык стандартной оболочки ОС был подвергнут при разработке упрощенных ОС для ПК (таких, как CP/M, MS-DOS (PC-DOS) и клонов последней). Ограничиваясь знакомством со средствами MS-DOS и ее командных файлов, о возможностях командной строки можно составить лишь весьма превратное и убогое представление.
«Гладкая поверхность» графических интерфейсов сегодня для очень многих пользователей скрывает диалог с операционной средой. Для пользователя «Компьютер» реагирует на нажатую кнопку с картинкой или со словом как будто бы чисто механически, и можно считать, что это такая хитрая машинка: пылесос после нажатия кнопки сосет, а компьютер — печатает, и нет никакого человечка, который с изнанки интерфейса посмотрел, куда же ты нажал, и определил, что сделать с картинкой. На самом деле призрак маленьких человечков есть — за кулисами разрисованной поверхности идет обмен сообщениями. Разработчики же графических интерфейсов стремятся скрыть их от пользователя.
Компьютеры (и новое поколение «умных» приборов, машин и механизмов, включая промышленные, канцелярские и бытовые) отличаются от всего, созданного человеком ранее, способностью непосредственно манипулировать символами, воспринимать символы и сообщать символы человеку, т. е. в некотором роде вести с ним диалог.
Стоит ли называть это свойство компьютеров и программ искусственным интеллектом — отдельный вопрос, но сам факт, по нашему мнению, должен занять одно из основных мест в содержании учебного предмета информатики. В этом смысле, наблюдаемая тенденция к вытеснению программного инструментария, являющего это свойство компьютеров в самой методически и дидактически откровенной форме, из школьных курсов кажется нам крайне неприятной и нуждающейся в коррекции.
Мы с энтузиазмом относимся к применению графических интерфейсов, как в традиционной сфере компьютерной графики, так и в новых, перспективных приложениях. Картинка часто стоит сотни слов, а энергичный жест способен выразить простую мысль быстро и однозначно.
Однако мысль о том, что пиктограммами и жестами можно заменить полноценный язык, напоминает нам лишь одну из гениальных идей академии наук в Лагадо, описанной Джонатаном Свифтом в «Третьем путешествии Гулливера»:
А так как слова суть только названия вещей, то автор проекта высказывает предложение, что для нас будет гораздо удобнее носить при себе вещи, необходимые для выражения наших мыслей и желаний.
График нагляден, лишь пока цифры на нем можно разглядеть, а пиктограммы осмысленны только при выборе из немногих вариантов (даже сотню дорожных знаков выучить уже непросто). Для артикулированного и гибкого выражения идей (далеко не все из которых можно нарисовать) человечество выработало такой инструмент, как языки (естественные и формальные). Не нужно забывать, что диалог с операционной средой компьютера происходит на одном из формальных языков.