Tópicos ou campos de matemática que aumentam a proficiência em programação de computadores? [fechadas]

14

Geralmente, programadores de computador que são matemáticos ou que possuem conhecimentos de matemática são muito bons em termos de algoritmos e programação de computadores em geral.

O que não estou dizendo:

A matemática é necessária para ser um bom programador de computador. A matemática é necessária para a programação. Bons matemáticos são bons programadores e vice-versa

O que estou dizendo

Eu gostaria de aprender um pouco de matemática porque acredito que isso me tornará um programador melhor. Que áreas / tópicos da matemática me ajudarão a me tornar um programador melhor? As respostas do formulário math topic - corresponding cs areaserão apreciadas.

NB: Perguntei isso no StackOverflow, onde foi declarado fora de tópico. Quero aprendê-lo durante o meu tempo livre do jeito que tenho feito com a programação de computadores. Desde já, obrigado.

Charitoo
fonte
1
Estou surpreso que o StackOverflow tenha declarado que esta questão está fora de tópico. Do meu ponto de vista (programador aposentado), essa pergunta deve ser uma das perguntas mais importantes para o SO.
scaaahu
1
StackOverflow é realmente mais sobre problemas de programação específicos. Isso seria melhor para CSEducators e pode ter funcionado em SoftwareEngineering.
Nat
1
Já tivemos perguntas como essa antes, e todas elas têm o mesmo problema: são muito amplas e subjetivas demais. A única resposta de consenso é: tudo isso .
Raphael
@ Rafael Primeiro, eu respeito a decisão do Mod. No entanto, gostaria de fazer uma pergunta em nome do OP. Existe alguma maneira de melhorar a questão para que ela possa ser reaberta? Se não há maneira de melhorá-lo, existe outro SE que o OP possa fazer para fazer essa pergunta? (Obviamente, o OP já tentou SO e eu sei que não pode caber na Academia SE porque não está intimamente relacionada com a Academia.)
scaaahu
Perguntas que pedem soluções formais para problemas específicos seriam boas. As perguntas de aconselhamento do estudo geralmente não são adequadas para o formato SE; o motivo próximo "baseado em opiniões" se aplica a todos os sites!
Raphael

Respostas:

19

Portanto, existem muitos campos da matemática que são relevantes para a Science of CS, mas para a programação específica:

  • Teoria dos grafos : essa é a grande. Gráficos e árvores estão por toda parte. Redes, mapas, caminhos em videogames. Mesmo coisas como resolver um cubo de Rubiks podem ser modeladas como um algoritmo de gráfico e resolvidas com A *.

  • Matemática discreta : além da teoria dos grafos, conhecer esta área em geral é útil. Está cheio de provas por indução, que são muito úteis para entender a recursão, o que é muito útil na programação, principalmente com estruturas de dados. Saber sobre conjuntos, contagem, exclusão-inclusão, lógica booleana etc. pode ser útil de vez em quando.

  • Teoria dos tipos: surpreendentemente, conhecer a teoria dos tipos ajuda a entender a programação em linguagens digitadas e, mais amplamente, a usar tipos como uma maneira de garantir certas propriedades de correção. Conhecer a teoria da subtipagem ajuda a entender covariância e contravariância em linguagens semelhantes a Java. Saber sobre coisas como o polimorfismo paramétrico é obviamente útil ao aprender uma linguagem pesada como Haskell ou Purescript, mas linguagens como Scala, TypeScript e Rust estão se tornando mais prevalentes na indústria, e os tipos estão em seus núcleos.

    Se você levar esse item ao extremo, obterá coisas como Coq, Agda e Idris, que podem ser usadas para provar propriedades de correção extremamente precisas sobre os programas.

  • Teoria da Computabilidade e da Complexidade : saber quando um problema é insolúvel ou difícil para o NP é útil, porque você não perderá horas destruindo seu cérebro por uma maneira rápida de fazê-lo. Da mesma forma, conhecer um pouco da teoria por trás dos algoritmos de aproximação, rastreabilidade de parâmetros fixos ou algoritmos exponenciais de base baixa, pode ajudar quando você realmente precisa resolver um problema difícil de NP.

  • Teoria dos autômatos: muitos problemas podem ser modelados com várias máquinas de estado; portanto, é útil entender suas propriedades.

Existem também algumas áreas específicas de campo:

  • Estatísticas: se você estiver aprendendo com máquina ou big data, isso é obrigatório.

  • Álgebra linear / cálculo vetorial : ambos são importantes para aprendizado de máquina, gráficos, simulações ou processamento de imagem / áudio.

  • Teoria da Malha : se você estiver trabalhando com compiladores ou otimização de programa, essa sempre aparece. Pontos fixos em todos os lugares!

  • Teoria das categorias: não é necessário codificar, mas útil para qualquer coisa profundamente impregnada na teoria dos tipos.

Edit: não posso acreditar que eu esqueci:

  • Criptografia : se você está interessado em segurança, hash, assinaturas digitais e outros, certifique-se de aprender alguma teoria dos números, teoria dos grupos, teoria dos campos, teoria das curvas elípticas, etc.
jmite
fonte