Métodos Matemáticos
Tags: programming, beginners, datascience
Published: 2021-11-24 03:31:14

Recentemente comecei a ler um livro de introdução à Ciência da Computação (o livro é [este](https://www.amazon.com.br/Ci%C3%AAncia-Computa%C3%A7%C3%A3o-Uma-Vis%C3%A3o-Abrangente/dp/8582600305/ref=sr_1_9?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=introdu%C3%A7%C3%A3o+a+ciencia+da+computa%C3%A7%C3%A3o&qid=1637723289&sr=8-9&ufe=app_do%3Aamzn1.fos.db68964d-7c0e-4bb2-a95c-e5cb9e32eb12), recomendo ele muito para quem quer algo na área de fundamentos). É super interessante o quanto da Programação está dentro da Ciência da Computação (que na verdade é o estudo dos algoritmos). Estou no início desse livro, onde fala sobre história pregressa aos computadores e as primeiras formas de computar, isto é, construir máquinas capazes de executar algoritmos.

Um dos conceitos que me chamaram a atenção é o de **Abstração**. É um dos termos mais básicos e utilizados dentro da comunidade, e muitas das vagas que lemos pede uma boa capacidade de abstração. Esse livro define a abstração como o conceito de se apossar da utilidade de algo sem saber detalhadamente seu funcionamento e percebam: é incrível o quanto usamos abstrações no nosso dia-a-dia!

![Dirigindo um carro](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9ujhqyycm6wxep8fzqo.jpg)

Dirigimos carros todos os dias sem saber seus processos de transformação da combustão em energia cinética, utilizamos smartphones como a oitava maravilha do mundo e nem sabemos como o mesmo é montado e encaixado em um espaço físico tão pequeno, muito menos como o mesmo é programado. Nós, programadores, utilizamos infinidades de bibliotecas, muitas vezes sem saber como funciona por baixo dos panos (apesar de ter esse conhecimento ser ótimo para termos melhor domínio da biblioteca), mas estamos atrás da utilidade de cada coisa.

Na escola, aprendemos as bases da ciência aritmética, onde são demonstradas as quatro operações básicas e como fazê-las, inicialmente somando e subtraindo números e, após, subindo um estágio, com multiplicação (série de adições) e divisão (série de subtrações). 

![Calculadora](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvpumsaaqagurww5c8hh.jpg)

Na minha época, não nos era permitido utilizar calculadora, até o momento em que entrei para a faculdade. Na faculdade, todas as operações podiam ser feitas na calculadora, onde avançamos um passo na direção de utilizar abstrações. Não fizemos cálculos no papel (alguns sim. No sufoco, esse conhecimento serviu bem), mas nos apossamos da utilidade do cálculo para chegar aos seus resultados. A operação é a mesma.

Cada linguagem de programação possui sua própria biblioteca de matemática embutida nele, além das operações mais básicas:

* C possui sua biblioteca math.h
* Javascript possui o objeto Math, só com métodos matemáticos
* Python possui uma biblioteca Math
* Ruby possui um módulo Math
* Fora outros inúmeros exemplos...

![Biblioteca math.h sendo utilizada](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jf0p0b3shtj0wpdqolb2.jpg)

Nessas bibliotecas, há implementações que vão além do básico, como exponenciação, radiciação, seno, coseno, logaritmo. etc...

O C pode nos explicar o motivo pelo qual há uma biblioteca separada de métodos matemáticos. Em C, podemos construir cada uma dessas funções na mão, utilizando as operações básicas mesmo, como uma exponenciação, que é uma multiplicação iterada n-vezes. N nesse caso é o expoente.

Ter uma biblioteca elimina a necessidade de ter que construir tudo na mão, e lançar mão de uma abstração para isso, e podemos utilizar esses métodos em outros algoritmos. No artigo anterior, utilizei a função "pow" em um algoritmo para converter números binários em números decimais (veja [aqui](https://dev.to/tttecnology/binarios-3o4o)).

![Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/033bas8w6dg17f557q33.jpg)

Correlacionado a isso, podemos observar o caso da comunidade de Dados. A razão da comunidade de análise e ciência de dados utilizar Python seria permitir usar seu alto nível de abstração, primeiramente oferecido pela linguagem em si, e depois pelas bibliotecas disponíveis. Assim, o profissional, ao invés de se preocupar com partes excessivamente técnicas, como gerenciamento de memória e CPU, pode se focar nas partes realmente importantes, que seria o emprego do cálculo das equações aplicados aos dados.
Muitos profissionais desse ramo não se consideram programadores, mas utilizadores das ferramentas de programação.

![TensorFlow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nh36w5k0zik6og268gt3.jpg)

As bibliotecas de ciência de dados, como Pandas, Numpy e TensorFlow, utilizam algoritmos de alto nível para manipulação e cálculo de dados, empregando várias operações matemáticas, facilitando para que o profissional encurte seu trabalho em análise e construção de modelos preditivos. 

Todo esse trabalho também é desenvolvido pelo Estatístico (meio no qual também a linguagem R ficou super popular) e pelo profissional de Pesquisa Operacional. Lembro que na época de faculdade, essa parte foi feita utilizando o plugin Solver do Excel, uma ferramenta incrível para ajuste de modelos operacionais ao seu resultado mais otimizado possível.

Como visto, a intenção não foi percorrer métodos ou funções matemáticas de uma linguagem X ou Y, mas sim, dar um panorama geral sobre utilidade de métodos já prontos, bibliotecas existentes e como elas podem ser utilizadas pelos programadores e outros profissionais no geral. A ideia é aumentar o arsenal de ferramentas do programador a baixo custo em sua curva de aprendizado, reduzindo o tempo de construção de aplicações mais poderosas, utilizando métodos mais sofisticados.