Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

Принцип Калашникова

(с) Ф.В.Ткачёв, 2008, 2010; последнее редактирование: 2014-06-24

Содержание:


Формулировка Принципа Калашникова

Избыточная сложность — это уязвимость.

Сей есть краеугольный камень грамотного проектирования чего угодно.

Обмануть его (принцип) нельзя — можно успеть удрать, подставив под удар кого-то другого (как делают профессиональные программеры, предварительно подсунув свои программы клиентам; непрофессиональные удрать не могут, т.к. пишут программы для себя — именно поэтому, кстати, Информатика-21 затеяна «непрофессиональным» программистом).

Преподаватели программирования должны вбивать этот принцип себе в голову каленым железом каждое утро в качестве зарядки, а потом точно так же вбивать его будущим

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

Заметим, что практически вся тьюринговская лекция Тони Хоора в 1980 г. посвящена этой теме (см. ниже). Однако и через 30 лет эти идеи IT-сообществом по-настоящему не поняты и не приняты.

Пока (весна 2008) зафиксируем, что у нас уже два свеженьких примера действия этого безжалостного принципа:

  1. падающая черепашка с наворотами, из-за которых она и падает;
  2. красивый тулбар, который непонятно, зачем висит, кроме помощи черепашке в падениях.

Связь с Бритвой Оккама

В приведённой «онтологической» формулировке Принцип следует считать одним из фундаментальных законов теории эволюции/теории систем.
Эта формулировка впервые дана не позднее 2005 г. в лекциях спецкурса Ф.В.Ткачева «Введение в современное программирование» на физфаке МГУ.

Однако «методологический» вариант Принципа (т.е. относящийся к теории познания и философии науки) — знаменитая Бритва Оккама — восходит по крайней мере к средневековому схоласту Дунсу Скотту (XIII в.), рассуждавшему о простоте, бесконечности и разумности Первого Сущего.
Знаменитая формулировка Не следует размножать сущности без необходимостиEntia non sunt multiplicanda sine necessitateявляется позднейшим переложением. У самого Уильяма Оккама (нач. XIV в.), которому её приписывает традиция, формулировки несколько иные, например: Множественность не следует допускать без необходимости — Pluralitas non est ponenda sine necessitate (цит. по: Guillelmus De Ockham, Loci electi).

Известное высказывание Эйнштейна, стоящее эпиграфом к 16-страничному Сообщению о языке Оберон Никлауса Вирта: Делай как можно проще, но не проще — Make it as simple as possible, but not simpler —  является, в сущности, пересказом Бритвы Оккама, так как речь у Эйнштейна — физика-теоретика — тоже о теориях и всяческой умственности.

(Заметим в скобках, что присутствие этого же высказывания Эйнштейна в качестве эпиграфа к тысячестраничной книге о C++ звучит как издевательство над здравым смыслом. Поразительно, сколько юных и не очень юных программеров в упор не видят абсолютной абсурдности такого эпиграфа и не задумываются о том, какую бездну интеллектуальной слепоты вскрывает его присутствие там.)

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

Заметим, что если Бритва Оккама просто формулирует правило, то Принцип Калашникова объясняет, почему нужно этому правилу следовать.

Простота, о которой всё время говорит Вирт, — это, конечно, не та простота наивности, которая скрывает непонимание всей сложности предмета. Это простота, которая выявляется лишь по достижении полного понимания предмета — понимания того, что есть в нём главное и определяющее, а что — второстепенное. Вторая часть высказывания Эйнштейна — именно об этом.
Гораздо точнее употреблённое Юргом Гуткнехтом слово чистота (как очищенность от всего несущественного), употреблённое им в названии своего доклада на рабочем совещании День Оберона в ЦЕРНе (Oberon Day at CERN, March, 2004): The Power of Purity.

Кстати говоря, первый вариант названия доклада Гуткнехта звучал как The Power of Simplicity и являлся аллюзией на широко известный в западном мире бестселлер по менеджменту (Jack Trout, The Power of Simplicity, 1998; перевод на русский язык: Джек Траут, «Сила простоты. Руководство по успешным бизнес-стратегиям»). Здесь тоже речь о стратегиях поведения в сложных, плохо поддающихся полному пониманию ситуациях: в случае каких-то сюрпризов простые сценарные конструкции легче (и дешевле) приспособить под меняющиеся обстоятельства.

Но лучшую иллюстрацию Принципа доставляет история эволюции живых организмов с её тьмою вымерших (и вымирающих) видов живых организмов: Природа ведёт поиск оптимальных простых решений вслепую, терпеливо испытывая добавляемые ad hoc конструкционные «фичи» — и безжалостно отбраковывая не выдерживающие проверку на устойчивость вместе с их носителями.

Принцип Калашникова в истории

Принцип Калашникова неявно и интуитивно использовался и используется всеми великими конструкторами и дизайнерами. Хотя мотивы они могли формулировать для себя по-разному, успех их дизайнов в конечном счёте имел место именно благодаря эксплуатации этого принципа:

Принцип Калашникова в сфере ИТ

В сфере ИТ давно известно эмпирическое правило KISS (Keep it simple, stupid! = Делай проще, дурачок!). Его с удовольствием повторяют, но слишком часто нарушают.

Известна знаменитая лекция Тони Хоора/Хоара «Старые платья императора» при получении им премии Тьюринга в 1980 г. (в кн.: Лекции лауреатов премии Тьюринга за первые двадцать лет 1966-1985, пер. под ред. Ю.Баяковского, Мир, М, 1993). Практически вся лекция посвящена этой теме, хотя компактной формулировки Принципа там нет. Вот характерная цитата:

«Ненадежный язык программирования, порождающий ненадежные программы, представляет [для всех нас] несравненно больший риск, чем <...> пестициды... Неусыпно добивайтесь снижения риска, а не увеличения его.»

Язык Оберон Никлауса Вирта — пример в высшей степени последовательной реализации этого принципа. В этом отношении Оберон в сфере ИТ практически уникален (см. иллюстрацию ниже). Сфера ИТ знает и другие минималистичные дизайны (Lisp, Forth...), но они являются по сути одноразовыми усилиями, причём с гораздо более узкой областью применимости.

Почему Принцип Калашникова так часто игнорируется?

Почему в сфере ИТ этот принцип так часто игнорируется?

Причину этого следует искать в приматических механизмах «ума» представителей вида homo sapiens:

Основой человеческого интеллекта является фиксируемая уже у шимпанзе (Вольфганг Кёлер, 1919) и др. животных (крупные попугаи, врановые...) способность решать проблемы («доставать бананы») посредством нахождения комбинации движений и действий с объектами в зоне внимания.

Этот комбинаторный интеллект (приматический, тактический) включается в ответ на непосредственные стимулы («банан в зоне видимости»), действует инстинктивно и обеспечивается соответствующими бессознательными механизмами, включающими эмоционально окрашенную активность (ср. аппетитивный цикл по Крейгу, инстинкт цели по И.П.Павлову и т.п.).

Этот род интеллекта составляет, фигурально выражаясь, 99.9% всей совокупной интеллектуальной активности человечества (ср. ниже иллюстрацию). И именно он несёт ответственность за то, что представители вида homo sapiens в подавляющем большинстве случаев преодолевают трудности, возникающие на пути к «бананам», посредством нагромождения всяческих подставок, подпорок, заплаток и подвязок.
Отсюда же трудноудержимое стремление ко всякого рода украшательству, «свистулькам с бубенцами» как простейшему, чисто комбинаторному способу добиться целей дизайнерской (в самом широком смысле) задачи.

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

Можно сказать, что приматический интеллект — это интеллект усложняющий (ср. непрерывное добавление «фич» в программистских творениях; см. картинку ниже).
Тогда абстрагирующий интеллект — это интеллект упрощающий через выделение главного из горы второстепенного.

Между прочим, отличный пример гегелевской диалектической спирали: от простоты наивной к другой, более изощрённой простоте через сложность.

Элементы и приёмы (само)контроля над приматическими механизмами ума могут внедряться в головы специальным обучением (хотя, конечно, и не во все с одинаковым успехом). Например, в курсах графического дизайна студентов сначала ограничивают абсолютным минимумом средств (белая бумага, черная краска) и лишь постепенно расширяют арсенал средств разрешают использовать в дополнение к черному и белому еще один цвет и т.д. (информация Н.Л.Нольде, преподавателя Московского государственного университета печати). Другие примеры, в которых нетрудно узнать стремление научиться управлять приматическим интеллектом — ТРИЗ, методики де Боно и т.п.

В отношении даже простого понимания необходимости научиться управлять приматическим нагромождающим интеллектом — не говоря уже про умение это делать — сфере ИТ еще далеко до графических искусств.
В системе IT-образования (в курсах обучения программированию в частности) целенаправленное привитие любви к минимализму встречается на момент написания данного текста, по-видимому, только в школе Никлауса Вирта.

Прекрасную иллюстрацию соотношения двух типов интеллекта в реальном мире ИТ даёт известная картинка нашего консультанта С.З.Свердлова:

Вниз, то есть в сторону уменьшения сложности, упорно идёт только одна линия, соответствующая только одному языковому проекту — Оберону.

Наконец, нужно отметить, следующее:

Во-первых, в IT-шных проектах как ни в какой «железо-бетонной» инженерии возможны нагромождения фич. А вот нажать кнопку Reset после того, как подвела коробка передач или развалился дом, невозможно.

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

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

Дальнейшее обсуждение «теории двух умотипов» (она же «комбинаторная теория интеллекта») см. на форуме.

Теория возникла при обдумывании парадоксальных явлений, наблюдаемых в науке и опровергающих рациональность научного сообщества, на фоне знания об экспериментах В.Кёлера и под влиянием книги Т.Куна «Структура научных революций», где нормальная наука, как теперь ясно, в точности соответствует деятельности по комбинаторному умотипу, а за смены парадигм ответственность несёт умотип-2.
Окончательно теория сложилась при обсуждении не менее парадоксальных явлений, наблюдаемых в мире ИТ, в рамках
спецкурса Ф.В.Ткачева «Введение в современное программирование», читающегося на физфаке МГУ с 2001 г. Публичные формулировки в Сети появились на вышеуказанном форуме в конце 2007 г.

Три величайших дизайна XX века

В заключение рискнём сделать субъективный выбор и выделим три безусловных вершины дизайна XX века — по одной в каждой из трёх широких областей дизайна (дизайн условно-графический, материальный и интеллектуальный):

Во всяком случае мужчины согласятся, что сравнение МЧП и АК-47 — учитывая убойную силу обоих — отнюдь не лишено смысла :)

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе