Category: наука

Category was added automatically. Read all entries about "наука".

RB40. Никлаус Вирт. Большое турне по России

Предыдущая заметка:

15 февраля 2009 г. знаменитому швейцарскому профессору Никлаусу Вирту исполнилось 75 лет. Его юбилею посвящена эта заметка с воспоминаниями о визите Вирта в Россию в 2005 г.



Никлаус Вирт (Niklaus Wirth), автор языков Паскаль (1970), Modula-2 (1979) и Оберон (1988), знаменитый профессор Высшей Политехнической школы ETH из Цюриха, где учились Альберт Эйнштейн и Джон фон Нейман, в рамках Большого турне по России (11 сентября — 7 октября 2005 г.) собрал бурю оваций. Профессор Вирт выступил с лекциями в крупнейших университетских центрах страны: Москве, С.-Петербурге, Нижнем Новгороде, Екатеринбурге, Новосибирске, Томске.

Главной целью столь продолжительного визита проф. Вирта в Россию, прошедшего в год 35-летия Паскаля и приуроченного к празднованию 250-летия МГУ им. М.В.Ломоносова и 150-летия швейцарского ETH, — представление широкой общественности проблем развития информатики и ИТ-индустрии, популяризация идей систематизации программирования, а также налаживание более тесных контактов ETH с ведущими университетскими центрами России. В известной группе БРИК наиболее перспективных стран для мировой ИТ-индустрии (Бразилия, Россия, Индия и Китай) Никлаус Вирт выделяет Россию. Именно Россия, хранящая традиции и самобытность Паскаль-культуры, имеющая глубокие корни блестящих достижений научных школ — математики, физики и инженерного дела — ныне остаётся едва ли не единственным оазисом неремесленного программирования.

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

В С.-Петербурге Никлаусу Вирту была торжественно вручена мантия Почётного доктора СПбГУ ИТМО — университета, который стремительно ворвался в число вузов-лидеров, готовящих высококвалифицированные кадры для отечественной ИТ-индустрии. Одним из самых ярких и незабываемых событий Большого турне по городам России стала историческая лекция проф. Вирта в знаменитой Большой аудитории Политехнического музея (Москва, 21 сентября 2005 г.), где выступали Нильс Бор и Норберт Винер, а также весь цвет отечественной науки — лауреаты Нобелевской премии П.Л.Капица, И.Е.Тамм, Н.Г.Басов, академики С.И.Вавилов, О.Ю.Шмидт, И.И.Артоболевский и многие другие выдающиеся отечественные учёные.

В знак уважения к высочайшему инженерному искусству России Никлаус Вирт преподнёс в дар Политехническому музею свой уникальный компьютер Lilith ("Лилит"), первый европейский персональный компьютер, созданный в ETH в 1980 г. и почти на 10 лет опередивший разработки ведущих компьютерных компаний мира. Во всём мире сохранились лишь единичные экземпляры. Тем более весом тот факт, что проф. Вирт подарил старейшему российскому инженерному музею свой личный компьютер. Такой чести не удостаивалась ни одна другая страна мира. За разработку Lilith и за создание языка Паскаль, на котором воспитано не одно поколение программистов, Никлаус Вирт в 1984 г. был представлен к высшей профессиональной награде — премии Алана Тьюринга (Turing Award). В компьютерном мире она считается эквивалентом Нобелевской премии. Одновременно с Lilith Институт систем информатики им.А.П.Ершова Сибирского отделения Российской академии наук преподнёс в дар Политехническому музею 32-разрядную рабочую станцию "Кронос", ориентированную на язык Modula-2, созданную в Советском Союзе учениками и последователями академика А.П.Ершова и являющуюся дальнейшим развитием 16-разрядного компьютера Lilith.

Лекция проф. Вирта в Политехническом музее в Москве в отличие от выступлений в других аудиториях была посвящена жемчужине его творчества — языку Оберон (1988), который на долгие годы был предан забвению в угоду рыночным интересам крупнейших компаний мира, заимствовавших без какого-либо упоминания идеи проекта Oberon и во многом обесценивших их. Важнейшим лейтмотивом выступлений Вирта была жёсткая критика нынешней практики преподавания компьютерных наук и технологий. Насильственное превращение университетов в ремесленные училища — печальные реалии современного мира. "Такой стиль академической жизни нередко противоречит внутренним убеждениям индивидуума, но навязывается давлением извне превратить храмы учёности в хорошо разрекламированные источники доходов, и этот стиль граничит с проституцией", — отмечал проф. Вирт. По мнению швейцарского учёного, именно университеты должны быть лидерами в области компьютерных наук и информационных технологий, а не идти на поводу у индустрии, ставящей коммерческие интересы превыше всего. "Посмотрим правде в глаза: разве большинство учреждений образования не оказалось заложниками горстки компаний, чья профессиональная цель состоит в повышении доходов — идёт ли речь о производителях оборудования, программного обеспечения или об издательствах?" — столь беспощадная критика в устах великого учёного и педагога заставляет всерьёз задуматься о том, что же на самом деле в мире и у нас в стране творится с формированием интеллектуальной элиты 21 века.

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

Большое турне Вирта, в подготовке которого важнейшую роль сыграл его ближайший сподвижник профессор Юрг Гуткнехт (Juerg Gutknecht), проходил по городам C.-Петербург — Ярославль — Москва — Суздаль — Нижний Новгород — Екатеринбург — Новосибирск — Томск — Москва, где Ярославль и Суздаль были промежуточной остановкой в рамках знакомства Вирта с культурой великой России. В каждом городе проходило по 2-3 рабочих встречи с лучшими программистами страны и ведущими представителями профессорско-преподавательского корпуса, где обсуждались проблемы обучения компьютерным наукам и технологиям наших школьников и студентов, будущих учёных и инженеров, перспективы сотрудничества между Швейцарией и Россией в рамках международного научно-образовательного проекта "Информатика-21".

Немного сухой статистики. На лекциях Вирта, посвящённых языку Оберон и анализу инноваций в компьютерных науках за последние 40 лет, побывало в общей сложности около 5 тыс. человек. Число тех, кто не смог попасть на выступления мировой знаменитости, но был в курсе деталей этого визита через друзей, знакомых, Интернет приблизительно в 5 раз выше аудитории слушателей его лекций. После выхода статей в ведущих изданиях страны аудитория Большого турне Вирта увеличилась ещё примерно в 100 раз и составила около 2,5 млн. человек. За время своего турне Никлаус Вирт на поездах и автомашинах преодолел 4594 км, не считая поездок в пригороды С.-Петербурга и Москвы, а также тысячекилометровые авиаперелёты. Для освещения Большого турне Вирта был открыт специальный событийный сайт Oberon2005.ru, на котором за время турне было зарегистрировано около 100 тыс. запросов.

А теперь некоторые субъективные наблюдения. Эдакий портрет мэтра без галстука.

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

С Никлаусом Виртом заочно я знаком достаточно давно. Изредка удавалось переписываться. Помимо его первой знаменитой лекции в МГУ в 1990 г. дважды были мимолётные встречи — в 1996 г. в Новосибирске, при вручении ему звания Почетного доктора Новосибирского университета (то заслуга столь рано от нас ушедшего Игоря Васильевича Поттосина), и несколькими днями позже в Москве, на квартире у Д.М.Сагателяна, бывшего в ту пору организатором и вдохновителем Рабочей группы по языку Modula-2 в СССР и России. (Сейчас Дмитрий Михайлович живёт и работает в США. Вирт очень хотел пригласить его на лекцию в Политехнический, но увы...).

Тем интереснее было во время турне Вирта тесно пообщаться в неформальной обстановке, попытаться соприкоснуться с духовным миром этого великого человека. Глыбина, светоч науки, безжалостный критик на публике, в жизни он удивительно мягкий и обаятельный человек. Излучает мудрость и душевное тепло ("Какой он милашка", — так говорили о нём молоденькие студентки, покидая аудиторию питерского ИТМО). Возможно, одним из ключей к пониманию его личности служит тот факт, что его любимый русский писатель — Антон Павлович Чехов. Об этом Вирт поведал в Нижнем Новгороде в ходе небольшой ночной прогулки по красивейшему берегу Волги. Во время одной из бесед Вирт сразил меня и собеседников, к месту и почти дословно процитировав фрагмент из чеховской "Дамы с собачкой". Он очень серьёзно относится к утверждению о том, что Москва — Третий Рим. У меня сложилось впечатление, что он рассматривает Россию как едва ли не главную хранительницу вековых традиций мировой духовной культуры, и что отсутствие подобных храмов в компьютерной сфере, в компьютерных науках считает огромным упущением человечества.

С восторгом, буквально затаив дыхание, Вирт слушал акапельное духовное пение в Церкви Ризоположения в Кремле (нам повезло, попали в точности к началу; исполнение в самом деле было неповторимым). Четырьмя днями позже слушали не менее потрясающее духовное пение в Суздале. Выставку сокровищ "Кунсткамеры Габсбургов", которую привезли в Кремль и открыли за несколько дней до нашего посещения, смотреть не захотел. Вот ещё, на это тратить драгоценное время — он приехал в Россию, и здесь его интересовали только наша история и культура, которые он впитывал каждой своей клеточкой.

Интересный момент: в туристическом бюро Суздаля нам удалось заручиться помощью обаятельного юного гида по имени Маша. Вирт был потрясён, я — не меньше. Мало того, что она блестяще говорила по-немецки, но и, как сказал мне потом Вирт, всем сердцем любит свой родной город. Готова рассказывать о нём и его богатейшей истории без устали, часами. В течение нашего длительного неспешного путешествия по музеям жемчужины Золотого кольца России Вирт неотлучно был возле неё. Маша до этого не знала о существовании ни профессора Вирта, ни языка Паскаль, но в середине экскурсии созналась мне, что сразу поняла, "этот добродушный швейцарец" — мировая знаменитость (как ей это удалось — ума не приложу). Уже расставаясь, растроганный Вирт выбрал одну из наиболее понравившихся ему открыток с видом Суздаля и написал нашему замечательному гиду очень тёплые слова на немецком языке.

Ещё один штрих. Сильное впечатление на Вирта произвёл колокольный перезвон в суздальском Кремле. Был единственный за всю первую половину турне ясный тёплый день (24 сентября). Будто судьба решила сделать такой невероятно щедрый подарок: всё великолепие храмов древнего города по-царски оттеняла тронутая красной позолотой осенняя листва. Если говорить о трапезе, которая тоже даёт интересную характеристику человеку, то в отношении напитков Вирт крайне непривередлив: предпочитает чай, минеральную воду, на крайний случай — кофе-эспрессо. Из алкоголя жалует красное сухое вино; очень ему нравится грузинское красное полусладкое (Хванчкара, Киндзмараули). Любит борщ. Вообще, неравнодушен к хорошим супам. С огромным аппетитом ест шашлык и является тонким ценителем настоящих сибирских пельменей.

Несмотря на свой почтенный возраст Вирт оказался очень выносливым человеком (в плане выпавшей на него гигантской нагрузки, а ведь мы с Ф.В.Ткачёвым из Института ядерных исследований РАН постоянно сменялись — и то падали с ног от усталости). Лишь в один из дней (19 сентября) он выглядел крайне утомлённым. То был день открытия в МГУ 1-й Международной конференции по ИТ-образованию. Помимо своего доклада Вирт потом несколько часов допоздна провёл на круглом столе в МГУ, где не одна сотня студентов из тех, что сидели в аудитории факультета ВМиК и стояли в проходах, добивала его многочисленными вопросами. Его друг, Алексей Недоря, в гости к которому в Ярославль Вирт совершил немыслимый тысячекилометровый вояж по дороге из С.-Петербурга в Москву и где отведал баньки и русских блинов, помог увезти знаменитого профессора в гостиницу, а то его просто бы растерзали на "тысячу маленьких медвежат".

Генеральный план Большого турне по России Вирт разрабатывал лично. Честно говоря, меня поразило, сколь много внимания он при планировании уделял всевозможным нюансам. А ведь задача увязать интересы, сроки и ресурсы всех тех, кто помогал в организации визита, была очень непростой. Спонтанно возникшая в конце августа идея исторической лекции в Политехническом была доведена до реализации в невероятно сжатые сроки. Не обошлось, конечно, без досадных накладок, но результат стоил наших усилий. Вирт сумел за несколько дней подготовить специально для этого события очень важное и интересное выступление.

В Политехническом музее, уже после завершения лекции и продолжительной пресс-конференции, Вирт сделал запись в книге почётных гостей музея и отправился на экскурсию. Особенно его поразила одна демонстрация. Он от души аплодировал виртуозу, который показал мастерство солирования на терменвоксе, удивительном изобретении Льва Сергеевича Термена, создавшего в России в 1919-1920 гг. первый в истории электронный музыкальный инструмент. Звук на нём возникает не от касания, а только от движений рук исполнителя в пространстве перед специальными антеннами. При этом со стороны кажется, что звук возникает из ниоткуда. Вирт попробовал что-то подыграть себе сам, но смутился от не очень-то мелодичных звуков, выходивших из-под его неискушённых рук.

Больше всего Вирт хотел попасть в музей ВВС России в подмосковном Монино. Те, кто знает его юношеское увлечение авиамоделизмом, проект OLGA и преклонение перед совершенством аэрокосмических разработок, легко поймут, почему в донельзя загруженной программе были выделены почти два полных дня (22 и 23 сентября) для посещения второго по величине в мире авиационного музея под открытым небом и для запуска беспилотных самолетов в Егорьевске. В Монино Вирт не просто слушал интереснейшие рассказы импровизированного гида — действующего лётчика, руководителя местного аэроклуба, — он уточнял, почему не шли в серию те или иные перспективные разработки, опережавшие время, несколько раз переспрашивал о конкретных примерах конкуренции в этой области между Советским Союзом и США. Было видно, что тема противостояния имперским амбициям Америки его весьма и весьма волновала. На обратном пути, уже после мимолётного визита в редакцию журнала "Мир ПК", Вирт обратился ко мне с вопросом: почему многие в России смотрят на Америку снизу вверх? Что я мог ему ответить? Печально, но мы пожинаем горькие плоды безвременья последних двух десятилетий.

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

Думаю, ему, да и не только ему, хотелось бы, чтобы тот визит в Россию не прошёл бесследно и помог бы многим в нашей стране осознать, какой богатейший пласт компьютерной культуры был от нас и от остального мира скрыт все эти годы. Как было бы здорово, если бы мы, подобно той служащей отеля, смогли понять, что же хотел Вирт донести до нас, отважившись на склоне лет на такой смелый и рискованный шаг — на Большое турне по необъятной России.


Материалы к Большому турне проф. Вирта (2005)

RB34. “Роса”: перенацеливаемая отечественная ОС нового поколения

Заметки по началу проекта:
  • RB22. О проекте создания отечественной перспективной ОС
  • RB23. О языках реализации в проекте новой ОС
  • RB25. Новая европейская ОС
  • RB26. Дуальность и другие контуры "Росы"
  • RB27. Пути восхождения к новой ОС
  • RB28. Закон Гордона Мура и закон Дэвида Мэя
  • RB31. Публичный старт проекта "Роса"
  • RB32. Ортогональная система языков в проекте "Роса"
  • Оглавление


    30 ноября в Московском авиационном институте (МАИ) в рамках Открытого семинара по ИТ состоялось публичное представление проекта новой отечественной ОС "Роса".


    Выдержки из доклада:

    Сегодня нередко можно слышать голоса: зачем нам своя операционная система (ОС), когда есть другие? Боимся козней тлетворного Запада?

    Дело далеко не в одном лишь обеспечении информационной безопасности страны. А в той прозе жизни, что ОС задаёт основу современной экономики, в которой информационные технологии (ИТ) играют определяющую роль. Почему мы не считаем возможным отдавать на откуп иностранцам контроль над энергосистемой страны, контроль над авиаперевозками, контроль над железными дорогами, контроль над автомагистралями, над всей транспортной сетью? Давайте предложим кому-нибудь, например, взять под контроль московский метрополитен. Операционная система при столь стремительном возрастании роли ИТ в мировой экономике - то же самое. Это инфраструктура.

    <...>

    Национальная гордость. Спросите любого: нашей стране есть чем гордиться сегодня, кроме былых достижений? Что мы созидаем? И кто нам мешает идти по пути высокого качества масштабных проектов мирового значения?

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

    Но бизнес - это не промышленность. Цель бизнеса - извлечение максимальной прибыли, контроль и расширение рыночной доли. Цель промышленности (отечественной) - развитие собственной страны! Это разные, во многом противоречивые вещи.

    В угоду бизнесу гробятся перспективные направления (если они не приносят осязаемую выгоду сегодня и сейчас). Бизнес в компьютерной сфере пожирает сам себя: вспомним NeXT, вспомним блестящий проект DEC Alpha AXP и корпорацию Digital, вспомним IBM OS/2 и VisualAge Smalltalk. Почему происходит самопожирание бизнеса? Давайте зададимся вопросом: что во главу угла ставят крупные компании? Правильно: сохранение и усиление своего влияния на рынке. Что и даёт необходимую прибыль. А для этого технологическое совершенство не только не полезно, а даже вредно, ибо может подорвать завоёванные позиции.

    <...>

    Отечественная электронная промышленность лежит в руинах. Программная промышленность еще только зарождается… Ее попросту нет. При этом именно программное обеспечение в будущем будет определять темпы роста электронной промышленности. А не наоборот.

    Если инициатором разрыва порочного круга могут стать университеты, а государство не торопится обеспечить их независимость от притязаний бизнеса, то что может сдвинуть дело с мертвой точки?

    Одним из таких катализаторов может стать общенациональный проект, направленный на создание новой ИТ-инфраструктуры и позволяющий объединить ресурсы образования, науки и бизнеса. Стержнем проекта может стать отечественная открытая бесплатная операционная система, ОС нового поколения, создаваемая с нуля в расчете на перспективу 5-10 лет.

    <...>

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

    <...>

    Чтобы полноценно решить задачу подобного масштаба, требуется сконцентрировать интеллектуальную мощь не одного десятка людей. Потребуются не только исследователи, проектировщики, инженеры и рядовые исполнители, но и квалифицированные консультанты, как по научным аспектам проекта, так и по инженерным. Создание новой ОС — это мощный интеллектуальный вызов. Мы убеждены, что достичь цели можно целенаправленной работой, с сильной мотивацией участников и помощников проекта.

    Ларри Пейдж, один из основателей Google, сформулировал принцип "здорового презрения к невозможному" — нужно ставить перед собой цели, которые на первый взгляд могут показаться неосуществимыми. Как говорят на мудром Востоке, "желание – тысяча возможностей", "нежелание – тысяча причин".

    <...>

    В отечественном программировании мы умеем строить дачные коттеджи, даже мосты и путепроводы. Но требуется построить иное: атомные станции с единой энергосетью страны. Проблемы в опыте, в кадрах, в технологиях, в ресурсах, в организации. Наша страна в перспективе способна создать мощную сеть программных центров (НИИ и КБ), близкую к золотой эпохе отечественной компьютерной отрасли: 1950-1960-х годов. Обеспечить их здоровую конкуренцию.

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

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

    RB30-3. В.Ф.Турчин, теория метасистемных переходов и метасистемное программирование

    Начало заметки см. RB30-1.
    Продолжение заметки см. RB30-2.

    После изучения ряда позабытых работ у меня возникла идея выделить особое направление в программировании, которое затрагивало бы (объединяло в определённом аспекте) теоретическое, системное и прикладное программирование в контексте синтеза и анализа программных систем. Термин "метасистемное программирование" подсказала книга Валентина Фёдоровича Турчина "Феномен науки. Кибернетический подход" (1970). Продолжим изучать субъективный срез по этой книге применительно к термину "метасистемное программирование".

    ------


    Метасистемный переход

    Постепенно мы подошли к ключевому моменту в теории Турчина.

    Вот как он разъясняет суть трансформации систем в ходе их эволюции: “Описание следующих этапов развития нервной системы мы будем проводить в плане более феноменологическом. Для этого нам надо подытожить результаты исследования механизма эволюции на ранних этапах в терминах общих кибернетических понятий. Начав думать в этом направлении, мы легко обнаружим одну общую черту в переходах от низшего этапа к высшему. А именно: все эти переходы совершаются следующим образом. На каждом этапе биологическая система имеет подсистему, которая может быть названа высшим управляющим устройством и которая имеет наиболее позднее происхождение и наиболее высокую организацию. Переход на следующий этап происходит путём размножения этих подсистем (путем многократной редупликации) и интеграции их, т.е. объединения в одно целое с образованием (по методу проб и ошибок) системы управления, во главе которой стоит новая подсистема, которая теперь является высшим управляющим устройством нового этапа эволюции. Систему, состоящую из управляющей подсистемы Х и управляемых ею многих однородных подсистем A1, A2, A3,… мы назовём метасистемой по отношению к системам A1, A2, A3,… Переход с этапа на этап мы назовём, следовательно, метасистемным переходом (рис. 3.1).


    Это понятие будет играть решающую роль в последующем изложении. Метасистемный переход создает высший уровень организации — метауровень по отношению к уровню организации интегрируемых подсистем. С точки зрения функциональной метасистемный переход состоит в том, что деятельность, являющаяся управляющей на низшем этапе, становится управляемой на высшем этапе и появляется качественно новый (высший) вид деятельности, заключающийся в управлении деятельностью. Редупликация и отбор приводят к созданию необходимых структур. Первый метасистемный переход, который мы усматриваем в истории животных, это возникновение движения. Интегрируемыми подсистемами являются части клетки, обеспечивающие обмен веществ и размножение. Положение этих частей в пространстве до поры до времени случайно, неуправляемо. Но вот появляются органы, соединяющие остальные части клетки и приводящие их в движение: клеточная мембрана, реснички, жгутики. Происходит метасистемный переход, который можно определить формулой (1) "Управление положением = Движение".

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

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

    Здесь необходимо указать на одну важную черту метасистемного перехода. Когда интегрируемые подсистемы объединяются в метасистему, то вследствие разделения функций между ними происходит их специализация, т.е. приспособление к определённой частной деятельности и утрата способности к другим видам деятельности. Специализация особенно отчётливо проявляется при интеграции целых организмов. Каждая интегрируемая подсистема содержит в этом случае много «лишнего» того, что было необходимо ей для самостоятельной жизни, но не нужно в сообществе, ибо соответствующие функции выполняются другими подсистемами. Так, в многоклеточном организме появляются специализированные мышечные и нервные клетки. Вообще надо отметить, что интеграция подсистем отнюдь не является концом их эволюционирования. Нельзя представить дело таким образом, что системы A1, A2, A3, … размножаются в больших количествах, после чего «над ними» вдруг возникает управляющее устройство X. Напротив, зачатки системы управления образуются, когда число подсистем Ai невелико — всего несколько штук. Только при таком условии, как мы видели выше, может работать метод проб и ошибок. Уже после того, как наметилась управляющая подсистема X, происходит массовая редупликация подсистем Ai, в процессе которой совершенствуются как Ai, так и X. Возникновение структуры управления подсистемами Ai, не завершает, а вызывает бурный рост числа подсистем Ai, и предшествует ему, ибо при этом размножение Ai, становится нужным для организма. Носитель определённого уровня организации разрастается лишь после того, как начинает образовываться новый, более высокий уровень. Эту черту можно назвать законом разрастания предпоследнего уровня. Поэтому и при феноменологическом функциональном описании метасистемный переход проявляется не тотчас же вслед за закладкой нового уровня, а несколько позже, когда предпоследний уровень «войдёт в силу». Метасистемный переход всегда затрагивает два уровня организации.

    Продолжим наш обзор этапов эволюции. Применим принцип метасистемного перехода к уровню раздражимости. На этом уровне возбуждение каких-то участков одноклеточного организма или специализированной нервной клетки в многоклеточном организме происходит непосредственно внешней средой и это возбуждение непосредственно (один к одному) вызывает возбуждение мышечной активности. Что может означать управление раздражимостью? Очевидно, создание нервной сети, элементы которой, в частности эффекторы, возбуждаются не прямо внешней средой, а через посредство сложной управляющей системы. Это тот этап эволюции, который мы связали с понятием сложного рефлекса. Особенно отчётливо виден факт управления раздражимостью на этом этапе в том, что при наличии цели возбуждение эффекторов зависит не только от состояния внешней среды, но и от этой цели, т. е. от состояния каких-то внутренних нейронов сети. Итак, формула этого метасистемного перехода (от третьего к четвертому этапу): (3) "Управление раздражимостью = Сложный рефлекс".
    <…>
    Управление рефлексами надо понимать как создание под действием индивидуального опыта любых переменных связей между этими объектами. Такие связи называют ассоциациями представлений или просто ассоциациями. Термин «представление» понимается здесь в широком смысле — как состояние любых подсистем мозга, в частности классификаторов и эффекторов. Образование ассоциаций мы будем называть ассоциированием (терминология тяжеловатая, зато точная). Итак, пятый этап эволюции — этап ассоциаций. Формула метасистемного перехода на этом этапе: (4) "Управление рефлексами = Ассоциирование".
    <…>


    Понятия рефлекса и ассоциации — не структурные, а функциональные понятия. Связь между стимулом S и реакцией R в рефлексе (рис. 3.2) — не передача информации от одной подсистемы к другой, а переход из одного обобщенного состояния в другое. Это разграничение необходимо, чтобы не смешивать рефлекс как определённую функциональную схему, описывающую поведение, с воплощением этой схемы, т.е. с кибернетическим устройством, обнаруживающим эту схему поведения.

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


    Ассоциации представлений

    Что есть ассоциация, ассоциирование? Как возникают ассоциации представлений?

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


    Управление ассоциированием

    Ассоциирование ещё не есть мышление. Путь от рефлексов к ассоциированию потребовал управления рефлексами. Аналогичным образом мышление появляется как метасистемный переход, который возник благодаря добавлению управления ассоциированием.

    В.Ф.Турчин так это поясняет: “Логика нашего повествования побуждает нас связать возникновение мышления с очередным метасистемным переходом. В настоящее время мы ещё так мало знаем о процессе мышления и о структуре мыслящего мозга, что всякую теорию, претендующую на объяснение этого явления в целом, надо рассматривать как гипотетическую. Следовательно, и к нашей концепции мышления надо относиться как к гипотезе. Однако эта концепция указывает место мышления в ряду естественных явлений и, как мы увидим, приводит в систему обширное множество фактов. В её пользу говорит также полное отсутствие произвольных допущений частного характера, которое обычно приходится делать, когда теория включает структурное описание мало изученного объекта. Ядром нашей концепции является не какая-либо гипотеза о конкретной структуре и механизме работы мозга, а выбор таких функциональных понятий, через которые становится возможным последовательное и достаточно убедительное объяснение фактов, относящихся к мышлению. Итак, мы утверждаем, что появление мыслящих существ, знаменующее начало нового этапа эволюции и даже новой эры — Эры Разума, есть не что иное, как очередной метасистемный переход, происходящий по формуле (5) "Управление ассоциированием = Мышление".

    Чтобы доказать это утверждение, мы будем анализировать следствия, вытекающие из управления ассоциированием, и отождествлять эти следствия с теми формами поведения, которые мы наблюдаем у мыслящих существ. Прежде всего, что такое управление ассоциированием? Представления Х и Y ассоциируются у животного только в том случае, когда они совместно появляются в его опыте. Если не будет их совместного (как правило, многократного) появления, то не возникает и ассоциации. Животное не вольно управлять своими ассоциациями. Оно имеет только те ассоциации, которые ей навязывает среда. Управление ассоциированием означает наличие в мозгу механизма, позволяющего ассоциировать любые два или несколько представлений, которые вовсе не имеют тенденции встречаться в опыте совместно. Иначе говоря, это произвольное, не навязанное внешней средой ассоциирование. Казалось бы, эта акция совершенно бессмысленна. В огороде бузина, а в Киеве дядька — к чему связывать эти два факта, которые на самом деле никак не связаны между собой? Тем не менее, произвольное ассоциирование имеет глубокий смысл. Оно действительно было бы бессмысленным, если деятельность мозга сводилась бы к пассивному восприятию впечатлений, их сортировке, компоновке и т.п. Но у него есть и другая задача, кстати основная, — управлять организмом, осуществлять активное поведение, которое меняет окружающую среду, создаёт новый опыт.

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

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

    Возникновение человеческого общества — крупномасштабный метасистемный переход, при котором интегрируемые подсистемы — это целые организмы. В этом плане его можно сравнить с возникновением многоклеточных организмов из одноклеточных. Однако его значение, его революционность неизмеримо больше… Можно рассматривать общество как единое сверхсущество. Его «тело» — это тела всех людей плюс предметы, созданные и создаваемые людьми: одежда, жилища, машины, книги и т.д. Его «физиология» — это физиология всех людей плюс культура общества, т.е. определённый способ управлять предметным компонентом общественного тела и образом мышления людей. Возникновение и развитие человеческого общества знаменуют начало нового (седьмого по нашему счету) этапа эволюции жизни. Функциональная формула метасистемного перехода от шестого к седьмому этапу такова: (6) "Управление мышлением = Культура".

    Химическая эра
    1. Химические основы жизни
    2. Движение
    3. Раздражимость (простой рефлекс)

    Кибернетическая эра
    4. Нервная сеть (сложный рефлекс)
    5. Ассоциирование (условный рефлекс)

    Эра разума
    6. Мышление
    7. Социальная интеграция, культура

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

    Параллели между обществом и многоклеточным организмом были подмечены давно. Но вот вопрос: как относиться к этим параллелям? Можно считать их если и не случайными, то, во всяком случае, поверхностными и малозначительными, что-то вроде сходства стрелы подъёмного крана с руками человека. Однако кибернетический подход приводит нас к другой точке зрения, согласно которой аналогия между обществом и организмом имеет глубокий смысл, свидетельствуя о наличии чрезвычайно общих законов эволюции, действующих на всех уровнях организации материи, и указывая нам направление развития общества".


    Формализация и метасистемный переход

    Появление языка ведёт к постепенной формализации, к появлению формальных языков и метаязыков, новых теорий и метатеорий.

    Турчин пишет: “Превращение языка в независимую от создавшего его человеческого мозга реальность, происходящее благодаря формализации, имеет далеко идущие последствия. Только что созданная языковая машина (теория) становится, как часть окружающего человека мира, объектом изучения и описания с помощью нового языка. Происходит, таким образом, метасистемный переход. Новый язык называют по отношению к описываемому языку метаязыком, а теории, сформулированные на этом языке и касающиеся теорий на языке-объекте, — метатеориями. Если метаязык формализованный, то он в свою очередь может стать объектом изучения с помощью языка следующего уровня и этот метасистемный переход может повторяться неограниченно… Подобно тому, как овладение общим принципом производства орудий для воздействия на предметы приводит к многократному повторению метасистемного перехода и созданию иерархической системы промышленного производства, так и овладение общим принципом описания (моделирования) действительности с помощью формализованного языка приводит к созданию иерархической системы формализованных языков, на которой основаны современные точные науки. Обе иерархии имеют значительную высоту. Невозможно построить реактивный самолет голыми руками. То же относится и к инструментам, необходимым для постройки самолета. Надо начинать с простейших орудий и пройти всю иерархию сложности инструментов, чтобы добраться до самолёта. Точно так же, чтобы обучить дикаря квантовой механике, придется начать с арифметики.

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


    Комментарии

    Попробуем немного подытожить сказанное.

    Аркадий Климов (SuperCompilers) сформулировал следующие тезисы, вытекающие из теории В.Ф.Турчина. Их он разбил на два направления: (1) роль в анализе творений природы (и, возможно, других людей), а также (2) роль при совершении собственного творческого акта (конструирования чего-либо).

    Первое направление (анализ). Подход Турчина позволяет замечать наличие новых уровней управления по следующим признакам:

    • 1. Большое число подобных друг другу подсистем (т.н. закон разрастания предпоследнего уровня).


    • 2. Расслоение, специализация изначально однородных подсистем (примеры: многоклеточные организмы, муравейник, общество).


    • 3. Способность у некоторых (новых) элементов к изменению того, что у других, находящихся уровнем ниже, фиксировано (символьная алгебра против операций над конкретными числами, индексная адресация в компьютерах и массивы в языках программирования).


    • 4. Способность связывать свободу изменения изменчивого параметра до значений с нужными полезными свойствами, как бы решение уравнений (регулирование, обучаемость по методу проб и ошибок).


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


    Второе направление (конструирование):
    • 1. Создание сложной системы с новыми формами сложного поведения не обязательно должно включать непосредственную реализацию схемы этого поведения, но можно, и это эволюционно предпочтительнее, создавать механизмы координации базисных подсистем, ни одна из которых сама по себе не обладает нужными свойствами, так, что нужные свойсва появляются как результат этой координации. (Этот тезис сформулирован в статье Бена Гертцеля "Internet Supermind and beyond".).


    • 2. Создание новых инструментов, позволяющих манипулировать (как объектами) старыми инструментами (компиляторы языков программирования, рефлексия в языках программирования, метавычисления, теория доказательств, и вообще, создание инструментов для изготовление инструментов).

    Тезисы Аркадия Климова вносят определённую ясность в прагматическую ценность теории Турчина. Но нас интересует её преломление в отношении программирования и создания программных систем.

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

    Метасистема оперирует понятиями (абстракциями, конструктами) находящихся в её ведении систем, которые на новом уровне (метауровне) становятся объектами изучения и воздействия. При этом можно говорить как о восходящем процессе (ре)организации систем, так и о нисходящем.

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

    Интересно отметить то, как соотносится (исторически и идейно) суперкомпиляция Турчина с теорией частичных (смешанных) вычислений, одним из важных результатов которой является автоматическое построение компилятора на основе имеющегося интерпретатора того или иного языка. В.Ф.Турчин в своей статье "A Supercompiler System Based on the Language REFAL" пишет: "В 1976 г. А.П.Ершов сделал в Институте прикладной математики (Москва) доклад о своей работе в области частичных вычислений для трансляции и оптимизации программ. Ершов пришёл к своим идеям независимо от меня и безотносительно контекста какого-либо конкретного языка. После выступления Ершова я с ним встретился и проинформировал о работе по теории компиляции в контексте языка Рефал. В частности, я сделал акцент на важности понятия метасистемного перехода и того, как это может быть использовано для автоматического создания компиляторов. Последнее было упомянуто Ершовым в его работе "О сущности трансляции" (1977)… "

    Турчин в своих работах оперирует понятием суперкомпиляции. Её можно рассматривать как особую форму трансформации программы (системы). Разница состоит в том, что трансформации подразумевают последовательность эквивалентных преобразований, а суперкомпиляция по сути "отложенная" трансформация: исходная программа не меняется, а создаётся модель вычислительного процесса. По достижению самодостаточности этой модели исходная программа отбрасывается. Суперкомпиляция служит воплощением принципа приобретения человеком знаний: поиск обобщённого состояния в терминах, в которых можно создать самодостаточную модель части мира.

    В контексте метасистемного программирования (в нашем понимании) открывается немало интересного и полезного. Отмечу, в частности, идею достижения контроля сложности за счёт упрощения языков программирования с одновременным созданием "многоэтажных" языков (работающих по схеме "метасистема-система"). Такие языки, как Лисп, Рефал, Пролог, Форт, Си, Оккам, Оберон можно рассматривать как языки-ядра. Современные тенденции постоянного наращивания мощи за счёт экстенсивного развития встроенных языковых средств привели к существенному усложнению универсальных языков: C++, Ada, Java, C# и др. пытаются вобрать в себя множество парадигм с максимальным сервисом на уровне языка. Плата за это – потеря контроля над сложностью. Попытки использовать регламентируемые в рамках внутрикорпоративных соглашений подмножества этих языков наталкиваются на очевидные проблемы: надёжность такой регламентации должна обеспечиваться соответствующим компилятором (а не директивными указаниями, костылями и подпорками), т.е. по сути это новый язык с новой реализацией. Подмножества же, формируемые в голове тем или иным разработчиком, наталкиваются на естественные проблемы при коллективной разработке.

    Проф. Вирт при создании трёх своих последних языков (Паскаль, Модула-2, Оберон) шёл в направлении, обратном тенденциям ИТ-индустрии: в каждом новом языке отсекал лишнее (второстепенное) предыдущего языка с добавлением минимума новых ключевых сущностей (модули, расширяемые записи). Эволюция привела его к компактному Оберону, который можно считать эдаким языком-микроядром (по аналогии с микроядерной архитектурой ОС). Для обеспечения эффективного использования этого языка в условиях уже не индивидуального, а промышленного программирования соответствующие средства (прежде всего, архитектурно-инфраструктурного плана) можно вынести на уровень языка, оперирующего сущностями Оберона. Т.е. на архитектурный метаязык (по отношению к Оберону и ряду других языков). Подобная идея прорабатывается в рамках проекта создания новой ОС "Роса". Более того, можно говорить о том, что ранее эскизно обозначенный ортогональный базис языков может быть устроен по многоэтажному принципу: "микроядерные" языки системного программирования (модификации Оберона и Рефала), поверх которых располагаются популярные прикладные языки (в частности, Haskell, Java, Python) с архитектурным метаязыком Metasys.

    Не могу не обратить внимание читателя на очень важную мысль, имеющую самое непосредственное отношение ко всему изложенному. В своей работе "Два взгляда на программирование" (1975, EWD540) Эдгар Дейкстра отмечал: "Похоже, что иерархические системы обладают тем свойством, что нечто, рассматриваемое как неделимое целое на одном уровне, рассматривается как составной объект на следующем, более низком уровне с большей детализацией; в результате дискретность пространства или времени, применимая на каждом уровне, уменьшается на порядок величины при переходе от одного уровня к другому, следующему за ним более низкому. Мы воспринимаем стену через понятие кирпичей, кирпичи – через понятие кристаллов, кристаллы – через понятие молекул и так далее. В результате количество уровней, которые могут быть осмысленно выделены в иерархической системе, в некотором роде пропорционально логарифму отношения между наибольшим и наименьшим дискретами, и поэтому, если только это соотношение не чрезмерно велико, мы можем ожидать появления не слишком большого числа уровней. В области компьютерного программирования наш базовый строительный блок имеет дискретность времени менее микросекунды, но наша программа может потребовать несколько часов вычислений. Я не знаю никакой другой технологии, перекрывающей отношение 1010 и более: компьютер, благодаря его фантастической скорости, кажется, впервые предоставил нам среду, в которой артефакты с высокой степенью иерархичности одновременно и возможны, и необходимы. Этот вызов, а именно противостояние задаче программирования, столь уникален, что новый опыт может рассказать нам очень много нового о нас самих. Он может углубить наше понимание процессов разработки и созидания, он может дать нам лучший контроль над организацией нашего мышления. Если бы он не сделал этого, на мой взгляд, мы вообще не заслуживаем компьютеров! Он уже преподал нам несколько уроков, и один из них, который я выбрал, чтобы акцентировать внимание в этом докладе, заключается в следующем. Мы будем программировать гораздо лучше, если только подойдём к задаче, полностью оценивая её потрясающую сложность, если только мы будем придерживаться скромных и элегантных языков программирования, если только мы примем во внимание свойственные человеческому разуму ограничения и подойдём к задаче как Очень Смиренные Программисты".

    RB30-2. В.Ф.Турчин, теория метасистемных переходов и метасистемное программирование

    Начало заметки см. RB30-1.
    Окончание заметки см. RB30-3.

    После изучения ряда позабытых работ у меня возникла идея выделить особое направление в программировании, которое затрагивало бы (объединяло в определённом аспекте) теоретическое, системное и прикладное программирование в контексте синтеза и анализа программных систем. Термин "метасистемное программирование" подсказала книга Валентина Фёдоровича Турчина "Феномен науки. Кибернетический подход" (1970). Продолжим изучать субъективный срез по этой книге применительно к термину "метасистемное программирование".

    ------


    Иерархия

    Могут ли системы формироваться исключительно на основе иерархии? Или есть другие способы организации? Сколь велика роль иерархии?


    Вот какова точка зрения В.Ф.Турчина: "Иерархия вообще — это такое построение системы из подсистем, когда каждой подсистеме приписывается определённое целое число, называемое её уровнем, причём взаимодействие подсистем существенно зависит от разности их уровней, подчиняясь некоторому общему принципу. Обычно этот принцип — передача информации в определённом направлении (сверху вниз или снизу вверх) от данного уровня к следующему. В нашем случае рецепторам приписывается нулевой уровень, и информация распространяется снизу вверх. Каждая подсистема первого уровня связана с некоторым числом рецепторов, и её состояние определяется состояниями соответствующих рецепторов. Точно так же каждая подсистема второго уровня связана с рядом подсистем первого уровня и т.д.
    <…>
    Все подсистемы промежуточных уровней также являются классификаторами. Непосредственным входом k-го уровня служат состояния классификаторов k-1-го уровня, совокупность которых является для него ситуацией, подлежащей классификации. В иерархической системе, содержащей более одного промежуточного уровня, можно выделить иерархические подсистемы, охватывающие несколько уровней.
    <…>
    Так как с каждым классификатором связана система понятий, иерархия классификаторов порождает иерархию понятий. Передаваясь от уровня к уровню, информация преобразуется, выражаясь в терминах всё более «высокопоставленных» понятий. При этом количество передаваемой информации постепенно уменьшается за счет отбрасывания информации, несущественной с точки зрения задачи, поставленной перед «верховным» (выходным) классификатором.
    <…>
    Во избежание недоразумений следует указать, что иерархия понятий, о которой мы говорим, имеет гораздо более общий смысл, чем иерархия понятий по абстрактности (общности), которую часто называют просто «иерархия понятий». Примером иерархии по общности может служить пирамида понятий, относящихся к систематике животных. На нулевом уровне располагаются отдельные особи животных («конкретные» понятия), на первом — виды, на втором — роды, затем — семейства, отряды, классы, типы. На вершине пирамиды находится понятие «животное». Такая пирамида является частным случаем иерархии понятий в общем смысле, отличающимся тем, что каждое понятие k-го уровня образуется из некоторого числа понятий k-1-го уровня путём их объединения. Это соответствует очень просто устроенным классификаторам. В общем случае классификаторы могут быть устроены как угодно. Распознаватели, нужные животному, — это скорее иерархии по сложности и тонкости понятий, а не по общности.
    <…>
    Может ли иерархия классификаторов возникнуть эволюционным путем? Очевидно, может, но при одном условии: если создание каждого нового уровня иерархии и его последующего расширения полезны животному в борьбе за жизнь. Из факта существования животных с высокоорганизованной нервной системой мы делаем вывод, что так оно и есть в действительности… Набросаем в общих чертах путь развития нервной системы. На начальных стадиях мы находим у животного всего несколько рецепторов. Число возможных способов связи между ними (соединений) относительно невелико и допускает прямой перебор. По методу проб и ошибок находится выгодное соединение. То, что выгодное соединение может существовать даже при очень малом числе нейронов, легко видеть на таком примере. Пусть есть всего два светочувствительных рецептора. Если они расположены на разных сторонах тела, то информация, которую они дают (разность освещённостей), достаточна, чтобы животное могло двигаться на свет или против света. Когда выгодное соединение найдено и осуществлено, допустим, с помощью одного промежуточного нейрона (такие нейроны называются ассоциативными), вся группа в целом может быть размножена. Так возникает система ассоциативных нейронов, регистрирующих, например, разности между освещённостями рецепторов и суммирующих эти разности.

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

    Набросанная нами схема наводит на мысль, что любая сложная система, возникшая в процессе эволюции по методу проб и ошибок, должна иметь иерархическую организацию. Действительно, не имея возможности перебрать все мыслимые соединения большого числа элементов, природа перебирает соединения из нескольких элементов, а найдя полезную комбинацию, размножает её и использует как целое в качестве элемента, который может быть связан с небольшим числом других таких же элементов. Так и возникает иерархия. Это понятие играет огромную роль в кибернетике. Фактически всякая сложная система, как возникшая естественно, так и созданная человеком, может считаться организованной, только если она основана на некой иерархии или переплетении нескольких иерархий. Во всяком случае, до сих пор мы не знаем организованных систем, устроенных иначе.
    <…>
    Деление системы понятий на уровни не является столь безусловным, как мы молчаливо предполагали. Могут быть случаи, когда понятия k-го уровня непосредственно используются на k+2-м уровне, минуя k+1-й.
    <…>
    Чтобы быть более универсальной, система должна быть подобной не одной пирамиде, а многим пирамидам, вершины которых расположены приблизительно на одном уровне и образуют множество понятий (а точнее, множество систем понятий), в терминах которых происходит управление действиями животного и которые обычно обнаруживаются при исследовании его поведения. Об этих понятиях говорят, что они составляют основу определённого «образа» внешнего мира, который складывается в представлении животного (или человека). Состояние классификаторов этого уровня является непосредственной информацией для исполнительной части нервной сети (т.е. в конечном счёте для эффекторов). Каждый из этих классификаторов опирается на определённую иерархию классификаторов — пирамиду, по которой движется информация так, как это было описано выше. Однако пирамиды могут перекрываться в своих средних частях (и заведомо перекрываются в своей нижней части — рецепторах). Общее число вершин пирамиды может быть теоретически как угодно велико, в частности, оно может быть много больше общего числа рецепторов. Это тот случай, когда одна и та же информация, доставляемая рецепторами, представляется множеством пирамид в множестве различных форм, рассчитанных на все случаи жизни.

    Отметим ещё одно обстоятельство, которое следует учитывать при поисках иерархии в реальной нервной сети. Если мы видим нейрон, соединённый синапсами с сотней рецепторов, то это ещё не значит, что он фиксирует какое-то простое понятие первого уровня типа суммарного числа возбуждений рецепторов. Логическая функция, связывающая состояние нейрона с состоянием рецепторов, может быть весьма сложной и имеющей собственную иерархическую структуру".


    Простые и сложные рефлексы

    Раздражимость и нервная сеть ведут к понятиям простых и сложных рефлексов.

    Турчин пишет: "Простейший вариант нервной сети — это вообще её отсутствие. В этом случае рецепторы непосредственно связаны с эффекторами и возбуждение с одного или нескольких рецепторов передаётся на один или несколько эффекторов. Такую прямую связь между возбуждением рецептора и эффектора мы назовём простым рефлексом.
    <…>
    Простая рефлекторная связь между возбудимой и мышечной клетками естественно возникает в процессе эволюции по методу проб и ошибок: если оказывается, что корреляция между возбуждением одной клетки и сокращением другой полезна для животного, то эта корреляция устанавливается и закрепляется. При механическом копировании связанных клеток в процессе роста и размножения природа получает систему параллельно действующих простых рефлексов, подобную щупальцу гидры. Но когда в её (природы) распоряжении оказывается множество рецепторов и эффекторов, связанных попарно или локально, у неё «возникает искушение» усложнить систему связей путем введения промежуточных нейронов. Выгодность этого следует из того, что при наличии системы связей между всеми нейронами становятся возможными такие формы поведения, которые невозможны при ограничении парными или локальными связями.
    <…>
    Объединение любых подсистем, связывающих независимо друг от друга группы рецепторов и эффекторов в единую систему, всегда приводит к огромному возрастанию числа возможных вариантов поведения. Поэтому на протяжении всей истории жизни эволюция нервной системы проходит под знаком увеличения централизации. Однако централизация централизации рознь. Если связать все нейроны в один бессмысленно запутанный клубок, то, несмотря на крайнюю «централизованность» такой системы, она вряд ли будет иметь шансы выжить в борьбе за существование. Централизация ставит следующую проблему: как из всех мыслимых способов соединения многих рецепторов с многими эффекторами (с помощью промежуточных нейронов, если потребуется) выбрать такой способ, который будет каждой ситуации сопоставлять правильное, т.е. полезное для выживания и размножения, действие?
    <…>
    Понятие о рефлексе при описании поведения должно быть дополнено понятием о цели и о регулировании. Схема регулирования изображена на рис.2.6. Действие, которое предпринимает система, зависит не только от ситуации самой по себе, но также и от цели, т.е. от той ситуации, которую система стремится достигнуть. Действие системы определяется в результате сравнения ситуации и цели и направлено к устранению несоответствия между ситуацией и целью. Через блок сравнения ситуация определяет действие. Через изменение среды действие оказывает обратное влияние на ситуацию. Эта петля обратной связи является характерной чертой схемы регулирования, отличающей её от схемы рефлекса, где ситуация просто вызывает действие.
    <…>
    Мы видим, что возникновение иерархически устроенных классификаторов может быть объяснено как результат совместного действия двух основных факторов эволюции: редупликации биологических структур и нахождения полезных связей по методу проб и ошибок.
    <…>
    Редупликация различных подсистем нервной сети может породить множество различных групп классификаторов, «повисающих в воздухе». Среди них могут появиться дубликаты целых этажей иерархии, состояния которых в точности соответствуют состоянию тех «осведомлённых» классификаторов, которые получают информацию от рецепторов… В сложных системах неосведомлённые дубликаты осведомлённых классификаторов могут хранить большое количество информации. Состояния этих дубликатов мы будем называть представлениями, отдавая себе ясный отчёт, что тем самым мы даём определённую кибернетическую интерпретацию этому психологическому понятию. Очевидно, имеет место тесная связь между представлениями и ситуациями, которые ведь суть не что иное, как состояния аналогичных классификаторов, но получающих информацию от рецепторов. Цель представляет собой частный случай представления, а точнее тот случай, когда сравнение постоянного представления и меняющейся ситуации используется для выработки действия, сближающего их друг с другом.
    <…>
    Чем выше организована «осведомлённая» часть нервной системы, тем сложнее и её дубликаты (мы будем их называть фиксаторами представлений) и тем разнообразнее представления. Так как классификаторы могут принадлежать к разным уровням иерархии и ситуация может быть выражена в разных системах понятий, представления также могут различаться своим «понятийным языком», ибо они могут быть состояниями фиксаторов разных уровней. Далее, степень устойчивости состояний фиксаторов представлений также может быть весьма различной. Поэтому представления сильно отличаются по своей конкретности и стабильности. Они могут быть точными и конкретными, почти чувственно воспринимаемыми. Крайним случаем здесь является галлюцинация, которая субъективно воспринимается как реальность и на которую организм реагирует так же, как на соответствующую ситуацию. С другой стороны, представления могут быть очень приблизительными как из-за своей неустойчивости, так и из-за своей абстрактности. Последний случай часто встречается в художественном и научном творчестве, когда представления выступают как цель деятельности. Человек смутно чувствует, что ему надо, и пытается воплотить это в твёрдой предметной форме. У него долго ничего не получается, потому что его представления не обладают необходимой конкретностью. Однако в один прекрасный момент (и это действительно прекрасный момент!) он вдруг добивается своей цели и ясно осознаёт, что он сделал именно то, что хотел.
    <…>
    Мы можем определить сложный рефлекс как такой процесс, когда возбуждение рецепторов, вызванное взаимодействием с внешней средой, передаётся по нервной сети, преобразуясь ею, и активизирует определённый план действий, который тут же начинает выполняться. В этой схеме поведения все обратные связи между организмом и средой осуществляются в процессе регулирования действий планом, а в целом взаимодействие между средой и организмом описывается классической формулой "стимул — реакция". Только теперь реакция — это активизация того или иного плана".


    Память

    Что есть память в контексте теории Турчина? Что вызвало её появление в ходе эволюции?

    Турчин пишет: "Путём редупликации может быть получено, в принципе, сколько угодно фиксаторов представлений. Но тут возникает вопрос: а сколько их нужно животному? Сколько нужно дубликатов «осведомленных» классификаторов? Один? Два? Десять? Из общих соображений следует, что дубликатов нужно много. Ведь фиксаторы представления служат для организации опыта и поведения во времени. Фиксатор цели хранит ситуацию, которая должна, по идее, осуществиться в будущем. Другие фиксаторы могут хранить ситуации, которые реально были в прошлом. Временная организация опыта необходима животному, стремящемуся приспособиться к среде, в которой оно живёт, ибо эта среда обнаруживает некоторые закономерности, т.е. корреляции между прошлыми и будущими ситуациями. Можно предсказать, что после какого-то начального увеличения числа рецепторов дальнейшее совершенствование нервной системы потребует создания фиксаторов представлений, причём создания их в большом числе. Ибо нет смысла продолжать наращивать число рецепторов и классификаторов и улучшать тем самым «мгновенные снимки» окружающей среды, если система не умеет обнаруживать корреляции между ними. Но чтобы обнаружить корреляции между «мгновенными снимками», надо их где-то хранить. Так и возникают фиксаторы представлений, иначе говоря память. Хранение цели в процессе регулирования — это простейший случай использования памяти".


    Иерархия целей и планов

    Иерархия распространяется не только на сами системы, но также на планы и цели.


    Турчин поясняет: "В схеме регулирования на рис. 2.6 цель изображена как нечто единое, целое. Однако мы хорошо знаем, что бывают сложные цели, в процессе достижения которых система ставит пред собой промежуточные, «частичные», цели. Мы уже приводили примеры двухфазных движений: чтобы вспрыгнуть на стул, кошка сначала приседает, а потом подпрыгивает. В более сложных ситуациях цели образуют иерархию, состоящую из многих уровней. Предположим, вы ставите перед собой цель приехать из дома на работу. Это ваша «высшая» цель в данный момент. Припишем ей индекс (номер уровня) нуль. Чтобы приехать на работу, вам нужно выйти из дома, пройти к остановке автобуса, доехать до нужной остановки и т.д. Это цели с индексом минус единица. Чтобы выйти из дома, надо выйти из квартиры, спуститься в лифте и выйти из подъезда. Это цели с индексом минус два. Чтобы спуститься в лифте, надо открыть дверь, войти в лифт и т.д. — индекс минус три. Чтобы открыть дверь лифта, надо протянуть руку к дверной ручке, нажать на неё и потянуть к себе — индекс минус четыре. Эти цели можно уже, пожалуй, считать элементарными. Цель вместе с указанием способа её достижения, т.е. разложения на подчинённые цели, называют планом действия. Наш пример есть фактически описание плана приезда на работу. В цели самой по себе, которая в данном случае есть представление «я — на рабочем месте», никакой иерархической структуры нет. Основной логической единицей, образующей иерархию, является план, а цели образуют иерархию лишь постольку, поскольку они являются элементами плана".


    Структурные и функциональные схемы

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


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


    Такое описание кибернетической системы не является единственно возможным. Часто нас интересует не столько структура системы, сколько её функционирование, действие. Ещё чаще мы просто ничего не можем сказать толком о структуре, но кое-что можем сказать о функционировании. В таких случаях можно построить функциональную схему. Это тоже ориентированный граф, но вершины здесь изображают различные множества состояний системы, а дуги — возможные переходы между состояниями. Дуга соединяет две вершины в направлении от первой ко второй в том случае, если хотя бы из одного состояния, относящегося к первой вершине, возможен переход в какое-либо состояние, относящееся ко второй вершине. Множества состояний мы будем называть обобщёнными состояниями. Следовательно, дуга на схеме указывает возможность перехода из одного обобщённого состояния в другое. Если структурная схема отражает главным образом пространственный аспект, то функциональная — главным образом временной. Формально в соответствии с данным выше определением функциональная схема вообще никак не отражает пространственного аспекта — разделения системы на подсистемы. Однако, как правило, разделение на подсистемы находит отражение в способе определения обобщённых состояний, т.е. разделения множества всех состояний системы на подмножества, «приписанные» к различным вершинам графа".


    Феноменологическое описание

    Эмпирическое знание, философия опыта, анализ внешних проявлений, одним словом, феноменология — это подчас тот единственный инструмент, который имеется в нашем распоряжении для изучения той или иной системы.

    В.Ф.Турчин пишет: “Итак, формально, действие на функциональной схеме — это множество состояний. Но сказать, что данное действие есть какое-то множество, — это почти ничего не сказать. Надо уметь определить это множество. И если мы не знаем структуры системы и способа её функционирования, то сделать это строго практически невозможно. Остается довольствоваться неполным, феноменологическим определением, основанным на внешне проявляемых следствиях внутренних состояний. Вот такими-то функциональными схемами с более или менее точно определёнными действиями в вершинах графа и описывается поведение сложных, неизвестно как устроенных систем, подобных животным или человеку… Феноменологический подход к деятельности мозга осуществляется двумя науками: психологией и бихевиористикой (изучение поведения). Первая основана на наблюдениях субъективных (изнутри), вторая — объективных (извне). Они тесно связаны между собой, и часто их объединяют под общим названием психологии.
    <…>
    Каковы же структурные схемы, реально возникшие в процессе эволюции? Увы, пока мы этого достоверно не знаем. Поэтому-то нам и пришлось перейти к функциональным схемам. И это только первое из ограничений, которые мы будем вынуждены накладывать на стремление к точному кибернетическому описанию высшей нервной деятельности. Мы очень мало знаем сейчас о кибернетической структуре и работе мозга высших животных и, тем более, человека. Собственно говоря, мы почти ничего не знаем. Есть только отдельные факты и предположения. Поэтому в дальнейшем анализе нам придется опираться главным образом на феноменологию — данные бихевиористики и психологии, где дело обстоит несколько лучше".

    RB30-1. В.Ф.Турчин, теория метасистемных переходов и метасистемное программирование

    Продолжение заметки см. RB30-2.
    Окончание заметки см. RB30-3.

    В предыдущей заметке я постарался вкратце изложить свой субъективный срез книги Джорджа Пойа применительно к идее Эдгара Дейкстры об аналогии между схемами решения задач в математике и программировании. Ассоциация, предложенная Дейкстрой, видится весьма полезной: процесс мышления в обоих случаях имеет больше сходства, чем различий и даёт важный ключ к пониманию разных аспектов сложности процесса программирования. Подобные аналогии отмечал в своей статье "Программирование — вторая грамотность" (1981) и А.П.Ершов: "Законы программирования смыкаются с математическим образованием, образуя единый, но ещё не построенный фундамент воспитания операционного и комбинаторного мышления, способности к абстракции, рассуждению и действию".

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

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

    В своей работе "Научная фантастика и научная реальность в информатике" (EWD952, 1986) Эдгар Дейкстра писал: “Она (информатика – прим. Р.Б.) обладает всей остротой чистой математики, будучи более формальной, чем многие другие отрасли математики. Она не может избежать такой формальности, поскольку любой язык программирования, будучи интерпретируемым механически, представляет своего рода формальную систему. В то же время она обладает всей прелестью прикладной математики, поскольку огромная мощность современных компьютеров даёт такие возможности для создания хаоса, что её методы необходимы, если мы не намерены угодить в ловушку сложности, которую сами же и создали. Научиться не попадать в собственноручно созданную ловушку сложности, сохранять вещи достаточно простыми и научиться эффективно мыслить о своих разработках — вот центральная задача информатики”.

    Продолжим теперь знакомство с другими важными материалами, имеющими отношение к анализу основ такой интеллектуальной сферы, как программирование.

    Как известно, академик А.П.Ершов выделял три ветви программирования: теоретическое, системное и прикладное. Где же между ними проходят границы? Если оставить в стороне теоретическое программирование (как фундаментальную науку) и обратиться к двум остальным, можно заметить, что к сфере системного программирования принято причислять то, что связано с инфраструктурным программным обеспечением. Оно в большей степени абстрагируется от прикладных задач и концентрируется на их отображении (трансляции) на ту или иную компьютерную платформу. Другими словами, выступает в роли посредника между компьютером и прикладной программой. Операционные системы (ОС), системы программирования (языки), системы управления базами данных (СУБД) — вот три кита системного программирования.

    В последнее время реже стали говорить "прикладная программа" и всё чаще – "приложение". Почему? Так удобно. Ведь есть программы, а есть системы. Интуитивно мы вроде бы понимаем, что это разные вещи. Но чем они принципиально отличаются? Сложностью? Весьма расплывчатое понятие. Сложность в программировании чаще носит субъективный характер. Размерами? Вряд ли. Бывают программы в несколько сотен тысяч строк. И системами их назвать язык не поворачивается. Почему? Таков уровень архитектурных решений. В случае программы архитектура вырождена. В случае же системы она присутствует в более-менее развитом виде. Одно и то же приложение можно выполнить в виде программы и в виде системы. Отличаться они будут своей организацией.

    Система является более высокоразвитой формой программного обеспечения, нежели программа. В сфере прикладного программирования с формированием постепенной зрелости процесса разработки ПО и богатого спектра приложений потребность в системах становится всё выше. При этом нет чётко выраженного направления в программировании, которое бы занималось вопросом создания программных систем. Вне зависимости от того, к какой сфере они относятся — системного программирования или прикладного. Опять же на интуитивном уровне понятно, что как только мы переходим от программы к системе, есть много общего (единого) в программировании систем: как тех, что ближе к железу, так и тех, что ближе к прикладным задачам. Как и в области строительства, одной архитектурой здесь дело не ограничивается. Важны и другие, инженерные элементы. (Хотя бы то, из какого "материала" такая архитектура выполнена.) UNIX — это прежде всего архитектура. Язык, казалось бы, играет здесь вторичную роль. Но попробуйте заменить Си на Модулу-2 и вы увидите существенную разницу. При той же архитектуре. Попробуйте заменить фрагменты на Си на реализацию тех или иных формализмов (конечных автоматов, сетей Петри и т.п.). Архитектура та же. А "материал" и инженерные коммуникации несколько иные. Значит, "сопромат" и в программировании — не последнее дело…

    С системами обычно связывают понятие управления. Не будем сейчас вдаваться в дискуссию относительно систем, в которых нет управления. К этому мы ещё вернемся. А пока обратим свой взгляд на уже проработанные направления, имеющие отношение к вопросам синтеза и анализа систем вообще. Тектология А.А.Богданова, праксеология Е.Е.Слуцкого и Т.Котарбиньского, общая теория систем Л.Берталанфи, кибернетика Н.Винера и У.Р.Эшби, системология Г.Н.Поварова… Всё это заслуживает отдельного обсуждения.

    Особняком в этом ряду стоит кибернетика. Она сначала стремительно ворвалась в нашу жизнь, а потом столь же стремительно была предана забвению. Очень уж мы склонны к крайностям. Впрочем, и в годы её расцвета скепсис был немалый, причем даже со стороны тех, кто её развитием реально и занимался. В своей книге "Беседы о программировании" (1963) советский математик и один из первых отечественных программистов Александр Семёнович Кронрод не без чувства юмора (хотя и весьма серьёзно) писал о кибернетике так: "Как должна развиваться наука-кибернетика? Плодотворно. Для этого надо: (1) Чтобы программированием занимались программисты, (2) Механизмами в живом организме занимались физиологи, биофизики, биохимики и т.д., (3) Специалисты по социальным дисциплинам изучали законы, управляющие обществом, (4) Лингвисты и филологи занимались своим делом, (5) Врачи лечили и с этой конечной целью изучали болезни и больных, а также и здоровых, (6) Шофёры водили автомобили (автобусы, самосвалы и т.д.) и (7) Никто без нужды не болтал попусту. А когда врачам нужны теория вероятностей, математическая статистика, дифференциальные уравнения или работа на электронных машинах – им необходимо всемерно помогать в этом деле. И иногда – учить и даже подталкивать, потому что человек часто просто не знает о возможностях чужой науки. И делать это надо профессионально. А наука-кибернетика здесь ни при чём. И автор даже подозревает, что она и ни в каком деле ни при чём. Потому что он лично не слышал ни о каком достижении этой науки-кибернетики. И полагает, что, кроме названия, у науки-кибернетики больше ничего и нет".

    Другой известный советский математик, академик А.Н.Колмогоров высказывал несколько иной взгляд. В 1959 г. в предисловии к книге английского кибернетика У.Р.Эшби он писал: “Сейчас уже поздно спорить о степени удачи Винера, когда он в своей известной книге в 1948 г. выбрал для новой науки название “кибернетика”. Это название достаточно установилось и воспринимается как новый термин, мало связанный со своей греческой этимологией. Кибернетика занимается изучением систем любой природы, способных воспринимать, хранить и перерабатывать информацию и использовать её для управления и регулирования. При этом кибернетика широко пользуется математическим методом и стремится к получению конкретных специальных результатов, позволяющих как анализировать такого рода системы (восстанавливать их устройство на основании опыта обращения с ними), так и синтезировать их (рассчитывать схемы систем, способных осуществлять заданные действия). Благодаря этому своему конкретному характеру кибернетика ни в какой мере не сводится к философскому обсуждению природы “целесообразности” в машинах и философскому анализу изучаемого ею круга явлений”.

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

    После изучения ряда позабытых работ у меня возникла идея выделить особое направление в программировании, которое затрагивало бы (объединяло в определённом аспекте) теоретическое, системное и прикладное программирование в контексте синтеза и анализа программных систем. Термин "метасистемное программирование" подсказала книга Валентина Фёдоровича Турчина "Феномен науки. Кибернетический подход" (1970). О том, как метасистемное программирование соотносится с кибернетикой, мы ещё успеем поговорить. Сейчас же давайте сосредоточимся на сути подхода В.Ф.Турчина.

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

    В.Ф.Турчин. "Феномен науки: Кибернетический подход к эволюции". — http://www.europrog.ru/book/psvt1993r.pdf (1,6 Мбайт). В HTML оригинал здесь: http://www.refal.net/turchin/phenomenon/

    Биографическая справка. Валентин Фёдорович Турчин родился в 1931 г. в г.Подольске Московской области в семье профессора агрохимии. Физик, математик, программист, философ. (Ровно такая же последовательность, такая же широта интересов была в биографии Эдгара Дейкстры.) Окончил в 1952 г. физический факультет МГУ. С 1953 по 1964 гг. работал в подмосковном Обнинске в Физико-энергетическом институте, где изучал рассеяние медленных нейтронов в жидкостях и твёрдых телах и где защитил кандидатскую диссертацию (1957). В 1964 г. оставляет физику, переходит в Институт прикладной математики им. М.В.Келдыша АН СССР и посвящает свою деятельность информатике. В 1966 г. была опубликована его первая работа по метаязыку Рефал, построенному Турчиным на основе рекурсивных функций: “Метаязык для формального описания алгоритмических языков — Цифровая вычислительная техника и программирование” (Москва, 1966). Турчин заложил основы метавычислений, предложив качественно новый метод преобразования и оптимизации программ — суперкомпиляцию.
    В  1967 г. Турчин подписал первое письмо в защиту А.Гинзбурга. В 1968 г. в Самиздате появляется брошюра «Инерция страха». В 1970 г. им подготовлена к печати книга «Феномен науки» (опубликована на английском языке в 1977 г.). В 1973 г. он выступил с открытым письмом в защиту А.Сахарова. После этого перед Турчиным закрываются все возможности научной работы. В 1977 г. он вынужден покинуть СССР и эмигрировать в США. Работал в Институте математических наук им. Куранта в Нью-Йоркском университете (Courant Institute for Mathematical Sciences). С 1979 по 1999 гг. был профессором компьютерных наук в The City College of New York. В 1991 г. совместно с Cliff Joslyn (Los Alamos National Laboratory) и Francis Heylighen (Free University of Brussels) основал проект Principia Cybernetica Project — энциклопедия идей по кибернетической эволюции человечества, концепция Всемирного мозга на основе самоорганизации модулей знаний в Интернете. В 1998 г. стал сооснователем компании SuperCompilers.


    Важное уточнение. В.Ф.Турчин был принят в Институт прикладной математики им. М.В.Келдыша АН СССР с большими проблемами, которые были вызваны ведением им диссидентской деятельности. Как отметил мне в личной переписке Михаил Михайлович Горбунов-Посадов, за неё его и уволили с предыдущей работы. Никто брать его не хотел (да и не мог). Но Михаил Романович Шура-Бура, опираясь на поддержку М.В.Келдыша, взял Турчина в Институт, правда, под честное слово, что диссидентством здесь он заниматься не будет. И Турчин достаточно долго держался. Возможно, именно этим мы обязаны появлению Рефала. Но в конце концов Турчин не выдержал, пришёл к Михаилу Романовичу и заявил, что молчать больше не в силах и, согласно их уговору, увольняется. -- [Благодарю М.М.Горбунова-Посадова за это уточнение].

    Избранные публикации:


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

    Это очень лаконичное разъяснение. Чтобы в нём разобраться поглубже, имеет смысл немного погрузиться в контекст восприятия. Для этого воспользуюсь приёмом избирательного цитирования.

    Во введении к своей книге В.Ф.Турчин разъясняет истоки её замысла: "Принципы, столь общие, что они применимы как к развитию науки, так и к биологической эволюции, требуют для своего выражения столь же общих понятий. Такие понятия даёт кибернетика — наука о связях, управлении и организации в объектах любой природы. В кибернетических понятиях с равным успехом описываются явления физико-химические, биологические, социальные. Именно развитие кибернетики и особенно её успехи в описании и моделировании целенаправленного поведения и распознавания понятий сделали возможным написание этой книги. Поэтому более точно её предмет можно определить так: кибернетический подход к науке как к изучаемому явлению. Идейным стержнем книги является понятие о метасистемном переходе, т.е. переходе от кибернетической системы к метасистеме, включающей в себя множество систем типа исходной, организованных и управляемых определённым образом. Сначала это понятие было положено автором в основу анализа развития знаковых систем, используемых наукой. Затем, однако, оказалось, что исследование под этим углом зрения всей эволюции жизни на Земле позволяет воссоздать связную и подчинённую единым закономерностям картину или, лучше сказать, киноленту, которая начинается с первых живых клеток и кончается современными научными теориями и системой промышленного производства. Эта кинолента указывает, в частности, место феномена науки в ряду других явлений мира и раскрывает его значение на фоне общей картины эволюции Вселенной. Так возник замысел настоящей книги".

    Книга Турчина написана с философским уклоном. При этом читается очень легко. Но после ознакомительного прочтения в ней стоит выделить разные аспекты и перечитать сквозь их призму. Сейчас мы остановимся на "метасистемном программировании", точнее, на его базовых понятиях — метасистемах и метасистемных переходах.

    Слово В.Ф.Турчину: "Важное место в книге отводится проблемам теории познания и логики; они трактуются, конечно, с кибернетических позиций. Кибернетика сейчас ведет наступление на традиционную философскую гносеологию, давая новую, естественно-научную интерпретацию одним её понятиям и отвергая другие как несостоятельные. Некоторые философы противятся этому наступлению, считая его посягательством на свою территорию. Они обвиняют кибернетиков в “огрублении” и “упрощении” истины, в игнорировании “принципиального различия” между формами движения материи (и это несмотря на тезис о единстве мира!). Но философ, которому чуждо землевладельческое отношение к различным областям знания, должен приветствовать атаки кибернетиков. В своё время развитие физики и астрономии уничтожило натурфилософию, избавив философов от необходимости говорить приблизительно о том, о чём ученые могут говорить точно. Очевидно, развитие кибернетики сделает то же с философской гносеологией или — скажем более осторожно — со значительной её частью. Этому надо только радоваться. У философов всегда будет достаточно своих забот: наука избавляет их от одних, но доставляет другие".


    Системы, подсистемы, состояния

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

    Турчин пишет: "Сам термин «кибернетика« ввел, как известно, Норберт Винер, определив его описательно как учение о связях и управлении в живом организме и машине. Чтобы более точно дать определение кибернетики, как и всякой научной дисциплины, мы должны ввести её основные понятия. Собственно говоря, ввести основные понятия — это и значит уже определить данную науку, ибо остаётся только добавить: описание мира с помощью этой вот системы понятий и есть данная конкретная наука. В основе кибернетики лежит прежде всего понятие системы как некоторого материального объекта, состоящего из других объектов, называемых подсистемами данной системы. Подсистема некоторой системы, в свою очередь, может рассматриваться как система, состоящая из подсистем. Поэтому, если быть точным, смысл введённого нами понятия заключается не в термине «система» самом по себе, т.е. не в приписывании некоторому объекту свойства «быть системой», что довольно бессодержательно, ибо каждый объект может считаться системой, а в связи между терминами «система» и «подсистема», отражающей определённое отношение объектов. Второе важнейшее понятие кибернетики — понятие состояния системы (подсистемы). Подобно тому как понятие системы непосредственно опирается на нашу пространственную интуицию, понятие состояния непосредственно опирается на нашу интуицию времени, и его невозможно определить иначе, как сославшись на опыт. Когда мы видим, что объект в чём-то изменился, мы говорим, что он перешёл в другое состояние. Как и понятие системы, понятие состояния является скрытым отношением — отношением между двумя моментами времени. Если бы мир был неподвижным, понятие состояния не могло бы возникнуть, и в тех дисциплинах, где мир рассматривается статически, например, в геометрии, понятие состояния отсутствует. Кибернетика изучает организацию систем в пространстве и времени, т.е. то, каким образом связаны подсистемы в систему и как влияет изменение состояния одних подсистем на состояние других подсистем. Основной упор делается, конечно, на организацию во времени, которая в случае, когда она целенаправленна, называется управлением. Причины связи между состояниями системы и вытекающие отсюда особенности её поведения во времени часто называют заимствованным из физики термином динамика системы. Этот термин в применении к кибернетике неудачен, так как, говоря о динамике системы, мы склонны рассматривать её как нечто целое, в то время как в кибернетике главным является исследование воздействия друг на друга подсистем, образующих данную систему. Поэтому мы предпочитаем говорить об организации во времени, употребляя термин "динамическое описание" только тогда, когда его нужно противопоставить статическому описанию, учитывающему лишь пространственные отношения между подсистемами. Кибернетическое описание может иметь различный уровень детализации. Одну и ту же систему можно описывать либо в общих чертах, разбив её на несколько крупных подсистем, «блоков», либо более детально, описав строение и внутренние связи каждого блока. Но так или иначе кибернетическое описание всегда имеет какой-то конечный уровень, глубже которого оно не распространяется. Подсистемы этого уровня рассматриваются как элементарные, не разложимые на составные части. Реальная физическая природа элементарных подсистем кибернетика не интересует, ему важно только, как они связаны между собой. Два физических объекта могут радикально отличаться друг от друга по своей природе, но если на каком-то уровне кибернетического описания они организованы из подсистем одинаково (с учетом динамического аспекта!), то с точки зрения кибернетики их можно считать — на данном уровне описания — тождественными. Поэтому одни и те же кибернетические соображения могут быть применимы к таким разным объектам, как радиотехническая схема, программа для вычислительной машины или нервная система животного".


    Нервная сеть

    К изложению своей идеи метасистемного перехода В.Ф.Турчин подводит через анализ биологических систем. Стоит посмотреть, как было сделано "не нами", чтобы выявить важные закономерности.

    Турчин начинает с нервной сети, с понятий рецепторов и эффекторов: "Общая схема нервной системы «кибернетического животного» в его взаимодействии с внешней средой представлена на рисунке


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


    Что такое понятие

    Пойдём дальше. От рецепторов и эффекторов — к единичным и абстрактным понятиям.

    Турчин пишет: "Множество ситуаций в кибернетике называют понятием. Чтобы лучше уяснить, как кибернетическое понимание слова «понятие» связано с его обычным пониманием, допустим, что рецепторы рассматриваемой нами нервной сети — это светочувствительные нервные окончания сетчатки глаза или же вообще какие-то светочувствительные точки на экране, подающем информацию в нервную сеть. Рецепторы возбуждаются тогда, когда соответствующий участок экрана освещён (точнее, когда его освещённость больше некоторой пороговой величины), и остаются в состоянии покоя — в противном случае. Если на месте каждого возбужденного рецептора представить себе светлую точку, а на месте каждого невозбужденного — тёмную, то получится картина, которая отличается от изображения, падающего на экран, лишь своей дискретностью (т.е. тем, что она распадается на отдельные точки) и отсутствием полутонов. Будем считать, что точек (рецепторов) на экране достаточно много, а изображения, которые могут оказаться на экране, — их мы будем называть «картинками» — предельно контрастны, т.е. состоят лишь из белого и чёрного цвета. Тогда каждая ситуация соответствует определенной картинке.



    Согласно традиционной (аристотелевской) логике, когда мы думаем или говорим о какой-то определённой картинке (например, о той, которая находится в левом верхнем углу на рис. 2.1), то мы имеем дело с единичным понятием. Кроме единичных понятий, есть ещё общие, или абстрактные, понятия. Например, мы можем думать о пятне вообще — не о каком-либо конкретном пятне (допустим, из числа изображённых в верхнем ряду на рис.2.1), а о пятне как таковом. Точно так же мы можем обладать абстрактным понятием прямой линии, контура, четырёхугольника, квадрата и т. д. Однако что значит «обладать абстрактным понятием»? Как можно проверить, обладает ли кто-то данным абстрактным понятием, например понятием «пятно»? Очевидно, только одним способом: предложить испытуемому серию картинок и попросить, чтобы он о каждой из них сказал, пятно это или нет. Если окажется, что он называет пятном только те и все те картинки, на которых «изображено пятно» (это уже с точки зрения испытующего), то, значит, понятием пятна он обладает. Иначе говоря, мы должны проверить его способность распознавать принадлежность любой предъявленной картинки к множеству картинок, которые мы описываем словом «пятно». Итак, абстрактное понятие в обычном смысле слова — во всяком случае когда речь идёт о чувственно воспринимаемых образах — совпадает с введённым нами кибернетическим понятием понятия как множества ситуаций".


    Классификаторы

    Как распознаются ситуации? Это важный момент.

    Слово В.Ф.Турчину: "Нервную сеть, решающую задачу распознавания, мы назовём распознавателем, а состояние эффектора на его выходе будем называть просто состоянием распознавателя. Отправляясь от понятия распознавателя, мы введём несколько более общее понятие классификатора. Распознаватель делит множество всех мыслимых ситуаций на два непересекающихся подмножества: A и не A. Можно представить себе деление полного множества ситуаций на произвольное число n пересекающихся подмножеств. Такие подмножества называют обычно классами. Теперь вообразим некую подсистему C, имеющую n возможных состояний и связанную нервной сетью с рецепторами таким образом, что, когда ситуация принадлежит к i-му классу (i-му понятию), подсистема C приходит в i-е состояние. Такую подсистему вместе с нервной сетью мы будем называть классификатором по множеству n понятий (классов), а, говоря о состоянии классификатора, подразумевать состояние подсистемы C (выходной подсистемы). Распознаватель — это, очевидно, классификатор с числом состояний n = 2. В системе, организованной по двоичному принципу подобно нервной системе, подсистема C с n состояниями будет, конечно, состоять из какого-то числа элементарных подсистем с двумя состояниями, которые можно рассматривать как выходные подсистемы (эффекторы) распознавателей. Состояние классификатора, следовательно, будет описываться указанием состояний ряда распознавателей. Однако эти распознаватели могут быть тесно связаны между собой как по структуре сети, так и по выполняемой функции в нервной системе, и в этом случае их следует рассматривать в совокупности как один классификатор. Если не накладывать никаких ограничений на число состояний, то понятие «классификатор» фактически теряет смысл. Действительно, всякая нервная сеть сопоставляет каждому входному состоянию одно определённое выходное состояние; следовательно, каждому выходному состоянию соответствует множество входных состояний, и эти множества не пересекаются. Таким образом, всякое кибернетическое устройство с входом и выходом можно формально рассматривать как классификатор. Придавая этому понятию более узкий смысл, мы будем считать, что число выходных состояний классификатора гораздо меньше, чем число входных состояний, так что классификатор действительно «классифицирует» входные состояния (ситуации) по относительно небольшому числу больших классов".

    RB24. Две культуры программирования

    В сентябре-октябре 2005 г. произошли два важных события, которые можно назвать поворотным пунктом в истории европейского программирования.

    11 сентября прямым рейсом из Цюриха в аэропорт Пулково прибыла небольшая швейцарская делегация в составе профессоров ETH Zurich Никлауса Вирта и Юрга Гуткнехта. Так начиналось Большое турне Вирта по России. За три с небольшим недели он посетил ведущие университетские центры страны: С.-Петербург, Москву, Нижний Новгород, Екатеринбург, Новосибирск, Томск.

    В 71 год пойти на столь изматывающую поездку в далёкую Россию — это надо иметь большое мужество. И понимать, во имя чего всё это делается. Европейская наука проиграла в жестокой схватке с американским бизнесом. И теперь потребуется немало усилий, чтобы осознать всю глубину падения и постараться выправить положение. Без России и стран бывшего Союза это сделать практически невозможно.

    Cразу после возвращения Вирта из поездки по России и Польше, 20-21 октября 2005 г. в Цюрихе прошёл Европейский саммит по компьютерной науке (European Computer Science Summit), главным организатором которого стал преемник Н.Вирта на посту декана факультета информатики ETH Zurich, ученик А.П.Ершова, автор языка Eiffel, французский учёный Бертран Мейер.

    Впервые за последние десятилетия Европа заявила о том, что не намерена слепо идти по пути, который исповедует Америка, что у Европы есть свои богатейшие традиции в этой области и своё видение развития компьютерной науки. Алан Тьюринг (Великобритания), Конрад Цузе (Германия), Эдгар Дейкстра (Нидерланды) — все они закладывали основы основ современной ИТ-индустрии. Но их идеи во многом преданы забвению. Европа не вступает в конфронтацию с США в сфере программирования. Она хочет равноправного и взаимовыгодного партнерства, возможности влиять на формирование своей интеллектуальной элиты. Центром "мирной революции" стал ETH Zurich, один из старейших и самых престижных университетов Старого Света, в стенах которого учились и работали такие выдающиеся ученые и инженеры, как Альберт Эйнштейн, Джон фон Нейман, Конрад Цузе, Никлаус Вирт.

    Прямым итогом этих двух событий стало формирование в России научно-образовательного некоммерческого проекта Европейского центра программирования (EuroProg, European Programming Centre), который ставит своей целью создание влиятельного информационного и координирующего центра в сфере компьютерного программирования для стран европейского региона, прежде всего, Восточной Европы, включая Россию, Беларусь и Украину. Он создаётся на базе событийного сайта Oberon2005, подробно освещавшего Большое турне Вирта по России. Формирование ведётся при участии Высшей Политехнической школы ETH Zurich, Института компьютерных систем при ETH (Цюрих, Швейцария), а также Института систем информатики им. А.П.Ершова (Новосибирск, Россия).

    Фактически строится новая модель сотрудничества университетских и исследовательских центров Европы с привлечением независимых профессиональных программистов и представителей программной индустрии. Строится модель, компенсирующая острую нехватку деятельности научно-исследовательских институтов и опытно-конструкторских бюро в сфере программирования. Как и при создании А.П.Ершовым знаменитого новосибирского центра на базе Академгородка, включавшего триаду “образование-наука-индустрия” (НГУ, ВЦ СО АН СССР, НФ ИТМиВТ), большая роль уделяется подбору и концентрации важнейших информационных материалов в рамках общедоступной открытой некоммерческой библиотеки (Open Digital Library). Другими составными элементами проекта станут Музей программирования, Открытая энциклопедия программирования, инструментальный репозитарий, а также научно-производственный центр, координирующий ведение проектов и НИОКР в рамках модели открытого исследовательского программирования (Open Research Programming), которая является альтернативой Open Source. Открытие Европейского центра программирования намечено на осень 2007 г.

    Другим отголоском событий 2005 г. стало образование влиятельной некоммерческой и неправительственной организации Informatics Europe (первоначально под именем euroTICS), которая ставит своей целью объединить усилия образования, науки и индустрии Европы на основе европейских традиций информатики. Это традиционная форма ассоциации с центром в ETH Zurich, в которую уже вошли преимущественно университеты Западной и Восточной Европы, включая такие страны, как Швейцария, Франция, Германия, Австрия, Великобритания, Италия, Испания, Нидерланды, Дания, Россия, Украина, Болгария, Чехия, Румыния, Литва, Турция.

    Европа существенно слабее Америки в отношении поддержки собственной индустрией академической науки и образования. Да, есть ряд крупнейших европейских компаний, которые так или иначе способны влиять на эти процессы: Airbus, Nokia, Ericsson, Philips, Thomson, Siemens, SAP AG и др. Но это влияние пока достаточно слабое.

    В то же время, нельзя не заметить, что центробежные процессы постепенно сменяются на центростремительные. В условиях феодальной раздробленности компьютерной Европы начался процесс собирания земель. Как известно, на Руси (в отличие от государств Западной Европы) централизация стала не следствием достижения зрелости буржуазных связей, а потребностью борьбы с внешним врагом. В сфере программирования ситуация очень напоминает историю борьбы с феодальной раздробленностью Руси. В условиях тотальной коммерциализации и однополярности мира не приходится ожидать кардинального изменения ситуации за счёт вызревания политико-экономических связей. Холодная война Америки против Европы привела к крушению основ европейской школы программирования, к тотальной коммерциализации образования и науки.

    Удары наносились, прежде всего, по инфраструктурным вещам:
    1) языкам программирования;
    2) железу;
    3) кадрам (образование);
    4) операционным системам.

    Проф. Эдгар Дейкстра (Edsger Dijkstra, Нидерланды, 1930–2002), один из отцов-основателей программирования, так охарактеризовал ключевые события, которые привели к формированию однополярного мира и разрушению европейской культуры программирования: "Принятие в Германии Алгола-68 оказало парализующий эффект на немцев, подобный тому, которому подвергся Советский Союз, когда русские в конце 1960-х приняли решение разрабатывать свою новую национальную серию компьютеров на основе поразрядно-совместимой копии IBM 360. То была величайшая победа Америки в холодной войне".

    Вкратце история противостояния Америки и Европы, на мой взгляд, выглядит так:

    • Алгол-60 — отправная точка размежевания школ программирования: американской и европейской (после совместных работ под эгидой IFIP Европа взяла на вооружение Алгол-60, Америка — Фортран);
    • клонирование IBM 360/370 в серии ЕС ЭВМ в СССР и странах СЭВ явилось гарантией технологического отставания советской супердержавы, сдерживавшей амбиции Америки;
    • затяжное принятие раздутого Алгол-68 – разящий удар по европейским языкам программирования;
    • вымывание европейских производителей компьютеров (ICL — Великобритания, Nixdorf, Siemens — Германия, Bull — Франция; ИТМиВТ — СССР).
    • падение роли IFIP, доминирующая роль американских ассоциаций ACM и IEEE CS;
    • гегемония американских стандартов высшего образования (ACM/IEEE Computing Curricula);
    • американизация культуры языков программирования (Бейсик, Кобол, Фортран, Си, C++, Java, C#);
    • американизация исследовательских и промышленных операционных систем (UNIX, DOS, Windows).

    Примерно в течение 15 лет (1960–1975) центральной организацией, регулирующей процессы развития науки и индустрии в сфере компьютерного дела в мире являлась IFIP (International Federation for Information Processing, Международная федерация по обработке информации; штаб-квартира во Франции, теперь в Австрии). Она была организована на первом Всемирном компьютерном конгрессе (World Computer Congress) в Париже в 1959 г. под эгидой UNESCO.

    Но IFIP была центром де-юре, а де-факто таковым стала американская ассоциация ACM (Association for Computing Machinery, 1947) вместе с примкнувшей к ней IEEE Computer Society (1946). Единственным противовесом им (в локальном масштабе) стало Британское компьютерное общество (BCS, British Computer Society, 1957).

    Америка твёрдо шла по пути захвата рынков, устранения конкурентов и навязывания собственных взглядов на прошлое, настоящее и будущее компьютерных наук и компьютерной индустрии. Одним из ключевых моментов стало постепенное разрушение европейской школы программирования за счёт американской культурной экспансии, ставящей во главу угла коммерциализацию.

    Отличительные черты американской школы программирования:

    • тотальная коммерциализация;
    • инновации с целью максимального извлечения прибыли;
    • неизбежное снижение наукоёмкости ПО;
    • формирование искусственной сложности ПО;
    • экстенсивный рост (мощности оборудования, объемы систем, масштабы проектов).

    Отличительные черты европейской школы программирования:

    • научные исследования — основа основ;
    • инженерные решения требуют продуманности и отказа от излишнего усложнения;
    • контролируемый рост сложности систем;
    • интенсивный рост (за счёт высокой культуры образования и разработки специального инструментария).

    Одним из немногих, кто вовремя понял всю суть процесса деградации науки и культуры под звёздно-полосатым флагом глобализации применительно к компьютерной сфере, был голландский проф. математики, один из первых профессиональных программистов, апологет европейской школы Эдгар Дейкстра. Предметом исследований Дейкстры было именно программирование как интеллектуальный вызов, как процесс творчества и созидания, а не просто набор отдельных языков, приёмов или методов. В работе "Мои надежды на вычислительную науку" (1979, "My Hopes of Computing Science", EWD709) он писал: "Ассоциация ACM имеет специальную группу по языкам программирования (Special Interest Group on Programming Languages), но не по программированию как таковому; её новейшее периодическое издание посвящено языкам программирования и системам (Programming Languages and Systems), но не программированию. Программистское сообщество почти болезненно зациклено на программной нотации; оно делится по сути на такое же количество субкультур, каково число распространённых языков программирования; субкультур, ни одна из которых чётко не отделяет истинные проблемы от проблем, порождаемых исключительно соответствующим языком программирования (подчас превращаясь в религию)".

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

    Применительно к программированию микрокультуры разных индивидуумов сосуществуют и взаимодействуют друг с другом, образуя культурные слои. Человек стремится создать вокруг себя условия жизненного комфорта, а значит, интуитивно ищет родную среду. Эта среда должна иметь определённые характерные черты, привлекательные для родственного сосуществования микрокультур. Что в программировании выполняет роль платформы для слияния микрокультур? Традиции научных школ, парадигмы, языки, инструментарий, операционные системы? На мой взгляд, сначала произошёл отход от научных школ в сторону конкретных языков и стирания их исторических корней. Затем уход от компактных языков-ядер (Лисп, Пролог, Форт, Си, Паскаль) в сторону языков-оболочек, растворяющихся в инструментарии за счёт объёма и экстенсивного наращивания встроенных возможностей. Инструментарий в отличие от языка не имеет, как правило, чёткой спецификации, а значит, в программировании "судебная практика" стала главенствовать над "законодательством". Ныне фундамент культуры выродился в инструментарий. Если проводить аналогию с музыкой, то основой единения микрокультур в программировании служит даже не конкретное направление, а конкретная группа, конкретный исполнитель. Что для программирования весьма печально.

    В работе "Два взгляда на программирование" (1975, "Two views of programming", EWD540) Дейкстра писал: "Я придерживаюсь того мнения, что программирование – один из наиболее сложных разделов прикладной математики, поскольку оно также является одним из наиболее сложных направлений инженерии, и наоборот. Когда я попытался разъяснить одному из моих коллег-математиков, почему я придерживаюсь этого мнения, он довольно бесцеремонно отказался выслушать мои доводы и вместо этого обвинил меня и моих единомышленников-компьютерщиков в том, что мы до сих пор не создали язык программирования, который сделал бы программирование настолько простым, насколько ему и подобает быть! Возможно, мне стоило бы спросить его, почему математики до сих пор не разработали нотацию, которая позволила бы любому, невзирая на отсутствие профессиональной подготовки, заниматься математикой?"

    Программирование — сложное культурное, социальное и экономическое явление, а не просто синтез науки и инженерного дела. Это серьёзный интеллектуальный вызов, а не чисто механический процесс кодинга и "кройки по лекалам", как его пытаются преподнести сейчас. Дейкстра писал (EWD540): "В основном это не вина производителей компьютеров, которые желают вести дела так, будто они продают простейшую продукцию; и не вина руководителей программных проектов, которые предпочитают рассматривать деятельность программистов как простой и предсказуемый процесс; и не вина учебных заведений, которые хотели бы подготовить студентов к достижению гарантированного успеха. Это — следствие комфортной иллюзии, что Человек — лишь сложный автомат, иллюзии, которая, подобно наркотику, приносит своим жертвам кажущееся освобождение от бремени ответственности. Признание программирования серьёзным вызовом интеллекту вернуло бы полный вес этой ноши обратно на их плечи".

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

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

    В центре синтеза "интеллектуального топлива" для мировой экономики стоит человек. Со своим опытом, амбициями, принципами, взглядами, предпочтениями. Если смотреть на программирование как на феномен культуры, то неизбежно приходишь к сопоставлению позиций Освальда Шпенглера и Михаила Михайловича Бахтина. Шпенглер ратовал за замкнутость культур. Мне же в отношении программирования ближе подход М.М.Бахтина: существует единая культура человечества, состоящая из многих меньших, принципиально открытых культур. Шпенглер писал: "Как бы не убедительно воздействовал художник своими звуками и цветами, наблюдатель слышит в них лишь себя самого, если он на это не способен, произведение искусства остается для него бессмысленным". Сравните с Бахтиным: "Чужая культура только в глазах другой культуры раскрывает себя полнее и глубже (но не во всей полноте, потому что придут и другие культуры, которые увидят и поймут ещё больше). Один смысл раскрывает свои глубины, встретившись и соприкоснувшись с другим, чужим смыслом: между ними начинается как бы диалог, который преодолевает замкнутость и односторонность этих смыслов, этих культур". Иными словами, чем больше коммерциализация уничтожает ростки другой культуры, тем сильнее она содействует полному замыканию доминирующей культуры, которая лишается возможности полноценно понять и оценить самое себя. А это — неизбежный путь к вырождению.

    О том, к чему ведёт американизация культуры программирования, Э.Дейкстра весьма рельефно вскрыл в своей работе "Почему американская компьютерная наука кажется неизлечимой" (1995, "Why American Computing Science seems incurable", EWD1209). Он пишет: "По жестокой шутке истории, впрочем, американское общество выбрало именно двадцатое столетие для того, чтобы становиться всё более и более нематематическим (кстати, явление, рассмотренное Моррисом Клайном и вызвавшее у него глубочайшее сожаление). Мы достигли парадоксального состояния, когда из всех так называемых "развитых наций" именно США сильнее всех зависят от программируемых компьютеров и хуже всех интеллектуально оснащены в данном направлении. Предположение о том, что проблема программирования может быть вылечена математическими средствами, мгновенно отвергается как совершенно нереалистичная. В результате разработка программ ограждена от возможности стать поддисциплиной информатики. Имеет место значительная озабоченность корректностью, но она почти полностью направлена на верификацию программ a posteriori, потому что опять же это легче укладывается в мечту о полной автоматизации. Но, разумеется, многие рассматривают верификацию a posteriori как установку телеги впереди лошади, потому что процедура "сначала программирование, потом проверка" поднимает насущный вопрос, откуда берётся программа, подвергающаяся проверке. Если же она выведена, то верификация сводится к простой проверке вывода. А между тем методология программирования, переименованная в "программную инженерию", стала настоящим раем для гуру и знахарей. Будучи лишённой того, что обычно рассматривается как основное направление компьютерной науки, американская компьютерная наука стала большим неудачником. И мы не вправе винить за это университеты, поскольку, когда промышленность, наиболее нуждающаяся в их научной помощи, неспособна понять, что это высокотехнологичный бизнес, лучшие университеты оказываются бессильны. Университетам следует быть более просвещёнными, чем их окружение, и они способны на это, но не очень стараются это показывать. В нынешней политической ситуации непохоже, что можно ожидать быстрых улучшений; в ближайшем будущем нам придётся жить среди предрассудков, подобных тому, что программирование – это "настолько просто, что им могут заниматься даже члены республиканской партии".

    А что вообще дала информатика как наука?

    Небольшой экскурс в исторические достижения информатики как науки и своё видение первичной роли науки Эдгар Дейкстра дал в работе "Научная фантастика и научная реальность в информатике" (1986, "Science fiction and science reality in computing", EWD952). Он пишет: "Что же информатика делала в этой блистательной изоляции? Точнее говоря, что она делала, не теряя претензий на прикладную значимость? Да, сделала она немало; фактически, куда больше, чем я могу разъяснить в рамках данной лекции, но я могу хотя бы передать вам общие моменты. В 1960-е годы она разработала теорию синтаксического разбора, необходимую для поднятия уровня компиляторов выше уровня поделок, напичканных ошибками, и превратив её в предмет, пригодный для обучения. Это было главное достижение: я, например, помню весьма отчётливо, как в 1962 г. те из нас, кто действительно написал компилятор, выглядели в глазах остальных как некие полубоги. Этого никогда бы не произошло, если бы мы со временем не научились давать формальное определение синтаксиса компилируемого языка: без подобного формального определения слишком сложно было бы определить существование проблемы компиляции. Теория конечных автоматов и теория сложности были разработаны, чтобы задать основные количественные границы того, что в принципе может быть вычислено; опять же, в основе этих теорий лежит весьма формальный постулат о природе вычислений, постулат, без которого эти теории не могут существовать. Для разработки операционных систем была поставлена и решена проблема синхронизации процессов; были доказаны первые теоремы об отсутствии тупиков; первой предпосылкой этого достижения стало формальное определение явления, интуитивно известного как тупик (deadlock). В 1970-е годы центр внимания сместился от синтаксиса к семантике, сначала к детерминированным последовательным программам, а вскоре охватил также сферу недетерминированности и параллельности. Я не буду подробно описывать различные направления: они простираются от модели типизированного лямбда-исчисления до разработки преобразований программ с сохранением семантики. В этом десятилетии программы стали самостоятельными математическими объектами. Кратчайший способ уловить изменение направления внимания – это, пожалуй, отметить, что если раньше задачей программ было управлять поведением машины, то теперь ею стало выполнение наших программ. Верификация и разработка программ развились в разделы формальной математики до такой степени, что теперь уже не считается безответственным опубликовать программу, не испробовав её на компьютере. Что ж, это далеко не полный обзор того, как информатика стала наукой, и я приношу свои извинения всем неупомянутым мной, кто внёс свой вклад в её становление. Надеюсь, что он всё же достаточно полон, чтобы донести до вас аромат квинтэссенции самой дисциплины. Она стала замечательной дисциплиной, поскольку разделение между "чистой" и "прикладной", столь традиционное для многих других дисциплин, совершенно поблекло и существенно утратило своё значение. Роскошь работы в окружении, в котором различие между чистой и прикладной наукой лишено смысла, — это, пожалуй, ещё одно признание того факта, что компьютер общего назначения действительно заслуживает эпитета "общего назначения". Она обладает всей пикантностью чистой математики, будучи более формальной, чем многие другие отрасли математики. Она не может избежать такой формальности, поскольку любой язык программирования, будучи интерпретируемым механически, представляет своего рода формальную систему. В то же время она обладает всей прелестью прикладной математики, поскольку огромная мощность современных компьютеров даёт такие возможности для создания хаоса, что её методы необходимы, если мы не намерены попасться в ловушку сложности, которую сами же и создали. Научиться не попадаться в собственноручно произведённую ловушку сложности, сохранять вещи достаточно простыми и научиться достаточно эффективно мыслить о своих разработках — вот центральная задача информатики. Это также было осознано больше десятка лет назад, когда "разделение задач" стало находкой программной терминологии. Заметьте, пожалуйста, что путь, которым информатика пробивала свою нишу, был сам по себе примером успешного "разделения проблем". Каждый раз, когда мы вкладываем уйму умственной энергии в тщательную разработку любой дискретной системы, мы делаем это не просто для удовольствия: мы всегда надеемся, что результат наших усилий будет использован во благо другим. Мы надеемся, что он будет удовлетворять нужды, соответствовать ожиданиям и доставлять удовольствие своим пользователям. В донаучный период разработки систем неформальное понятие "удовлетворения пользователя" было единственным приемлемым критерием качества программного обеспечения. Недостаток "удовлетворения пользователя" как критерия качества состоит в том, что это не техническое понятие: он не задаёт технического направления разработчику и, кроме того, может быть достигнут другими средствами, помимо технических, например, агрессивной рекламой или промывкой мозгов. К науке это не имеет ни малейшего отношения. Задачи должны быть разделены, и тут на сцене появляются функциональные спецификации. Роль формальной функциональной спецификации – просто служить логическим барьером между двумя совершенно разными проблемами, известными как "проблема удовлетворённости" и "проблема корректности". Проблема удовлетворенности касается вопроса, соответствует ли система, отвечающая таким-то и таким-то формальным спецификациям, вашим ожиданиям и надеждам. Проблема корректности касается вопроса, соответствует ли данная разработка таким-то и таким-то формальным функциональным спецификациям. Логический барьер был необходим, чтобы поставить проблему корректности перед информатикой: он изолирует уютную нишу информатики от проблемы удовлетворенности, решению которой наука мало чем способна помочь. Заметьте, пожалуйста, что я не утверждаю, что одна из проблем важнее другой; в конце концов, цепь не прочнее самого слабого звена. Однако я утверждаю, что проблема корректности представляет ту самую часть, которую нам удалось втиснуть в "тонкий пограничный слой" Бонди, где разумное применение научной мысли может принести пользу, тогда как неформализованная проблема удовлетворенности в действительности лежит на пределами компетенции науки. У вас могут быть самые разные проблемы, начиная с опасного перекрёстка и заканчивая такими, которые угрожают самому существованию целых поколений. Однако наука никогда не решает ваши проблемы, она решает лишь свои собственные, и заключение о том, примете ли вы решение формальной научной проблемы как таковой в качестве приемлемого решения своей задачи, лежит целиком и полностью на вас. Другими словами, наука никогда не предлагает моделей реальности, она лишь строит свою теорию, и вопрос, примете ли вы своё восприятие действительности в качестве достаточно достоверной модели для этой теории, — полностью ваша проблема. Достоверность и реалистичность больше не являются научными понятиями, и учёный уступает право разглагольствования о них философам, пророкам и поэтам. С этой точки зрения роль науки довольно ограничена, на самом деле до такой неутешительной степени, что многие предпочитают закрывать глаза на ограниченность науки. Акцентировать внимание на этих ограничениях не принято в научной среде, поскольку помимо прочего это вызывает вопрос, а зачем тогда общество должно терпеть учёных. Это не шутка: все мы знаем, что если бы сегодня общество вдруг решило изгнать своих учёных, это было бы не в первый раз. И теперь, когда наука "вышла в народ", она также не столь популярна среди публики в целом. Люди всегда питали противоречивые чувства по отношению к технологии, и с чем более мощными технологиями они сталкиваются, тем драматичнее становится двойственность этого отношения. Они чувствуют угрозу со стороны технологии сильнее, чем когда-либо прежде; в то же время их надежда на спасительную мощь науки и технологии всё больше крепнет. В старые добрые временя традиционного шаманства требовались только снадобья от всех недугов, Эликсир для вечной юности и Философский Камень для сотворения золота".

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