Preciso saber matemática para programar?

 Matemática na programação. Necessária ou supérflua?






Uma pergunta muito frequente q eu me deparo de pessoas q querem iniciar na programação ou já estão nesse ramo mas ainda sim possuem essa dúvida: "Preciso saber matemática para programar?"

E a resposta é bem simples, mas dá margem para uma discussão bem interessante.
Em resumo, para APRENDER a programar (e essa é a dúvida de quem quer entrar nesse meio) a reposta é: não.
Para aprender a programar não precisa de matemática (a não ser as 4 operações básicas no mínimo), o que você precisa mesmo é de treinar e desenvolver a sua lógica, o que não tem relação direta com números e fórmulas (não a priori).

Masssssss... Se você desejar se tornar um programador mais completo e preparado, q pode solucionar problemas de uma forma mais eficaz e simples, ou se você está focado em entrar nesse ramo para estudar Data Science (Machine Learning e etc) ou para criação de games, a reposta é sim, você precisa e muito da matemática.


Isso porque a matemática é uma ferramenta que foi desenvolvida para ser utilizada no ramo das ciências exatas, incluindo a computação. Ela pode simplificar muitos cálculos q seriam complexos ou inapropriados, sem dizer que possui exatidão e regras.
Fórmulas, conceitos e teoremas, tudo isso pode te ajudar a resolver problemas de forma simples sem ter que gastar muitas linhas de código (e às vezes processamento).


Para mostrar pra você q isto q foi dito acima é verdade; não vou só apenas dizer "Ei, estude matemática", eu vou te mostrar quais assuntos dentro dessa área você pode estudar ou se aprofundar (segundo a minha opinião) para te auxiliar no ramo da programação, para q você suba um degrau a mais e possa se tornar mais preparado:


Tópico 1-

Matemática básica é a base matemática




Claro, o primeiro passo seria entender q você precisa dominar a matemática elementar. Ela vai servir de base e pré-requisito para a compreensão em relação a assuntos mais avançados.
Quando digo "matemática elementar" me refiro aos seguintes assuntos (todos eles já vistos até o final do ensino fundamental):


Matemática elementar:
- Operações básicas(soma, subtração, multiplicação, divisão)
- Potenciação e radiciação
- Fração
- Operações com decimais e inteiros
- Porcentagem
- Divisor comum e números primos
- Médias
- Expressão numérica
- Álgebra


Tópico 2-

O que eu devo estudar então?





Em relação a assuntos de nível médio, a lista seria mais vasta quando se trata da área da matemática, mas acredito q estudar os seguintes assuntos sejam suficientes para te elevar ao nível necessário:


- Probabilidade e Análise combinatória:
Muito utilizadas para mensurar decisões futuras e suas possíveis combinações.



Por exemplo, num jogo de truco uma IA pode analisar a probabilidade do pedido de truco do jogador ser um blefe ou não, de acordo com as cartas que já foram jogadas ou a quantidade de vitórias dele, por exemplo.
Através dessas informações, a IA pode calcular qual a probabilidade do jogador estar mentindo e a partir disso tomar a decisão menos arriscada.


No caso de combinação, imagine um jogo de palavras onde você pode calcular previamente quantas combinações possíveis podem existir ao embaralhar as letras dessa palavra e depois saber quantas palavras possíveis o jogador poderá encontrar (talvez para criar níveis de dificuldades distintos a partir dos resultados dessas combinações, juntando isso a probabilidade do jogador vencer dentro de um tempo estipulado).


- Conjuntos:




Já trabalhou com coleções ou banco de dados relacionais e precisou realizar consultas nesses meios?  Talvez até utilizando cláusulas "delete, select, inner join e union?" Sim? Então você esteve utilizando o conceito matemático de conjuntos (agrupar elementos/informações e ou números dentro de um 'container') e manipula-los de formas diversas, tanto para consultas (condicionais ou não) quanto para operações entre esses conjuntos (union, join e etc)... Que inclusive são operações não só em programação, mas elas existem também na própria matemática na área de conjuntos.


- Funções e equações:




Esse conceito é comumente utilizado na programação, inclusive o termo 'função' é bem recorrente na nossa área, principalmente quando se trata da criação de métodos.
A simples relação entre dois valores já nos dá o conceito básico de função.
Quando você cria um simples método (ou função) que recebe um valor 'x', e retorna a partir desse valor um elemento 'y', você está relacionando esses dois valores numa relação de dependência (o princípio de função matemática).


Por exemplo (Código em C#):

public int DobraValor(int x){ 
    int y = 2*x;
    return y;
}

Criamos uma relação de dependência, onde para qualquer valor de x (dentro do conjunto dos números inteiros), temos um valor para y.


Isto é, se chamarmos essa função passando o valor 4, a função vai nos retornar 8, se passarmos 5 retorna 10 e assim sucessivamente.
Então perceba q criamos uma relação entre x e y. A variável "y" sempre será o dobro de "x", nesse caso.

Isso é o conceito básico de função em matemática, e podemos escrever essa função matematicamente assim:

y = 2*x
Ou
f(x) = 2*x


Ou seja, y será igual a x multiplicado por 2.

Perceba que a notação matemática é bem similar à sintaxe da programação!


Então o simples fato de você usar métodos na programação, já te faz utilizar os princípios de funções, mas claro, isso vai muito além, ainda mais quando se trata de Data Science, onde você vai se utilizar principalmente da parte gráfica dessas funções, muito comumente para mensurar dados.


- Análise de gráficos:




Como visto acima, é importante estudar não só a parte algébrica das funções, mas também a compreensão da analise gráfica a partir dessas.
Entender o que seriam retas, pontos, parábolas, eixos e etc.
Não só gráficos de funções mas também gráficos num geral.


- Geometria analítica:



Como se utiliza da álgebra e principalmente do modelo cartesiano (utilizado na construção de jogos), é importante estudar esse assunto porque auxilia em tudo o que se diz respeito a geometria, como circunferências, distâncias, localização, áreas de polígonos e etc, tudo isso dentro do conceito de plano cartesiano (eixos de coordenadas).


- Geometria espacial:




Se está querendo criar um jogo 3D q se utiliza de modelos tridimensionais, é importante estudar a parte espacial da geometria q lida com esses três eixos em relação a modelos gráficos em três dimensões.


- Trigonometria:



Não precisa se aprofundar tanto, a parte de Pitágoras quebra muitos galhos. Principalmente suas relações matemáticas do triângulo retângulo para vários tipos de cálculos, além dos geométricos.
Em relação a outros tipos de triângulos, também é interessante dar uma olhada, principalmente para cálculos que envolvam distâncias, áreas e ângulos (Vais finalmente entender o tão temido quaternion do Unity?)


- Logaritmos:




Simplifica muitos cálculos exponenciais (complexos e longos).
Já vi sendo utilizado nas conversões de cores e pixels, criptografia, recursividade, grafos (uma área muito importante dentro da ciência de dados), e até para escalar valores numa base específica de uma forma beeeem prática, vide esse vídeo super legal aqui!


Matrizes e Determinantes:




Tudo o que for relacionado a linhas e colunas vai usar matriz de qualquer forma, seja numa planilha Excel,  numa tabela de banco de dados, os pixels do monitor do seu computador, ou na área de jogos, principalmente dos gêneros "tabuleiro" ou "puzzle",  como os clássicos: jogo da velha, campo minado, sudoku, batalha naval, tetris, xadrez, damas, candy crush ou qualquer outro jogo '3match'... Tudo isso à base de matriz! Tudo é linha e coluna. Reflita.


- Vetores:




Se a própria Unity se utiliza dessa palavra-chave (Vector), nota-se q é importante dominar esse assunto.
Vetores são muito úteis dentro do âmbito da física e da matemática analítica, onde a gente pode calcular direção, distância e módulo de qualquer natureza.
Por exemplo, você sabia q o sistema de "Nav Mesh" no Unity se utiliza de operações vetoriais em sua essência, para calcular e mensurar distâncias e direções?
E para física além de cálculos matemáticos, como quando você empurra uma caixa num jogo, você calcula seu sentido (esquerda ou direita) e a força q você aplica pra empurrar (módulo) para saber se a caixa vai ser empurrada ou puxada.
Tudo isso se faz necessário o uso de vetores, e apesar da Unity já ter estruturado um sistema vetorial internamente, é importante dominar esses conceitos para saber quando e como usá-los a seu favor (e outra, quem disse q você vai usar Unity a vida toda, não é?)


Tópico 3-

Ok e aí, qual o resumo do diálogo?

Todas essas matérias são ensinadas em nível médio, porém caso queira programar para áreas específicas como ciências de dados, ainda recomendo alguns assuntos de nível superior como cálculo e estatísticas.


Então resumindo: Você precisa saber matemática pra aprender programação?
Reposta é: Não. Apenas lógica, muita lógica.


Mas se quiser ser um programador mais preparado ou se tem foco nas áreas de jogos ou ciências de dados, a resposta é sim, precisa.


Espero q eu possa ter ajudado com esse pequena postagem.

Comentários