The process of removing or filtering out characteristics to focus on what's essential. Life is full of familiar abstractions, but we just rarely use this word outside of programming. The camera button on your phone is an abstraction of all the amazing things it takes to capture an image and store it on a device.
In programming, you'll see abstraction used in the following scenarios:
- APIs - often, an API's purpose is to abstract a complicated functionality into a single API-call. For the programmer calling `search(thing)`, they do not know what sort of search algorithm is happening beneath the hood. It is abstracted away.
- Terminology (i.e., business abstraction, technical abstractions) - this is a type of abstraction we see in the everyday world, too (covered in [[Naming Things]]).
- ![[2025-01-08_abstraction-1.png]]
- To an art collector this is an "Art Nouveau style by Gustav Klimt from his "Golden Period". To an art fan, it is "The Kiss by Gustav Klimt". To me, it is a "painting".
- In software engineering, we use this concept as projects are shown to end users and communicated to leadership. Technical terms can obfuscate and confuse. The "customer_256SHA_UUID" becomes an "account_id" for your business team. The multi-tier web application becomes a tiny box on an enterprise architecture diagram for your CTO.