Книга: The Programmers
Уменьшение сложности и последовательное ужимание
Уменьшение сложности и последовательное ужимание
Все интересные системы, от игровых до расчетных, содержат операции, делающие состояние более сложным, а другие его упрощают. Большинство формальных процессов и обучение программированию фокусируются на накоплении массы. Для сбрасывания лишнего веса и получения преимуществ, которое оно приносит, мы должны проявить инициативу. Нам может быть поставлена задача написать функцию, но никто не поставит задачу обобщить ее, чтобы она решала три других.
Огромные глыбы затмения всегда ходят парой, одна для сгибания вещей, другая для их разгибания. Это распространяется на выявление требований, когда у пользователя обычно появляется желание воспроизвести функциональность существующей системы, включая процедурные следствия ограничений существующей системы и ее решения! Иногда это называют «деградирующей практикой».
Проблема, возникающая вместе с объектными библиотеками, состоит в том, что объекты очень хорошо инкапсулируют (скрывают) свою реализацию. Это позволяет нам использовать иерархии классов на самом деле ничего не зная о их содержимом. Поэтому приходится продираться через несколько слоев классов, каждый из которых (возьмем пример из Географических Информационных Систем — Geographical Information Systems) имеет дело с координатной системой, просто для того, чтобы поставить значок на карте. Никаких проблем не возникает до тех пор, пока мы впервые не попытаемся поставить несколько сот значков, и обнаружим, что «простое присваивание», которым мы так восхищались, требует столько вычислительной мощности, что для перерисовки экрана нужно полчаса.
Проект, который регулярно не проверяет свою иерархию классов, чтобы гарантировать, что внутренние представления естественны и стандартны, и что дизайн соответствует встречающимся на практике ситуациям, может неожиданно оказаться по горло в… воде из-за скрытой цены повторного использования.
Как всегда, самое лучшее оружие от распухания — это концептуальная целостность, достигаемая сравнением мысленных моделей проекта.
- Руководства по кодированию
- Кто украл мою мышку?
- Рецензии и анонсы
- Инспектирование кода и пошаговые проверки
- Стандарты кодирования и руководства по стилю
- Значимые метрики
- Надежда на инструменты
- Структуры программы — структуры проблемы
- Разбор полетов
- Уменьшение сложности и последовательное ужимание
- Бесконечная деградация «программных архитектур»
- Аудит качества
- Уменьшение времени, необходимого для резервного копирования и восстановления
- Уменьшение размера, занимаемого индексами
- 1.9 Сложности практической реализации
- 2.7 Сложности практической реализации
- 3.8 Сложности практической реализации
- 4.10 Сложности практической реализации
- 5.9 Сложности практической реализации
- 6.7 Сложности практической реализации
- 7.10 Сложности практической реализации
- 8.3 Сложности практической реализации
- 9.5 Сложности практической реализации
- 10.6 Сложности практической реализации