Specification of computer programs
Specification of computer programs
Foundations for the study of software architecture
ACM SIGSOFT Software Engineering Notes
The mythical man-month (anniversary ed.)
The mythical man-month (anniversary ed.)
Proceedings of the 17th international conference on Software engineering
Software Faults in Evolving a Large, Real-Time System: a Case Study
ESEC '93 Proceedings of the 4th European Software Engineering Conference on Software Engineering
Structured programming
On the Design and Development of Program Families
IEEE Transactions on Software Engineering
Hi-index | 0.00 |
Abstraction is one of the primary intellectual tools we have for managing complexity in software systems. When we think of abstractions we usually think about "small" abstractions, such as data abstraction (parameterization), type abstraction (polymorphism) and procedural or functional abstraction. These are the everyday kinds of things we work with - finding the right concepts to make the expression of our software solutions easier to understand and easier to reason about. Here I propose we thing about "large" abstractions - abstractions that provide critical distinctions about our field of software engineering as a whole; abstractions that enable us to see what we do in different and important ways and provide significant improvements in how we do software engineering. I give a number of examples and delineate why I think they have been, and still are, important.