• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Архитектор параллельных миров

Интервью с профессором Александром Легаловым

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

К юбилею Александра Ивановича Легалова

Более двадцати лет для меня имя Александра Ивановича Легалова связано с образом ученого и преподавателя, на которого можно ориентироваться. Я впервые услышал о нем на защите своей кандидатской диссертации: поразили ясность изложения, широта кругозора и высокая планка требований — к моей работе, к себе (он был подготовлен) и к уровню дискуссии. С тех пор я следил за его работами и старался оставаться в одном профессиональном поле — в темах, подходах, вузовской среде.

Скоро стало ясно, что подобное отношение к нему не только у меня. Когда Александр Иванович предложил быть его коллегой по вузу, то я увидел, что все сильные студенты выбирали его в научные руководители: в нем видели не формального куратора, а человека, для которого наука и программирование — постоянная практика. Его спокойные, выстроенные по сути объяснения опирались на выработанную систему взглядов на архитектуры вычислительных систем, языки программирования и на то, что значит исследовательская работа в нашей области.

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

Отдельно ценен для меня его пример готовности выходить за привычные рамки: новые технологии, дисциплины, направления — от моделей параллельных вычислений до языков и парадигм программирования. В нем вижу сочетание профессионального интереса и готовности разбираться в новом независимо от возраста и должности. Это стимулирует и меня не останавливаться на «достаточно хорошо».

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

— Как складывалась ваша академическая карьера?

— В 1973 году я поступил в Красноярский политехнический институт (ныне в составе Сибирского федерального университета) на радиотехнический факультет, на специальность «конструирование и производство радиоэлектронной аппаратуры». На третьем курсе перешел на индивидуальный план обучения на кафедре вычислительной техники (ВТ) по специальности «электронные вычислительные машины». В ходе обучения осознал, вначале чисто теоретически, что такое программирование, изучая язык «Алгол-60». Позднее на практике использовал язык «Алмир-65» для выполнения различных расчетов на ЭВМ «Мир-1», преимущественно в курсовых проектах. Дипломный проект состоял в разработке 16-разрядного процессорного блока на базе 4-секционного микропроцессора серии К584.

После окончания института в 1978-м я два года работал ассистентом кафедры ВТ. За это время хорошо изучил язык программирования PL/1, который тогда позиционировался в качестве основного и перспективного языка программирования для единой системы ЭВМ. В 1980 году поступил в целевую аспирантуру Ленинградского электротехнического института (ЛЭТИ). В годы аспирантуры основным направлением моих исследований были архитектуры параллельных вычислительных систем, модели параллельных вычислений. В 1983 году защитил кандидатскую диссертацию по теме «Организация управления вычислениями в процессорах потоков данных». Вернулся в Красноярск. Работал в Политехническом институте на должности доцента.

В 1989-м мы с семьей переехали в Ярославль, где в то время был образован Институт проблем вычислительной техники АН СССР. Он работал над созданием рекурсивной векторно-потоковой системы. Я пришел туда на должность старшего научного сотрудника, занимался разработкой компиляторов, анализом моделей параллельных вычислений в рамках дальнейшего развития архитектуры разрабатываемой системы. В это же время начал программировать на языке C. После появления C++ в фоновом режиме изучал его особенности и писал на нем различные программы для себя (с 1991 года, когда на работе появился Turbo C++ 1.0). В ходе анализа моделей параллельных вычислений у меня появились первые идеи по архитектурно-независимому параллельному программированию и функционально-потоковой модели параллельных вычислений.

Развал СССР в сочетании с семейными обстоятельствами заставил меня вернуться обратно в Красноярск в конце 1992 года и вернуться на работу в Политехнический институт, который после ряда реорганизаций и переименований в конце концов вошел в состав Сибирского федерального университета.

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

Накопленные в Ярославле знания и опыт в программировании помогли мне в 1990-е продержаться на плаву за счет выполнения различных проектов, прозванных в народе халтурами. Этот же опыт и склонность к анализу и разработке языков позволили мне усомниться в нерушимости объектно-ориентированной парадигмы программирования, что в конце концов привело меня к разработке процедурно-параметрического программирования. Более подробно этот процесс представлен на одной из страниц моего персонального сайта. В нулевые возник вопрос: как все сформировавшиеся идеи собрать и оформить в общем «кирпиче», который называется докторской диссертацией? Это удалось в 2005 году, после того как я уже вывел на защиту кандидатских своих первых четверых учеников. После защиты докторской оба направления моей работы продолжались уже не только мной, но и другими аспирантами (на текущий момент защитили кандидатские 13 моих учеников). Они продолжаются и сейчас, после переезда в Москву в 2020 году.

В чем специфика академического сообщества программистов?

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

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

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

Существуют ли исследования в области программирования? Как они устроены?

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

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

Чем различаются поколения советских и российских программистов? Какие проблемы интересуют программистов сегодня?

— До настоящего времени не видел больших различий. Раньше основной акцент делался на использовании методологий программирования, техники программирования на различных языках.

В последние годы во многих прикладных направлениях фокус заметно сместился на методы искусственного интеллекта (Vibe Coding), то есть на то, чего раньше просто не существовало. Во что это выльется в ближайшие годы? Скорее всего, в новые организационные и методологические подходы, новые инструментальные средства. Более конкретные решения прогнозировать пока рано.

Чем измеряется профессиональный успех программиста?

— Профессиональный успех связан с признанием твоей работы другими. Для программиста это чаще всего признание разработанного им программного продукта. Уровень признания при этом определяется размером сообщества. Начиная от локального признания в рабочем коллективе, которое может отразиться на заработной плате, и заканчивая признанием пользователей продукта, которое может быть и в мировом масштабе. Например, признание разработанного свободного программного обеспечения (ОС Linux и др.).

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

Расскажите о том, что вы считаете вашими профессиональными достижениями.

— Большинство таких достижений, скорее всего, определяется субъективным восприятием сделанного. Естественно, что это не только написанные программы, так как моя работа по большей части была связана с преподавательской и научной деятельностью. Программирование сегодня — это подтверждение научных результатов. Я занимаюсь разработкой методов программирования и новых инструментов, моделей параллельных вычислений. В конечном счете эта работа выливается в создание языков программирования, на которых нужно писать код. В моей работе случались гранты и проекты, где нужно было просто программировать, и удавалось получить интересные для меня результаты, но с течением времени они уже покрылись пылью. Вряд ли имеет смысл вспоминать конкретные разработки, потерявшие свою актуальность и переставшие использоваться. Поэтому остановлюсь на том, что представляет для меня интерес сегодня. Это продолжение работы по архитектурно-независимому параллельному программированию и эволюционной разработке программного обеспечения.

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

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

Как создаются искусственные языки и чем они интересны?

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

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

Что такое языки программирования? Почему их много и появляются новые?

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

Что отличает российскую школу программирования?

— Мне сложно говорить о российской школе программирования как о чем-то уникальном. Возможно, у нее есть какие-то свои особенности. Но я их не замечал раньше и не вижу сейчас. В свое время я изучал программирование по книжкам. Переход к профессиональному программированию у меня произошел достаточно поздно, когда появились 32-разрядные персональные компьютеры Intel. Это случилось в период работы в Институте проблем вычислительной техники.

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

23 апреля