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

Porque acredito que Programação e Matemática se complementam

Atenção: esse texto baseia-se única e exclusivamente na minha opinião e visão de mundo. Sou professor mestre em Educação Matemática e programo por hobbie e paixão.

Quem sou eu pra acreditar

Com mais de dez anos atuando como professor de Matemática me sinto seguro em afirmar que a construção do conhecimento lógico matemático é bastante mal interpretada pela maioria das pessoas. É possível perceber isso quando ouvimos comentários como:

— Ah! Então você é bom de Matemática? Faz essa conta aqui então...

E o problema fica evidente:

as pessoas acreditam que Matemática é sobre contas e agilidade, quando na verdade é sobre entender a lógica por trás dessas contas e de outros tópicos que sequer envolvem contas ou números.

Vou me ater a parte das contas, no entanto, pra que todos acompanhem como isso pode se complementar com a programação.

Quando estamos criando (não copiando) um código voltado para resolver um (ou mais) problema(s) de Matemática é fundamental entendermos como esse problema funciona. E é exatamente nesse momento que um conhecimento serve de ponte para o outro.

Para ficar didático, vamos a um exemplo:

A Sequência de Fibonacci

É famosa e está na natureza, em obras, no corpo humano e em diversos memes zombando sobre a possibilidade de atribuirmos propriedades cabalísticas para quaisquer números caso tenhamos paciência o suficiente.

Richarlison goleando com a Sequência de Fibonacci

Acima é possível ver a famosa espiral de Fibonacci (em um dos memes zoeiros). Tal espiral é uma possibilidade de construção gráfica a partir de uma sequência de números que seguem a seguinte lógica: some o número atual com o anterior para obter o próximo, começando com dois números 1.

Dessa forma, obtemos: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Conseguir os primeiros números a partir de uma recursão não é um grande problema. Mas se quisermos o centésimo valor, com certeza é complicado, pois não há uma fórmula que resuma essa recursividade, ou seja, você vai precisar montar a lista toda! E é aí que a programação entra como uma grande parceira.

Construindo a sequência de Fibonacci com Python

Olha como é tranquilo:

# Atribuímos os três valores iniciais
[n1,n2,seqFibonacci] = [1,1,[1,1]]

# Perguntamos pro usuário, rezando pra ele inserir um número natural maior que dois.
lim = int(input("Determine quantos valores deseja obter da Sequência de Fibonacci: "))

# Para todos os valores até o limite determinado...
for k in range(0,lim):

  # ...some a primeira parcela com a segunda parcela...
  soma = n1+n2
  
  # ...adicione a soma na nossa lista...
  seqFibonacci.append(soma)
  
  # ...a primeira parcela agora é o valor do que era a segunda parcela...
  n1=n2
  
  # ...e o valor da segunda parcela agora é o valor da soma efetuada
  n2=soma

# No final mostre o resultado
print(seqFibonacci)
  

E pronto! Fica óbvio que o centésimo valor é:

seqFibonacci[99]
354224848179261915075

Sobre as obviedades

É claro que estou exagerando que tudo isso é óbvio. As coisas só são óbvias para quem já sabe do assunto, mas meu ponto é o seguinte: se você sabe programação isso pode complementar na sua Matemática e vice-versa. Inclusive, acredito que quem aprende ambas em conjunto tem uma grande chance de assimilar melhor os dois aprendizados.

Minha ideia original com o canal Cafematica era justamente essa. No caminho a gente vai ajustando conforme o público, mas se te interessar estou buscando trazer mais assuntos do tipo por lá. Espero ter contribuído com esses pensamentos. Abraço!

Carregando publicação patrocinada...
3

Complementando, seguem outros tópicos que discutem a relação de programação e matemática (que é mais profunda do que muita gente imagina):

E o código poderia ser assim também:

lim = int(input("Determine quantos valores deseja obter da Sequência de Fibonacci: "))
a, b = 1, 1
for _ in range(lim):
    print(a, end=',')
    a, b = b, a+b

Ou mudando pra adicionar na lista em vez de imprimir, claro.

1
3

Gostei muito da sua observação porque as vezes parece que as pessoas entendem que há uma relação entre programação e matemática, mas não no fundo não entendem como e onde (e em que nível) a matemática está presente na programação.

Além disso, deixando meus dois centavos, gostaria de estenter seu pensamento. Sinto que a maneira que o ensino é abordado nas escolas e na sociedade, pelo menos no Brasil, é baseado em caixinhas em que cada disciplina está dentro do seu proprio mundo que não se conversam entre si, por exemplo, a matemática, biologia e literatura aparentam não ter conexão alguma, assim como programação e matemática. Ainda mais, aparentemente quando mais específico se vai no conteúdo, mais se intensifica essa "abordagem". Não acho que seja errado apresentar as disciplinas dessa maneira porque isso facilicita o nosso cérebro processar os assuntos, mas o mundo é tão belo, integrado e uma coisa só, tudo feito de átomos, elétrons e outras coisas a mais que é triste não tentarmos "mixar" todo conhecimento que já sabemos/obtemos (sei que não é fácil, estou sempre tentando).

Por fim, um dos canais que me inspira a tentar a fazer isso, é o canal Universo Narrado (link abaixo), em que o Felipe Guisoli consegue trazer física, matemática, filosofia, literatura entre outros assuntos, como uma visão unificada e bela!

Canal Universo Narrado: https://www.youtube.com/@UniversoNarrado

1

Que massa tua contribuição, Pedro! Vou comentar com o Felipe isso que disse. Ele com certeza vai curtir hehe Muito bom o Univeso Narrado mesmo!

2

muito bom meu nobre 🍷 🗿 concordo, as pessoas Interpretam muito mal essa questão,
e mais interessante entender primeiro a lógica,a programação e a matemática se completam

1

Acho que existe um caminho do meio aí... Eu fico interessado em escrever mais a respeito, mas ao mesmo tempo desanima saber o quanto a maior parte da galera acredita que ambas são complicadas de aprender.

2

Olá, tudo tranquilo?

Se me permitir um "encorajamento"... não se deixe desanimar por algo que possa fugir do seu controle, pois na verdade mesmo que as pessoas acreditem que sejam temas complicados de se aprender, talvez sua contribuição a respeito possa ser o fator que vai descomplicar para algumas pessoas.

Fique bem.

2

Concordo com o texto escrito.

Depois de 9 anos programando, resolvi fazer ciência da computação e é incrível como você descobre matématica na programação.
Quando você vai para um nível mais abstrato das coisas, você descobre que as funções que fazemos para processar algum dado na programação não é por acaso. Existe o mesmo conceito de função na matemática.

Na matemática por exemplo, existem diversas funções: Linear, Logarítmica, Quadrática e por ai vai. Quem já estudou Cálculo integral sabe o que estou falando.

Olha que observação interessante:

Existem essas características quando trabalhamos com funções em matemática.

. Padrão de regularidade (a lei que determina a função);
· Interdependência entre as grandezas;
· “Máquina de entrada e saída” (calcula o valor que se quer encontrar).

Conseguem ver alguma semelhança com a programação? Eu vejo e muito. Principalmente no quesito máquina de entrada e saída. Afinal, geralmente numa função na programação entramos com alguns dados, processamos e esperamos algum retorno, mesmo que o retorno seja 0 ou nada.

São nestes termos que você vai descobrindo matemática. Estudar algoritmos por exemplo trás uma ótima noção de onde se usa matemática em programação.

Outros conceitos devirados da matemática para a computação: Vetores, matrizes...

Um conceito muito usado na programação: Recursividade. É matemática pura aplicada em seu conceito. Vejam estes trechos:

Computação:

Na programação, a recursividade é a capacidade que uma função apresenta de chamar a si mesma. A ideia fundamental por trás de um algoritmo recursivo é a transformação do problema (instância) original em outro menor ou mais simples, de modo que seu
tamanho ou sua simplicidade permita uma solução direta, sem que haja a necessidade
de recorrer novamente ao algoritmo.

Além da computação, a matemática é uma área que utiliza muito a recursividade. Um
exemplo clássico é a definição do fatorial. O fatorial de um número natural é o produto
do próprio número por todos os seus antecessores não nulos. Assim,

Matemática:

A ideia básica da
integração é que muitas quantidades podem ser quebradas em pedaços pequenos e depois se
soma a contribuição que cada uma dessas partes dá. Integrais e derivadas estão intimamente
relacionadas: a integral é a operação inversa da derivada. Em termos de área, a integral de uma
função determina a área sob a curva dessa função no plano cartesiano

Este texto foi retirado de um pdf da faculdade que estudo.

Percebam que tanto na computação quanto na matemática os conceitos se misturam e conversam entre si.

As vezes a gente acha que a matématica na programação é para aplicar ela no dia a dia com cálculos e etc, e se não vamos fazer isto no dia a dia devemos ignora-la, mas isto é um engano. Se olharmos para um lado mais científico e investigador, veremos que os conceitos e fundamentos da computação estão intrinsecamente ligado a matemática. Acho que para todo mundo que deseja evoluir em termos de computação e programação, é notável que o um entendimento básico de matemática é necessário.
Inclusive o exemplo dado no texto sobre Fibonacci é uma forma iterativa de resolver o problema, mas também existe sua versão oporta que a recursiva.

2

Eu era estagiário de uma grande empresa fabricante de nobreaks e estabilizadores, trabalhava na engenharia, mais especificamente como programador de firmware (o software que fica dentro de um microcontrolador).

O produto que eu estava trabalhando era de baixo custo, portanto o microcontrolador usado nele era o mais barato o possível.

Parte da exigencia legal era que a medição de tensão fosse feita através de TrueRMS (https://www.fluke.com/en-us/learn/blog/electrical/what-is-true-rms)

Para isso, fatia-se uma senoide em N pedaços, eleva cada pedaço ao quadrado e depois tira a raiz quadrada da soma.

Simples né? Só que não. Um microcontrolador de 8 bita não possui calculo de raiz quadrada nativamente, e a biblioteca que fazia esse calculo tinha três problemas:

  1. Era enorme, 1.5kB (o microcontrolador tinha 4kB de memoria de programa)
  2. Era lenta.
  3. Tinha zonas de imprecisão.

Estavamos enfrentando um problema que o estabilizador do nada "enlouquecia", e eu descobri que o problema estava na imprecisão do calculo de raiz quadrada.

Mas esse numero de RMS era usado simplesmente para comparar com uma tabela. então eu propus (para varios engenheiros formados, cabeça dura) de retirar a raiz quadrada e jogar pro outro lado da equação (a tabela).

Parece obvio, mas tive que passar horas explicando minha tese, desenvolver uma versão e provar que além de resolver o problema, nós conseguiríamos poupar bastante dinheiro reduzindo o tamanho do programa.

Com isso concluo: matemática é importante em tudo, mas na programação é ainda mais, pois em algum momento você vai precisar provar por A+B um conceito que na sua cabeça funciona. A matemática vai te ajudar a enxergar melhor determinados processos, lógica, e etc.

1
1

És uma lenda! Parabéns.

O que fez foi o grau mais elevado de beleza, pois mostra a simplicidade de resolver um problema com um detalhe "bobo".

Pela beleza e sofisticação da solução proposta eu deixo aqui meu sincero elogio a sua solução.

2

Como alguém curioso, nas últimas semana tenho estudado como um computador funciona, como de fato o programa que escrevemos é entendido. E tudo isso é por conta da matematica. Achei um canal gringo que explica como criar uma 3D Graphic engine, só que o mais massa não foi o resultado final, mas o processo, ele explicou matematicamente como poderiamos desenvolver aquilo, e a partir disso, ele desenvolveu o programa.
Eu nunca fui bom em matematica, e na faculdade eu tive muita pouca matéria de matematica, mas fiquei muito curioso de ver como funciona essas coisas mais complexas. E para entender isso preciso entender o básico, então dei uma pausa nos estudos sobre o baixo nível de programação e voltar a matematica básica, para depois conseguir entender esses conceitos um pouco mais complexos mais rapidamente.
Conclusão: Tenho um conceito diferente agora sobre como a matematica e a programação anda juntas e um pode complementar o outro.
Aquela famosa frase "não precisa saber matematica para programar" é realmente verdade, mas se você quer construir protocolos, engines gráficas, drivers, SO. Você sim vai precisar saber além do básico, se você está fazendo um CRM e acha que isso é só um "CRUD", não tem como você saber se uma oportunidade tem um probabildiade maior de dar certo, porque você não entende teoria de bayer. E seu programa será inferior a alguém que saiba.
Por isso estude, você não vai sair perdendo por saber mais uma coisa, muito pelo contrario, qualquer conhecimento pode ser benéfico.

1

Usando formalidades matemáticas podemos usar também potênicas de matrizes especiais para obter um algoritmo que retorna o n-ésimo número de fibonnaci, com um melhor desempenho que um algoritmo recursivo aliás. São inumeras aplicações matemáticas na programação. Sou discente do curso de matemática computacional e reforço a importância da matemática na computação e na programação. Exemplifico abaixo o algoritmo usando potências de matrizes especiais para a obtenção do n-ésimo número de Fibonnaci.

import numpy as np
def fibmat(n):
    """
    Algoritmo matricial para o cálculo dos números da sequência de Fibonacci.
    
    Entrada:
         n (int): número inteiro não negativo.
         
    Saída:
         (int): o valor de F_n
    """
    # você deve iniciar a implementação desta função a partir daqui.
    assert n >= 0
    
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        M = np.array([[1,1],[1,0]])
        Mn = M
        for i in range(n):
          Mn = np.dot(M, Mn)
        return Mn[1,1]

É apenas um algoritmo que foi retirado do meu repositório de trabalhos da cadeira de Cálculo Numérico.
Em relação a complexidade do algortimo, o algoritimo recursivo e não recursivo tem como complexidade exponêncial, ou seja,O(2^n). O algoritmo usando potências de matrizes especiais tem como complexidade linear, ou seja,O(n), uma diferença grande na comparação dos algoritmos.

1

Vc disse que é professor, então se me permite a crítica...

Acho que o nosso sistema educacional, da forma como está (des)estruturado, faz com que a esmagadora maioria das pessoas odeie matemática. Porque tudo é ensinado de um jeito que faz com que elas não entendam nada (nem o que é, e muito menos pra que serve).

Sei que nem tudo é culpa dos professores, há muitos que se esforçam pra contornar isso, mas enfim, não sei a solução, só sei que isso acontece bastante.

E esse ódio à matemática faz com que muitos não tenham sequer o conhecimento básico necessário para programar bem, e principalmente, não enxerguem a profunda conexão entre programação e matemática.

Não só pelo fato de que muitas coisas usadas em programação são na verdade aplicações de alguma coisa da matemática (SQL veio direto da álgebra relacional, Cálculo Lambda é a raiz da programação funcional, arrays/vetores são similares em conceito, etc). Mas também porque muito do ganho que a matemática dá é indireto: ela te dá a capacidade de criar abstrações para resolver problemas, que no fundo é tudo que fazemos em programação. Acredito que mostrar esse ganho (que só vem no longo prazo) é um dos maiores desafios do ensino atual.

1

Entendo a crítica e permita-me contribuir pro pensamento.

Existem pessoas que dedicam a vida para discutir e remodelar essa (des)estruturação. Caso realmente se interesse pelo tema dá uma pesquisada por "Teorias da Aprendizagem" ou "Currículo e Educação Matemática" por exemplo.

Com certeza não pode ficar como está nunca, pois o mundo muda a cada momento e a educação precisa acompanhar. Mas só pra entender esse tal "sistema educacional (des)estruturado" já é complicado o suficiente pra maioria desistir de ler sobre o assunto, imagine só resolver os problemas nele.

1

Concordo com vc, e só pra deixar claro, eu não quis dizer que o problema é fácil e nem que é simples resolver. Sei que não é.

É que tenho tido esse tipo de pensamento desde que li este artigo. Ele defende que explicações intuitivas ajudam no aprendizado.

É usado como exemplo a definição de um gato. Existem várias formas de definir: um animal peludo com garras, um mamífero da família xyz, ou um animal cuja cadeia de DNA é ACATGAGG etc...

A definição do DNA é a mais precisa e tecnicamente correta, mas pra quem não faz ideia do que é DNA, é pouco útil e de difícil compreensão. Se for para explicar desde o início para alguém "leigo", o melhor seria começar mostrando fotos de um gato (ou um de verdade), como ele se comporta, pra depois dizer que é um mamífero, e só no final falar do DNA.

E a crítica feita no artigo é que a forma "tradicional" de ensinar (principalmente matemática) geralmente faz o inverso: começa falando do DNA pra só no final mostrar a foto do gato (isso quando mostra). Daí as pessoas não conseguem entender o que é e nem pra que serve, se desinteressam e passam a achar que é inútil.

0

Atenção: esse texto baseia-se única e exclusivamente na minha visão pessoal.

Olá, seu post mostra um ponto de vista interessante (ainda que eu discorde respeitosamente em alguns níveis de suas opiniões, certamente é um ponto de vista que nos faz pensar a respeito).
Os comentários deste post são igualmente interessantes com opiniões e complementações que certamente enriquecem o seu ponto de vista.

Sem querer entrar na discussão matematica/programação (talvez em uma outra hora), a visão sobre abordagem educacional (o ensino no país) me chamou um pouco mais de atenção no momento. No post vc inicia esclarecendo que se trata apenas de sua opinião (algo bastante importante no debate de ideias, particularmente acredito que o compartilhamento de opiniões é o que faz o debate evoluir).

Atenção: esse texto baseia-se única e exclusivamente na minha opinião e visão de mundo.

Você utilizou um "argumento" para se posicionar e talvez respaldar sua opinião.

Sou professor mestre em Educação Matemática e programo por hobbie e paixão.

Não sei se opiniões devem ser respaldadas para além de sua lógica ou sentido factual, digo isso, pois sem conhecer seu desempenho ou trabalho de fato, ser professor e mestre em educação matemática pode não representar muita coisa. Vimos isso em momentos recentes de grande repercusão em que supostamamente grandes especilistas (respaldados pelos seus títulos e posições) disseminavam opiniões controversas e em vários níveis erradas e até prejudiciais para outras pessoas. Mas eram tidos como autoridades no assunto apenas por possuirem esses tais "títulos e posições".

Estando inserido no sistema educacional do país acabei percebendo que em grande parte os "formadores" não me parecem ter conhecimento suficiente para atuarem como tal (ainda que estejam em posições elevadas e/ou possuam os tais títulos acadêmicos).

Me parece que muitas vezes o "conhecimento" (ainda que completamente equivocado) é aceito como verdade absoluta não pelo seu conteúdo em si, mas pelo seus disseminadores.

Os conhecimentos formais no país me parece abaixo do necessário para permitir uma evolução educacional consistente, as políticas públicas de educação são no mínimo incoerentes e certamten há bastante tempo o sistema educaciona vem sendo sistematicamente desestabilizado (talvez intencionamente), o que não consigo identenficar com certeza é se essa desestruturação do sistema causa o nível de conhecimento precário dos seus formadores ou o contrário.

Obs: quaisquer críticas contida no texto não são direcionadas ao autor ou qualquer participante desta conversa.