EnglishРусский Map

Программирование как построение теории

title
Программирование как построение теории
type
concept
summary
Тезис Наура 1985 года: главный продукт программирования - общая ментальная модель команды, а код и тесты лишь артефакты этой теории
tags
software-engineering, philosophy
created
2026-05-10
updated
2026-07-29
lang
ru
source_updated
2026-07-29
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

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

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

С помощью этого Наур объясняет несколько закономерностей:

  • Почему оценки сроков ненадёжны: оценивать - значит проецировать работу на теорию, которой у вас ещё нет
  • Почему "переписывание с нуля" обычно заканчивается плохо: вы заново строите теорию, а не просто переписываете код
  • Почему парное программирование и code review работают: они передают теорию, а не просто код
  • Почему программа "умирает", когда команда уходит: теория уходит вместе с людьми, а то, что остаётся, непригодно для жизни

Связи, которые подхватили в дискуссиях об LLM в 2026 году:

  • no-silver-bullet-llms (Bennett): существенная сложность кроется в теории; LLM работают с артефактом
  • mean-free-path-language: как далеко можно зайти, прежде чем ментальная модель и программа разойдутся - мера того, насколько хорошо язык сохраняет теорию
  • clean-code-coding-agents: структура кода важнее при работе с агентами, потому что контекстное окно агента не может вместить теорию команды
  • building-syntaqlite-ai: дисциплинированный рабочий процесс с ИИ, который сработал после провала vibe coding, был как раз тем, где человек продолжал удерживать теорию
  • we-are-not-special: собеседники Уэйна из смежных инженерных областей размывают границу между проектированием и строительством со стороны традиционной инженерии: разработчик чипов называет проектированием весь пайплайн, инженеры-механики описывают "подгонку" конструкции под несовершенства её воплощения - в итоге переосмысление Наура оказывается ответом на вопрос "является ли код проектом?", а не просто одной из сторон спора

Эссе Наура небольшое (~25 страниц) и свободно распространяется в формате PDF; изначально оно было опубликовано в журнале Microprocessing and Microprogramming vol. 15.

Обсуждается в подкасте Computer Science Off Course (сезон 1, эпизод 1, Felienne Hermans и Hanna Schraffenberger, 2026), где построение теории трактуется как способность объяснять и защищать решение, а также переносится на практику работы с LLM и учебную программу по CS - см. computer-science-off-course-theory-building.

Sub-pages