Данный доклад посвящён уточнению некоторых терминов, используемых в технологии программирования, а также постановке некоторых методологических проблем.
Перенесение в программирование промышленной идеологии и организации в данный момент означает перенесение в программирование реалий машиностроительного производства: программа считается изделием, которое собирается из модулей,изготавливаемых программистами.
Из этой базовой концепции обычно исходят при определении надёжности и качества ПИ, при оценке производительности труда и т.д.
Промышленный характер современного программирования очевиден, поскольку, во-первых, носит промышленный характер вообще освоение информационных ресурсов [1]; а во-вторых, разработка и эксплуатация программных средств требует регламентации, стандартизации, отчуждаемости продукта труда, экономического регулирования, т.е. того, что отличает промышленную деятельность от любой другой. Однако из этого ещё не следует, что аналогом программного производства является именно машиностроительное производство (существует ещё и добывающая, и обрабатывающая промышленность, в которой не изготавливаются сложные технические изделия). Более того, если даже программирование - "изготавливающая" промышленность, из этого ещё не следует, что именно программист изготавливает (как, например, ничего не изготавливает технолог станков с ЧПУ), и т.д.
Лобовое понимание "промышленности" программирования приводит к весьма непростым проблемам. Например, считая, что программист изготавливает продукцию, мы вынуждены оценивать объём этой продукции, и неизбежно приходим в тупик, поскольку и оценка толщины колод, и изощрённые методики Холстеда [2]оказываются одинаково ненадёжными [1, 3, 4, 5]. Возникают также другие методологические, правовые и чисто технические сложности. Большинство из них связано с тем, что программное изделие обнаруживает ряд свойств, необычных для промышленного изделия - фактически отсутствует фаза копирования, иначе определяется "сбой", и т.д. Всё это, вместе взятое, заставляет предположить, что наше понимание программирования, возможно, неадекватно. Прежде, чем применять термин "изделие" к программе,следует доказать, что программа обладает всеми свойствами, необходимыми для изделия; прежде, чем классифицировать методы изготовления программ, следует доказать, что именно программист их изготавливает, и т.д., т.е. корректно в философско-экономическом смысле определить, что есть инструмент, а что изделие, кто работник и где станок. Иначе может оказаться, что мы измеряем свойства инструмента, искренне считая, что это свойства самого изделия.
Чтобы доказать, что известное определение программного изделия есть не более, чем произвольная аналогия, приведём другую аналогию, описывающую процесс программирования, по крайней мере столь же адекватно. По своей природе программа (т.е. набор инструкций) гораздо ближе к технологии (точнее, к описанию технологического процесса), чем к изделию. Если считать её не изделием, а технологией, многие акценты расставляются по-другому:
Однако, что же в таком случае, программное изделие? Если программа является технологией, то под ПИ следует, видимо, понимать объект, существующий в ЭВМ во время выполнения программы. Точно также, как абстрактные понятия "материализуются" у нас в мозгу в виде физических связей нейтронов, так же они "материализуются" в ЭВМ в результате выполнения программы. Вообще говоря, такое определение изделия допустимо, но оно обладает столь необычными свойствами, что оказывается ничем не лучше известного определения ПИ (так, оно существует и может использоваться только в момент изготовления и т.д.).
Однако мы и не обязаны искать именно изделие, поскольку технология - это не обязательно технология изготовления: может быть технология добычи и переработки; поэтому имеет смысл считать программу технологией переработки информации. Казалось бы, автор ломится в открытую дверь, поскольку программа всегда именно так и понималась. Но это понимание было весьма эклектическим - если это технология, то почему мы её изготавливаем? А если это изделие, то почему мы относимся к нему как к процессу? Если уж это изделие, то мы должны без всяких оговорок обращаться с ним только как с изделием, в частности, определить, из какого материала оно состоит (материал не обязательно должен быть "материальным", но по крайней мере мы должны знать его свойства: говорить, что программное изделие состоят из информации - слишком расплывчато). Если же это технология, то мы не должны приписывать ей свойств изделий.
Итак, предлагается, во-первых, начать работу по корректному определению терминов технологии программирования, а во-вторых, отказаться от термина "программное изделие", заменив его на термин "программная технология".
СПИСОК ЛИТЕРАТУРЫ
Опубликовано: на стенде конференции
(c) Алексей Бабий 1986