O poder da Abstração
Published: 2020-06-29 10:39:42

*Primeiramente gostaria de agradecer a todos que leram e me mandaram feedbacks e sugestões no meu post de boas vindas, isso é muito importante para que eu possa seguir em frente!*
   
Hoje vou falar sobre um assunto muito presente no nosso dia-a-dia e que é de certa forma um paradoxo, pois ao mesmo tempo que tem como uma de suas principais características simplificar algo, é também algo extremamente complexo. Vamos falar sobre **abstração**.

## **O que é abstração?**

Eu diria que as vezes é difícil até começar a tentar explicar de uma forma fácil o que significa esse termo, uma vez que o conceito também é (ironicamente) algo abstrato. Vamos começar trazendo o significado da palavra em duas diferentes abordagens:

Em filosofia:

*Abstração é uma operação intelectual que consiste em isolar, por exemplo num conceito, um elemento à exclusão de outros, dos quais então se faz abstração. Por exemplo, abstraindo uma bola de futebol de couro, por uma bola de futebol, retemos apenas a informação enxuta das propriedades e comportamentos de uma bola de futebol. (Wikipedia)*

Em ciência da computação:

*Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software. (Wikipedia)*

De maneira bem simplificada, eu diria que a abstração é uma forma de trazer algo que tem uma certa profundidade e/ou complexidade para uma camada mais simples e de fácil acesso, ou seja, o que realmente importa dentro de um determinado contexto.

Quando você está acessando um website, você está preocupado somente em digitar algo na barra de endereços do seu navegador e que a página solicitada apareça para que você possa acessar o conteúdo,não é algo importante nesse momento o caminho que sua requisição faz, a tradução desse endereço para algo lógico, empacotar e desempacotar pacotes TCP, roteadores, serviços de DNS, servidores externos, processamento de dados, etc. Isso pode nos dizer que o browser pode ser encarado como uma abstração do seu acesso a web.


## **Por que é importante e como utilizar**

No meu dia-a-dia como Software Engineer, estou o tempo todo falando, estudando e tratando sobre assuntos extremamente técnicos, relacionados a desenvolvimento de software. Porém, eu sempre tento linkar pontos em comum dentre as diferentes coisas que eu faço, dessa forma eu nunca aprendo apenas algo isolado, ganho habilidades genéricas que posso reaproveitar em diferentes situações e isso é uma forma de abstrair algo.
Por exemplo, música e programação não são ciências diretamente ligadas (não estou falando que não possam se relacionar ou sobre softwares que utilizam música como foco, etc), mas música é extremamente ligada à matemática, assim como programação. Isso significa que em algum momento eu posso utilizar uma mesma habilidade para me beneficiar em ambas as especialidades. E isso também é uma forma de abstrair algo!

A abstração também é uma habilidade extremamente poderosa no que diz respeito à comunicação. Por exemplo, quando é necessário traduzir algo de um domínio específico para uma pessoa que não tem conhecimento sobre o mesmo, tornar uma solução clara em um time com diferentes níveis de habilidades ou se expressar melhor em qualquer situação.

## **Aprimorando a capacidade abstrair**

Nada como a prática para aprimorar o conhecimento em algo, vou sugerir então que você faça alguns questionamentos para exercitar sua capacidade de abstrair algo de forma positiva:
* Você consegue explicar algo de conhecimento específico da sua área de atuação para outra pessoa de forma simples, sem tratar sobre detalhes desnecessários?
* Essa explicação poderia ser entendida por pessoas com diferentes níveis de conhecimentos e habilidades?
* Em desenvolvimento de software, você é capaz de entender o funcionamento de uma regra de negócio e enxergar diferentes possibilidades para transformá-la em um programa, sem se aprofundar em detalhes de implementação?

Você pode fazer essas perguntas diariamente a si mesmo e colher os resultados de acordo com a facilidade que você tem em realizar essas tarefas. Com o tempo você vai notar que essa habilidade é realmente incrível e vai se tornar algo cada vez mais natural!

E assim chegamos ao fim. Tentei trazer hoje um pouco da minha visão sobre como pode ser interessante relacionar habilidades de diferentes áreas de conhecimento com a programação e vice versa.

Então, o que vocês acharam? Coloquem aqui nos comentários suas experiências com o assunto, além de feedbacks e sugestões!

Grande abraço e até a próxima.