9 апр. 2009 г.

Мифы и грабли: Что такое программа?

А давайте-ка заглянем в словари (сами-знаете-на-каком-сайте) и посмотрим что такое программа.

Большая советская энциклопедия
Программа (от греч. programma — объявление, распоряжение, указ), Упорядоченная последовательность действий для ЭВМ, реализующая алгоритм решения некоторой задачи.


Экономико-математический словарь
В кибернетике (главным образом, технической) — основной элемент программного управления, строго определенная последовательность действий, предписанная объекту управления. В частности, машинная П.алгоритм задачи, записанный таким образом, чтобы ее можно было решить на ЭВМ. Запись ведется на одном из языков программирования как последовательность команд (операторов), указывающих, в каком порядке, с какими данными и какие надо проводить элементарные операции.
ГОСТ 19781-90
Программа - согласно - данные, предназначенные для управления конкретными компонентами системы обработки информации в целях реализации определенного алгоритма.
Да уж, как-то суховато и старомодно. В последнее время стало модно в качестве компетентного источника использовать Википедию. Заглянем и туда:
Компьютерная программа — последовательность инструкций, предназначенная для исполнения устройством управления вычислительной машины. Чаще всего образ программы хранится в виде исполняемого модуля (отдельного файла или группы файлов). Из этого образа, находящегося как правило на диске, исполняемая программа в оперативной памяти может быть построена программным загрузчиком. В зависимости от контекста, рассматриваемый термин может относиться также и к исходным текстам программы. И т.д.
В общем, смысл ясен, программа это сферический конь где-то в компьютере. Примерно этому нас и учили в школе и ВУЗе. Но чем плохи эти определения? Да это же грабли! Они утверждают что программы созданы для компьютера. В современных реалиях это всего лишь частный случай. К чести Википедии, в конце статьи вспоминаются многострадальные пользователи, которым приходится использовать эти программы.
Большинство пользователей компьютеров используют программы, предназначенные для выполнения конкретных прикладных задач, таких как подготовка и оформление документов, математические вычисления, обработка изображений и т. п. Соответствующие программные средства называют прикладными программами или прикладным программным обеспечением.
Ура-ура!!! Программы для пользователей называются прикладным программным обеспечением. Идем дальше:

Издательский словарь-справочник
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ — совокупность программ, управляющих работой компьютера или автоматизированной системы.
Cловарь по естественным наукам. Глоссарий.ру
Программное обеспечение - комплекс программ:
- обеспечивающих обработку или передачу данных;
- предназначенных для многократного использования и применения разными пользователями.
Википедия
К прикладному программному обеспечению (application software) относятся программы, написанные для пользователей или самими пользователями, для задания компьютеру конкретной работы. Программы обработки заказов или создания списков рассылки — пример прикладного программного обеспечения. Программистов, которые пишут прикладное программное обеспечение, называют прикладными программистами.
Да, похоже, Википедию действительно иногда можно считать компетентным источником. А теперь мораль: забудьте все эти стереотипные определения. Помните, что в первую очередь ПО создается для конечных пользователей. Оно в первую очередь должно облегчать решение пользовательских задач, а не делать его заложником сложной логики и запутанного интерфейса. Создавайте программы для пользователей а не для роботов. Остальные лозунги додумайте сами.

16 комментариев:

Unknown комментирует...

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

bugsclock комментирует...

Я и написал: в современных реалиях это всего лишь частный случай. :)

Unknown комментирует...

Какой из случаев "частный"? Прикладное ПО или инфраструктурное? Второго, мне кажется, даже больше, чем первого.

bugsclock комментирует...

Частный - "программы для роботов". Инфраструктурное в вашем понимании системное как я понял, да? Например, операционные системы, СУБД всякие, драйверы утилиты и прочее? Или инфраструктурное это часть системного? Думаю нет смысла сейчас копать классификацию, заметка не об этом. Чего далеко ходить, я тут в свой БИОС недавно зашел - половина настроек вообще непонятно что такое, без пол-литры не разобраться. А роутер домашний с wifi я два дня настраивал. Такое вот инфраструктурное ПО.

Unknown комментирует...

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

bugsclock комментирует...

Этим комментарием вы только подтверждаете что это ПО в конечном счете для пользователей. Вы и сами говорите, что мы имеем дело с ним постоянно. Внутри автомобиля, пример от Купера: у Порше Бокстер при повороте на скорости, если в баке мало топлива, оно в силу центробежной силы, смещалось к стенке бака, срабатывал датчик, а умная программа выключала двигатель и больше не позволяла его завести. Приходилось вызывать эвакуатор. Можно ещё вспомнить баян про самолет, который переворачивался кверху тормашками.

Unknown комментирует...

Я, собственно, это и имел в виду -- не стоит отделять программу от носителя, физического устройства. Потому что пользовательский интерфейс не всегда программный. В том же автомобиле есть кнопочки для управления стёклами, зеркалами, дворниками, и всё это связано со спрятанной глубоко внутри программой, управляющей всей электрикой автомобиля. Хотя у самой программы непосредственно пользовательского интерфейса нет.

Анонимный комментирует...

Спасибо за содержание и название. Тема понятия "программы" и мне актуальна. Вита

novakche комментирует...

Как раз если уж додумывать и ломать стереотипы, то с фразой
"Помните, что в первую очередь ПО создается для конечных пользователей. Оно в первую очередь должно облегчать решение пользовательских задач, а не делать его заложником сложной логики и запутанного интерфейса. Создавайте программы для пользователей"буду на 100% согласен, если подразумевать под интерфейсом тот, который использует пользователь (графический, программный, любой другой), и под пользователем подразумевать не только человека. Если одна программа использует другую через какой-либо интерфейс, то она также является пользователем и нужно смотреть на этот интерфейс именно с её точки зрения.

Unknown комментирует...

2novakche:
При такой трактовке термина "пользователь" я полностью поддерживаю.

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

bugsclock комментирует...

novakche, я не понял Вашего комментария. Лично мне, как пользователю, по барабану, как там программы между собой взаимодействуют. Пусть программисты с этими интерфейсами ковыряются, они любят преодолевать трудности. Почитайте обсуждение выше, какого хрена я должен помнить что в моем Бокстере за 50 тыщ евро нельзя допускать низкого уровня топлива в баке? (а интерфейса у этой программы никакого)

bugsclock комментирует...

Алексей, я думал, что в заметке очевидно, что я хотел сказать, или это все-таки попытки отыскать boundary conditions? :)

novakche комментирует...

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

bugsclock комментирует...

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

novakche комментирует...

Дело всё в том, что подход не неверный, просто несколько однобокий. Заменять его другим односторонним взглядом - это просто другие грабли. Получится всё как раз как в примере с Бокстером - всё красиво и удобно для пользователя, но не работает.

bugsclock комментирует...

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