Renaming, not abstraction, is the problem of our industry by Eduardo Bellani

abstraction (n.) (Latin abs, from trahere, to draw).

I’ve seen people I consider good software engineers complaining that over-abstraction is a (the?) major problem in our industry today. Such points are usually raised when discussing software architecture in particular (one example: (iamprovidence 2023)).

I’d like to defend abstraction, and how I don’t think it is possible to have over abstraction (in the same sense you cannot be overly good, or overly healthy).

The definition I’d like to use for abstraction is this:

The most eminent Scholastics, however, following Aristotle, ascribe to the mind in its higher aspect a power (called the Active Intellect) which abstracts from the representations of concrete things or qualities the typical, ideal, essential elements, leaving behind those that are material and particular. (Duffy 1907)

As one can see from such definition, the process is to select the essentials from its concrete manifestation. On software engineering, that means picking out the right form for your requirements, functional or otherwise.

What I think people are complaining about is renaming/rebranding concepts, which is rife in our industry (see the table on CQRS as nominalism for an example).

What to do then, as a software engineer? Go beyond names, and meditate on the essences of your craft. What is a function, what is a relation, what is a number? It will then not matter (to you at least) if someone calls a function an object, or a relation a table.

References

Duffy, F. 1907. “Abstraction.” The Catholic Encyclopedia, Vol 11. http://www.newadvent.org/cathen/01074a.htm.
iamprovidence. 2023. “Backend Side Architecture Evolution (N-Layered, Ddd, Hexagon, Onion, Clean Architecture).” https://web.archive.org/web/20230721054753/https://medium.com/@iamprovidence/backend-side-architecture-evolution-n-layered-ddd-hexagon-onion-clean-architecture-643d72444ce4.