В «Мифическом человеко-месяце» Фред Брукс обсуждает разницу между случайной и существенной сложностью в программировании. Случайная сложность вызвана нашими инструментами и методами, такими как необходимость писать и тестировать дополнительный код на языке, потому что мы не можем напрямую выражать свои идеи, и тому подобное. Новые методы и приемы могут уменьшить случайную сложность. Я могу писать программы быстрее и лучше, чем двадцать пять лет назад, потому что у меня есть лучшие языки и инструменты.
Существенная сложность исходит из того факта, что то, что мы пытаемся сделать с помощью программирования, изначально сложно, и существует непреодолимая сложность. «Существенный» в данном контексте означает «относящийся к сути вещи», а не «очень необходимый».
Поэтому он утверждал, что серебряной пули не будет, что написание программного обеспечения по-прежнему будет трудным.
Я настоятельно рекомендую вам прочитать его книгу: в частности, я рекомендую издание «Серебряная годовщина» с дополнительным эссе «Нет серебряной пули». При этом он рассматривает предлагаемые решения сложности и рассматривает их влияние. (Что он считает наиболее эффективным, так это упаковочное программное обеспечение: один раз написать что-то сложное и продать тысячи или миллионы копий.)
Теперь объектно-ориентированное программирование помогает, если все сделано правильно, создавая абстракции и скрывая сложность. Объект класса имеет определенное определенное поведение, из которого мы можем сделать выводы, не заботясь о сложности реализации. Правильно написанные классы слабо связаны друг с другом, а принцип «разделяй и властвуй» — отличный способ справиться со сложностью, если вам это сойдет с рук. Они также обладают высокой связностью, поскольку представляют собой набор функций и данных, очень тесно связанных друг с другом.
Прикрепляю к посту несколько видео по теме: