А.П. Ершов. Откуда берутся люди, способные создавать надёжное программное обеспечение

Выступление на панельной дискуссии на Международной конференции по надежности программного обеспечения (Лос-Анжелес, 21-23 апреля 1975 г.)

 

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

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

Если бы меня попросили дать формулу этих качеств, то я выделил бы их в следующих словах:

  • способность к познению сути дела
  • логическая и комбинаторная способность
  • терпеливость
  • дисциплина
  • способность к планированию и подготовке собственной теятельности, которая в более прогрессивных терминах можеть быть выражена как «база данных и общая структура в первую очередь»

 

Сейчас системные программисты вырастают путём естественного отбора. Это слишком долго. Проблема состоит не столько в том, чтобы найти способных людей, сколько в том, чтобы объединить их способности в сбалансированном и продуктивном стиле работы. «Естественный путь» требует для этого 8-10 лет. Сомневающимся я могу порекомендовать прочесть очень авторитетную и убедительную книгу Фреда Брукса «Мифический человеко-месяц», котораю показывает, что только третья по счёту система, разработанная программистом, оказывается убедительным сертификатом его профессиональной зрелости. Если же добавить к этому периоду 5 университетских лет, то мы приходим к тому критическому периоду жизни тридцатилетнего человека, когда он впервые сталкивается с чувством усталости и прощания с молодостью.

Я повторяю: это слишком долго и слишком поздно.

С другой стороны, мне хотелось бы высказать оптимистическую идею, частично поддерживаемую некоторым опытом, в отношении того, как сократить этот срок до 7–8 лет. Тезис, в его словесном выражении, так же прост, как и стар: объединить обучение с тренировкой, суждение с действием, стиль с содержанием. В меру моего знания, относительно очень малое число учебных и профессиональных организаций обеспечивает такую комбинацию: некоторые высшие школы бизнеса в США, так называемые физико-технические институты в СССР, и также некоторые музыкальные и медицинские вузы как пример из родственных профессий.

По моей оценке этот 7–8-летний срок разбивается на следующие периоды:

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

Второй период. Два года. Наиболее критический. Бракосочетание математических и программистских способностей студента. В соответствии с этим, главная проблема – избегать развода. Повышенные курсы по теоретическому программированию, системному программированию и структурному анализу. Серия мини-проектов, ориентированных, главным образом, на двоих, в частности для того, чтобы выработать у студента чёткое представление о принадлежности либо к ведущим, либо к ведомым и положительное отношение к каждому из этих заключений.

Третий период. Два года. Наиболее доверительный для студента и наименее доступный в сегодняшней учебной обстановке. Участие в реальном коллективном проекте со всеми атрибутами настоящей профессиональной работы, но под тщательным и авторитетным руководством учителя, ответственного не столько за продукт, сколько за подход и поведение студента в работе над проектом.

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

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

Создание такой законченной комбинации методики, учебных курсов, проектов, программного обеспечения и преподавателей потребует 8–10 лет напряженной работы даже при благоприятных предпосылках её развертывания.

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

Наш Вычислительный центр в Новосибирском научном центре – большом комплексе, объединяющем порядка 20 научно-исследовательских и проектных институтов вместе с университетом. Мы имеем некоторый опыт объединения познавательных, научных и профессиональных аспектов учебного процесса. Мы имеем также несколько убедительных примеров персональных историй, показывающих, что системный программист может достичь необходимой зрелости в относительно более короткие сроки, по-прежнему сохраняя столь необходимые для него гибкость и чувство нового. Имеются также организационные и социальные рамки, которые в принципе позволяют сохранять непрерывный контакт со студентом до 10 лет (5 лет университета, 2 – стажировки и 3 – аспирантуры). Наиболее трудно регулируемым компонентом, однако, является учебный план для первых трёх-четырёх лет обучения, который, как обычно, является наиболее консервативной частью образовательного периода.

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