Executando verificação de segurança...
2

Matemática na programação.

Eu sou muito ruim em exatas, mas amo programação, apesar de ser iniciante ainda. Até aqui não tenho sofrido com cálculos complexos ou coisas do tipo.

Mas fala aí!

Qual a relação de vocês com programação e matemática? esse triângulo amoroso dá certo kk?

Vocês acham que com matemática básica da pra sobreviver?

2

Como assim "não tenho sofrido com cálculos complexos ou coisas do tipo" e "Eu sou muito ruim em exatas"? Isso parece não encaixar. De uma certa forma, porque essas duas afirmações desafiam a lógica, então talvez falte um pouco de exatas nesse ponto.

Em tudo na vida, lógica é necessária para tomar decisões mais acertadas. Não necessariamente as que mais vão te agradar e produzir felicidade porque isso é da área de humanas, então o certo para agradar uma pessoa pode não depender de lógica, mas para o certo universal, a lógica é fundamental.

Lógica é matemática, mesmo que a pessoa não perceba. É exata. Não tem lógica mais ou menos.

Em discussões políticas você pode usar a lógica e se os fatos estiverem certos, tem uma posição clara para o certo, mas que pode não ser o certo para atender expectativas humanas, faz parte. Então tem ressalvas que podem ser feitas, mas sempre é uma escolha ilógica, ainda que seja bom para boa parte da humanidade.

Isso é muito necessário para a programação. Quase o tempo todo precisa disso. Não só isso, desenvolver software vai muito além disso, tem partes humanas, mas para codificar é basicamente lógica, é matemática o tempo todo, em cada movimento que faz. E a parte boa é que é só matemática básica, não é algo complexo, a não ser que o domínio que está resolvendo exija matemática complexa, mas aí não é a programação em si.

Programação mesmo é só matemática básica. Mas precisa dela direitinho, não pode ser mais ou menos. Com o mais ou menos o resultado será mais ou menos, mesmo que pareça bom.

Fiat 147 todo detonado andando pelas ruas

Matemática básica não é fórmulas e aritmética, é entender os números e suas relações, é entender a lógica de como eles são manipulados. E aí aprender que pode fazer o mesmo com dados não numéricos, como textos, imagens, e objetos mais complexos. Mas ainda está fazendo uso da matemática que não é sobre números e sim sobre resolver problemas de maneira lógica.

Toda dificuldade das pessoas na programação é por falta de matemática básica, que a escola não ensina bem, não da matemática avançada. É da falta da comunicação e expressão básica também.

Eu sou ruim nessas coisas todas quando pega o avançado. No básico que me viro bem. Só assim, junto com muita dedicação, consegui algum resultado. Sempre foi difícil. Não nasci com talento para fazer tudo isso com facilidade.

Eu já vi algumas pessoas falarem para aprender programação para aprender lógica. Isso não faz o menor sentido. Pode ajudar a pessoa a tomar gosto, mas ela não aprende programação sem a lógica, ela pode no máximo ir fazendo isso junto, mas a lógica sempre um passo na frente. Você pode usar a programação para praticar.

Dá para melhorar se não estiver bem. Algumas pessoas com mais esforço do que outras, porque algumas pessoas realmente são mais voltadas para humanas. E se seus viões natural for para isso nunca espere ser muito bom em exatas, pode acontecer, mas a lógica indica que dificilmnete acontcerá, a exceção se dará pela força do humano específico.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Só avisando que agora o sistema pune quem não recebe likes no que escreve, portanto se ficar em 1 aqui não estranhe se eu apagá-lo. Lamento, mas é necessário para não ser prejudicado. Se não teve, é porque ninguém gostou, então não fará diferença mesmo. Se acha que é interessante, considere dar like aqui.

2

Ninguém nasce sabendo metamática, então não tem crise em ter dificuldade em alguns processos. O que eu posso dizer é que, quanto mais vc tenta e ajusta nas suas dificuldades, mais leve fica toda a manipulação de conceitos abstratos.

Eu também gostaria de sair daquela história de que matemática é fazer conta, e olhar pra área como um conjunto de ferramentas que nos permite trabalhar com conceitos mais abstratos, como funções, conjuntos e indução lógica. Menos "2+2" e mais "se P, então Q".

Todas as CPUs que coordenam nossos computadores, smartphones, e hoje estão dentro de carros e TVs, são implementações de um negocinho chamado "Máquina de Turing". O Alan Turing é aquele cara do filme "O Jogo da Imitação", que salvou o Ocidente da Segunda Guerra Mundial e foi condenado pelo governo por amar quem não podia. Hoje ele é super reconhecido como uma pessoa essencial pro mundo como ele é hoje, e divide um painel sensacional no Instituto de Computação da Unicamp com a Ada Lovelace (olha ali embaixo). A "máquina de Turing" é nada mais que um objeto matemático, derivado de um objeto mais simples conhecido como máquina de estados. Com a sua expriência, imagino que entenda que não precisamos saber de máquinas de estados para escrever um "Hello World!".

Ada Lovelace e Alan Turing no IC/Unicamp

Mas, um ponto em que matemática é imprescindível na vida de um programador está na hora de entender que existem várias formas de resolver um problema, e que algumas formas demoram mais do que outras. Esse video do TED-Ed explica super bem como isso funciona, em que processos que demorariam dias podem ser reduzidos a poucas horas, e a vantagem aumenta quanto mais escalarmos os dados de entrada. Por exemplo, um algoritmo que considera todas as combinações de dois elementos da entrada vai demorar n2 operações, mas, se vc organizar direitinho, pode resolver o mesmo problema em n*log10(n) operações. Qual é mais rápido?

Esse tipo de análise também nos ajuda a saber se é até possível achar uma solução em tempo viável. Esse vídeo de 30min é uma super aula sobre algoritmos e um dos problemas do milênio conhecido como "P=NP?". Existe um prêmio de um milhão de dólares pra quem resolver esse problema matemático, mas vc consegue lucrar muito mais com as oportunidades que uma possível solução pode trazer.

Então, pra responder a sua pergunta, programação e matemática formam aquele casal que já está super seguro de si e se amplificam graciosamente. E, se vc tiver curiosidade pra ver essa relação de perto, sempre cabe mais um!

1

Todo dia um pouquinho, cara! Cria uma conta no KhanAcademy e vai treinando as bases... Se vc for como eu, com esposa e 3 filhos, acorda mais cedo e estuda 30 minutinhos de cada vez. Faz uns exercicios e vai seguindo, sem desistir!

1

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
# Algoritmo A => O(n²)
400

# Algoritmo B => O(n)
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

Geogebra example

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.

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.

1
1

A matemática ajuda sim, eu diria que server como um complemento ajuda em algumas questões como na hora de formular alguns cálculos como a tão utilizada regra de três, porém o que vai mesmo ser utilizado na hora de codar é a lógica.
E já a bastante tempo muita das implementações ocorrem na base da pesquisa, pois se em uma deterinada rotina do seu sistema você tiver que implementar algum cálculo matemático e por ser ruim em exatas, não souber como fazê-lo, vai acabar pesquisando.

1

Basicamente tudo que temos hoje na area da programação derivam de fundamentos matemáticos, fundamentos esses que existem a dezenas de anos e dificilmente mudam, ao contrário da minha ou da sua linguagem de programação favorita. Muitos desses conceitos são realmente complexos e que exigem um tempo de dedicação para compreender, porém vejo o conhecimento base/intermediário importante para todo dev, só o que tem por aí é dev "experiente" que não sabe fazer uma regra de três ou interpretar um gráfico. Normalmente, nós meros mortais, não aplicamos alguns desses conceitos mais complexos, porque no dia a dia realizamos trabalhos que são "convencionais" e que não exigem que saibamos tais conceitos, porém, usando o algoritmo do twitter como exemplo, podemos ver que nele é usado diversos conceitos matemáticos realmente complexos, então dificilmente alguém que não entenda desses conceitos vai conseguir compreender o que está acontecendo. Já trabalho na área a um tempo, mas só a alguns anos comecei a cursar ciências da computação, sempre gostei da parte matemática e fico feliz por já ter conseguido, diversas vezes, aplicar alguns conceitos que aprendi durante o tempo no trabalho. Resumindo, estude, porque é como diz aquele ditado:É melhor ter e não precisar, do que precisar e não ter

1

Cara, por definição, dizer "sou muito ruim" é o erro. Você considera que sua capacidade de aprendizagem é estática.

Programação trará conceitos muito amplos e em constante mudança. Mais até que conceitos matemáticos.

Dizer "sou" ao invés de "estou" é uma trava que você mesmo deve remover.