Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> История Linux и движения за свободное ПО

О вреде дружественных интерфейсов

Автор: Виктор Вагнер, vitus@45.free.net
Опубликовано: 9.12.2002


© 2002, Издательский дом "КОМПЬЮТЕРРА" | http://www.computerra.ru/
Журнал "Домашний компьютер" | http://www.homepc.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу:  http://www.homepc.ru/offline/2002/78/22451/

Есть у меня шестерка слуг,
Проворных, удалых
И все, что вижу я вокруг, -
Все знаю я от них.
Редъярд Киплинг

Сейчас все привыкли к термину "дружественный интерфейс". Никто и не задумывается над тем, какой смысл кроется в этих словах. А если задуматься, то становится немного страшно - такое впечатление, что наши электронные творенья - программы, если и не захватили еще власть на Земле, то, во всяком случае, из-под нашей власти вырвались.

Ведь дружба - это отношение между равными. Другом может быть человек, может быть дружественная страна, но дружественный молоток или дружественная авторучка - звучит странно. Даже из всего животного мира на роль "друга человека" претендует только собака.

Конечно, программы отличаются от прочих инструментов тем, что они обладают чем-то вроде членораздельной речи. Во всяком случае, они иногда способны внятно объяснить, что происходит.

Но программы - наши создания. А что бывает, когда создание забывается и пытается встать на равную ногу с создателем, подробно описано в Книге Бытия.

Конечно, английский термин friendly, калькой с которого является наше "дружественный", имеет несколько другой оттенок. Его, скорее, следует переводить как "дружелюбный" или "обходительный". Но и эти эпитеты применимы к случайно встреченному на дороге путнику или продавцу в магазине, пытающемуся вам что-то впарить. То есть к кому-то, кто преследует свой собственный интерес.

С какого такого, спрашивается, перепугу программа, которую я лично установил на свой собственный винчестер и кормлю оплаченной за свои кровные электроэнергией, имеет право преследовать цели, отличные от моих?

Программы не более чем орудия. Вспомним, кого в старину называли говорящими орудиями? Правильно - рабов. Вот истинное место программы по отношению к человеку. Хороший интерфейс должен быть не дружественным, рабским. Никакого вам панибратства и похлопывания по плечу. "Чего изволите, хозяин?", "Будет исполнено, хозяин", - и больше никаких разговоров, если не случилось чего-то, действительно заслуживающего внимания.

За что мне нравятся стандартные открытые (юникс-подобные) системы 1, так это за то, что в их традиционных программах концепция рабского интерфейса проводится весьма последовательно. Одно из проявлений - многие команды не выводят никаких сообщений в случае успешного завершения операции. Приказание выполнено, о чем тут говорить. Вот если не получилось, надо объяснить причину.

Заметим, "дружественные" программы обычно "вопят" о проблемах на всю систему, выкидывая модальный диалог, который не дает вам сделать ничего, пока вы на него не отреагируете. Совершенно не так себя ведут командно-строчные утилиты - если вы работаете в оконной среде, сообщение будет лежать в том окне, где вы запустили программу, пока вы, хозяин, не соизволите обратить внимание на неудачливого раба.

Даже если вы работаете на последовательном терминале, где у вас нет не только многих окон, но и виртуальных консолей, ошибка для программы - обычно сигнал прекратить всякую деятельность и дать хозяину возможность разобраться в том, что происходит, освободив "поле боя".

Еще один недостаток "дружественного" интерфейса - восприятие разработчиками интерфейса пользователя как чего-то совершенно особенного. А между тем, еще тридцать лет назад был сформулирован принцип: "Если тебе лень читать вывод программы, заставь это делать другую программу". Олицетворение данного принципа - программы yes и grep, входящие в состав любой стандартной системы. Первая из них занимается тем, что генерирует бесконечное число ответов "да" на любые вопросы, задаваемые программой, в которую направлен вывод yes. Таким образом, пользователю очень легко избавиться от монотонного сидения за экраном и нажатия Enter на каждый вновь появившийся вопрос. Монотонная работа не для хозяина, ее нужно поручить рабам.

Программа grep (и ее варианты egrep и agrep) выполняет строго противоположную функцию - читает вывод какой-нибудь другой программы и выбирает из него интересные хозяину строки. Нечто вроде секретаря-референта. Причем секретаря довольно продвинутого - ей можно указать достаточно гибкие шаблоны для поиска, воспользовавшись так называемыми регулярными выражениями, и можно потребовать достаточно разнообразного представления результатов: только количество найденных выражений; только имена файлов; строки с найденными образцами; строки с парой-тройкой соседних.

Типичным способом решения задачи в открытых системах является разбиение ее на максимально простые подзадачи, каждую из которых умеет решать какая-нибудь известная вам программа, после чего эти программы принуждаются работать "на конвейере", передавая свой результат следующей в цепочке.

Формулировка способа решения задачи словами: "Прочитать почтовый ящик, выбрать из него все строки, начинающиеся со слова Subject:, отсортировать в алфавитном порядке, удалив дубликаты" превращается в команду cat mbox |grep ^Subject: |sort|uniq.

(Не знакомого с языком оболочки ОС такая строка может напугать, однако она - лишь формальный эквивалент приведенной формулировки. Команды cat, grep, sort и uniq - эквиваленты глаголов "прочитать", "искать", "сортировать" и "удалять дубликаты", соответственно, соединенные символом |, обозначающим в большинстве оболочек перенаправление вывода на ввод следующей команды (программы). Глаголы "прочитать" и "искать" требуют для определенности дополнения, так что соответствующим командам передаются параметры mbox (имя файла, который следует читать) и ^Subject: (строка, которую следует искать).

Фактически, так оно и есть. Набор команд, которыми вы оперируете, - это язык, с помощью которого вы даете команды машине. Для Киплинга, писателя, верными слугами были обычные слова английского языка. Для пользователя компьютера слугами являются команды операционной системы.

То, что в системе тысячи команд (мне на моем скромном ноутбуке в данный момент доступен 1411 исполняемый файл), не должно вас смущать. В русском языке сотни тысяч слов, а героиня Ильфа и Петрова Эллочка-Людоедка вполне обходилась в повседневной жизни тридцатью. Примерно так же распределяется и частота использования команд операционной системы.

Обратите внимание, что в мире "дружественных интерфейсов" более распространено понимание программы как вещи, которую можно сделать, продать, купить, использовать, а не как слова в языке общения человека с машиной. Такое понимание, без сомнения, выгодно производителям программного обеспечения. Ведь любая, даже самая топорная вещь имеет свою цену. А вот платить за слова мы согласны только, если эти слова достаточно талантливы. С другой стороны, мало кто будет самостоятельно изготовлять себе мебель или радиоприемник. Предпочтут купить. А сформулировать достаточно простую мысль словами способен любой грамотный человек.

Поэтому индустрии программного обеспечения выгодно превратить пользователей компьютеров в потребителей программ. А вот выгодно ли пользователю? Представьте себе охотничьего сокола, приученного брать кусочки мяса из рук человека. Он вполне способен догнать и убить зайца, но не знает, что этого зайца можно тут же немедленно съесть. Он отдает зайца человеку и довольствуется тем мясом, которым человек сочтет нужным с ним поделиться. Примерно в таком же положении находится большинство пользователей компьютеров - они способны сформулировать свою задачу (догнать зайца) и даже знают, как ее решить (убить зайца). Но вот "содрать с зайца шкуру и съесть" - превратить свою формулировку в набор приказов машине - они не могут. В результате львиная доля "зайчатины" достается производителям программного обеспечения.

А пользователь получает программы с "дружественным интерфейсом", обладающие немереным самомнением, и уйму тупой механической работы, затрачиваемой на оформление технической документации в текстовом процессоре общего назначения или выполнение расчетов на микрокалькуляторе, когда под рукой есть мощная электронная таблица.

Это происходит потому, что основная черта компьютерного "вещизма" - непонимание, что имеющиеся у тебя программы следует знать. Если возникла иная задача, покупают или выискивают в Сети новый инструмент. Метафора программ-слов способствует другому подходу - попытаться сформулировать задачу с помощью уже известных тебе (и твоей машине) слов. Благо, результат этой формулировки всегда можно обозвать одним новым словом.

Собственно, движение свободного программного обеспечения возникло как противовес данной тенденции. Когда появилась индустрия программного обеспечения, многие обратили внимание, что эта "индустрия" норовит лишить пользователей компьютеров власти над ними. А Ричард Столлмен не только обратил внимание, но и сформулировал стратегию борьбы - манифест ГНУ.

Смысл стратегии заключается в том, что если ты написал программу, которая приносит тебе какую-то пользу, тебе не жалко поделиться ею с коллегами. Поскольку у тебя останется копия и будет продолжать приносить тебе пользу.

Очевидно, что принять активное участие в этом движении могут только люди, умеющие создавать новые программы. Поэтому инструментальные программы - программы, решающие задачи, полезные программистам, как правило, появляются быстрее, чем программы, решающие задачи конечного пользователя-непрограммиста. Так, например, компилятор GNU C появился десятилетием раньше, чем графический редактор GIMP.

А что же делать конечным пользователям, непрофессиональным программистам, если они хотят, чтобы компьютер был им послушен? Всего лишь знать, как он работает, и уметь формулировать свои мысли в терминах "слов", имеющихся в их распоряжении.

Четкой границы между решением пользовательских задач и программированием не существует. Синонимы (алиасы) в оболочке, макросы в текстовом редакторе, однострочные сценарии (скрипты) - это уже полноценное программирование. Программировать, имея дело с компьютером, так же естественно, как говорить прозой для мольеровского Журдена.


1 (обратно к тексту) - Пользователи ОС альтернативных архитектур обычно могут обратиться к средствам, обеспечивающим совместимость со стандартным пользовательским интерфейсом, включая оболочку и стандартные утилиты. Например, в среде Microsoft Windows можно порекомендовать свободный пакет Cygwin, разработанный Cygnus Solutions (сейчас разработку продолжает RedHat Software, и пакет можно найти на www.cygwin.com). Cygwin также включает библиотеку, реализующую стандартный интерфейс программирования (POSIX API) и комплект документации. Учтите, при работе в версиях, основанных на MS-DOS (MS Windows 95/98/Me), у многих программ возникают сложности из-за отсутствия в них контроля за правами доступа к файлам и каталогам (версии, основанные на NT - MS Windows NT/00/XP, лишены этого недостатка), а также то, что локализованная для русской среды сборка Cygwin никем пока не поставляется. Для поддержки кириллических символов необходимо в каталоге пользователя создать файл с именем .inputrc, содержащий строки:

set meta-flag on
set convert-meta off
set output-meta on

- Ред.