tgoop.com/emacsway_log/1402
Last Update:
До сего момента мы рассматривали управление Существенной Сложностью (Essential Complexity). Это наиболее существенное, хотя и не исчерпывающее, условие успешности разработки, потому что "Серебрянной пули нет".
Существенная Сложность (Essential Complexity) - сложность того, что делает система, сложность реализованных ею моделей, отражающих сложность реального мира, не зависящая от способа и деталей реализации. Сложность, порожденная решаемой проблемой, и ничто не может устранить или уменьшить её. Мы можем только управлять ею таким образом, чтобы минимизировать объем существенной сложности, рассматриваемой одновременно, до уровня, не превосходящего ограничения краткосрочной памяти человека.
Как утверждает Steve McConnell:
💬 "В философии существенными называют свойства, которыми объект должен обладать, чтобы быть именно этим объектом. Автомобиль должен иметь двигатель, колеса и двери — если объект не обладает каким-нибудь из этих существенных свойств, это не автомобиль."
-- "Code Complete" by Steve McConnell
Побочная Сложность (Accidental Complexity) - сложность, возникающая в процессе реализации, например, количество классов в программе образуют побочную сложность. Выделение уровня абстракции введением еще одного класса повышает уровень косвенности в программе, т.е. программа увеличивает свою сложность, но при этом повышается способность управлять существенной сложностью, т.к. возникает возможность абстрагироваться от нерелевантных деталей, а значит, уменьшить количество единиц сложности, рассматриваемых одновременно.
Как утверждает Steve McConnell:
💬 "Несущественными (акцидентными, побочными) свойствами называют свойства, которыми объект обладает в силу случайности, — свойства, не влияющие на его суть. Так, автомобиль может иметь четырехцилиндровый двигатель с турбонаддувом, восьмицилиндровый или любой другой и все же являться автомобилем. Тип двигателя и колес, число дверей — все это несущественные свойства. Можете также думать о них как о второстепенных, произвольных, необязательных и случайных."
-- "Code Complete" by Steve McConnell
Ввел эти термины в оборот Frederick P. Brooks в своей монументальной статье "No Silver Bullets: Essence and Accidents of Software Engineering", позаимствовав идею у Аристотеля.
💬 "Following Aristotle, I divide them [difficulties] into essence - the difficulties inherent in the nature of the software - and accidents - those difficulties that today attend its production but that are not inherent.
<...>
The complexity of software is in essential property, not an accidental one. Hence descriptions of a software entity that abstract away its complexity often abstract away its essence. Mathematics and the physical sciences made great strides for three centuries by constructing simplified models of complex phenomena, deriving properties from the models, and verifying those properties experimentally. This worked because the complexities ignored in the models were not the essential properties of the phenomena. It does not work when the complexities are the essence.”
—“No Silver Bullet - Essence and Accident in Software Engineering” by Frederick P. Brooks, Jr.
Теперь мы подошли к вопросу о том, каким образом можно защитить управление существенной сложностью от несущественной сложности.
BY emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Share with your friend now:
tgoop.com/emacsway_log/1402