Antes de tudo. Não desanime, eu também não era bom em matemática até me aprofundar no conhecimento, cheguei ao ponto de reestudar matérias do Ensino Fundamental e do Ensino Médio antes de começar o pré-cálculo.
Sim é possivel "sobreviver" com a matemática básica. Por quanto tempo eu não sei!
A Matemática
A matemática traz bastantes conceitos importantes para o aprimoramento do nosso raciocínio lógico e, consequentemente a nossa evolução como programadores, construíndo algoritmos mais elaborados e mais eficientes.
Não é atoa que na maior parte das faculdades e cursos o Cálculo, Matemática Discreta, Cálculo Numérico e outras matérias de "exatas" estão inclusas logo nos primeiros semestres.
Com uma base forte em matemática, como o conhecimento de Álgebra, Trigonometria, Geometria, e outros, irei deixar no final em referências algumas das matérias que estudo e estudei.
Vou dar um exemplo que acredito ser válido e que qualquer programador deveria se interessar em entender, nem mesmo que apenas seus fundamentos, que é a definição de algoritmos eficientes, ou também conhecido de forma mais ampla por Complexidade de Algoritmos.
Algoritmos Eficientes
O que é um algoritmo eficiente?
Quando criamos um programa, esse possui uma complexidade, a qual é interessante temos ciência de sua existência, pois está diretamente relacionada com a eficiencia de nosso algoritmo.
Nosso algoritmo pode ser eficience ou não através da complexidade de algoritmos, onde consideramos o tempo de execução e/ou espaço de memória.
Com isso temos algumas formas de análisar a complexidade de nosso algoritmo, e para entender bem essas análises a matemática é um recurso fundamental.
Pois bem, vamos para uma explicação em codigo. Supondo que temos dois algoritmos, A e B:
Algoritmo A
int n=0;
for (int i=0; i<20; i++) {
for (int j=0; j<20; j++) {
n++;
}
}
printf("%d", n);
Algoritmo B
int n=0;
for (int i=0; i<20; i++) {
n++;
}
printf("%d", n);
Uma questão básica que pode surigir é, dado os algoritmos acima, qual possui maior eficiência em tempo de execução?
Para calcular essa eficiência em questão, podemos utilizar conhecimentos de Análise Assintótica. Dessa forma podemos considerar o algoritmo A = O(n²) e o algoritmo B = O(n).
Isso significa que o algortimo A é n vezes mais lento que o algoritmo B, ou seja, para um programa que exigisse uma eficiência em questão de tempo de execução, é fundamental entender matematicamente como funciona esse calculo e análise.
Então para quem bateu o olho nas complexidades N² e N, com conhecimento matemático, já identificou que um algortimo de ordem quadrática O(N²) é bem maior que um algoritmo de ordem linear O(N).
Saída dos algortimos A e B
400
20
Se ainda ficou dúvidas em questão da eficiência, acredito que com o printf dos códigos fique mais claro, podemos ver que existem 400 execuções no algoritmo A simplesmente por ter um laço de repetição for, enquanto que o algoritmo B tem 20 execuções.
Outra forma "matemática" de verificar essa diferença entre A (O(n²)) e B (O(n)), que são respectivamente nossas funções quadrática e linear, é através de um gráfico:
Gráfico dos algortimos A e B
Verde: f(n) = n
Azul: g(n) = n^2
Imagem criada usando Geogebra para aprendizagem e compartilhamento de conhecimento.
Esse foi um caso extremamente simples de análise de algoritmo dentro do tópico de Complexidade de Algoritmos.
Em relação ao tópico programação, talvez não seja o mais exemplo simples e nem o mais complexo de aplicação dos conhecimentos de matemática, mas sem dúvidas é bastante fundamental pra qualquer programador.
Reforço
Gostaria de reforçar que esse é um dos N caso de aplicação da matemática na programação, se expandir isso para áreas relacionadas a computação (ADS, Ciências da Computação, AI, Banco de Dados, Engenharia, etc) vamos sem dúvidas ter muita matemática aplicada e praticamente na maioria das matérias.
Não fiz um estudo de análise de dados em cima de grades estruturais de ensino para saber qual a porcentagem de matérias utilizam matemática direatamente ou indiretamente na área da computação e programação, mas arriscaria dizer que facilmente está acima de 65%, pelo menos durante meus estudos nem me lembro de quantas matérias tive que não envolviam nenhum conhecimento matemático. Bando de dados por exemplo envolve varios conhecimentos de conjuntos.
Conclusão
Foi possível ver que em uma das áreas de estudo mais fundamentais da programação, que é a Complexidade de Algoritmos, a matemática é bastante utilizada e é importante saber gerar um crítico através dela.
Ter esse conhecimento pode ajudar a evitar um problema que foi abordado recentemente aqui no TabNews, que é o Programador Chaves, onde de acordo com a visão do Filipe Deschamps (visão que eu também concordo), ele menciona os motivos das pessoas fazerem Engenhocas ao invés de Engenharias.
Com isso dito, eu acredito que a matemática é muito importante, pois vai te ajudar a entender a programação, e também esse mundo da computação, com um base muito boa e bastante repertório.
Em um contexto um pouco mais amplo que "programação", deixo aqui minha opnião e incentivo em relação a saber matemática para programar, onde também tento abrir a perspectiva e a visão do leitor para outros tópicos muito importantes da computação que envolvem a matemática e como ela é importante para o nosso aprofundamento tecnológico.
Referencias e Links
Citados durante escrita
Materias de exatas
- Álgebra;
- Trigonometria;
- Geometria;
- Noções básicas de cálculo;
- Cálculo Diferencial e Integral;
- Álgebra Linear;
- Teoria dos Grafos;
- Probabilidade e Estatística;
- Geometria Analítica.
Tem alguns outros tópicos que estou estudando também, mas não vou colocar por receio de acabar entrando muito na matemática aplicada a engenharia.