Программирование компьютеров в его привычном понимании — это самый мощный способ взаимодействия с машиной и единственный, позволяющий использовать её любым из возможных для программного обеспечения способов. Но если посмотреть шире, то практически любое взаимодействие с машиной можно назвать программированием, в том числе и взаимодействие с программой, предлагающее лишь однообразный набор реакций на скромный список воздействий.
Рассмотрим для примера простой текстовый редактор с меню со стандартными действиями, вроде открытия и сохранения файла, поиска и замены и т.д. В какой-то момент пользователи замечают, что повторяют одни и те же специфичные для каждого из них действия. Разработчика редактора добавляет возможность записи и вызова макросов. Где макросы — это сохранённые последовательности нажатых клавиш, при воспроизведении которых, в редакторе должны выполниться те же действия, которые должны были бы выполниться, если бы пользователь нажал эти клавиши лично. При внимательном рассмотрении может выяниться, что такие макросы являются простейшими линейными программами, где командами являются названия клавиш. А если запись и вызовы макросов доступны на общих основаниях, то такие подпрограммы могут оказаться не таким уж простейшими, ведь появляется возможность вызывать подпрограммы-макросы из других макросов и даже возможность для самоизменения программ.
Но если макрос — это программа, то формат, по которому она записана — это язык программирования, каким бы странным это не показалось. В даном случае им выступает набор клавиш и их комбинаций. Вместе с набором реакций на них они составляют контекстно-зависимый предметно-ориентированный интерактивный язык редактора. И что важно, этот формат будет оставаться языком программирования вне зависимости от того, предоставляется ли возможность работы с макросами или нет. Аналогичным образом можно распространить понятие языка программирования на любой интерфейс, а также формат данных.
Другим примером могут служить многочисленные инструкции для пользования приложениями. Они могут выглядеть так:
- Зайдите в такое-то меню
- Выберите такой-то пункт
- Введите такое-то значение
- Нажимите такую-то клавишу
- И так далее...
И это тоже ничто иное, как программа на языке интерфейса приложения, только записанная неформально.
В рассмотренном ключе программирование является не просто самым мощным способом взаимодействия с компьютером, но и, вообще, единственным способом работы с ним. И вместо разделения на создание и использование программ можно предложить разделение на программирование на универсальных языках программированиях и программирование на специализированных предметно ориентированных.
Возможно, кто-то посчитает такое обобщение бессмысленным или даже абсурдным. На мой же взгляд оно позволяет многое понять о взаимодействии с ПО и даёт полезное направленине для его улучшения. Если есть понимание программистской сущности любого интерфейса и объективной потребности такого рассмотрения, то нет весомых причин оставлять его без удобных программистских возможностей: сохранять, передавать, анализировать, искать и менять готовые решения.
Такой подход позволяет лучше формализовать и обобщить интерфейсы, увеличить верифицируемость, лучше связать разнородные решения и улучшить возможности по автоматизации рутинной работы. Современные командные оболочки наподобие bash, несмотря на значительную архаичность не устаревают окончательно во многом потому, что их интерактивный интерфейс в явном виде является языком программирования, предоставляя лёгкий переход от прямого действия к созданию автоматизации и наоборот. Графический интерфейс приложения не является препятствием для похожего подхода, некоторым частичным примером чему может служить Blackbox Component Builder.
Напротив же, большинство приложений, игнорирующих программистскую точку зрения на интерфейс значительно теряют в удобстве использования, зачастую превращая пользователей в тыкательных обезьянок, вынужденных выполнять работу, которую можно было бы автоматизировать. В результате довольно часто приходится сталкиваться с ситуацией, когда люди вынуждены писать программы, где исполняющим звеном оказывается уже не компьютер, а другие люди. А те, получая инструкции посредством компьютера, вынуждены выполнять действия обратно на компьютере же. Не трудно заметить, что здесь человек, выступающий своебразным посредником между компьютерными программами, превращается из пользователя в транслятор, из ведущего — в ведомого. С этим надо покончить, тем более что технических препятствий здесь нет, а программируемость, хотя бы и в ограниченном виде всегда пристутствует в ПО.
Комментариев нет:
Отправить комментарий