layers

Abstraction is hiding away the complexity of the system and only being concerned about its input/output. One of the best examples I know of abstraction is programming. Every programmer uses it every day for building amazing things.

Let me give you some interesting examples:

In programming and especially in object-oriented programming the main focus is hiding the main implementation and only providing the interface to the user/developer.

If you are a programmer you will love this example, think of people as APIs. When you ask a question from your doctor friend, you are calling an API. Suppose you want to ask which medicine to take for your cold. She will tell you the name of the medicine. So you are invoking a function, let’s say String coldMedicine(){…} that returns the name of the medicine for cold. She will not tell you how she concluded that this will be the medicine, she will not tell you about the complexity of the chemical compounds in medicine and how they will cure you. In other words, she will not tell you about the internal implementation of the function.

Another example I can give you is the device on which you are reading this text right now. You are not concerned about what’s going on inside the device that you are reading this on, you are only concerned about this ‘text’ on the screen. But on the lowest level of abstraction, there are electrons (or maybe other sub-subatomic particles) that are moving. I tried to explain it in this article.

4.Think about a musical instrument like a piano. You are concerned about how it is working internally, you are pressing a button and the output is a sound. That’s it. Under the hood complexity that includes all the engineering is hidden from you (or abstracted away from you).

Everything you see around is abstractions(humans/complex objects). We are either incapable of seeing the base layer or it is being hidden from us by others for our convenience. The majority of the time what we are doing is giving input and getting an output(APIs).

Now my point here is that we are living in a world whose complexity is abstracted away from us and we are observing with our brain also whose complexity is abstracted away from us. In your brain, you don’t know why certain thoughts arise, you just know when it has arisen, you are the last person to know inside your brain when a thought comes, all the complexity is hidden away from you. All behind the scene process is hidden from you.

One thing I came to know about myself during my bachelor’s in computer science is that I feel deeply unsatisfied when I don’t know about the hidden complexity of concepts. I cannot understand Python until I know C, I cannot understand C until I know assembly, I cannot understand assembly until I know transistors, I cannot understand transistors until I know how electrons move, I cannot understand how electrons move until I know? I know what? I know that we don’t know the base layer of reality, that’s why we stop at subatomic particles. Sometimes I think that’s precisely the reason I don’t understand human emotions because I cannot do the journey of peeling off the abstraction layers in this case. I had to stop at the layer of evolution every time.

To conclude, I am saying it is strange to live with an abstracted mind in an abstract world. Sometimes, I feel like our whole purpose is to build tools with abstraction to find the base layer(the last layer of abstraction).