Software is built on abstractions. Pick the right ones, and pro-
gramming will flow naturally from design; modules will have small
and simple interfaces; and new functionality will more likely fit in
without extensive reorganization. Pick the wrong ones, and pro-
gramming will be a series of nasty surprises: interfaces will be-
come baroque and clumsy as they are forced to accommodate un-
anticipated interactions, and even the simplest of changes will be
hard to make. No amount of refactoring, bar starting again from
scratch, can rescue a system built from a collection of flawed con-
cepts.
gramming will flow naturally from design; modules will have small
and simple interfaces; and new functionality will more likely fit in
without extensive reorganization. Pick the wrong ones, and pro-
gramming will be a series of nasty surprises: interfaces will be-
come baroque and clumsy as they are forced to accommodate un-
anticipated interactions, and even the simplest of changes will be
hard to make. No amount of refactoring, bar starting again from
scratch, can rescue a system built from a collection of flawed con-
cepts.
“
| — | Daniel Jackson, Software Abstractions, MIT Press, 2006. |