Ботинки президента

Prog.Stone progstone@yandex.ru 

декабрь 2001

 

Обычно происходит так, что проблему разбивают на части и некоторые ее аспекты предоставляются программистам в виде спецификации. В результате у тебя в руках оказывается спецификация, в которой говорится о проектировании стойки для установки 100 свечей. Другому дадут спецификацию для разработки системы вентиляции, которая способна вытянуть дым от 100 свечей. Если ты достаточно кровожаден, то в конце концов придешь к ним с электрической лампочкой.

Joss Earl

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

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

Можем ли мы решить проблему чистоты ботинок программными средствами? Похоже, что нет. (Урок 1 - софт не может все.) Нужна некая, например, электромеханическая конструкция, которая обеспечит чистку обуви, а заодно хранение (что-то типа карусели) и выбор нужной пары по команде. [Перед помещением в ячейку ботинки автоматически чистятся, просушиваются, взлохмачивается войлок на стельке.] Предоставим разработку конструкторам. Тут возможно решение с встроенным в ботинки чипом, в котором содержится информация о паре (идентификатор, цвет, интервал температур и влажностей комфортного ношения, срок годности к применению и т.д.). По данным из чипа можно узнать, в какой ячейке хранится пара, какой крем для чистки выбрать, не пора ли ее заменить и т.п. [Тут появляется еще одна возможность - несколько пар на одни погодные условия можно чередовать, и система избавит от необходимости помнить, какая пара следующая.] Нужно иметь возможность получить список имеющихся пар с их характеристиками и подать команду выбора пары.

Итак, нам достается самая ответственная задача - выбор нужной пары. Обычно есть несколько видов обуви (сандалии, легкие туфли, туфли, полуботинки, ботинки, сапоги, унты, валенки и галоши к ним). Можно определить диапазон температур и влажности, в которых конкретная пара оптимальна и руководствоваться им (причем диапазоны могут перекрываться). [Пусть президент живет не на экваторе и не на полюсе, т.е. выбор делать все-таки нужно.] Как мы обычно делаем выбор? Слушаем прогноз погоды и потом мучительно думаем, что надеть, а потом не менее мучительно ищем нужную пару в ворохе другой обуви. [Если президент - женщина, то сразу отказываемся - задача не поддается решению.] Прогноз передают не постоянно, так что мы избавляем президента от необходимости ждать, когда же в новостях скажут про погоду, или помнить, что говорили вчера, а также от выбора пары и ее поиска. Здорово! Но если система будет узнавать погоду из сводки новостей, то нам нужна подсистема распознавания речи! (Урок 2 - решение "в лоб" - почти всегда не самое лучшее, задача почти всегда требует переформулировки). Прогноз еще можно узнать в Интернете. Но, для этого нужно обеспечить доступ, защититься от несанкционированного проникновения, есть опасность террористического акта, когда злоумышленник подменит страничку с прогнозом погоды и оставит президента без ботинок. (Урок 3 - неудачное решение тащит за собой клубок дополнительных проблем). [Варианты решения - специальный защищенный сервер, выделенный защищенный канал связи со спецметеобюро и т.п.] Можно делать прогноз автономно - для этого вынести на улицу датчики (температуры, влажности и т.п.) и делать прогноз самостоятельно (неужели ставить в подвал "Крей"?). Теперь воспользуемся несколькими предположениями: погода не меняется слишком резко в течение дня и обувь обычно комфортна в довольно широком интервале температур. Поэтому прогноз можно и не делать. Достаточно выяснить температуру и влажность. И еще - даже при сильном морозе валенки не подойдут - президент связан протоколом, поэтому в аэропорту ему придется встречать другого президента подпрыгивая в ботиночках (издержки профессии). Протокол - довольно сильное ограничение выбора. Для нашей задачи - это полезное ограничение. Заодно предоставим свободу выбора в выходные - от работы нужно отдыхать. При таких ограничениях оказывается, что существует простое решение. Для принятия решения достаточно календаря и типичного профиля температуры. Или просто календаря. (Урок 4 - при разумных ограничениях всегда существует простое решение, не требующее сложных алгоритмов). Для надежности более сложные решения можно подстраховать простыми. А самое простое решение - выдавать вчерашние ботинки. Оно сработает, даже если откажет электромеханика.

Об интерфейсе. Лучше никаких экранов, мышей и клавиатуры. Это требует обучения. Возможны варианты. Кнопка, при нажатии которой ботинки с легким стуком выпадают из устройства. Голосовое управление с распознаванием ключевых фраз, например: "Опять куда-то засунули мои ботинки!". И простое решение - вручную открывается дверка устройства. А выбор, установка нужной ячейки делается заранее (или когда система принимает новое решение о выборе пары). Из некоторых соображений, о которых чуть ниже, при открывании дверки можно воспроизвести заранее записанную фразу типа: "Доброе утро, господин Президент! Вот Ваши ботинки."

Теперь рассмотрим еще одно обстоятельство. Президент своим действием может повлиять на погоду. Как? Очень просто - если нажмет на одну кнопочку. Сначала станет очень жарко, а потом очень-очень холодно и на долгое время станет не до ботинок. Наша система станет не нужна. И в утро перед нажатием система сделает заведомо неоптимальный выбор (при любом способе и алгоритме прогнозирования погоды). Потому что лучшим решением было бы предложить скафандр и посоветовать бежать к ближайшему космодрому. Поэтому (тут срабатывают все три закона роботехники) кажется совсем не лишним отказаться от кнопок (чтобы не вырабатывался автоматизм их нажатия) и дополнить приветствие еще одним предложением: "И, пожалуйста, не нажимайте сегодня ту кнопочку". Конечно, эту фразу можно истолковать как вмешательство безмозглой железяки в принятие государственных решений, но ее просьба, если рассудить, покажется вполне разумной большинству людей. (Урок 5 - создаваемое решение оказывает влияние на среду, в которой оно применяется).

Одно усовершенствование - если используется календарь, то можно заодно поздравить президента с днем рождения или еще каким праздником. Даже в простом варианте для этого все есть.

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

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

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

Используются технологии uCoz