A matemática pode ser assustadora para muitos programadores e estudantes de programação. Na verdade, a matemática é assustadora para diversas pessoas das mais distintas áreas. São várias as causas para este fato, como ter tido uma formação ruim e traumas pedagógicos. No entanto, várias tecnologias e invenções só existem graças a matemática, como o computador. Sabendo da importância da matemática, o fundador da empresa Congenial, Micael Mota, começou a propagar a importância de estudá-la em seu canal no YouTube. Este artigo visa desmistificar a matemática e mostrar como ela pode ser útil para qualquer profissional, principalmente os de tecnologia.
Ao invés de falar sobre a importância da matemática de maneira “genérica”, vamos separar em dois tópicos: a importância para a programação e para o programador.
Quando aprendemos lógica de programação, estudamos sobre operações relacionais, operações lógicas como conjunção, disjunção e negação, e também sobre tabela verdade. Esses conceitos são só um pedaço da lógica matemática aplicada na programação. Uma operação lógica como “5 > 2” nada mais é do que uma proposição (sentença) e quando fazemos uso de um operador lógico, criamos um tipo de sentença composta (que contém mais de uma proposição). Exemplo: “5 > 2 && 2 < 5”. Esses operadores são chamados conectivos e servem para conectar duas proposições. Se quiser saber mais sobre sentenças e conectivos, pesquise sobre lógica matemática ou lógica proposicional.
É possível usar o conhecimento de teoria dos conjuntos e funções em análise de algoritmo. A análise de algoritmo consiste em técnicas para representar o tempo de execução e memória usada pelo algoritmo por meio de funções matemáticas, isso porque o tempo de execução e a memória usada estão em função da entrada, se a entrada aumenta, o tempo aumenta (com exceção dos casos em que o tempo de execução e memória são representados por uma função constante).
Um exemplo de aplicação da matemática na programação mostrado recentemente foi o do algoritmo do twitter. Você pode ver o Fábio Akita explicando sobre o uso de álgebra linear e similaridade por consseno para resolver problemas de recomendação do twitter no vídeo dele.
Você já deve ter notado que não há espaço para questionar a importância da matemática para a programação. No entanto, quando tratamos do programador, a coisa muda, pois como foi dito no artigo sobre qual faculdade fazer para ser programador, cada indivíduo tem objetivos e opiniões diferentes. Nesse caso, é totalmente compreensível você escolher não estudar matemática ou qualquer outro assunto por não sentir necessidade. Porém, o time da congenial recomenda que você aprenda muito bem matemática e aqui vamos justificar esse ponto de vista.
Matemáticos são pessoas muito criativas e cheias de imaginação, isso porque estudar matemática (do jeito certo) faz com que sua mente se desenvolva. Durante o estudo, você será forçado a entender como tal resultado foi obtido e também precisará pensar para chegar na resposta (exatamente como na programação). Como consequência, é normal que sua imaginação melhore e que você aprenda a fazer deduções lógicas a partir de um conjunto finito de informações.
Muitos problemas de algoritmo podem ser resolvidos via força bruta, mas nem sempre são as melhores soluções. Durante uma entrevista técnica, a sua capacidade de resolver problemas será testada e é importante que você apresente uma solução viável. No entanto, a matemática, novamente, pode ser sua aliada nessas situações. Vou ilustrar um exemplo simples: some todos os números de 1 até n, onde n é inteiro e positivo. Você pode solucioná-lo de, pelo menos, duas formas diferentes. A primeira é usando laço de repetição para somar a sequência.
for (unsigned int i = 1; i <= n; i++) {
s += i;
}
cout << s; // s = 1 + 2 +...+ n
A segunda é usando uma fórmula para somar os n primeiros números inteiros e positivos (pesquise sobre progressão aritmética caso queira saber mais).
A diferença entre as duas soluções é que na primeira o algoritmo precisa executar n vezes para mostrar o resultado esperado, já na segunda ele executa em um tempo constante. Isso significa que quanto maior for o valor de n, maior vai ser a demora da primeira solução (se n for 1.000.000, então o for executa 1.000.000 vezes). Mas agora você pode estar se perguntando: “por que diabos eu iria querer fazer um programa que soma os n primeiros números inteiros positivos?”. A ideia central não é que você se prenda a esse algoritmo, e sim te mostrar que EXISTEM situações onde a matemática otimiza um algoritmo que usa força bruta.
Como nossa área é de exatas, é normal ter muitos conceitos ligados a matemática. Caso você se interesse por algum desses conceitos e queira se especializar mais, é necessário ter uma alfabetização na linguagem usada naquele assunto que deseja ter entendimento. Por exemplo, um livro bastante recomendado para programadores é o introduction to algorithms ou algoritmos: teoria e prática do Thomas Cormen. O grande “empecilho” desse livro é justamente a base matemática exigida. O propósito dele é abordar de forma técnica fundamentos aplicados na programação e ciência da computação como estruturas de dados, projetos e análise de algoritmos. Para poder ler esse conteúdo e outros, é necessário estudar mais do que só linguagens de programação e frameworks. Vale salientar que o livro citado foi só um exemplo, a mensagem não se limita a ele.
Por último, mas não menos importante, o motivo pelo qual você deve buscar outros conhecimentos é pelo simples fato de aprender coisas novas, abrir sua mente e buscar crescer intelectualmente. Infelizmente nós brasileiros somos acostumados a só estudar algo quando aquilo tem alguma aplicabilidade no seu dia a dia ou porque vai cair numa prova. Peço que faça uma reflexão: se é possível gastar horas do dia assistindo uma série ou jogando, mesmo sabendo que aquilo não vai ser cobrado no seu trabalho ou em uma prova, por que não fazer o mesmo com relação aos estudos? Reflita!
Reforçando: você tem total direito de escolher estudar algo ou não. O propósito do artigo foi te mostrar que a matemática tem sua importância na área e que nem sempre o conhecimento precisa ter aplicação direta para fazer diferença na sua vida.