Архив января 2013

Выборы в Чехии

Оказывается, “у них” выборы тоже могут проходить интересно. Для начала – чуть-чуть “политинформации”. До недавнего времени в Чехии президента выбирал парламент. Обязанности президента там состоят в основном в притыривании авторучек и прочих дипломатических мероприятиях, но вот в прошлом году, для разнообразия, президента решили избрать прямым всенародным голосованием.

Правила стандартные – регистрируем нужных кандидатов, ненужным – отказываем в регистрации, особо буйных – направляем в дурдом, затем проводим непосредственно голым сование, произносим волшебные слова “кручу-верчу, всех обмануть хочу!” и считаем поданные бюллетени. Если никто из кандидатов по результатам подсчета не набирает более половины голосов – то проводим второй тур, в котором участвуют двое самых перспективных парней. Повторяем процедуру с “кручу-верчу”, далее оглашаем результаты, запасаемся попкорном и наблюдаем за ситуацией.

Победил согласно этой процедуре (во втором туре) кандидат-социалист Милош Земан (54%), на втором месте – кандидат от правой партии “ТОП 09″ Карел Шварценберг (45%, будет притыривать карандаши). Интересно в этих выборах другое. Несмотря на то, что круг обязанностей чешского президента очень узок, страсти по поводу выборов кипели нешуточные. Земана считается “социалистом”, Шварценберг – “проевропейским” политиком.

Как это не странно, но в десятимиллионной Чехии тоже есть свой “креативный класс”, следивший за ходом предвыборной борьбы в интернете. Странички Шварценберга в Facebook и Google+ собрали вчетверо больше сторонников, чем странички Земана в тех же соцсетях. Результаты – победа Земана – оказались для “креативного класса” неким откровением. Вот, например, твит одного из чешских журналистов – “Оказалось, что избиратели есть и за пределами фейсбука. Нам надо вернуться из киберпузыря обратно в Чехию. Победили социальные сети, но не те, что онлайн”. Интересно отметить, что за Шварценберга голосовали в основном крупные города – Прага, Брно, Плзень, Ческе-Будейовицы, Либерец и Градец-Кралове.

Правда, на этом дело не закончилось. Быть социалистом в некоторых странах Восточной Европы – это примерно то же самое, что разгуливать по улицам Москвы в форме Вермахта – по крайней мере, с точки зрения некоторых представителей творческой интеллигенции. Как только Земан в своем послевыборном обращении заявил, что будет президентом десяти миллионов обычных чешских граждан, несколько десятков человек – современных кинорежиссеров, художников, бывших диссидентов и корешей Вацлава Гавела – короче говоря, необычных чешских граждан, тут же написали открытое письмо, в котором заявили, что Земан никогда не будет их президентом, и что победу он одержал при помощи лжи и методик госбезопасности времен проклятого социалистического прошлого.

Думаю, не за горами появление движений “Земан должен уйти”, “Чехия без Земана” и других подобных :)

Синдром одной книги

Как я люблю повторять за Джакомо Казановой, бойтесь того, кто прочитал всего одну книгу. Особенно следует бояться, если этот кто-то спешит применить свои знания на практике и через это осчастливить человечество. К счастью, “Капитал” Маркса вышел из моды, так что бояться приходится менее страшных персонажей, чем ливаруцанеры-террористы – например, урбанистов-любителей.

В прошлом году, когда это движение впервые проявило себя в ЖЖ, его “библией” и синонимом “мировой транспортной науки” стала книга Вукана Вучика “Транспорт в городах, удобных для жизни”. В этом году все шансы на превращение в таковую имеет книжка Traffic: Why we drive the way we do, или в русском переводе – “Трафик. Психология поведения на дорогах” американского журналиста Тома Вандербильта. Во всяком случае, уже циркулируют ссылки на пост-рецензию (а точнее, аккуратный пересказ) [info]prometa, а модное хипстерское издательство “Манн, Иванов и Фербер” подготовило издание перевода.

Я не отрицаю, что неспециалисту в каком-либо вопросе очень сложно критически подойти к книге на совершенно новую для него тему. Соответственно, вместо рецензии обычно получается пересказ. Я и сам этим неоднократно грешил, и ничего плохого в этом не вижу. Хуже другое – когда эту единственную книгу объявляют “библией” и пытаются всюду применять рецепты из нее. Особенно этим поражают пресловутые “урбанисты”. Из научно-популярной книжки (типа серии “Эврика”, если кто такое помнит) делается символ “мировой транспортной науки”. Более того – для тех, кто не может осилить не очень большую книгу, разнообразные “Городские проекты” делают конспекты избранных мест – причем достаточно тенденциозно подобранных. Большим плюсом книги Вучика является то, что из нее можно нарвать цитат “на все случаи жизни” – и даже противоречащих деятельности “Городских проектов”.

Вполне возможно, что такая же судьба “великого откровения” ждет и “Трафик”. Тут есть все предпосылки – и ненапряжный текст, состоящий из описания известных “психологических экспериментов”, разбавленных “срывом покровов”, и какие-то “универсальные советы на все случаи жизни”, и популярная тематика, и рекламная кампания на хипстерских сайтах. Кстати, Вандербильта уже называют (в рецензии Psychologies) “специалистом в области дизайна, культуры и техники” – хотя он всего-навсего обычный американский журналист.

О магическом подходе к программированию

Позволю себе цитату из [info]vit_r:

The great wizard Yasha lives in the Magical World of IT. He discovers Rotten Code by smell and applies the mysterious Refactoring Spell. The software becomes better. At least this is what other great wizards and their magical books say.

И ее же перевод на человеческий язык:

Yasha reads some old source code, he finds dependencies, connections and logical errors which where unknown or overlooked in the time when this code was written, than Yasha simply updates the source code to the level of his current understanding.

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

На днях в комментариях был озвучен другой пример “волшебства”. Для начала: что не так в этом коде (PHP, если кто не догадался)?

$name = isset($_GET['name']) ? $_GET['name'] : 1;
$link = new dbLink();
$list = new listWidget($link, "SELECT name, age, class
                               FROM students
                               WHERE name='%s';",
                              $name);
$list->show();

Ответ: пока мы не увидим конструктора listWidget и кода, строящего SQL-запрос, мы не можем говорить о корректности этого кода. Правда, комментаторы отчего-то решили, что конструктор listWidget – это что-то типа sprintf, и пришедшее извне $name вставляется в SQL-запрос безо всякой обработки. Более того, в ответ на комментарий, что все тут пучком, kettle безапелляционно заявил:

Данные надо проверять на входе, а не в середине.

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

Для начала – обрисуем проблему. Если $_GET['name'] – это что-то нормальное, типа John или Jack – то при подстановке его вместо %s в шаблон запроса мы получим что-то типа

SELECT name, age, class
FROM students
WHERE name='John';

exploits_of_a_mom

Что будет, если зловредные родители назовут своего ребенка каким-то экзотическим именем? Little Bobby Tables, говорят, ходит по нашей земле, и при подстановке простого американского имени Robert’; DROP TABLE students;– мы получим вот такую штуку:

SELECT name, age, class
FROM students
WHERE name='Robert'; DROP TABLE students;--';

Вместо одного запроса мы получаем два, второй из которых может содержать все, что угодно – например, как тут, удалять одну из таблиц в БД. Проблема эта довольно “популярная”, обросшая большим количеством “доморощенных” решений, и очень неплохо освещенная, например, в презентации SQL Injection Myths and Fallacies.

Таким “решением” в кавычках можно назвать и предложение kettle. Дело в том, что в простой ситуации “принять параметры, сделать запрос к БД, вывести результат” мы имеем не один тип данных – текстовую строку, а три разных – “пользовательский” ввод, запрос к БД и HTML-код выводимой страницы. PHP до неприличия упрощает ситуацию, объединяя эти совершенно разнородные вещи.

SQL Injection не имеет ничего общего с “проверкой входных данных”. И “John”, и “O’Brien”, и “<script type=text/javascript>alert(’Pwned!’);</script>”, и “Robert’; DROP TABLE students;–” – это прекрасные нерусские имена, которые могут и храниться в базе данных, и выводиться на страничку, и фигурировать в запросах пользователей. Задача программиста – сделать так, чтобы и в виде запроса от пользователя, и в БД, и на страничке, выводимой скриптом, они отображались одинаково. Как говорил В. И. Ленин, “величайшей ошибкой было бы думать”, что примеры из книжки “PHP для начинающих” имеют какое-либо отношение к реальности. Использование одних и тех же данных безо всяких преобразований и в роли “ввода”, и в запросах к БД, и для вывода – это чудовищный “антипаттерн”, причем культивируемый во всех учебниках.

Представим себе несколько извращенную и надуманную ситуацию. Предположим, что ввод от пользователя к нам приходит в кодировке КОИ-8, БД работает только с CP866, а для вывода мы должны использовать CP1251. Я думаю, любой русскоговорящий программист поймет, что здесь минимум в двух местах нужно осуществить соответствующие преобразования. Но ведь и в “обычном” случае мы имеем дело с такой ситуацией! “Алфавит” и “семантика” текста в $_GET, SQL-запросах и HTML-коде – совершенно разные, и похожи они лишь отдаленно. Собственно, игнорирование необходимости преобразования между ними – это причина самых распространенных ошибок в веб-программировании.

Кстати, предлагаю посмотреть, как устроены SQL-запросы с параметрами в “более других” драйверах для работы с БД в PHP:

http://bobby-tables.com/php.html

Как легко видеть, я просто “изобрел велосипед”, практически заново переизобретя уже готовые решения. Не вижу в этом ничего дурного :)

Десятое правило Гринспена в действии

Под заголовком “Functional C programming” чувак описывает “глючную, медленную и недокументированную” реализацию Lisp:

http://blog.charlescary.com/?p=95

Достаточно добавить к этому разбор s-выражений, написать несколько встроенных функций и сборщик мусора – и готов интерпретатор чего-то типа Scheme. Кстати, собственно “функционального” программирования в статье нет ни капли – есть разве что описание того, как добиться некоторых сопутствующих удобств – при этом ограничив себя в использовании удобств C.

Про схемы метро

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

Берусь утверждать, что вси три схемы – отстой и порождение дизайнерского рака мозга и прочей самодеятельности в отсутствие нормального “технического задания”. Пройдемся последовательно по всем в порядке их популярности среди голосующих.

Для начала – студия Лебедева, благодаря своим фанатам получившая первое место.

lebedev

Лично мне с самого начала непонятны две вещи: почему обычные станции обозначены черточками, а пересадочные – кружочками, и почему переходы на “тройных” и “четверных” пересадочных узлах изображены кружками, да еще и разного диаметра. “Нечто”, изображающее переход между Александровским садом, Арбатской, Библиотекой имени Ленина и Боровицкой – это вообще вне всякой критики. Снова процитирую Саню Поддубного:

Заехали в самый центр на какое-то кольцо ну Михан и e6анул по нему круга четыре… Я сначала думал он дорогу ищет куда свернуть, но пятом круге смотрю – у него уже@!#$ шальное от таких движняков, не знает куда с этого e6аного кольца съезжать надо… Я говорю – Михан, ты что залип то? Нахер тебе этот Индианаполис? Поверни уже куда-нибудь, тут все уже@!#$вают от нас…

И действительно, нахер нам этот Индианаполис? Кстати, один малознакомый с реалиями московского метра персонаж предположил, что там – еще одна маленькая кольцевая линия :)

Кстати, в метро нет станций типа “Арбатская-2″ (читается “Арбатская-вторая”).

Второе место пока удерживает Илья Бирман. Его схема – пример того, что будет делать дизайнер в отсутствие бьющих по рукам требований.

birman

Для начала – взглянем на заголовок. Как и полагается так называемой “творческой личности”, Бирман счел для себя возможным изменять не устраивающие его элементы задания. Вместо слов “Схема линий Московского метро” он обошелся просто заголовком “Московское метро”, да еще и присовокупил информацию о времени работы. Затем – по каким-то своим соображениям убрал схему железных дорог, которая требовалась по условиям конкурса (а судя по началу атаки на РЖД платной мурзилкой Зялтом – у Дептранса есть планы по захвату пригородных электричек).

Кроме того, Бирман придумал свою систему транслитерации, якобы позволяющую иностранцу правильно фонетически прочитать названия станций. Сразу возникает вопрос – а какими правилами чтения будет пользоваться иностранец? Англичанин, немец, француз, испанец, португалец прочтут одни и те же буковки по-разному. Но дизайнер мнит себя творцом и специалистом по всем вопросам – и позволяет себе судить не только о достоинствах разных версий Фотошопа, но и о вопросах, в которых компетентен лишь на уровне здравого смысла.

Как математика, меня оскорбляет и вера дизайнеров в сплайны Безье – единственно доступные их пониманию кривые. Да, сплайн, в отличие от “чертежного” сопряжения отрезков дугой окружности, позволяет добиться непрерывности первой производной. А как же вторая, третья и так далее? Оскорбляет это и железнодорожников, которые знают о существовании переходных линий – например, радиоидальной спирали (она же клофоида, она же спираль Корню). Поверьте мне, сплайном ее можно только грубо приблизить.

Те же замечания, что и к схеме Лебедева – по поводу кружочков и черточек, обозначающих станции. Не вполне последователен и принцип “один кружок – одно название” – во всяком случае, он идет вразрез с построением схемы метро последние лет 20.

В остальном – схема красивая, можно сказать – дизайнерская. Она красиво смотрится на мониторе компьютера, а в жизни – я не знаю, зачем был выбран такой нарочито мелкий шрифт и такая низкая “информационная плотность” – белого фона на схеме Бирмана больше всего.

На третьем месте – схема РИА “Новости”. Естественно, что фанатов у РИА поменьше, чем у модного дизайнера Лебедева и менее модного – Бирмана, но эта схема мне нравится больше предыдущих.

mizinov

Какие тут можно назвать недостатки? Дизайнеры РИА “Новости” стали заложниками выбранного ими принципа использования “сетки” из пересекающихся под углом 45 градусов прямых, поэтому и вместо Кольцевой линии получился восьмиугольник.

Вместо перевода надписей на английский имеем полную халтуру. Какой такой “Alphabetical Index Stations”, что за “Suburban Way”? Похоже, переводчиков из РИА “Новости” повыгоняли поганой метлой.

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

По-хорошему, конкурс надо было бы проводить в “слепом” варианте – не указывать на схемах автора, и строго запретить им до окончания конкурса публиковать информацию о примененных новшествах (”утечка” – повод для снятия с конкурса). Мне кажется, что первое место схемы Лебедева – это результат большой известности последнего, а не каких-либо достоинств его схемы. Все три варианта, представленных для голосования, по своим “поребительским качествам” очень близки – и мне кажется, что без “поддержки” именем схема Лебедева не смогла бы настолько опередить конкурентов.

Напомнило

Посоветовали почитать “Очерки уголовного мира царской России” Аркадия Францевича Кошко – известного дореволюционного сыщика, начальника Московской сыскной полиции в 1908-1917 годах. Акунин с Гиляровским курят в сторонке.

Оченть понравилась, например, история про охмуренного брачными аферистами купца Синюхина из Елабуги. Купчишка решил приехать в Москву, чтобы жениться на “какой-нибудь графине или княгине”. Естественно, что “графиня” при первой же возможности растворилась с немалой суммой денег, а купчишка прибежал в полицию, принеся с собой дневник, в котором записывал все происходившее с ним, примерно так:

Побродил я эдак с часок по пароходу, да и захотел подняться наверх к капитану. Он здесь начальник и хозяин, и познакомиться следовает. Поднялся к нему. Подхожу и вежливо спрашиваю: “По какой, мол, параллели теперича плывем?” А они как заорут: “Проваливайте, проваливайте отсюда! Не знаете разве, что посторонним на рубку вход воспрещен”. – “Позвольте”, – говорю… “Ничего не позволю, убирайтесь!” И, нажав на что-то ногой, он оглушительно засвистел. От неожиданности я чуть живой скатился вниз.

Ну и собака! Одним словом, необразованный. После эдакого эксперимента я уселся на носу в плетеное кресло и взгрустнул.

Чем-то напомнило записки Сани Поддубного:

С таксистами, я сразу выкупил, нужно нае6ать себя не дать… Я сначала высмотрел такого, более-менее матерого на удрюканной толи Карине толи Короне… Подошел… Слышь, говорю, старый, а подскажи на каком тут заводе авторазбор заибательский есть, а то мы с товарищем дорогу найти не можем? А почем ему знать, что мой писдатый товарищ – тот самый викинг, 6ля, которого трамвай колбасой пронзил… Ну он и отвечает как матерый – ну, наx, на стекольном есть. Я ему за цену – типа между делом – почем туда ездиешь? Да, грит, за стодвацать увез бы, наx….

И я ему сразу – так вези, епть! И в машину его блатную давай садитца… Он, хyли, тоже сел, посмотрел на меня так, уважытельно… Ниxyя ты, говорит, хитровые6анный какой. Завелись, поехали… Шэф, хyли, потеху свою врубил – за тюрьму и за волков… «А выкидуха, вдруг щоооолкнет cцуkо»…. И едет не спеша так… Ну я у него так, чтобы не скучно, поинтересовался промеж делом – у тебя, батя, отсечка-то есть? А тот чето покосился так нехорошо и грит – не, я этой @!#$ней вашей, наркоманской, не занимаюсь… Типа я у него за дурь какую-то подъяснился… А хyли с него взять – деревянный.

Сайты на PHP, дешево, просто, быстро

Опробовал “в реальной жизни” озвученную два года назад идею о том, что большинство веб-сайтов можно и нужно рассматривать, как красивый интерфейс к базе данных. Учитывая то, что я знаю PHP примерно на уровне журнала “Ксакеп”, получившийся код мог бы быть и красивше, но вот такой код странички мне уже почти нравится:

require_once 'includes/config.inc';
require_once 'includes/database.inc';

require_once 'widgets/schemeWidget.inc';
require_once 'widgets/partslistWidget.inc';

$snum = isset($_GET['page']) ? $_GET['page'] : 1;

$link = new dbLink();

$scheme = new schemeWidget($link, "SELECT sdesc, sfilename
                                   FROM schemes
                                   WHERE snum='%s';",
                                  $snum);
$scheme->show();

$partslist = new partslistWidget($link, "SELECT shinnernumber, pname, phcatnum, phproducer
                                         FROM parts
                                         INNER JOIN shown_in ON shown_in.pnum=parts.pnum
                                         LEFT OUTER JOIN parts_phys ON parts.pnum=parts_phys.pnum
                                         WHERE snum='%s'
                                         ORDER BY shinnernumber;",
                                        $snum);
$partlist->show();

Понятно, что это очередная попытка переизобрести MVC (точнее, пока просто MV – Model-View, а Controller пока не нужен) – но идея делать сайты по принципу “база данных плюс форматирование результатов запроса” оказалась вполне жизнеспособной. В порядке дальнейшего изобретения велосипедов – а не замахнуться ли на “свой Wordpress с блекджеком и шлюхами“?

Каковы доходы российских предпринимателей?

Регулярно во всяких околобизнес-срачах вылезаю с мнением, что средний российский, с позволения сказать, “бизнесмен” живет вовсе не богато, а наоборот, перебивается с брюквы на морковку. Некоторые нововведения в налогообложении позволяют оценить величину прибыли этого “среднего предпринимателя” – в роли которого у нас будет индивидуальный предприниматель, не нанимающий работников и пользующийся упрощенной системой налогобложения в ее варианте “6% от дохода”.

За отправные данные возьмем следующие нововведения: с 1 января 2013 года индивидуальный предприниматель должен уплачивать в “фонды” около 34 тысяч рублей в год, вместо 14 тысяч. Это кнут, а пряник у нас будет следующий – пользуясь упрощенной системой налогообложения (6% с доходов), можно вычитать сумму платежей в фонды из уплачиваемого налога в полном объеме, а не на 50%. Поясню это на примере. Пусть доход нашего ИП составляет миллион рублей в год. 6% от этой суммы – это 60 тысяч рублей. В 2012 году наш ИПшник платил в фонды 14 тысяч рублей, затем уменьшал сумму налога на 7 тысяч – итого уплачивал в “разные кассы” 14 000 + 53 000 рублей, итого – 67 тысяч. В 2013 году в фонды ИПшник отнесет целых 34 тысячи – но и налог уменьшится на эту сумму, то есть уплатить придется те же 60 тысяч.

Теперь – вторая вводная. Пусть наше государство действует исключительно по принципу “кручу-верчу, всех обмануть хочу” – и принятое под соусом “снижения налогового бремени” решение на самом деле направлено на выкачивание из несчастных предпринимателей еще бОльших денег. Как видно из примера выше, при достаточно большой сумме уплачиваемых налогов, новая система оказывается выгоднее. А вот если ИПшник не ведет деятельности – другой крайний случай – то он заплатит 34 тысячи вместо 14. Соответственно, равенству уплачиваемых сумм будет соответствовать верхняя граница оборота среднего ИП.

Пусть доход равен Д. Тогда до нововведений, если Д*6% составляло менее 7 тысяч рублей, то совокупный размер налогов составлял 14 тысяч, а если превышало – то 7+Д*6%. После нововведений – если Д*6% составляет менее 34 тысяч, то уплачивается 34 тысячи рублей, если более – то Д*6%. Если посмотреть на графики зависимости уплачиваемых налогов и взносов в фонды от дохода, то увидим точку пересечения, абсцисса которой является решением тривиального уравнения 7+Д*6%=34. Это соответствует доходу в 466 тысяч рублей в год, или около 39 тысяч в месяц.

Подчеркну, что это – доход, а не прибыль – которой ИПшник распоряжается примерно так же, как “нормальный” человек – зарплатой. Каково же среднестатистическое соотношение прибыли и дохода? Ответ снова дадут налоговики, предусмотревшие в той же “упрощенке” два режима налогообложения – либо уплата 6% от дохода, либо 15% от прибыли. Это означает, что “в среднем” прибыль оценивается, как 6/15, или 2/5 от дохода (кстати, это очень и очень неплохо). Соответственно, месячная прибыль нашего “среднего во всех отношениях” ИП будет составлять всего лишь порядка 15-16 тысяч рублей.

Напомню лишь, что по данным Росстата средняя зарплата наемного работника в России составляет около 25 тысяч рублей в месяц до вычета налогов, или 22 тысячи “на руки”.

Знания и алгоритмы

Понял, что еще меня смущает в мысли о том, что

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

Понятие алгоритма немыслимо без представления об исполнителе. Вообще, в “программистских” курсах этот вопрос обходится стороной. Например, в известном учебнике Кормена алгоритм определяется, как “любая корректно определенная вычислительная процедура, на вход которой подается некоторая величина или набор величин, и результатом выполнения которой является выходная величина или набор значений”. Это сложно назвать определением, скорее, это попытка объяснить одно непонятное слово с помощью нескольких других (”корректно определенная”, “процедура”, “вход”, “результат”, “выполнение”). Спорным выглядит и сужение определения алгоритма до “вычислительной процедуры”. А как быть с “алгоритмом кипячения воды в чайнике”? Более общие определения вводят, явно или неявно, понятие исполнителя – то есть “чего-то” или “кого-то”, кто будет выполнять определенную последовательность действий. У Кормена “исполнитель” появляется страниц через десять – когда впервые рассматривается вопрос об эффективности алгоритмов, а окончательно описывается вместе с набором инструкций в “модели RAM”. Этим исполнителем оказывается что-то, моделируещее процесссор “среднестатистического” современного компьютера.

В “советском” курсе информатики, кстати говоря, “исполнитель” появлялся практически сразу же. “Робот” из учебника Кушниренко и его многочисленные клоны считать не умеют, но могут выполнять команды типа “шаг влево”, “шаг вправо”, “закрасить” и тому подобные. Можно ли говорить об алгоритме покраски лабиринта? Видимо, можно, так что “вычислительное” определение алгоритма оказывается слишком узким. Вообще, такое представление о самостоятельном “исполнителе” с ограниченным набором команд, говоря современным языком, это очень мощный паттерн. Лично мне оно кажется важнейшим отличием “курса Кушниренко” от некритично заимствуемых западных учебников.

Вернемся к “Глобальным Правилам Игры”. Предположим, что они записаны в виде алгоритмов. Попробуем разобраться, кто же будет их исполнителями. Возьмем относительно простой случай – вопрос “какие налоги, выплаты, сборы, поборы будет платить ИП на упрощёнке“. Отноительно несложно составить алгоритмы для этого ИП. Но! Здесь возникает куча “контрагентов” – то есть налоговая инспекция, разнообразные фонды (социального страхования, Пенсионный, тысячи их), всякие пожарники и прочие звери. Для каждого из них нужен свой алгоритм по взаимодействию с этим “ИП на упрощенке” – и при этом я не разделяю налоговую инспекцию на собственно налогового инспектора, работающего с этим несчастным ИП, и его начальника.

Если говорить в терминах модели “сценариев использования”, то сценарий “заплати налоги и спи спокойно” порождает огромную толпу “заинтересованных лиц” и “акторов” – для каждого из которых требуется свой алгоритм действий. Собственно, по этим алгоритмам они и живут – только называются они “должностными инструкциями” или как-то в этом духе.

Существующая запись “правил игры” – в виде продукционной базы знаний – тоже имеет свои недостатки, но и одно неоспоримое достоинство – она позволяет сравнительно просто породить все нужные алгоритмы. В принципе, это действие – порождение алгоритма из правил в “базе знаний” – достаточно неплохо формализуется, и само по себе может быть записано в виде алгоритма. Примерно это и понималось под “искусственным интеллектом” в 70-80-е годы, и надо сказать, что человечество достигло в этом определенных успехов.

Обобщая эту ситуацию, можно сказать, что “знания” – это способ компактной записи большого набора конкретных алгоритмов, пригодных для разных ситуаций. Например, “знаниями” можно назвать монтажную и принципиальную схемы прибора. Имея соответствующую квалификацию, например, инженера-технолога, можно породить алгоритм сборки прибора неграмотными унтерменшами на конвейере – то есть “технологическую карту” в духе “припаять желтый провод к клеммам такой-то и такой-то, передать дальше”. Имея другую квалификацию – можно из тех же исходных данных составить алгоритм поиска неисправностей. При этом исходные данные остаются одними и теми же, меняется лишь способ их обработки.

Если вернуться на абзац раньше – то, видимо, ключевыми словами будут “достаточно легко”. Обычно алгоритмы в задачах, подобных этой, строятся по какому-то описанию предметной области. Интересно, а возможна ли обратная операция и насколько она будет сложна в сравнении с “прямой”?