Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Computer programming as an art
Communications of the ACM
Program development by stepwise refinement
Communications of the ACM
The role of abstraction in software engineering
Proceedings of the 28th international conference on Software engineering
Patterns and traceability in teaching software architecture
Proceedings of the 6th international symposium on Principles and practice of programming in Java
Hi-index | 0.00 |
An abstraction is the reification and conceptualization of a distinction. We use the process of forming abstractions to make sense of the world, i.e., to form concepts. Once created we are often able to externalize these concepts as software. Abstractions are what give software elegance. Abstractions build on each other, producing a hierarchical dependency structure that often creates challenges for understanding. We can teach the use of pre-packaged abstractions. It is more difficult to teach the self-awareness necessary for inventing new abstractions. The process of building abstractions is bottom-up. Thought externalization is where top-down meets bottom-up.