The power of abstraction
Published: 2020-08-17 19:13:48

Hey folks, how are you doing?

Today I’m going to talk about a subject that is very present in our day-to-day lives and which is somewhat of paradox, because while having one of its main characteristics to simplify something, it is also extremely complex. Let’s talk about **abstraction**!

> **Note**: *This is my first article in English and I’m learning how to improve my writing. So, sorry about mistakes and help me to grow up!*

## What is abstraction?

I would say that sometimes it's hard to even start to explain in an easy way what this term means, since the concept is (ironically) something abstract. Let’s start by bringing the meaning of the word in two different approaches.

In philosophy:

> Abstraction is an intellectual operation that consists of isolating, for example in a concept, an element to the exclusion of others, from which abstraction is then made. For example, abstracting a leather football ball, by a football ball, we have only the lean information about properties and behaviors of a football ball (Wikipedia).

In computer science:

> Abstraction is the ability to concentrate on essential aspects in a context, ignoring characteristics of less importance or accidentals. In object-oriented modeling, a class is an abstraction of existent entities on a software system domain (Wikipedia).

In a very simplified way, I would say that abstraction is a way of bringing something that has a certain depth or / and complexity to a simpler layer and easily layer, that is, what really matters within a given context.


When you’re accessing a website, you’re only concerned about typing something in the address bar of your browser and that the requested page appears so that you can access the content. It’s not important at this moment the whole path that your request takes, the translation of address for something logical, packaging and unpacking TCP packets, routers, DNS services, external servers, data processing, etc. This can tell us that the browser can be seen as an abstraction of your access to the web.

## Why it is important and how to use

In my day-to-day life as a Software Engineer, I'm constantly talking, studying and dealing with extremely technical issues, related to software development. However, I always try to link common things among the different things that I do, that way I never learn just isolated things, I gain generic skills that I can reuse in different situations and this is a way of abstracting something.

For example, music and programming aren’t directly linked sciences, but music is extremely linked to math, as well as programming. It means that at some point I can use the same skill to benefit from both specialties. And this is also a way to abstract something!

Abstraction is also an extremely powerful skill when we talk about communication. For example, when it’s necessary to translate something of a specific domain to people who are not aware of it, make a clear solution in a team with different skills levels or express themselves better in any situation.

## Improving the ability to abstract
 
Nothing like practice to improve the knowledge on something, so I’ll suggest that you ask some questions to exercise your ability of abstract something in a positive way:

- Can you explain something specific to your area of ​​expertise to someone else in a simple way, without dealing with unnecessary details?
- Could this explanation be understood by people with different levels of knowledge and skills?
- In software development, are you able to understand how a business rule works and see different possibilities for turning it into a program, without delving into implementation details?

You can ask yourself the questions on a daily basis and get the results according to how easy it is to perform these tasks. Over time you’ll notice that this skill is really amazing and it will become something more and more natural.

So we come to the end. Today I tried to bring a little of my vision on how it can be interesting to report skills of different areas of knowledge with programming and vice versa.

So, what did you think? Send me comments about your experiences with this subject, feedbacks and suggestions!

See you next time!