Искусство без ЭВМ, или Алгебра любви-2

Из всех предыдущих текстов могло сложиться впечатление, что ничем, кроме любвей и стенгазеты, я в университете не занимался. Это близко к истине, но не есть истина. В студенчестве я не только пил, вахтерил и влюблялся. Года три я числился лаборантом социологической лаборатории. Устроила меня туда, разумеется, Лидия Леонидовна Бородаенко. Штатный математик соцлаборатории, Борис Васильевич Олейников, собирался ее покинуть, и меня готовили ему на смену. На первых порах я занимался простейшей обработкой анкет - составлением так называемых частотных таблиц. Собственно говоря, эти частотные таблицы (частный случай сводных таблиц), сопровождают меня всю жизнь, только в семидесятых годах я считал их на арифмометре "Феликс", потом на Промине, потом на Минск-22, потом на ЕС, а вот теперь - на PC, в любимом Excel. "Сколько мужчин в возрасте до 30 лет ответили "да" на вопрос о том, хорошо ли они адаптировались к новому рабочему месту?". И так далее.

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

 Вот что кружило мне тогда голову:

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

Картографирование потоков симпатий, определение каналов влияния...

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

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

С.С.Стивенс. Математика, измерения и психофизика.
"Ни одна из шкал измерения, используемых смертными, не свободна от недостатков".

 Еще бы! Выводя формулу любви в седьмом классе, я вдруг подумал: а в чем я буду все это измерять? Ревность, например? Пусть даже я придумал единицы измерения, но как измерять? Масса проблем!

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

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

Правда, в конце концов, с соцлабораторией у меня не заладилось. Как-то мне расхотелось там работать. Во-первых, обстановка постоянных авралов, во-вторых, ложь, присущая гуманитарным наукам при социализме, ложь, которую я подсознательно чувствовал, но тогда не умел определить. Я читал отчеты, сделанные по моим расчетам, и видел, что выводы притягиваются за уши, что исход обследования решается заранее. К тому же мои интересы к пятому курсу сместились в сторону искусственного интеллекта. Когда сменился заведующий соцлабораторией, (до этого был Жан Терентьевич Тощенко), я окончательно понял, что мне тут делать нечего. Было много шума (соцлаборатория все же крепко вложилась в меня, деньгами и временем), но Сапожников имел на меня виды и сумел все уладить.

Социологические времена были крайне интересными, и многое мне дали, особенно опросы. Где только мы их не проводили! Например, одна бригада строителей чинила крышу цирка, и я, пока поднялся к ним, здорово поплутал в цирковых недрах - повидал и львов, и верблюдов... Эта работа была очень похожа на журналистскую. Главное, конечно, были - люди. Мало ли чего они писали в анкетах - они добавляли много чего устно, и первые сомнения в том, туда ли мы идём, зародились в те времена.

Что ещё существенно: я стал нащупывать свою нишу в жизни - стык точных и гуманитарных наук. Тогда это было не очень осознанно и выглядело вполне экстремистски - создание модели человека, ни более ни менее. Только лет через шесть я начал очухиваться от этой заразы, а поставил точку Джозеф Вейценбаум своей знаменитой книгой об искусственном интеллекте. В ней он разгромил наголову всякое хакерьё типа меня, и провёл чёткую границу между машинным и человеческим. Через десять лет я окончательно стал гуманитарием. А тогда я был закоренелый технократ, считавший, что со временем компьютер может заменить человека во всех областях деятельности. Когда на третьем курсе мы распределялись по кафедрам, я выбрал, естественно, кафедру вычислительной математики. Почему-то я считал, что эта кафедра ближе всех к ЭВМ. Ближе-то она была ближе, но изучались на ней в основном всякие гадости типа того, как решать дифуравнения численными методами. Единственный более-менее интересный для меня спецкурс был - теория надёжности, его читал "девяткинец" Назаров. С интегральным и дифференциальным исчислением у меня исторически отношения были напряжены, и ближе к Новому году я сбежал на кафедру прикладной математики, поближе к моей Татьяне. Там тоже хватало глупостей (например, математические методы в социалистической экономике), но остальные спецкурсы были - просто блеск: теория графов, методы Монте-Карло, комбинаторика, я уж не говорю о поразительном спецсеминаре по ассемблеру IBM/360, который вёл Сергей Сергеич Кислицын.

Кстати, о Сергее Сергеиче. Никогда не забуду, как он на втором курсе вёл у нас программирование для М-222 (в кодах! О языках программирования тогда и речи не было!). Мы изучили команду сложения и написали программу сложения трёх чисел. А теперь напишите программу сложения пяти чисел, сказал Сергей Сергеич. Мы написали (четыре команды подряд). На дом Кислицын задал написать программу, складывающую сто чисел. Один я, дурак, корячился, выписывая девяносто девять восьмеричных команд. Сергей Сергеич на следующем занятии меня похвалил - и тут же рассказал о том, что такое цикл. Моя программа ужалась до трёх строк. Я на всю жизнь запомнил, что такое цикл и этим садистским методом преподавания успешно пользуюсь до сих пор.

IBM/360 - это была по тем временам бомба. Живая ЕС-ка появилась в городе только через три года (правда, М-4030 несколько раньше), но мы уже понаписали к ней всяких программ. Я, например, начал с любимых сводных таблиц. Курсовая на четвертом курсе у меня была такая - проект перевода олейниковской системы МОНИКА (МакроОбработка Наименованных И Кодированных Анкет) с Минска-22 на ассемблер IBM/360. Это была первая курсовая работа в КрасГУ, посвященная только программированию. До сих пор программа воспринималась как нечто вспомогательное - кто-то что-то рассчитывал, при этом используя ЭВМ. Программа была средством, а не целью, она шла где-то там в приложениях для пущей важности. Я же защищал - техническое задание на разработку программной системы плюс несколько модулей на ассемблере.

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

Ну, вот, наконец-то, о задаче школьных расписаний. Ох, как я ее люблю!

А начиналось все тривиально. Мама моя, которая вслед за мной переехала в Красноярск и устроилась завучем в детском санатории "Пионерская речка", жутко маялась с этими самыми расписаниями. Школа была маленькая, но учителя выставляли массу ограничений: этот не может после обеда, этот по вторникам ездит на методсовещания, английский с немецким нужно ставить одновременно, но учителя свободны в разное время, и так далее... Короче, не раз, просыпаясь утром, видел я ее, склоненной над большой картонкой, куда она вставляла язычки с фамилиями учителей. При её абсолютно гуманитарном складе ума это было особенно тяжко. Я взялся помогать, сначала используя чисто логический подход, а потом пытаясь применить теорию. Попробовал линейное программирование - близко, но не то. Попробовал комбинаторику - совсем рядом, но как формализовать ограничения учителей? Попробовал еще что-то, ещё что-то, а потом ночью вдруг ударило в голову - потоки в сетях! Нагруженные ориентированные графы! Я взял несколько листов ватмана, начертил первоначальные схемы, определил критический путь, сделал ход, опять определил критический путь... Через час расписание практически было составлено, только суббота была "дырявая". Тут погас свет. Это у нас в Удачном случалось. Я, при свечах, в четвертом часу ночи, чертил разноцветными карандашами стрелки, доделал субботу и не смог уснуть от потрясения. Ещё бы - я впервые успешно применил свои скудные знания к реальной задаче и к тому же, по всей видимости, сделал то, что до меня еще никто не сделал. Первые две попытки были куда менее удачными - это вывод формулы любви в седьмом классе и попытка получения спирта из полиэтиленовых мешочков в десятом (по формуле полиэтилена вроде получалось, что, залитые водой они при высокой температуре должны были превратиться в этиловый спирт. Я навалил полную кастрюлю мешочков и парил их до полного изнеможения. То, что получилось, даже при большой фантазии нельзя было назвать спиртом).

Собственно говоря, это и есть работа математика и программиста - придти туда, где были догадки и интуиция и уйти оттуда с формулой или программой, которая делает то же самое. Работа, однако, только начиналась. Расписания я составлял теперь куда быстрее, но алгоритм мой, связанный с рисованием разноцветных графов на больших листах ватмана, нравился мне все меньше и меньше. Я попытался перевести его в более привычные рамки и составил матрицы нагруженности вершин. Вот это уже можно было даже программировать! Когда я, к тому же, порылся в краевой библиотеке, то обнаружил, что за рубежом этой задачей очень даже занимаются и идут примерно тем же путём. Главной идеей было определение самых узких мест в расписании (и назначение в первую очередь "узких" преподавателей, "узкие" предметы и т.д.) и своевременная сигнализация о том, что расписание дальше не составимо. Я подумал, что это была бы неплохая дипломная работа, а может, чем чёрт не шутит, и кандидатская (хотя у меня средний балл был 3,7 - я всерьёз собирался окандидатиться!). Диплом, в принципе, у меня был готов (на уровне алгоритма) в начале пятого курса, правда, мне нужен был дипломный руководитель. Когда я сказал об этом нашему декану, он слегка обалдел. Дело в том, что на матфаке абсолютно никто не мог бы стать моим дипломным руководителем - такого рода задач не решал никто, и никто не имел нужной программистской квалификации. Программировать расчеты по формулам - это одно, а делать перебор по дереву вариантов - это совсем другое! Это было уже из области искусственного интеллекта. Наконец мне нашли подходящего руководителя в только что открывшемся красноярском филиале ВЦ СО АН СССР. Вот извивы судьбы! Не будь моя мама завучем, жизнь не свела бы меня так близко с Валерием Ивановичем Хвостенко! Вот уж кто повлиял на меня кардинально!

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

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

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

Тем не менее на диплом мне хватило с лихвой, и я его с некоторым фурором защитил. Задачу, однако, не оставил, а наоборот, взялся за нее как следует - перерыл реферативные журналы, прочитал ВСЕ статьи, написанные на эту тему. Правда, некоторые статьи не дошли до меня, даже будучи заказаны по МБА, да еще несколько статей не смог перевести - с немецкого, польского (но об алгоритме можно было догадаться по формулам)... С английского же - перевёл все, и именно эти статьи были особенно полезны, особенно одна, которая совершенно по-новому ставила задачу. Используя этот подход, я разработал новый алгоритм, опробовал его на десятке маминых расписаний (а она все еще была завучем) и, наконец, реализовал на PL/1 (это уже конец семидесятых). Программа РАБОТАЛА!

Конец этой истории был очень поучительным.

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

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

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

Однако задача о школьных расписаниях дала мне очень многое - опыт научной работы, кучу программистских навыков и знаний. Всякие альфа-бета процедуры, списковые структуры, рекурсивные методы и прочее я освоил в 1976-1977 году. Массовым достоянием они стали года через три. Во всяком случае, на первом конкурсе программистов в 1977 году ни один участник не знал, что такое списки.

Еще несколько лет я широко пропахивал поле искусственного интеллекта (только дома у меня было с сотню книг на эту тему (я их все потом чохом сдал на вес, или точнее, на метраж, в букинистический), да я еще торчал каждый день в краевой библиотеке. Однако в практической области дело не пошло дальше программы, играющей в рэндзю. Правда, программа играла очень даже неплохо, я и сам ей временами проигрывал. Но, поскольку дисплеев тогда еще не было, игра проходила на пишущей машинке КОНСУЛ (операторский пульт), игровое поле распечатывалось каждый раз полностью. Грохоту было!!! И сколько изведено бумаги - желающих поиграть было более чем достаточно, на ЭВМ тогда была всего одна игра - посадка на Луну, и то довольно скучная.

Да, кстати! Был ведь еще клуб искусственного интеллекта, который я устроил для студентов матфака. Сохранилось объявление о первом заседании клуба.

1.Что такое ИИ?
ИИ - это искусственный интеллект.
2.Почему именно клуб?
Поставим вопрос иначе: а что же это еще?
Это не кружок.
На кружке что-то ИЗУЧАЮТ, а мы собираемся кое-что СОЗДАВАТЬ
Это не семинар.
Семинар ведется по какой-то книге, и все по очереди выступают.
А у нас не так.
Семинар - это нечто обязательное.
А клуб - дело добровольное.
3.Итак, это - клуб!
В клубе можно услышать что-то, рассказать о том, что нового узнал, прочитал по искусственному интеллекту, какие появились идеи.
4.Появилась идея - не зарывай!
Хочешь - расскажи ее на заседании клуба.
Хочешь - сам принимайся за ее осуществление, один или с друзьями.
Ты можешь рассчитывать на нашу поддержку!
5.Не появилась идея - не унывай!
На заседания клуба ты можешь ходить и так.
(ну и так далее)

Именно вот так, отцентрованно (я не поленился написать программку на ассемблере), на перфорированной бумаге появилось это объявление, а потом листки под названием "ИИнформация". Клуб просуществовал года полтора, потом многие из его участников стали моими курсовиками и дипломниками, а с десятью из них я сварганил в 1978 году систему "Абитуриент", но о ней позже. Клуб любопытно трансформировался через год - на каждом очередном занятии мне предлагалась тема следующего. Например, не в меру любознательные студентусы интересовались, какая разница между АЛГОЛом, ПЛ/1 и Фортраном. Я через неделю читал обстоятельную лекцию, посвященную сравнительному анализу этих, а заодно и других языков. Мне это давало гораздо больше, чем им - ведь известно же, что что-то хорошо понимаешь только после того, как рассказал другому.

Года с 1979 я увлекся технологией программирования, а интерес мой к искусственному интеллекту падал и падал (а зря - как раз начали появляться базы знаний и экспертные системы). Параллельно я год от года мудрел в общечеловеческом смысле - сказывалось увлечение Львом Толстым и беседы с Валерием Ивановичем Хвостенко. В начале восьмидесятых я с ИИ завязал. Вот итоговое произведение об этом.

1983 Искусство без ЭВМ

В комментариях в конспекте книги Мооля я высказывался ещё определеннее. Например, на высказывание Мооля "С благоговением перед шедеврами покончено, на сцену выходит потребительское искусство, которое нужно вырабатывать в достаточных количествах для удовлетворения массового спроса" я отреагировал кратко: "ну не сволочь ли!". А на высказывание "Художник [...] экспериментирует с бесполезным и тем самым вырабатывает средства заполнения досуга" - так: "Ебиттер муттер! Так вот для чего трудятся художники! Ну и сука! Художники-то постигают мир и нам помогают делать то же, а заполняют досуг шлюхи от искусства типа Пикуля или Дрюона!"

В общем-то, Абраам Моль, хотя и высказывал мерзкие идеи, по сути оказался прав. Точнее, его мерзкие идеи оказались просто констатацией существующего положения дел. Нравится нам или не нравится, но существует, например, сила тяготения. Нравится нам или не нравится, но искусство у нас именно потребляется, и это стало особенно заметно после того, как издательские планы стали управляться рынком, а не крайкомами. Раньше на книжных прилавках мы видели всякое дерьмо и ясно было, кто в этом виноват. Теперь дерьмо стало еще более разнообразным и вывалилось в несравненно больших количествах, не переставая быть дерьмом. Ну а кто ж виноват, что всем хочется кушать именно это? Я нисколько не удивился, когда сценарист одного из нескончаемого сериала на вопрос "Как вам удаётся писать так много и так быстро?" ответил, что ему помогает компьютер. Сценарист этот не просто использует текстовый редактор, он еще и генерирует с помощью компьютера сюжет и диалоги! Я посмотрел как-то одну серию этого сериала - и вчерне прикинул, как бы выглядела программка, которая могла бы рожать такие сериалы десятками. Не так уж и сложно она выглядела бы! Ну да ладно, кушайте свое дерьмо сами.

Однако в 1974 году до этих взглядов было очень далеко. В 1974 году я бы дал фору в своем экстремизме Абрааму Моолю вместе с Гербертом Саймоном, вместе взятым. К середине же восьмидесятых годов я распростился со своими техницистскими идеями и стал законченным гуманитарием.

Продолжение ППСС: Я и ЭВМ трех поколений


© Алексей Бабий 1996