Учась в школе, я последовательно прошел через увлечения биологией, физикой, химией (но значительно меньшее), математикой (это уже навсегда).
Когда в начале-середине 50-х в стране появились первые ЭВМ, с таким же детским увлечением я влез в программирование. И не в том дело, что это увлечение подогревалось профессиональными интересами(об этом - позже). Это занятие затрагивало какие-то глубинные струны моей души, отвечало складу всей моей личности. И если в математике я всего лишь любитель, то в программировании уверенно считаю себя профессионалом.
В старших классах я занимался в математическом кружке (совместное детище матмеха ЛГУ и Дворца пионеров). В 1939 году - в год окончания школы - я был среди победителей, как тогда говорили, Ленинградской математической олимпиады.
Тем не менее, при выборе факультета (вуз - Ленинградский университет - не вызывал у меня сомнений) я заколебался - идти ли на матмех или на физфак. Возможно не без влияния моего друга по кружку - С.А. Каплана, впоследствии видного радиофизика, трагически погибшего при неясных обстоятельствах в конце 70-х. А может быть, я уже тогда почувствовал, что чистая математика - занятие не для меня.
Все же математика (или самостоятельность) победила.
В университете я далеко не одинаково относился к математическим дисциплинам. Скажем, алгебра (лектор - Д.К. Фаддеев, семинары - И.С. Соминский) вызывала у меня живейший интерес, если не восторг, а анализ оставлял довольно равнодушным. Хотя я и отдавал должное лекторскому мастерству Г.М. Фихтенгольца, но уже со второго семестра его разжевывание (как мне казалось) элементарных вопросов начало мне надоедать.
И в том и в другом курсе уделялось заметное внимание вычислительным вопросам (численному решению уравнений, вычислению элементарных функций и пр.). Не знаю, было ли это независимой (или совместной) инициативой этих двух лекторов, следованием традиции петербургской математической школы доводить исследование до числа или установкой свыше на "приближение университетского образования к жизни". Выигранные мною за счет школьной учебы (сложилось так, что я перескочил сначала через первый, а при переходе в другую школу - и через третий класс) два года университета до начала Отечественной войны сыграли в моей последующей жизни если не решающую, то исключительно большую роль. Прежде всего, я успел получить основы систематического математического образования в наиболее благоприятных для этого возрасте и среде.
Далее - когда началась война, я, как и все студенты-мужчины, пошел в ленинградское народное ополчение. Артиллерийский полк, куда мы все попали, задержался с формированием. А в это время к нам подоспели вербовщики из созданной за несколько месяцев до этого Ленинградской военной воздушной академии. Почти все мы согласились пойти туда учиться и были приняты. Трижды продлевался срок нашего обучения - оттрех месяцев до шести, затем до года, а в результате мы были выпущены в 1944 году с дипломом военного инженера-механика, с сумбурным, но достаточно полным инженерным образованием, в звании старшего техника-лейтенанта. Я попал по распределению техником звена в истребительный авиационный полк.
Почти через год после окончания войны - новая вербовка. Некий подполковник Королев в сопровождении майора в авиационной форме предложил мне работу по изучению совершенно новой техники, на что я, долго не раздумывая, согласился. Техника эта оказалась немецкой ракетой Фау-2, действительно производившей впечатление по тем временам.
В итоге всего, в начале 1947 года я был демобилизован из армии и принят на работу сразу на должность начальника группы баллистики в подмосковное КБ в отдел Главного конструктора Сергея Павловича Королева (того самого "подполковника"). Приобретенные мною знания и опыт, среди которых я без колебаний ставлю на первое место свой двухлетний университетский багаж, позволили мне без особых проблем включиться в предложенную работу.
Баллистика - это тот узел, куда стягиваются практически все характеристики "изделия" (ракеты или, впоследствии, космического аппарата) - весовые, энергетические, многочисленные параметры системы управления - и где должны быть надежно определены его тактико-технические данные: дальность полета (параметры орбиты), "полезный" груз, рассеивание у цели. Делается это на всех этапах разработки - от согласования с военным заказчиком технического задания, по ходу эскизного и рабочего проектирования, до подготовки и проведения лётных испытаний (запусков космических аппаратов).
Не в силу каких-либо личных качеств, а благодаря этой особой роли баллистики я был участником разнообразных совещаний, где собирались вообще-то люди, на несколько ступенек выше меня по должности. Совещания проходили и у Главного конструктора, и на полигоне (где я отвечал за подготовку полетного задания на каждый пуск), и в иных инстанциях. Там обсуждались и принимались, обычно в условиях острого столкновения интересов (военных и промышленности, КБ и министерств, Главных конструкторов изделия в целом и отдельных систем), важнейшие решения.
Никогда за все эти годы ни я, ни руководимая мною служба не подводили КБ ни по глубине и качеству исполнения, ни по срокам.
Ежегодно в группе (а затем - в секторе) баллистики выпускалось 2-3 технических отчета, относившихся к разряду технической документации по тому или иному изделию.
Кроме того, практически каждый год я выпускал научно-методический отчет по тому или иному разделу своей специальности. Правда, по установленному порядку он назывался тоже техническим отчетом и нес, кроме моей подписи, также подпись заместителя начальника отдела, самого начальника, заместителя главного конструктора и утверждающую подпись главного конструктора. Но за редкими исключениями этобыл плод моего и только моего труда. Объем такого отчета был 50-100 машинописных страниц.
Назову (не в хронологическом порядке) тематику этих отчетов: механика тел переменной массы, уравнения движения ракеты, проектные баллистические расчеты (быстрые, но грубые оценки дальности полета),точные расчеты траектории, то же касательно рассеивания параметров траектории и координат точки падения, назначение гарантийных запасов топлива (остающихся в баках к моменту выключения двигателя при номинальных характеристиках ракеты и ее систем, но расходуемых в большей или меньшей степени при неблагоприятном сочетании этих характеристик), выбор формы траектории выведения ракеты (на участке работы двигателя).Иногда приходилось вторгаться и не совсем в свою область - заниматься точной теорией работы того или иного прибора или даже системы управления (как правило - управления дальностью).
Все эти материалы выпускались в небольшом числе экземпляров и несли на себе достаточно высокий гриф секретности, даже если базировались только на общеизвестных методах математики и механики.
Естественно, что, хотя бы для себя, накопленные материалы собирались, еще раз обрабатывались и объединялись в некоторое подобие книги, без особых перспектив ее издания. Но в 1956 году такую книгу издала Артиллерийская академия в качестве учебника для своих слушателей под грифом "Секретно". И только еще через десять лет, когда вовсю летали не только спутники, но и межпланетные аппараты, книгу"Баллистика управляемых ракет дальнего действия" (авторы - Р.Ф. Аппазов, С.С. Лавров и В.П. Мишин, хотя вся она была по несколько раз переписана моей рукой) удалось издать открытым тиражом в издательстве "Наука".
Год I960 был ознаменован тремя событиями. В мире - было опубликовано "Сообщение об алгоритмическом языке Алгол 60", в стране - была выпущена первая заводская серия из четырех вычислительных машин М-20, одна из которых попала к нам в ОКБ, во мне - созрело решение посвятить себя впредь уже не баллистике (появилось немало весьма опытных и самостоятельных моих учеников, на которых можно было положиться), а программированию.
Мне было ясно, что массовое программирование не может вестись только силами программистов-профессионалов, а ими пока что с неизбежностью становились все, кому требовалось использовать ЭВМ. Эти люди были вынуждены осваивать машинный язык, приемы программирования и работы на ЭВМ.
Алгол 60 при всех его слабостях воспринимался мной как язык качественно иного уровня, и мне захотелось испытать свои силы в работе над транслятором с этого языка. Две группы - одна в ВЦ СО АН подруководством А.П. Ершова, другая в ИПМ АН, возглавлявшаяся М.Р. Шура-Бурой и Э.З. Любимским, уже объявили о своем намерении заняться подобной работой. Той и другой я предложил услуги свои и уже образовавшейся у нас группы программирования. Та и другая это предложение отвергли. Тогда я решился.
К осени I960 года у меня сложился проект собственного транслятора (программирующей программы, как тогда говорили), и я доложил его в серии докладов на семинаре нашей группы. Вместе мы решили испытать свои силы на реализации этого проекта. Сам я в написании программ транслятора не участвовал, но постоянно следил за ходом дела и помогал в трудных случаях принимать необходимые решения. Непосредственное руководство программиро-ванием взял на себя В.А. Степанов и только его самоотверженный труд и ответственное отношение к делу обеспечили успех. Достаточно сказать, что ему приходилось завершать работу, начатую тем или иным членом группы и по каким-либо причинам выбывшим из нее. Наиболее сложную часть работы - трансляцию процедур - выполнил В.Н. Попов. Самые добрые слова должны быть адресованы и другим участникам работы. Первая версия транслятора заработала весной 1962 года - даже раньше, чем трансляторы, создававшиеся другими группами в академических институтах.
В 1963 году состояние работ по автоматизации программирования (так тогда именовалась разработка трансляторов) обсуждалась на заседании Президиума АН СССР. Докладчиками были М.Р. Шура-Бура и я. Результаты наших работ получили достаточно высокую оценку в выступлении Президента Академии - М.В. Келдыша и в решении Президиума.
С подачи А.П. Ершова, с которым мы в те годы не только познакомились, но и сдружились, я написал статью "Об экономии памяти в замкнутых операторных схемах" (Журнал вычислительной математики и математической физики, 1961). Это была моя первая открытая публикация, к тому же в академическом журнале, и написал я ее в соответствии с довольно наивным представлением о стиле подобных публикаций,хотя и лапидарном, но громоздком в силу своей математизированности (формальные определения, леммы, теоремы).
В нашем трансляторе не делалось попыток применить описанный в статье метод экономии памяти. Такое расхождение теории с практикой в жизни встречается не столь уж редко. Я отнюдь не противник теории и знаю множество примеров вполне практичных теоретических решений программистских проблем.
В книге - С.С. Лавров, Л.И. Гончарова. Хранение информации в памяти ЭВМ. М.: Наука, 1971 - авторы попытались собрать как раз такие практически полезные элементы программистской теории.
Но нельзя заранее ставить крест и на непрактичных в данный момент теориях. В частности, любые эвристические приемы, применяемые в алгоритмах решения научно-технических задач, должны как-то оцениваться. Критерием или точкой отсчета здесь и может служить соответствующая общая теория. Фантастически быстрое развитие возможностей вычислительной техники иногда делает приемлемым теоретическое решение, до какого-то времени бывшее непригодным для практического применения.
Уже в начале 60-х стало ясно (и мне в том числе), что Алгол вполне приемлем для программирования вычислительных задач, но универсальным языком без большой натяжки называться не может. В это же время ко мне обратились два молодых инженера из конструкторского отдела ОКБ - Г.С. Бегунков и И.Е. Педанов, заявившие о своем желании заняться автоматизацией конструкторских работ и попросившие взять их под свое крыло. Я это и сделал не без сопротивления со стороны начальника их отдела. Вчетвером - вместе с В.А. Степановым - мы начали думать над ситуацией.
Итогом явилась статья "Аппарат геометрических описаний для автоматизации конструкторских работ" (1963 г.). На примере одной предметной области - описания формы геометрических тел - еще далекой от общей задачи автоматизации проектирования, но с оглядкой на нее, мы показали необходимость специфических для этой области типов данных и описали такие типы и соответствующий им набор операций. Однако следующий шаг - включение определений любых новых типов данных в универсальные языки программирования нами не был сделан, и позже это сделали другие. Делался вывод, что для реализации операций над данными новых типов следует использовать языки обработки символьной информации (ЯОСИ). Это - прообраз тезиса о том, что автоматический синтез программ по спецификациям задач должен быть основан на конструктивном доказательстве теоремы существования решения задачи (именно для проведения этого доказательства и нужны ЯОСИ). Этот тезис был впоследствии использован многими авторами, в том числе и в инициированных мною работах по синтезу программ и системе СПОРА.
Уволившись в 1966 году из ОКБ скончавшегося в начале года С.П. Королева, я погрузился в сферу ЯОСИ.
Первым шагом была работа над языком Снобол-А (препринт ВЦ АН СССР, 1968) и его реализацией на БЭСМ-6, совместно с Л.И. Гончаровой (Станевичене). Работа успеха не имела, не столько из-за недостатков реализации (отражавших недостатки доступных ЭВМ), сколько из-за непопулярности и слабости языка Снобол.
Существенно более успешной была реализация языка Лисп на БЭСМ-6 (совместно с Г.С. Силагадзе). Удалось создать неплохие интерпретатор и компилятор Лиспа. В книге тех же авторов "Язык Лисп и его реализация" (М.: Наука, 1978) описана более совершенная реализация.
От работ по Алголу берет начало серия работ по синтаксическому анализу (совместно с Г.М. Заикиной - алгоритм, использованный в трансляторе с Алгола 60, Л.И. Станевичене, М.В. Дмитриевой и А. Ордяном).
Интересные прочитанные работы заставляют иногда отвлечься от основной темы деятельности. Так возникла статья "Семантика языков программирования (обзор)", содержащая изложение идей денотационной семантики и ее связи с операционной. К ней примыкает и работа совместно с М. Ириарте (Куба) по семантике понятий, традиционно не охватываемых денотационной семантикой. Лишь во 2-й половине 90-х гг. явзялся за обработку материалов спецкурсов по теории программирования, читавшихся лет за 10 до того на матмехе ЛГУ. Книга была написана и несколько лет пролежала в издательстве Петербургского университета. Большую ее часть занимают разделы именно по семантике алгоритмических языков. Впоследствии ее материалы вошли как третья глава в книгу "Программирование", вышедшую в 2001 г. в издательстве BHV (Санкт-Петербург).
А.П. Ершов привлек меня к участию в Рабочей группе WG2.1 ИФИП по Алголу. Это было великолепной школой. Однако мои попытки изложить свое понимание путей развития универсального алгоритмического языка и повлиять на работу над Алголом особого успеха не имели. В рабочих материалах группы зафиксирован мой важный тезис о необходимости включения (интеграции) средств взаимодействия с операционной средой в языки программирования. Сейчас этот тезис общепринят, особенно в системах программирования для персональных компьютеров.
В той же обстановке (работа в группе WG2.1) родился язык АБВ как альтернатива Алголу 68 и как шаг в основном русле моих раздумий. Появление все новых языков, ориентированных на конкретное применение, рассматривалось как неизбежность, подтверждаемая всей программистской практикой тех лет. А всякая установившаяся практика нуждается в инструментальной поддержке. В этом качестве и был предложен язык АБВ. Был описан механизм последовательного расширения базового языка (т.е. самого АБВ) до языка, в котором заинтересован пользователь. Это - прототип технологий программирования, ставших весьма популярными за последние 10-15 лет.
Многим планам моей научно-литературной деятельности не суждено было осуществиться. Так, упомянутые выше мои книги с Л.И. Гончаровой и с Г.С. Силагадзе имели надзаголовок "Автоматическая обработка данных". Предполагалось, что это будет серия (или библиотечка) книг, охватывающая все то, что мне представлялось важным в программистской деятельности. Ради одной из следующих книг серии - "Язык Паскаль и его реализация" я занялся написанием транслятора с Паскаля для машины Одра-1204 (машина маленькая, но в Ленинградском университете, где я тогда работал, она была доступна почти как персональная для десятка сменяющих друг друга пользователей; на ней же были перед этим проверены многие алгоритмы из книги по Лиспу). Транслятор (и, кажется, неплохой) был написан, а книга - увы, нет. Вместо нее появилась брошюра "Основные понятия и конструкции языков программирования" М.: "Финансы и статистика", 1982 - глава также ненаписанной второй части "Введения в программирование" (ставшей уже упомянутым "Программированием"). В ней дан обзор основных понятий, встречающихся в таких языках, как Паскаль, Алгол 68, ПЛ/1 и другие. Показано, как и в чем эти понятия облегчают труд программиста. Дано представление о доказательстве правильности программ.
Длительный этап моей научной деятельности почти полностью связан с работой над системой СПОРА. Начался он в 1977 году и продолжался до тех пор, пока обстоятельства (главным образом, здоровье) не заставили меня отказаться от руководства молодыми сотрудниками.
Система СПОРА была задумана как средство построения формальных моделей прикладных (предметных) областей и автоматизации создания программ решения задач в этих областях на основе их спецификаций в модели.
В работе "D-аксиоматизация языка Декарт" (опубликована в сборнике "Прикладная информатика" М.: "Финансы и статистика", 1987) я рассмотрел вопросы пополнения языка "Декарт" - входного языка системы СПОРА - новыми конструкциями, формального описания его семантики средствами исчисления предикатов первого порядка (без равенства и без функциональных букв), автоматического решения задач, сформулированных на этом языке. Анализ ряда примеров позволил выявить основные трудности, возникающие при решении задач, и наметить некоторые пути их преодоления.
Необходимо добавить, что десяток лет спустя я начал осознавать, что не только автоматический синтез программ, но и, казалось бы, более простая задача доказательства программы на основании просмотра ее текста, в общем случае нерешаемы. Известный метод доказательства правильности - продвижение постусловий вдоль текста программы - может быть реализован (опять-таки, в общем случае) только параллельно с исполнением программы при конкретных исходных данных. Подробнее я написал об этом в статье "О родстве оснований программирования и математики" - "Программирование", 2001, № 6.
Обзор "Использование вычислительной техники, программирование и искусственный интеллект (перспективы развития)" - "Микропроцессорные средства и системы", N 3, 1984 - отражает достаточно субъективную позицию автора по перечисленным в заголовке проблемам. Сформулированы предпосылки появления баз знаний в качестве основы нового поколения систем программирования (совместной работы человека с ЭВМ). Выдвинут ряд предложений для Государственной программы развития вычислительной техники и средств взаимодействия человека с этой техникой. Статья написана мною на основе доклада, представленного в комиссию по подготовке такой программы. Насколько мне известно, все труды этой комиссии, как и многих других, ей подобных, ушли в песок.
В статье "Представление и использование знаний в автоматизированных системах" - "Микропроцессорные средства и системы", N 3, 1986 существенно дополнены положения предыдущего обзора. Подчеркнута роль метазнания (воплощения опыта работы с моделью предметной областью) как основы развития базы знаний. Система СПОРА описана в терминах рассмотренных в статье понятий.
Назову еще несколько работ, опубликованных в это время.
Статья "Кому и для чего нужна персональная ЭВМ" - первая (почти восторженная) реакция на появление персональных компьютеров - содержала, в частности, предложения по составу программного обеспечения для пользователя - научного работника.
Статью "Методология программирования" - В кн. "Семиотика и информатика", в. 23, М: ВИНИТИ, 1984 - трудно изложить кратко, так как она сама достаточно конспективна.
Статья "О знаниях и языке машины и человека" - В кн. "Семиотика и информатика", в. 24, М: ВИНИТИ, 1985 - анализирует понятие "искусственного интеллекта" ЭВМ, егоm принципиального отличия от "естественного" интеллекта человека, описывает слабые и некоторые сильные стороны этого понятия, обосновывает правомерность его употребления. Оспаривается точка зрения, что естественный язык, пусть даже соответствующим образом ограниченный, может служить наилучшим средством общения человека с вычислительной машиной.
Статья "Формализация, лингвистика, логика" - В кн. "Семиотика и информатика", в. 27, М: ВИНИТИ, 1986 - описывает свойства естественного языка как модели внешнего мира, его сильные и слабые стороны в этом качестве. Показано, что построение любой модели не только объясняет моделируемое явление человеку, но и (тем самым) изменяет, а иногда и "убивает" это явление. Так, закон, направленный на пресечение преступлений той или иной категории, обычно всего лишь меняет методы, применяемые преступниками, на новые - "легальные" с позиций этого закона.
Спустя некоторое время после перехода на работу в Институт прикладной астрономии РАН я начал робкие попытки предложить свои услуги в качестве помощника по решению тех или иных математических или программистских проблем. Успеха они не имели. Скорее всего, потому, что требовали от очень занятых людей уделить время на то, чтобы ознакомить меня с содержательной (физической) сущностью дела.
Большим везением для меня стала случайная необходимость выступить официальным оппонентом по докторской диссертации А.Т. Байковой, посвященной восстановлению изображений в радио-интерфометрии. Я совершенно не был знаком с физической стороной проблемы, но обладал достаточным объемом математических знаний, чтобы разобраться с ней, а главное - заинтересоваться ею. Думается, что мне и здесь удалось получить некоторые существенные результаты теоретического характера, а главное - найти возможность для массового вычислительного эксперимента, позволившего как подтвердить с уверенностью многие результаты А.Т. Байковой, так и обнаружить некоторые новые явления. Все это описано в статье - "К обоснованию методов восстановления изображений на основе выпуклых критериев качества" ("Сообщения ИПА РАН N 106) и в отчете о моей работе по этой теме за 1997 г. Но ряд исследований по этой проблеме еще хотелось бы провести.