Элементы компьютерной системы объединяют данные и поведение. Элементы в данном случае безмасштабны, т.е. замечание справедливо как для отдельных методов, так и для отдельных приложений.
Семантика = Данные + Поведение
Получается, что определяя границы отдельных элементов системы, мы тем самым определяем семантику этой системы. Семантика определяется архитектурой, см. Архитектура ПО как совокупность отложенных решений.
Сложность ПО обусловлена сохранением устаревшей семантики говорит про “наслоение” устаревших семантик - это ситуация, в которой неверные (теперь уже неверные) абстракции мешают выведению верных (более эффективных).
Важно Сопротивление абстракциям в коде.
Отсюда вывод - необходимо постоянно пересматривать существующие абстракции и избавляться от неэффективных, освобождая место для новых, более эффективных. Собственно, это и есть рефакторинг.
Все разговоры о читаемости/читабельности кода - это на самом деле попытки прояснить семантику приложения. Основные способы сделать это - ограничивать размер модулей, снижать цикломатическую сложность, инкапсулировать и защищать данные, а также использовать описательные имена для переменных и методов.