O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Preciso saber matemática para programar?

Iniciado por MayLeone, 15/09/2020 às 22:52

15/09/2020 às 22:52 Última edição: 15/09/2020 às 22:56 por MayLeone
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 essa pequena postagem.

E aproveitando o gancho... Eu possuo um blog de ensino de matemática (e tem quase todos esses assuntos lá!) então se quiser dar uma olhada >> https://aulasmayleone.blogspot.com/

16/09/2020 às 03:26 #1 Última edição: 16/09/2020 às 03:31 por Syureri
Excelente tópico, May o/
Fora saber googlar, guardar sempre o StackOverflow no bolso e se inscrever nos canais de indianos falando inglês com sotaque difícil de entender, ter conhecimento de inglês também é uma das coisas mais importantes de programação, visto que não apenas as linguagens (de verdade) em si são em inglês, como qualquer tutorial, dúvidas ou soluções ao redor do globo serão em inglês também.

Tenho mais nada a acrescentar, então engulam minhas firulas :feelsbatman:


Para aqueles que possuem medo de escreverem uma linha de código:

se o golpe do inimigo acertou o jogador
    subtrai o dano causado da vida do jogador (pode também calcular o dano final ao pegar informações de defesa, buffs e tudo mais)
fim da condição

se a vida do jogador for menor ou igual a zero
    mostrar tela de game over
fim da condição


Isso acima é basicamente um pseudo-código. Se vocês já mexeram com eventos no RPG Maker (assumo que sim) devem ter percebido que isso não é muito diferente dos comandos de eventos, certo? Pois é, programação é assim também. No entanto, ao contrário de comandos por eventos, você possui muito mais liberdade e poder em programação.

Abaixo deixo exemplos de como o pseudo-código acima se pareceria em código real:

Código: Ruby
player.health -= enemy_damage if enemy_hits_player
show_game_over if player.health <= 0


Código: Javascript
if (enemyHitsPlayer) player.health -= enemyDamage;

if (player.health <= 0) showGameOver();


Código: C/C++/C#
if (enemyHitsPlayer)
{
    player.Health -= enemyDamage;
}
if (playerHealth <= 0)
{
    ShowGameOver();
}

// Jeitinho mais estiloso:
if (enemyHitsPlayer && player.Health - enemyDamage <= 0)
{
    ShowGameOver();
}


Vendo os pedaços de código acima temos uma ideia de como podemos aplicar matemática para realizar uma simples lógica encontrada em quase todos os jogos. Não tem segredo, agora pegue o seu editor de texto favorito, escolha uma linguagem e crie seu primeiríssimo Hello World. Se quiser fazer em Batch, basta abrir o cmd e soltar um:

Código: Batch
echo "Hello, world!"


o/


Um tópico mais do que necessário e bem-vindo na comunidade. A importância da matemática mesmo que em nível mais simples é fundamental para programação, assim como o adendo do Sr. Syureri abordando também a importância do inglês, visto que muito material de estudo (e a própria linguagem) serão em sua maioria, em inglês.

Espero que isto estimule e afaste os interessados de mitos nocivos que os impedem de se aventurar na programação.

Parabéns!  :blink:
Conheça meus assets: