The 4 Limitations of Abstraction in Computer Science
Abstraction is a means to represent complex systems by their essential features, ignoring the details and complexities that are not needed for the task at hand. The goal is to simplify complex systems to make them easier to understand and manipulate. This reduces cognitive load and facilitating problem-solving and design.
At its core, the problem space that abstraction addresses is complexity management. When developing software systems, we often deal with significant complexity — be it in the data we handle, the logic we need to implement, or the systems we need to interact with. It becomes increasingly challenging to handle all this complexity. Errors in our own code rise. Our integration with another system becomes unstable.
This is where abstraction comes in. By focusing on only the essential features of a problem or system, we can manage complexity more effectively.
Abstraction is ubiquitous in computer science, seen in everything from abstract data types and high-level programming languages, to interfaces, protocols, and design patterns. For example, when we use a list in Python or an ArrayList in Java, we’re using an abstraction. The details of how the data is stored, accessed, and manipulated are hidden behind a simplified interface.