Закон Голла. Парнас и Александер
Закон Голла
Закон Голла — фундаментальный принцип теории систем, сформулированный Джоном Галлом (John Gall), американским педиатром и системным аналитиком, в книге «General Systemantics: An Essay on How Systems Work and Especially How They Fail» (1975; в переиздании 1986 г. — просто «Systemantics»). Полная формулировка гласит:
Сложные работающие системы неизменно возникают из простых работающих систем. Сложные системы, спроектированные с нуля, никогда не работают; их приходится начинать заново с простой работающей системы.
«A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.»
При создании ПО применяется техника «ходячий скелет» (walking skeleton): необходимо начинать с простой рабочей системы, которая проходит сквозь все слои, и только затем добавлять новый функционал. Это позволяет создать базу, на которой далее строятся новые элементы. Такой подход позволяет избежать создания сложной системы, которая не будет работать.
Закон Голла имеет применение не только в разработке ПО, но и в создании эффективных команд: эффективная сложная команда неизменно возникает из простого продуктивного аналога. Сложная команда, собранная с нуля, не может функционировать результативно. Поэтому для создания больших и сложных команд следует начинать с уже сработавшейся группы.
Связь закона Голла с законом Конвея очевидна: построение «ходячего скелета» базируется на костяке команды. То есть для создания большого и сложного формирования используется равноценный скелет-костяк.
Дэвид Парнас
Дэвид Парнас (David Parnas) — американский учёный в области информатики (уроженец США, значительную часть карьеры проработавший в Канаде и Германии, двойное гражданство) и один из создателей концепции модульности в ПО. В классической статье On the Criteria to Be Used in Decomposing Systems into Modules (Communications of the ACM, 1972) он сформулировал принципы разбиения систем на модули, которые до сих пор лежат в основе модульного проектирования. Ключевой вклад той работы — концепция information hiding (сокрытие информации): модули должны скрывать внутренние проектные решения, склонные к изменению, и открывать наружу только стабильный интерфейс. Эта идея стала фундаментом инкапсуляции и всей современной инженерии модулей. Подробнее о практическом применении — в статье декомпозиция проекта.
Парнас также подчёркивал, что системы ПО раскрывают свои настоящие слабые места только в боевых условиях — при реальной эксплуатации, когда через них проходят реальные данные и реальные пользователи. Это соображение повторяет практический вывод закона Голла: работоспособность системы подтверждается только её использованием, а не априорным проектированием.
Кристофер Александер
Кристофер Александер (Christopher Alexander) — архитектор и теоретик, автор концепции «органического роста». В книгах A Pattern Language (1977) и The Timeless Way of Building (1979) он описал, что самый эффективный способ создания сложной структуры заключается в её постепенном росте из простых элементов. Этот процесс эффективнее, чем попытки разработать сложную систему сразу, поскольку он позволяет учесть изменения и приспособления, требующиеся в процессе разработки.
Идеи Александера о паттернах проектирования оказали огромное влияние на программную инженерию: именно его работа вдохновила «банду четырёх» (GoF) на создание книги Design Patterns (1994). Подробнее — в статье паттерны проектирования.
Применение
Закон Голла в контексте разработки ПО обычно интерпретируется как рекомендация начинать разработку с простой, рабочей системы и затем постепенно добавлять функциональность и улучшать её. Это позволяет избежать создания нерабочей системы и уменьшить риски, связанные с разработкой сложных систем «с нуля». Эволюционный подход к архитектуре — см. эволюционную архитектуру — является прямым практическим развитием этой идеи.
Конечно, существуют случаи, когда разработка сложных систем «с нуля» может быть необходима, и в таких случаях рекомендуется использовать опытных специалистов и сильные команды. Однако в общем случае начало с простой рабочей системы и последующее её усовершенствование, как рекомендовано законом Голла, существенно повышает вероятность успеха проекта и снижает риски разработки.