As developers, we are told many things about “abstraction” it is sometimes perceived as evil as it makes the code obscure and not understandable to others. On the other hand some say it is good and we should strive to achieve good abstraction as abstraction is what makes the difference between a normal developer and a 10x developer.
We have all heard about abstraction. The concept is simple: find similarities, create an abstraction from it, use that abstraction by specializing it with what is different in a specific instance of your code.
We know many abstractions. We use it all the time: algorithms, data structures, frameworks, and many others. But we often do see abstraction for what it is. Abstraction is obscured to us, it is in front of our eyes, and we do not see it. Even early at school we learn it, but no one names it:
The sky is blue
The moon is shining
The two sentences have exactly the same part of speech (Article — Noun — Verb — Adjective) but totally different meanings. The part of speech is an abstraction. Nowadays AI is very good at find those abstractions whether it is in text or in images. But we human have a much thought after ability, we can do knowledge transfer. We can transfer a learned concept from one domain to the other. Machine still struggle at that.
Therefore, how can we go beyond simple abstraction use cases? Really what is an abstraction? How do we get good at it?
The Oxford English dictionary gives us 6 main definitions, summarized for the sake of brevity:
- To separate oneself from the world (spiritual)
- To extract or remove something (water, but also stealing)
- Finding similarities without reference to the peculiar, a concept or an idea.
- In chemistry, extraction of a substance from another
- Lack of awareness or concentration, absence of mind.
- Freedom from, or absence of representational qualities. (especially in arts)
As we can see abstraction goes beyond our common understanding. The first definition might be the ultimate abstraction, and could lead to the fifth one, which is not so good for a career in software engineering… But there is maybe something to learn here from all those definitions.
All the definitions might, to some degree, be useful for us. But as a reminder, abstraction is not something new, it did not come with technology, it did not appear in the 19th century with arts. Mathematician did not invent it either. According to Plato, God is the champion of abstraction:
God, whether from choice or from necessity, made one bed in nature and one only; two or more such ideal beds neither ever have been nor ever will be made by God. […] even if He had made but two, a third would still appear behind them which both of them would have for their idea, and that would be the ideal bed and the two others. […] God knew this, and He desired to be the real maker of a real bed, not a particular maker of a particular bed, and therefore He created a bed which is essentially and by nature one only. (The Republic of Plato: an ideal commonwealth)
What does Plato say? That God simply created the concept of a bed, he created the idea of it. Plato develops this further to speak about truth in order to explain that the carpenter will use the idea of a bed, to create a physical bed that is one step remote from the truth. The carpenter’s be will be a true bed, but will not be the bed: the original idea, or the original concept of it.
On the other hand, the painter, for Plato, would be a liar, as he would paint the bed made by the carpenter, and his bed would be an image of the real bed based on the concept of the bed. Therefore the painters bed is twice remote from the truth, which makes it a deceitful bed. Remember Magritte’s painting? Indeed it is not a pipe.
Thus abstraction can bring us very far. It is good as abstraction allow us to think, to find concept and theories that we can later try to apply. Plato will later define that there are useful lies, lies that you produce for example to cheat an enemy at war, and those after all are not so bad… So from his first theory of truth he develops it and explains the moral complexity and the responsibility that incomb to the person choosing not to practice the truth.
What are the Benefits of abstractions?
As engineer we are craftsmen and we probably are more carpenters than painters. But our subject here is not to speak about the history of abstraction but rather to try to find a way to develop our abstract thinking.
Indeed what is the real benefit of abstraction? Much has been written about it, and in our developers world abstraction would normally lead, among others to
- reduce the complexity of thinking about a system,
- Avoid code duplication thus increase code reusability
Of course developers often fail at abstraction, and the “abstracted” application gets very confusing for other people to extend or work with it.
I would argue that to be good at abstraction, is to become aware of abstractions not only in programming but in everything. Not only developers benefit from it, but for business people, artists, managers, every one. When you see a pattern, a concept, a map, suddenly you are not lost, and you can go somewhere.
Indeed when you are able to think in abstract manners, you are able to extract the essence of a problem, you are able to see patterns and act upon them. Ultimately it will help us to be better with people, as we will understand them better. So let’s get started. How can we think more abstract?
How to develop abstract thinking?
If you are not a developer, learn to program, or as we say “code”, it is our bread and butter, therefore you will learn a different perspective on the digital world. You will understand why we say “do not repeat yourself” (Keep it DRY). You will start to see patterns emerge, and you will be able to use them to simplify what you do.
Speaking about patterns, look for patterns, not only when you program, but everywhere. Patterns in behaviour, patterns in management, patterns in text, in everything you do. Better you are at catching them, better you will be at using them, and at simplifying the world around you.
Patterns will help you find concepts, or abstract thoughts on something. Put names on things, look at the physical and switch to the abstract world.
Despite its mechanical (listen to the roaring Merlin engine) and aerodynamic beauty, this is not a plane! This is a Spitfire. This is Freedom. This is Victory. This is Courage. This is Sacrifice. But as well, his is Death. Yes, this is the plane (ok it is a plane after all) that won against the Luftwaffe, the German air force, and defended Great Britain against the enemy’s invasion. But this plane represents much more, it evokes many important abstract concepts and it is still revered till this day.
Make up theories. What if the Spitfires did not save the day? What would have happened? Churchill while speaking at the House of Commons the 18th June 1940 said that “Hitler knows that he will have to break us in this island or lose the war.” He did not know anything about Hitler’s thoughts. He just made up a theory that he used to motivate the country!
We can make theories about anything. It helps us stitch concepts and patterns together using our imagination. You can use data about your business, financial data, symptoms of a problem and then make up theories about what will your business look like in two years, what will be the finances of the company if this or that happens, what is the source of the problem, etc.
5. Use figure of speech
Use or even better create figure of Speech! We know many of them already some are very colloquial: “All the world’s a stage” (Shakespeare, As you like it), Time is money, He’s an ogre, etc. Those are metaphors. Figure of speech allow to link together abstract and concrete things.
It will also stimulate your imagination which is never bad. Of course figure of speech will make you a better speaker and writer, especially if you use those figure of speech while expressing the idea you want your listener to remember. Yes, figure of speech make you ideas stick.
When we speak about abstraction in arts, at least for me, we speak of an appreciation that is more intellectual than sensual. We move from one kind of abstraction which could be classified as feelings, to another type where concepts and theories become more important than the satisfaction of our senses. Bellà Bartok’s second quatuor first movement is “weird”. Bartok starts to introduce what modern classical music will be. Indeed it is not normal tonal music, it might feel stressful or disturbing at times and yet there is some intellectual pleasure in finding or recognising classical patterns such as the sonata form.
It is the same for other arts such as painting, were forms and patterns, concepts and ideas take precedence over realism. Where immediate beauty is removed to find beauty in the thought process, in hunting for concepts and ideas.
But literature will also trigger abstractions, some authors did play a lot with it. Henry James is a good example among many. Already, In the titles of short stories such as The figure in the Carpet, you can already see or hear a calling for the reader to search for some hidden patterns.
History in itself is already an abstraction, it is the abstraction of what the historian decided to select as being important events and remarkable people. It is a vision, a view, an abstraction of the world. But we can learn a lot from general history, or from the history of our respective domains. Things have been tried, people have failed, you might not want to repeat that.
There are famous examples of such patterns. If Napoleon had studied the Swedish invasion of Russia, he would have learned not to attack Russians in winter and that Russians, when attacked, tend to burn their land and cities not to leave anything for the invader in order to starve him to death (The scorched-earth pattern?). Hitler could have studied two failed invasion attempts of Russia, and yet he did not… and failed.
It is not history that repeat itself, patterns are.
Study people! Try to find patterns in behaviours or in character. This will help you to speak or comprehend why people respond in certain manners to a certain situation. If you have seen someone being very defensive try to understand why it is the case. Why is this person feeling like that. Try to put yourself in the shoes of that person. This will help everyone grow and behave better with each other. Patterns will emerge and you will react in a better way next time you see a known behaviour.
Go and walk in the wilderness. Do some treks, learn to read a map, learn to see the world through its abstract representation. Learn to navigate it with a compass and azimuths. This will help you to see 3D structures in a 2D representation and to transfer that to the world around you. (Don’t cheat, do not use a GPS, that skill might actually save you one day).
While you are getting used to maps, you will maybe notice the strategic advantage a map can give you. It is the same for business, map it! You will be like Napoleon, you will have a strategic advantage, and when you shoot on a hill with your cannons you will know why, not like all the imitators who go where the wind blows them. And because of your knowledge of history, you will not repeat his mistake! Yes, you can map your business, and use those maps to your advantage to know where you need to move, what you need to do. If you want to learn how to map your business go straight to Wardley maps:
These are only a few examples. Abstraction is everywhere. Therefore to be good at it, practice it. Do not forget ask “why” all the time. Why leads us to understand the underlying principles, this is what is important to discover for abstraction.
We have so many opportunities. This competence will transfer to your domain, if you are a developer, you will fill more confident with complex systems as you will be used to think with abstract concepts, to see commonalities, and therefore to connect the dots. This is also true for any domain. So let’s get to it!
If you have other ideas, leave it as a comment for others to benefit from it!
If you want to discuss this topic or related topic I am always happy to do so: