Программирование в 1980-х годах
Андрей Петрович Ершов — ученый и человек

Программирование в 1980-х годах

[1]

(Позиционное выступление на панельной дискуссии Конгресса ИФИП-74)

Я позволю себе заметить сначала, что вызов человеку выступить с тезисами на дискуссии такого рода ставит его в противоречивое положение. С одной стороны, тема дискуссии подсказывает, что ему предстоит сделать что-то вроде предсказания на десять лет вперед. Это приводит его к попытке проэкстраполировать ход времени и заняться спекуляциями о далеком будущем (10 лет — это в наше время поистине срок). С другой стороны, 10 лет — это не более чем всего два серьезных проекта в жизни системного программиста и, если оглянуться назад, это то, что было совсем недавно. Если мы сопоставим сегодняшний день с тем, что мы видели и слушали на Нью-Йоркском Конгрессе ИФИП[2], то мы обнаружим, что сегодняшний день был очень хорошо там представлен, за исключением, возможно, только трех концепций: систематического программирования, понимания роли минимашин и понятия распределенных вычислений, да и то ряд пророчеств в этих вещах был в то время сделан.

Эти тривиальные замечания приводят к первому моему позиционному заявлению: все, что составляет программирование сегодня, будет представлено в программировании и в 80-е годы и составит его существенную часть. Поэтому я позволю себе дать аудитории (равно как и самому себе) следующий совет: если вы хотите внести вклад в программирование 80-х годов, после этого конгресса вернитесь к своему столу и подумайте, что надо сделать, чтобы получить свои 10—20 % улучшения в вашей сегодняшней системе. Реализация идей сейчас, пожалуй, более важна для повседневного процесса, нежели поиск новой идеи просто так, в силу неудовлетворенности.

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

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

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

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

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

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

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

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

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

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

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

Глубокое понимание математики обработки информации является самым надежным средством того, что будущий проектировщик сможет сохранить контроль за эффективностью и интеграцией проекта. В этом смысле я особенно восхищаюсь титанической работой Д. Кнута[3], который описывает «искусство программирования» с позиций математических методов.

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

Примечания

[1] Напечатано в сборнике «Системное и теоретическое программирование». — Новосибирск, ВЦ СО АН, 1974. — С. 12—15.

[2] В 1965 г.

[3] Дональд Э. Кнут (р. 1938) — почетный профессор информатики факультета информатики Стэнфордского университета США, почетный доктор многих университетов мира, в том числе Санкт-Петербургского. Тьюрингов лауреат (1974), член Британского вычислительного общества (1980). Основным трудом его жизни является монография «The Art of Computer Programming». Выпустив первый том в 1968 году, он до сих пор продолжает работать над новыми томами.

Из сборника «Андрей Петрович Ершов — ученый и человек». Новосибирск, 2006 г.
Перепечатываются с разрешения редакции.