Адольф Львович Фуксман – математик и программист
Михалкович Станислав Станиславович, Налбандян Юлия Сергеевна
Физико-математический (впоследствии – механико-математический) факультет Ростовского (Южного федерального) университета всегда отличался яркими, талантливыми, неординарными личностями, которые вдохновляли и вели за собой. Таким человеком был и Адольф Львович Фуксман, ставший легендой при жизни, сыгравший важную роль в развитии системного программирования и трагически погибший в 40 лет.
Первые годы его жизни складывались так, как почти у всех девчонок и мальчишек его поколения. Он родился 4 июля 1937 года в Запорожье, военные годы провел в эвакуации на Урале, в 1944-м вместе с семьей оказался в Мариуполе). Здесь, фактически, прошло его детство, здесь он увлекся математикой, а это в 1954 году привело его на физико-математический факультет Ростовского госуниверситета (любопытно, что Мариуполь к тому времени уже был переименован в Жданов, а в 1957 г. Юрий Андреевич Жданов станет ректором РГУ).
Пятидесятые годы в истории физмата-мехмата занимают особое место. Ушли из жизни или по разным причинам перешли в другие вузы переехавшие в Ростов–на-Дону из Варшавы основатели ростовской математической школы, в том числе Д.Д. Мордухай-Болтовской и В.П. Вельмин, но успешно и активно работали их ученики, пережившие тяжёлые военные годы и вставшие у руля факультета (М.Г. Хапланов, С.Я. Альпер, Е.Л. Литвер, К.К. Мокрищев, Н.М. Несторович), пополнили ряды преподавателей фронтовики (А.А. Сукало, Н.Н. Рожанская). В 1953 году из Казани вместе с группой талантливых учеников приехал профессор Ф.Д. Гахов, вскоре организовавший знаменитый «большой гаховский семинар» по математическому анализу и механике. Кроме того, в конце 40-х – начале 50-х гг. в состав кафедры теоретической механики влились приехавшие из Москвы будущие академики, а тогда молодые кандидаты наук И.И. Ворович, проработавший в Ростове до последних дней своей жизни (его имя носит теперь Институт математики, механики и компьютерных наук), и Н.Н. Моисеев – в 1956 он вернется в Москву, но в своих воспоминаниях [1] очень тепло будет вспоминать этот период своей жизни: «Неожиданно оказалась очень приятной и деловой атмосфера на нашем физико-математическом факультете. Там собралась весьма квалифицированная компания доцентов, подобранная еще профессором Мордухай-Болтовским… Может быть, они и не были первоклассными учеными, но все были знающими, интеллигентными преподавателями вполне университетского уровня. Теперь я уже имею право сказать, что все доценты факультета были профессионалами высокого класса. Именно они определяли погоду на факультете, который тогда был заметным явлением на фоне других провинциальных университетов».
В такой обстановке не мог не раскрыться талант увлеченного и яркого студента. Адольф Фуксман успешно учился, активно занимался в студенческом научном обществе, увлекался музыкой и спортом, не чуждался общественной деятельности (был членом комитета комсомола), а в 1957 году вместе с другими физматовцами работал на целинных землях в Казахстане, о чём в сборнике [2] очень эмоционально вспоминал его однокурсник, ныне профессор В.П. Захарюта. Физматовские педагоги в те годы учили студентов не только математике – без всякого преувеличения можно сказать, что они учили вчерашних мальчишек и девчонок быть людьми. Учили личным примером, профессионализмом, самоотверженностью. А заодно вводили ребят в удивительный мир искусства, как, например, один из ведущих филофонистов СССР, Г.С. Бархин, регулярно проводивший для студентов прослушивание записей классической музыки из своей уникальной коллекции.
При всём разнообразии интересов главным делом в жизни юного математика становится Наука. Он увлекся вопросами приближения функций. По воспоминаниям В.П. Захарюты задачу А.Л. Фуксману о приближении с соблюдением нулевых граничных условий (обобщение результатов И.Ю. Харрик) поставил Иосиф Израилевич Ворович. Она возникала в связи с применением вариационных методов решения краевых задач для эллиптических уравнений. Непосредственное руководство этой работой осуществлял Семен Яковлевич Альпер, один из ведущих лекторов и учёных факультета, однако в аспирантуре (1959–1962 гг.) официальным руководителем Адольфа Львовича был Михаил Григорьевич Хапланов.
Влиял на научные интересы Фуксмана и его друзей и Михаил Михайлович Драгилев. Фронтовик, выпускник 1951 года, в те годы он работал в Новочеркасском инженерно-мелиоративном институте и в Ростовском институте инженеров сельхозмашиностроения, но кандидатскую диссертацию «Некоторые вопросы теории базиса пространства аналитических функций» защищал в РГУ. Его блестящий результат о квазиэквивалентности базисов в пространстве аналитических функций и применение тонких методов функционального анализа к решению проблемы, которая ставилась в терминах классического анализа произвели на молодых учёных очень сильное впечатление и привело их к увлечению функциональным анализом.
В 1960 – 1962 гг. в Докладах Академии наук СССР по представлению академика В.И.Смирнова были опубликованы три статьи А.Л.Фуксмана. Результаты работ [3] и [4] существенно опирались на новый метод продолжения функции с сохранением дифференциальных свойств из области, граница которой содержит особые точки определенного вида, в [5] обсуждался вопрос о том, в какой мере быстрота сходимости данной последовательности аппроксимирующих функций в некоторой точке определяется свойствами приближаемой функции в некоторой окрестности этой точки.
Кандидатскую диссертацию «Приближение функций многих действительных переменных с сохранением однородных условий на границе области» А.Л.Фуксман защитил в 1962 году в Днепропетровском государственном университете. Новоиспеченный кандидат наук успешно работает старшим преподавателем в Ростовском государственном пединституте и ещё не подозревает, что вскоре бурные события, разворачивающиеся в РГУ в связи с развитием вычислительного центра, полностью изменят его жизнь.
Ещё в начале учебного 1958/59 года Министерство высшего и среднего специального образования РСФСР сообщило ректорату, что РГУ выделена одна из первых в СССР серийных ЭВМ «Урал-1». Во главе формируемого коллектива оказались учителя А.Л.Фуксмана – Ф.Д.Гахов, Е.Л.Литвер, М.М.Чепинога, Л.А.Чикин. Вычислительный центр набирал свою силу (историю его становления можно найти на сайте http://50.uginfo.sfedu.ru/history.htm), но уже в начале 60-х годов возникли некоторые проблемы, а в конце 1963 года руководство мехмата (факультет разделился на физический и физико-математический в 1961 г.) всерьез задумалась о смене руководства.
В начале 1964 года А.Л.Фуксман становится старшим научным сотрудником ВЦ, а вскоре возглавляет Вычислительный центр (официально, судя по архивным данным, он по конкурсу избирается на должность заведующего ВЦ в ноябре 1965 года). И это не просто изменение места работы – это еще и полное изменение тематики научных исследований. Его математические работы будут появляться в научных журналах вплоть до 1968 года см [6-8]; причем в [6] сформулирован и обоснован важнейший результат о продолжении функций с сохранением гладкости, существенно усиливающий предшествующие результаты В.К.Дзядыка и С.М.Никольского, а в [7] доказаны обращения известных теорем А.Ф.Тимана и В.К. Дзядыка – эти публикации сделали их автора признанным авторитетом в конструктивной теории функций), однако новым и основным увлечением учёного становятся вопросы, связанные с развитием вычислительной техники – трансляторы, языки программирования, системное программирование.
И всё же сначала предстояло решать насущные проблемы Вычислительного центра – прежде всего, стремительно растущие потребности в современной технике и профессиональных кадрах. Справились с этим А.Л.Фуксман и его команда просто отлично. Среди важнейших достижений – запуск в 1966 г. первой ЭВМ второго поколения «Урал 11М», строительство нового здания ВЦ в 1972 году, запуск «БЭСМ-6» в 1975 году и установка ЕС-1022 – одной из первых ЭВМ серии ЕС в РГУ – в 1976. С каждой новой машиной штат пополнялся молодыми инженерами и математиками. В немалой степени ради их развития с 1973 года стали проводиться ежегодные всесоюзные школы-семинары по системному и теоретическому программированию. Школы, которые будут собирать цвет советской программистской науки, которые очень быстро войдут в историю и обрастут легендами (тема эта требует своего исследования, первые попытки хоть как-то систематизировать информацию предприняты в сборнике [2], куда включены воспоминания постоянных участников школ, стоявших у истоков современного программирования – С.М. Абрамовича, В.Ш. Кауфмана, А.С. Клещёва, Л.В. Тёмова, А.Н. Терехова). Школы, основателем, вдохновителем и научным руководителем которых был именно Адольф Львович Фуксман, чей острый ум, человеческое обаяние, широта научных интересов и постоянная готовность к научному контакту ценились подавляющим большинством учёных.
Развитие вычислительного центра во многом предопределило изменения и в структуре мехмата. В 1971 году на факультете открылось отделение прикладной математики. Созданная кафедра вычислительной математики, которую возглавил И.Б. Симоненко, уже в 1972 году делится на три – кафедра алгебры и дискретной математики (заведующий – профессор И.Б. Симоненко), кафедра вычислительной математики (заведующий – профессор В.И. Юдович), кафедра математического обеспечения ЭВМ и АСУ (заведующий – доцент Г.В. Аржанов). В основном, именно на кафедре Г.В. Аржанова, на полставки, регулярно и увлеченно работал Адольф Львович. Как заметил в размещенных в [2] воспоминаниях И.И. Голянд, «сам он учился на «пятерки» и, преподавая, требовал такой же учёбы у студентов». А.Л. Фуксман вёл курсы на мехмате, читал вычислительную математику на других факультетах (в частности, по воспоминаниям И.И. Голянда, на геофаке), руководил вычислительной практикой – и очаровывал всех слушателей профессионализмом и энтузиазмом.
Все, кто оценивает организационную деятельность А.Л. Фуксмана, в один голос подчёркивают главное – именно с ним связано научное направление в деятельности Вычислительного центра (и до него, и после преобладало инженерное). Впрочем, это не удивительно. Ведь, переключившись на новую для себя тематику, Адольф Львович и в этой области получил незаурядные результаты. Г.В. Муратова в [9, с.15] подчеркивала, что Фуксман «впервые в Ростове стал заниматься актуальными в то время проблемами системного и теоретического программирования. Он открыл и исследовал класс так называемых слаборазделённых грамматик, которые были положены в основу всех созданных в РГУ трансляторов и систем автоматизации их построения. Эти работы вывели Фуксмана в ряды лидеров теоретического и системного программирования СССР. Важными практическими результатами его научной школы стали трансляторы с языков Алгол 60, Фортран и Симула 67».
Как уже было отмечено, анализ научных работ А.Л. Фуксмана показывает, что после 1968 года он полностью изменил тематику научных исследований. В основном, это работы, связанные с построением трансляторов и грамматиками языков программирования. Ряд работ [10-12] написан по результатам выступления на конференциях по системному и теоретическому программированию, проводившихся в Новосибирске.
Последняя книга А.Л. Фуксмана «Технологические аспекты создания программных систем» [13] была выпущена в издательстве «Статистика» уже после его смерти. В предисловии к [13] академик А.П. Ершов напишет: «Каждый из знающих автора перевернет последнюю страницу этой книги со смешанным чувством удовлетворения и горечи. Почти завершив работу над рукописью, Адольф Львович Фуксман погиб в результате несчастного случая. Рукопись была подготовлена к печати его сотрудниками. Адольфу Львовичу, однако, удалось подвести первый итог его успешной научной и конструкторской работы, выдвинувшей его в ряды ведущих системных программистов. Память о нем навсегда сохранится в сердцах его друзей и товарищей по профессии, и его книга — одна из первых книг в СССР по системному программированию — долго послужит развитию предмета..»
В отличие от более теоретических работ, в [13] А.Л. Фуксман обобщал практический опыт программистов ВЦ РГУ по созданию высокотехнологичных программных систем. По-существу, в его последней книге содержались ответы на вопросы, как следует писать и развивать большой программный комплекс.
Следует отметить, что практические технологии и парадигмы стремительно меняются в ИТ-мире. Используемые 5–10 лет назад технологии либо умирают, либо претерпевают стремительные изменения. Технологии же, предлагавшиеся почти полвека назад, как правило, имеют лишь историческую ценность. В свете этого особый интерес представляет исследование о том, какое влияние оказала работа [13] на современные технологии разработки программного обеспечения и какие её идеи актуальны до сих пор.
Сердцевиной книги «Технологические аспекты создания программных систем» является технология вертикального слоения программ, которая по существу представляет собой широко известную сегодня парадигму аспектно-ориентированного программирования, появившуюся примерно на 20 лет позже. Рассмотрим данный вопрос подробнее.
Основы технологии вертикального слоения описываются в [13] в главе 3. Согласно этой технологии, все функции программной системы подразделяются на реализующие и расширяющие. Реализующие функции образуют то, что А.Л.Фуксман называл основой программной системы. Это те функции, которые нельзя изъять без потери работоспособности системы. Напротив, расширяющие функции обладают тем свойством, что их изъятие не лишает систему работоспособности. Код, реализующий расширяющую функцию, и называется вертикальным слоем. Вертикальный слой состоит из фрагментов кода, входящих в модули разных горизонтальных уровней. Именно представление программы в виде основы и последовательности расширяющих функций А.Л. Фуксман называл процессом вертикального слоения программы.
Далее в [13] исследовано понятие программного слоя более детально. В частности, отмечается, что вертикальный слой является рассредоточенным действием, для которого необходимо сосредоточенное описание. Его текст – это набор вставок в основу, к которой возможно добавлены некоторые другие слои. Сосредоточенное описание вертикального слоя включает в себя: ссылку на основу, указание на то, какие слои должны быть подключены перед добавлением этого слоя, список программных фрагментов с указанием координат мест вставки, неформальное описание расширяющей функции, реализуемой слоем, а также понятия и термины, связанные с расширяющей функцией. Для получения выполнимой программы необходимо осуществить процесс интеграции. Текст интегрированной программы должен быть послойно размеченным: пометки позволяют отнести любую часть текста к определенному слою.
Хорошо известная современная технология Аспектно-ориентированного программирования (АОП) также основана на идее разделения функциональности для улучшения разбиения программы на модули. Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кичалеса [14]. Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ. Основные понятия АОП [14] удивительным образом повторяют соответствующие понятия технологии вертикального слоения программ:
аспект (у Фуксмана – слой) — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых срезом;
совет (у Фуксмана – фрагмент слоя) — средство оформления кода, которое должно быть вызвано из точки соединения;
точка соединения (у Фуксмана – координаты места вставки) — точка в выполняемой программе, где следует применить совет;
срез — набор точек соединения;
внедрение (у Фуксмана – процесс интеграции) — добавление функциональности аспекта в целевой код.
Отметим, что первая статья по АОП [15] вышла в 1996 г. – на 17 лет позже книги [13], а система AspectJ появилась в 2001 г. Отметим также, что названия терминов в книге А.Л.Фуксмана более просты и естественны для восприятия.
Кроме определения вертикального слоя, А.Л. Фуксман вводит важное понятие зависимости слоёв, слабо представленное в современном АОП. В частности, в [13] введены три вида зависимостей: зависимость включения слоя B от слоя A (без слоя A слой B лишен смысла), зависимость расположения слоев A и B (некоторые фрагменты A и B являются соседними в интегрированной программе и могут быть расположены только в определенном порядке) и зависимость по составу слоев A и B (фрагмент входит в целевую программу если присутствуют оба слоя A и B, один из этих слоёв или присутствует один и обязательно не присутствует другой). Попытки формализации такой зависимости предпринимались спустя более 25 лет на ряде конференций по АОП, однако сущственного прогресса здесь достигнуто не было.
В заключение главы 3 А.Л. Фуксман приводит достоинства технологии вертикального слоения. Это прежде всего создание на ранней стадии развития программы некоторого полностью работоспособного варианта и увеличение полноты этого варианта с каждым добавлением нового вертикального слоя в систему. Кроме того, так как создание слоя включает создание документации, система в каждый момент полностью документирована. Важным свойством подобной системы является ее облегченная модернизация, которая сводится фактически к процессу добавления новых вертикальных слоёв в систему. Процесс познания системы, написанной методом вертикального слоения, отличается от такового при изучении системы сверху вниз (до окончания изучения не ясны подробности функционирования) и снизу вверх (до окончания изучения не ясны стыковки частей в целое). Наконец, отладка системы по слоям позволяет использовать реальные данные в полностью работающей системе.
Фактически высказанные идеи в совокупности существенно превосходят идею АОП. Здесь удивительным образом можно встретить другие современные идеи и технологии: технологию быстрой разработки программ, технологию порождающего программирования, метапрограммирование, семантическую (послойную) систему контроля версий: процесс коррекции послойной программы представляется как отдельный корректирующий слой. Кроме того, здесь явно сформулирована идея разработки через тестирование: слой по Фуксману обязан содержать все тесты, иллюстрирующие его правильность, а после коррекции слоёв запускаются все тесты, принадлежащие этим слоям.
Наконец, высказана важнейшая идея, что расслоённое программирование обязательно должно быть поддержано инструментальным комплексом (сегодня используется термин «Интегрированная среда разработки»). Следует отметить, что современные среды разработки имеют лишь ограниченную поддержку слоёв (аспектов) и вовсе не потому, что эта технология не прижилась. Причиной здесь является возможно некоторая сложность реализации и сложность совокупного использования идей расслоённого программирования для рядового программиста. Однако, использование данных идей для разработки корпоративных программных комплексов, видимо, недооценено сегодня.
Итак, удивительным образом книга А.Л. Фуксмана «Технологические аспекты создания программных систем» актуальна и в настоящее время. В частности, идеи в области расслоённого программирования, содержащиеся в ней, более глубоки, чем те идеи, которые используются в распространённой технологии АОП. И если некоторые идеи оказались полностью раскрыты в современных системах (системы контроля версий, CASE-системы для порождения программ из спецификаций, средства метапрограммирвоания в языках программирования), то другие, такие как взаимодействие слоёв и поддержка интегрированной среды для работы с послойно разбитой программой, до конца не реализованы и сегодня.
В завершение данной статьи хотелось бы отметить вклад, который А.Л. Фуксман внёс в развитие языков программирования. В главе 5 книги [13] им приведено более 10 критериев ценности языка программирования. Некоторые из этих критериев могут послужить программным документом для современных разработчиков языков программирования. Среди них – мнемоничность обозначений языка, произносимость и лаконичность конструкций языка, возможность простой машинной реализации языковых средств, ясное ощущение программистом стоимости (по времени и по памяти) языковых конструкций, а также ортогональность конструкций языка, позволяющая модифицировать одни конструкции, не затрагивая другие. Следует отметить, что авторам настоящей статьи неизвестен другой столь подробный обзор критериев ценности языка программирования.
Завершая настоящую статью об известном российском ученом А.Л.Фуксмане, хотелось бы отметить, что его дело живёт. В апреле 2017 г. в Институте математики, механики и компьютерных наук Южного федерального университета была проведена Всероссийская научная конференция «Языки программирования и компиляторы», посвященная памяти А.Л. Фуксмана. В конференции приняли участие ученые из многих городов России: Москва, Санкт-Петербург, Новосибирск, Красноярск, Иннополис, Казань, Ростов-на-Дону и др. Это – первая в России конференция по указанной тематике, продолжающая лучшие научные традиции прошлого, в планах у организаторов которой – создание ежегодного научного форума российских ученых в области языков программирования.
Литература
-
Моисеев Н.Н. Как далеко до завтрашнего дня… Свободные размышления, 1917—1993. – М.: Аспект Пресс, 1994. – 304 с.
-
Как получаются программисты? Воспоминания об А.Л.Фуксмане. Сост. С.М.Абрамович, Ю.С.Налбандян, Б.Я.Штейнберг. – Ростов-на-Дону, 2017.
-
Фуксман А.Л. Приближение функций с сохранением однородных граничных условий //Доклады АН СССР. – 1960, т.134. № 2. – С.289-291.
-
Фуксман А.Л. О приближении функций многих переменных с сохранением граничных условий //Доклады АН СССР. – 1961, т.141, № 5. – С.1050-1053.
-
Фуксман А.Л. Локальные свойства некоторых аппроксимационных операторов //Доклады АН СССР. – 1962, т.142, № 3. – С.556-559
-
Фуксман А.Л. О продолжении функций с сохранением дифференциальных свойств //Сибирский математический журнал. – 1964, т.5, № 6. –С.1370-1381.
-
7. Фуксман А.Л. Структурная характеристика функций, у которых //Успехи математических наук. – 1965, Т.20, вып.4, . – С.187-190.
-
Фуксман А.Л. Приближение функций действительных переменных алгебраическими полиномами в замкнутой области //Доклады АН ССР. – 1968, т.178, № 6. – С.1263-1266.
-
Муратова Г.В. А.Л.Фуксман и его роль в развитии Вычислительного центра Ростовского государственного университета / Языки программирования и компиляторы – 2017. Труды конференции (3-5 апреля 2017 г.) под ред. Д.В.Дуброва. Ростов-на-Дону, 2017. С.14-17.
-
Фуксман А.Л. О некоторых свойствах формальных грамматик /Труды Всесоюзной конференции по программированию. Заседание К. Новосибирск, 1970, 3-6 февраля. С.21-31.
-
Фуксман А.Л. Расслоенное программирование / Системное и теоретическое программирование, Новосибирск, 1974.
-
Фуксман А.Л. Некоторые принципы построения трансляторов /Труды всесоюзного симпозиума по методам реализации новых алгоритмических языков. Новосибирск, 1975.
-
Фуксман А.Л. Технологические аспекты создания программных систем – М.: Статистика, 1979. – 183 с.
-
Аспектно-ориентированное программирование // Википедия. URL: https://ru.wikipedia.org/wiki/Аспектно-ориентированное_программирование (дата обращения: 05.05.2017).
- Gregor Kiczales: Aspect-Oriented Programming. ACM Comput. Surv. 28(4es), 1996. 154 p.
Об авторе: к.ф.-м.н., Институт математики, механики и компьютерных науки имени И.И.Воровича ЮФУ, Ростов-на-Дону, Россия
к.ф.-м.н., Институт математики, механики и компьютерных науки имени И.И.Воровича ЮФУ, Ростов-на-Дону, Россия
Материалы международной конференции Sorucom 2017
Помещена в музей с разрешения авторов
6 июня 2018