Quais são os principais conceitos matemáticos de um bom programador deve saber?[fechado]

StackOverflow https://stackoverflow.com/questions/52176

Pergunta

Desde que se formou a partir de uma pequena escola em 2006, com um mal em forma de & desatualizado programa (eu sou um estrangeiro & não sabia nada de melhor a escola no tempo) que eu vim a perceber que eu perdi um monte de conceitos básicos da matemática e o software perspectiva de que são principalmente as fundações de outros mais elevados conceitos.

I. e.Eu tentei ouvir/assistir a abrir cursos do MIT em Introdução aos Algoritmos mas rapidamente percebi que estava faltando vários conceitos matemáticos para compreender melhor o curso.

Então, quais são os principais conceitos matemáticos de um bom engenheiro de software deve saber?E quais são as possíveis livros/sites que você vai me recomendar?

Foi útil?

Solução

Outras dicas

Álgebra booleana é fundamental para o entendimento de estruturas de controle e de refatoração.Por exemplo, eu já vi muitos erros causados pelos programadores que não sabe (ou não pode usar) a lei de deMorgan.Como outro exemplo, como muitos programadores reconhecer imediatamente que

if (condition-1) {
    if (condition-2) {
        action-1
    } else {
        action-2
} else {
    action-2
}

pode ser reescrito como

if (condition-1 and condition-2) {
    action-1
} else {
    action-2
}

Discreta matemática e combinatória são tremendamente útil na compreensão do desempenho de vários algoritmos e estruturas de dados.

Como mencionado por Baltimark, indução matemática é muito útil no raciocínio sobre recursão em cauda.

Teoria dos conjuntos é a base de bases de dados relacionais de SQL.

Por meio de analogia, deixe-me salientar que os carpinteiros rotineiramente usam uma variedade de regra-de-ouro técnicas na construção de coisas como telhados e escadas.No entanto, um conhecimento de geometria permite-lhe resolver problemas para os quais você não tem um "enlatado" regra de ouro.É como aprender a ler através de fonética versus vista-reconhecimento de um vocabulário básico.Mais de 90% do tempo não há muita diferença.Mas quando você executar em uma estranha situação, é MUITO bom ter as ferramentas necessárias para a solução de si mesmo.

Finalmente, o rigor/precisão requerida pela matemática é muito útil preparação para a programação, independentemente da técnica específica.Novamente, muitos dos bugs de programação (ou mesmo especificações) que eu já vi em minha carreira tem desleixado pensando em sua causa raiz.

Gostaria de ir com os campos que Landon afirmou:

Discreta Matemática, Álgebra Linear, Análise combinatória, Probabilidade e Estatística, Teoria De Grafos

e adicionar lógica matemática.

Isto dar-lhe um aperto na maioria dos campos de CS.Se você quer ir em campos especiais, você tem que mergulhar em algumas áreas, especialmente:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory

Em ordem de importância:

  • Contagem de (necessárias para loops)
  • Adição, subtração, multiplicação, divisão.
  • Álgebra (só é realmente necessário para entender o uso de variáveis).
  • Álgebra booleana, a lógica booleana e binário.
  • Expoentes e logaritmos (i.e.compreender O(n) notação).

Nada mais avançado do que o que é geralmente algoritmo específico ou domínio específico.Dependendo de quais áreas você está interessado, o seguinte também pode ser relevante:

  • Álgebra Linear e trigonometria (visualização 3D)
  • Discreta matemática e teoria dos conjuntos (design de banco de dados, projeto de algoritmos, compilador de design).
  • Estatísticas (bem, estatística e/ou científico, económico e aplicações.possivelmente também útil para o projeto de algoritmos).
  • Física (para simulações).

A compreensão funções também é útil (não me lembro o que o termo matemático é para essa área), mas se você sabe como programar você provavelmente já fazem.

Meu ponto é:Dez anos de idade deve saber matemática suficiente para ser capaz de entender de programação.Não há realmente muito a matemática necessária para a compreensão básica de coisas.É tudo sobre a lógica, realmente.

"A prova por indução" é um núcleo do conceito matemático para programadores de saber.

Big O notation em geral, o algoritmo de análise, e em relação ao padrão de coleções (classificação, recuperação, inserção e exclusão)

Discreta matemática, aqui é um fantástico conjunto de 20 palestras de Arsdigita Universidade.Cada um é de cerca de uma hora e vinte minutos de duração.

Começar com o que nós CS chamam de "matemática discreta".Cálculo e álgebra linear pode vir em muito útil também, porque eles obter o seu pé na porta para um monte de domínios de aplicação.Uma vez que você já domina os três, vá para a teoria da probabilidade.Os 4 vai levá-lo a competência em 95% (eu fiz isso) de domínios de aplicação.

Concreto Matemática abrange a maioria dos tópicos principais.Um bom livro de Matemática Discreta, como Rosen do Discreta Matemática e Suas Aplicações, vai preencher eventuais lacunas.

Eu acho que depende do seu foco.Alguns anos atrás eu comprei o conjunto da Arte da Programação de computadores por Donald Knuth.Depois de olhar para os livros que eu percebi que praticamente tudo o que é cálculo de provas.Se você estiver interessado em desenvolver seu próprio genérico e algoritmos de provas, para eles, então eu recomendo que ser capaz de compreender os livros acima, desde a sua o que você estaria lidando em que o mundo.Por outro lado, se você só quiser/precisar usar vários classificação/busca/árvore/etc...rotinas em seguida, big O notation, no mínimo, boolean matemática e álgebra vai ficar bem.Se você está lidando com o 3D, em seguida, geometria e trigonometria bem.

Eu tendem a ser mais sobre o uso do lado do que fazer provas, e enquanto eu gostaria de pensar que eu tenho feito alguns inteligente coisas ao longo dos anos eu nunca sentou-se e desenvolveu uma nova rotina de classificação.O melhor conselho que posso dar é aprender o que você precisa para o seu campo, mas expor-se a níveis mais altos, então você sabe que ele existe, e quanto mais há para aprender, você não vai ter muito o crescimento de outra forma.

Eu diria que a lógica booleana.E, OU, XOR, NOT.Eu encontrei como programador usamos isso mais vezes do que o resto de conceitos de matemática.

Álgebra básica e as Estatísticas são bons pontos de partida, e a fundação para um monte de outros campos.

Aqui está um exemplo simples que me deixa perplexo quando vejo os desenvolvedores que não entendo:
- A ordem das Operações

Capítulo 1 de "The Art of Computer Programming", tem por objetivo fornecer exatamente isso.

Houve um livro que foi recomendado...o título era algo como Concreto de Matemática.Foi recomendado em algumas perguntas.

De volta na escola, um dos meus instrutores disse para aplicações de negócios, tudo o que você precisa saber somar, subtrair, multiplicar e dividir.Todas as outras fórmulas, solicitante do saber e informar o que é necessário.Agora, sabemos que isso é para o financiamento de relatórios e aplicação focada escola.Para este dia, isto é verdade para mim.Nunca precisava saber mais do que isso.

Verifique o livro Fundamentos da Ciência da computação
Este livro é de autoria de:Al Aho e Jeff Ullman, e o de todo o livro está disponível online.

Isto é o que os autores dizem em seu Prefácio sobre o objetivo deste livro:

"Fundamentos da Ciência da computação abrange assuntos que muitas vezes são encontradas split
entre uma discreta curso de matemática e um estudante de segundo ano-nível de seqüência no computador
ciência em estruturas de dados.Ele tem sido a nossa intenção para selecionar a matemática
fundações com um olho para o que o usuário do computador realmente precisa, em vez de
o que um matemático pode escolher."

um site para escovar acima em Matemática:http://www.khanacademy.org/

Minha matemática plano de fundo é muito ruim (Geólogo por formação), mas eu levei um matemática discreta classe na escola e eu uso os conceitos de cada dia como um programador.Ele é provavelmente o mais valioso de classe tomei em toda a minha educação como ele se relaciona com a minha profissão atual.

Matemática Discreta
Álgebra Linear
Análise combinatória
Probabilidade e Estatística
Teoria Dos Grafos

  • Álgebra Booleana
  • Teoria Dos Conjuntos
  • Matemática Discreta

Bem, isso depende do que você meta.Como alguém disse, Álgebra Linear, análise Combinatória, Probabilidade, Estatística e Teoria de grafos são importantes se você estiver em resolver problemas difíceis.Assimptótico de crescimento de funções (bit-Oh notation) é muito importante.Você também vai precisar de dominar os somatórios e série, se você precisa trabalhar em analisar alguns algoritmos mais complexos (ver o apêndice no Cormen&outros Introdução a Algoritmos).

Mesmo se você estiver em "Java para a empresa" ou "servidor-lado PHP", você vai encontrar algumas Estatísticas e Algoritmo de Complexidade (daí combinatória, indução, somatórios, séries, etc), muito útil quando seu chefe quer que você obtenha o servidor para trabalhar mais rápido, e adicionar um novo hardware, não parece ajudar.:-) Eu tenho meio que uma vez.

  • Álgebra Booleana
  • Teoria Dos Conjuntos

Por que é que toda a gente, incluindo probabilidade e estatística na lista de ouro, sem mencionar o cálculo?Não é possível entender o que probabilidade e estatística, são cerca de sem, pelo menos, um conhecimento de trabalho de limites, derivadas, integrais e séries.E tudo em tudo, cálculo (juntamente com a álgebra linear) é o carro-chefe de todos matemática.

Eu acho algoritmos e teoria são de grande importância.Ser capaz de vir com um jejum, e correto a solução é o que diferencia os bons programadores do resto.Também, sendo capaz de provar o seu algoritmo (usando o padrão de prova técnicas-- indução, contradição, etc.) é igualmente importante.

Sim, eu gostaria de dizer uma compreensão básica de indução de ajuda para que você entenda o que n representa em algoritmos.Também um pouco de Lógica e Estruturas Discretas é útil.

Probabilidade e Estatística são muito úteis se você tiver que fazer qualquer coisa parecida com aprendizado de máquina.

Eu cobrir o básico na minha "Computação Sua Habilidade"post de blog, onde eu discutir como a Xbox Live TrueSkill ranking e matchmaking algoritmo funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top