A matemática é necessária para a programação? [fechadas]


117

Acontece que eu debati com um amigo durante os dias de faculdade se matemática avançada é necessária para qualquer programador veterano. Ele costumava argumentar ferozmente contra isso. Ele disse que os programadores precisam apenas de conhecimentos básicos de matemática do ensino médio ou do primeiro ano da faculdade, nem mais nem menos, e que quase todas as tarefas de programação podem ser realizadas sem a necessidade de matemática avançada. Ele argumentou, no entanto, que algoritmos são fundamentais e um recurso indispensável para programadores.

Minha posição era que todos os avanços da ciência da computação dependiam quase exclusivamente dos avanços da matemática e, portanto, um conhecimento completo da matemática ajudaria muito os programadores quando estão trabalhando com problemas desafiadores do mundo real.

Ainda não consigo definir qual lado dos argumentos está correto. Você poderia nos contar sua postura, por experiência própria?


7
Liguei para meu professor de matemática dez anos depois, apenas para dizer a ele que nunca usei matemática avançada em toda a minha carreira. Dick, eu sei, mas ótima pergunta! Mais um.
Chris McCall,


Por favor, veja a resposta com maior votação para esta questão .
Boris Stitnicky

Ao invés de. Fechar, isso deve ser migrado para programadores.
Chris Cudmore

Respostas:


111

Para responder à sua pergunta como ela foi feita, eu teria que dizer: "Não, a matemática não é necessária para a programação". No entanto, como outras pessoas sugeriram neste tópico, acredito que haja uma correlação entre entender matemática e ser capaz de "pensar algoritmicamente". Ou seja, ser capaz de pensar abstratamente sobre quantidade, processos, relações e prova.

Comecei a programar quando tinha cerca de 9 anos e seria um exagero dizer que aprendi muita matemática nessa fase. No entanto, com um pouco de esforço, fui capaz de entender variáveis, for loops, declarações goto (perdoe-me, eu era Vic 20 BASIC e não tinha lido nenhum Dijkstra ainda) e geometria coordenada básica para colocar gráficos na tela .

Acabei concluindo um diploma com distinção em Matemática Pura com especialização em Ciência da Computação. Embora eu tenha me concentrado principalmente na análise, também estudei um pouco de matemática discreta, teoria dos números, lógica e teoria da computabilidade. Além de ser capaz de aplicar algumas idéias de estatística, teoria da probabilidade, análise vetorial e álgebra linear à programação, havia pouca matemática que estudei que fosse diretamente aplicável à minha programação durante a graduação e à programação comercial e de pesquisa que fiz depois.

No entanto, acredito firmemente que os métodos formais de pensamento que a matemática exige - raciocínio cuidadoso, busca de contra-exemplos, construção de fundamentos axiomáticos, localização de conexões entre conceitos - têm sido de grande ajuda quando lidei com projetos de programação grandes e complexos.

Considere a maneira como os atletas treinam para seu esporte. Por exemplo, os jogadores de futebol sem dúvida gastam muito de seu tempo de treinamento em habilidades básicas do futebol. No entanto, para melhorar seu condicionamento físico geral, eles também podem passar tempo na academia em bicicletas ou máquinas de remo, fazendo pesos, etc.

O estudo da matemática pode ser comparado ao treinamento com pesos ou ao treinamento cruzado para melhorar sua força mental e resistência para a programação. É absolutamente essencial que você pratique suas habilidades básicas de programação, mas estudar matemática é um exercício mental incrível que melhora sua capacidade analítica central.


6
Gostaria de acrescentar que a matemática não é apenas o treinamento com pesos para a sua força mental, mas também abre a porta para novos problemas e soluções. Por exemplo, durante meu estágio de processamento de imagem, não seria capaz de implementar nossos algoritmos de remoção de ruído sem um conhecimento completo dos PDEs. O código resultante era simples, mas muito preciso. E a matemática é o que nos levou até lá. Ainda mais surpreendente é a beleza dessas fórmulas. Uma pequena expressão PDE pode ser traduzida em algumas páginas de código. Sem a fórmula inicial, é difícil ver como você acabaria com ela.
Joe

A matemática não é necessária para a programação, porque programar é matemática. Pode ser matemática boa ou matemática ruim (como quando a longa chamada do orangotango é transliterada para a linguagem Ook ), mas sempre que um programador projeta um modelo de objeto de alguma coisa, ze está (geralmente sem saber) realizando um ato matemático. Portanto, novamente, não é necessário ler livros de matemática para programar, mas isso não muda nada no fato de que programar é matemática e que (como disse Euclides) não existe um caminho real para isso.
Boris Stitnicky

56

Embora a matemática avançada não seja necessária para a programação (a menos que você esteja programando a capacidade matemática avançada), o processo de pensamento da programação e da matemática são muito semelhantes. Você começa com uma base de coisas conhecidas (axiomas, teorias previamente comprovadas) e tenta chegar a algum lugar novo. Você não pode pular etapas. Se você pular etapas, será necessário preencher os espaços em branco. É um processo de pensamento crítico que torna os dois incrivelmente semelhantes.

Além disso, matemáticos e programadores pensam criticamente de forma abstrata. Coisas do mundo real são representadas por objetos e variáveis. A capacidade de traduzir do concreto ao abstrato também vincula os dois campos.

Há uma grande chance de que, se você for bom em um, provavelmente será bom em outro.


E então você poderia dizer que alguém que faz muitas palavras cruzadas ou joga Scrabble tem mais probabilidade de ser bom em programação do que alguém que não o faz. O relacionamento parece ser mais sobre a probabilidade do que uma dependência estrita.
Liam,

O rigor e a disciplina de resolver um problema de matemática se traduz em programação. Você precisa ter a capacidade de desconstruir um problema e abordá-lo primeiro da direção óbvia e, em seguida, de direções mais criativas em ambas as disciplinas.
Bramha Ghosh

4
Dois grandes programadores que admiro muito não estudaram Ciência da Computação, mas foram formados como matemáticos e acabaram de mudar de carreira: Miguel de Icaza e Alexander Stepanov. A propósito, Stepanov afirmou certa vez que, ao trabalhar com matemática, "você não começa com axiomas: acaba com axiomas". : D
Joe Pineda,

@Liam - É sobre combinar padrões e fazer malabarismos na memória a curto prazo. Ambas as atividades exigem essas habilidades.
jcolebrand

+1 para "Há uma grande chance de que, se você for bom em um, provavelmente será bom no outro."
Thorbjørn Ravn Andersen,

39

ciência da computação! = programação

OK, sério, eu conheço bons e maus programadores que se formaram em inglês e psicologia e alguns que se formaram em ciência da computação. Alguns caras muito famosos que eu admiro como desenvolvedores não tinham formação em CS. Larry Wall (Perl), por exemplo, era um linguista. Por outro lado, ajuda saber algo sobre o domínio no qual você está trabalhando, porque assim você poderá pelo menos ver se seus dados fazem sentido e ajudar seus clientes / usuários a detalharem o que realmente desejam. E sim, há a questão da complexidade computacional e estruturas de dados eficientes e correção do programa. Isso é coisa que você aprende na Ciência da Computação e é útil saber em quase todos os domínios, mas não é necessário nem suficiente.


12
Acho que a melhor citação que ouvi é "Ciência da computação não é mais sobre computadores do que astronomia é sobre telescópios." (Dijkstra)
aproxima-se de

5
Acho que stackoverflow.com foi criado basicamente para superar esse tipo de resposta de uma linha, mas há 15 pessoas com ideias semelhantes que levaram essa resposta inútil ao topo. Não tenho nada pessoal com você, no entanto, sinalizei sua resposta como "ofensiva". É assim pelo menos para mim.
simsim

2
@simsim: Acho ofensivo que as pessoas pensem que um diploma de CS tem a ver com programação.
próximo de

3
@simsim: Não importa o que Joel e Jeff tinham em mente quando criaram este site. É tudo sobre como criar uma comunidade onde os programadores ajudam uns aos outros. Acho que a resposta curta de David acertou no alvo. +1
Scottie T,

@ Scottie: se fosse "tudo sobre a criação de uma comunidade onde os programadores ajudem uns aos outros", então fóruns e listas de e-mail teriam sido suficientes. Talvez eu tenha sido um pouco duro em minha resposta, mas foi surpreendente ver 15 usuários votando em uma "resposta" completamente sem noção, bem, antes de editar, é claro. :-)
simsim

29

Eu acho que eu vou ser a primeira pessoa a dizer que você fazer necessidade de matemática. Como outros disseram, a matemática não é tão importante para certos aspectos do desenvolvimento, mas os fundamentos do pensamento crítico e da análise estruturada são muito importantes.

Mais ainda, a matemática é importante para entender muitos dos fundamentos que entram em coisas como agendadores, otimizações, classificação, gerenciamento de protocolo e uma série de outros aspectos dos computadores. Embora a matemática envolvida a partir de um nível de cálculo não seja complexa (é principalmente álgebra do ensino médio), as teorias e aplicações podem ser bastante complexas, pois um conhecimento sólido da matemática por meio do cálculo será de grande benefício.

Você consegue sobreviver sem isso, com certeza, e você não deveria deixar um conhecimento menos profundo de matemática te atrapalhar, mas se você tivesse a chance, ou a inclinação, eu estudaria o máximo de matemática que você pudesse, cálculo, teoria numérica, linear álgebra, combinatória, aplicações práticas, tudo isso tem aplicações práticas e teóricas em uma ampla gama de ciência da computação.

Conheci pessoas que tiveram muito sucesso em ambos os lados da cerca (aqueles sem um grande foco em matemática e aqueles que foram para a escola de física ou matemática), mas em ambos os grupos eles gostavam de problemas numéricos e de aprender sobre algoritmos e teoria matemática .


Eu concordo. Embora alguém possa sobreviver sem isso - será que se arrependerá de sua decisão? Se você espera ter um emprego moderadamente excitante / desafiador, as habilidades matemáticas que adquiriu certamente o ajudarão.
Andras Vass,

Justo! GrayWizardx e outros: Como autodidata, o que você recomenda em termos de materiais de leitura? Fiquei extremamente desanimado com a maneira mortalmente ruim como a matemática me foi ensinada quando era mais jovem. Não quero colocar a culpa em outro lugar, mas a matemática foi apresentada de forma cruel. Agora é hora de redimir. É FÁCIL aprender sozinho a matemática descrita aqui (cálculo, álgebra linear, matemática discreta, etc.)? Existe um conjunto específico de livros didáticos recomendado para esta abordagem? Um diploma universitário não é mais uma opção!
Emmel

1
@Emmel, eu realmente vi "O guia de mangá para matemática" e "O guia de mangá para cálculo" em uma Barnes and Noble lá fora, e eu sei que vi um "Guia de idiotas completo para álgebra linear" outro dia. Quanto aos recursos reais, costumavam haver ótimos sites de matemática (para alunos, etc), mas não tenho certeza de quantos deles ainda existem. Uma coisa que faço de vez em quando é ir para uma faculdade comunitária e "auditar" as aulas de matemática (aceitar para aprovação / reprovação) e apenas fazer uma atualização. Havent fez isso em 5-6 anos, mas foi muito útil da última vez.
GrayWizardx

26

Tenho graduação em matemática, mas não me lembro de ter exigido essa matemática uma única vez na minha carreira. Foi útil em termos de treinar minha mente para o pensamento lógico, mas não escrevi nenhum código usando dinâmica de fluidos, teoria quântica ou cadeias de Markov. (O último é o mais provável de surgir, eu suspeito.)

A maioria dos desenvolvedores de linha de negócios não precisará de matemática avançada na maior parte do tempo. Às vezes, saber trigonometria pode ajudar, e certamente ser capaz de entender matemática suficiente para implementar algoritmos descritos matematicamente pode ser importante - mas além disso? Nah.

Não se esqueça de que a maioria dos programadores não está avançando na ciência da computação - eles estão criando aplicativos. Não preciso conhecer engenharia avançada para dirigir um carro moderno, embora esse carro quase certamente tenha sido aprimorado por meio de engenharia avançada.


Concordo com a maior parte do que você disse, no entanto, não poderia ser dito que muitos aspectos da programação podem ser notadamente mais fáceis com a compreensão de princípios matemáticos comuns? Às vezes, uma fórmula para algo é muito mais fácil de programar do que o algoritmo para atingir o mesmo valor ... contanto que você conheça essa fórmula
BenAlabaster

@balabaster: Às vezes - mas eu diria que isso não acontece com muita frequência. Da mesma forma, você realmente não precisa saber uma fórmula de antemão para usá-la. Ser competente em matemática é bom, então você pode entender fórmulas quando as vê, mas você raramente precisa de matemática de nível de graduação em si.
Jon Skeet

11
Graduação em matemática? Então você sabe que não são apenas números. Tenho dois graus de matemática e uso o conteúdo com frequência: álgebra booleana para analisar / simplificar a lógica, autômatos / teoria da linguagem para construção de DSL, álgebra para análise de desempenho big-O, etc.
joel.neely

14

Eu diria que ter matemática lógica (discreta) avançada pode realmente ajudar. Isso junto com a teoria dos conjuntos. Ao lidar com programas de computador comuns, essas disciplinas podem ajudar muito. No entanto, muito da outra matemática que fiz na universidade era cálculo, que, até onde posso ver, tinha uso muito limitado. Como 90% (ou algo parecido) da programação está fazendo aplicativos de negócios com matemática muito simples, eu diria que na maior parte, você pode sobreviver com muito pouco conhecimento de matemática. No entanto, um bom entendimento de álgebra booleana, lógica, matemática discreta e teoria dos conjuntos pode realmente colocá-lo no próximo nível.


14

Vou ir contra a corrente aqui e dizer "Sim"

Eu mudo da Engenharia Civil para a programação (Concrete Sucks!). Minha formação matemática consiste nas coisas habituais do primeiro ano, cálculo do segundo e terceiro anos (Diff EQ, integrações de volume, séries, transformações de Fourier e Laplace) e um curso de Análise Numérica.

Acho que minha matemática é incrivelmente deficiente para a programação de computadores. Há áreas inteiras de matemática e lógica discretas que estou perdendo, e só sobrevivi devido a uma extensa biblioteca de livros didáticos, Wikipedia e Wolfram. A maioria dos algoritmos avançados é baseada em matemática avançada, e não sou capaz de desenvolver algoritmos avançados sem fazer uma pesquisa extensa (essencialmente o equivalente a meio curso de trabalho). Certamente sou incapaz de criar NOVOS algoritmos, já que acabo de fazer não ter os fundamentos matemáticos como ombros de gigantes sobre os quais se apoiar.


Quantos algoritmos fundamentais um programador médio realmente escreve? Eu acho que 80% dos trabalhos de programação não envolvem matemática além da álgebra básica.
dbkk

@dbkk: A tarefa mais comum de um programador médio é o design do modelo de objeto, a "lógica de negócios" de algum domínio. E tal processo nada mais é do que matemática, embora não seja comumente refletido por aqueles que executam a tarefa.
Boris Stitnicky

14

Depende do que você está fazendo. Se você faz muita programação 3D, certamente é necessário conhecimento de geometria 3D, não concorda? ;-) Se você deseja criar um novo formato de imagem como JPG ou um novo formato de áudio como MP3, você também estará muito perdido se não puder entender uma transformação de cosseno ou de Fourier, pois esses são os princípios básicos em que a compactação com mais perdas se baseia . Muitos outros problemas podem ser resolvidos melhor se você souber bem de matemática.

Existem também muitas outras tarefas de programação que você descobrirá que não precisam de muita matemática.


13

Se você acha o assunto fascinante o suficiente para postar, vá em frente e comece a aprender. O resto virá naturalmente.


9

Sim, não há necessidade de matemática avançada - se você estiver programando comercialmente - software de prateleira.

No entanto, ao lidar com coisas pesadas, como:

  • Calculando trajetórias para controlar um robô
  • Criação de aplicativos semelhantes à IA para oferecer suporte à incerteza e ao raciocínio automático
  • Jogando com movimento e gráficos 3D

Algum conhecimento avançado de matemática pode ser útil. E não é como se fossem problemas "de outro mundo".

Tive que criar um software para tentar "prever" a quantidade de papel necessária para um escritório (e foi um inferno descobrir a melhor forma de aproximar valores).

Você tem que ter cuidado, porém, porque é fácil se perder ao usar coisas avançadas - há um amigo meu que recorreu ao uso de Turing para armazenar o estado de um menu dinâmico apenas para exibi-lo corretamente - humm ... talvez ele foi longe demais em sua imaginação.


você pode adicionar coisas como compactar arquivos ou editar arquivos MP3 ou qualquer coisa que requeira realmente entender o que o computador está fazendo, ao invés de apenas jogar um site junto.
próximo de

4
Como ele usou Turing para fazer isso? Uma mesa ou sessão ouija?
Jared Updike

8

Que tipo de programação?

Em minha experiência comercial, não precisei de matemática avançada, mas isso depende muito do campo em que você está.

A computação gráfica requer uma grande quantidade de matemática avançada. Grande parte da programação acadêmica de computadores requer matemática avançada.

Portanto, dizer que tende a haver uma correlação entre pessoas que são boas em matemática e pessoas que são boas em programação.

Espero que esta resposta insatisfatória ajude.


6

A matemática é necessária para desenvolvedores em alguns campos, mas é quase inútil em outros.

Se você é um desenvolvedor de jogos e precisa trabalhar muito com a física, a compreensão da matemática é crucial. Se você estiver trabalhando com controles visuais avançados, não poderá fazer muito sem geometria. Se você está planejando fazer alguns cálculos financeiros - seria REALMENTE útil ter um conhecimento sólido de estatísticas.

Por outro lado, nos últimos 5 anos, tive apenas 2 ou 3 projetos onde QUALQUER quantidade de matemática era necessária. Destes, houve apenas uma ocorrência em que uma pesquisa no Google não ajudou.

No final do dia, até os cálculos financeiros são frequentemente algo que seus clientes fazem por você e fornecem fórmulas para implementar.

Portanto, se você está no negócio de 'software aplicado', provavelmente nunca usará seu diploma de matemática. Se você trabalha com software acadêmico, a matemática é crucial.


Para "desenvolvedor de jogos", eu adicionaria "desenvolvedor de simulação". Lembro-me de lá em 1993, dirigindo por toda a cidade tentando encontrar um livro de matemática suficientemente avançado para explicar como os quatérnios funcionam para mim, para que eu pudesse codificar corretamente um algoritmo de recocagem morto. Graças a Deus pela Internet hoje!
TED de

6

Eu concordo com Chris. Eu diria "Sim" também. Mas isso depende do seu mercado, conforme declarado acima. Se você está simplesmente criando alguns aplicativos básicos "disponíveis no mercado" ou ferramentas de escrita para ajudar no seu trabalho diário ... então a matemática não é tão importante.

A engenharia de soluções de software personalizadas requer muita solução de problemas e pensamento crítico. Habilidades que são definitivamente aprimoradas quando há formação em matemática. Eu me especializei em Matemática com meu diploma de Engenharia da Computação e dou crédito a toda a minha formação em matemática para explicar por que estou onde estou hoje.

Esses são meus 2 centavos, posso dizer pela leitura acima que muitos não concordariam. Encorajo todos a considerarem que não estou dizendo que você não pode ter essas habilidades sem um histórico de matemática, estou simplesmente afirmando que as habilidades são efeitos colaterais de ter esse histórico e podem impactar o software positivamente.


6

Na minha experiência, a matemática é necessária na programação, você não pode fugir dela. Toda a programação é baseada na matemática.

A questão não é preto e branco, mas mais colorida. A questão não é se você precisa ou não de matemática, mas de quanto. Os níveis mais elevados de matemática lhe darão mais ferramentas e abrirão sua mente para diferentes caminhos de pensamento.

Por exemplo, você pode programar se conhecer apenas adição e subtração. Quando a multiplicação é necessária, você terá que realizar muitas adições. A multiplicação simplifica adições repetitivas. A álgebra permite simplificar a matemática antes de implementá-la em programas. A Álgebra Linear fornece ferramentas para transformar imagens. A Álgebra Booleana fornece mecanismos para reduzir todas essas ifdeclarações.

E não se esqueça do irmão da matemática, da lógica e da filosofia. A lógica o ajudará a fazer um uso eficiente de declarações caseou switch. A filosofia ajudará você a entender o pensamento do cara que escreveu o código que você está modificando.

Sim, você não precisa de muita matemática para escrever programas. Alguns programas podem exigir mais matemática do que outros. Mais conhecimento de matemática lhe dará uma vantagem sobre aqueles que têm menos compreensão. Nestes tempos, as pessoas precisam de todas as vantagens possíveis para obter esses empregos.


6

Eu programo há 8 anos profissionalmente, e desde os 12 como hobby.

A matemática não é necessária, a lógica é. Mas a matemática ajuda muito, dizer que não é necessário é como dizer que, para matar um homem, não é preciso usar uma arma, você pode usar uma faca. Bem, é verdade, mas aquela arma torna tudo muito mais fácil.

Existem alguns requisitos mínimos, que você já deve atender. Você precisa conhecer as expressões e notações algébricas básicas e os equivalentes comuns do computador. Por exemplo, você precisa saber o que é um exponencial (3 à 3 é 27) e a expressão de computador comum é 3 ^ 3. As notações comuns para álgebra mudam entre as linguagens, mas muitas delas usam uma metodologia um tanto unificada. Outros (olhando para você LISP) não. Você também precisa saber a ordem das operações.

Você precisa entender o pensamento algorítmico. Primeiro isso, depois isso, produz o que é usado neste cálculo. Provavelmente, você entende isso ou não, e é um obstáculo bastante difícil de pular se você não entende; Descobri que isso é algo que você "entende", e não realmente algo que você pode aprender. Por outro lado, algumas pessoas não "entendem" a arte. Eles não deveriam se tornar pintores. Além disso, há alunos no currículo de ciência da computação que não conseguem descobrir por que isso não funciona: x = z + w; z = 3; y = 5; Não é que eles não entendam adição, é que eles não estão compreendendo a exigência do expresso inequívoco. Se eles entendem, o computador também deve entender, certo? Se você não consegue ver o que há de errado com as três linhas acima, não se torne um programador.

Por último, você precisa saber a matemática que está sob seu domínio de programação. O software de contabilidade pode parar na álgebra básica. Se você estiver programando física, precisará saber física (vagamente) e matemática em geometria tridimensional (euclidiana). Se você estiver programando software de arquitetura, precisará saber trigonometria.

Isso vai além da matemática; seja qual for o domínio para o qual você está programando, você precisa entender profundamente o básico. Se você for um software de análise de linguagem de programação, precisará saber probabilidade, estatística, teoria gramatical (várias linguagens), etc.

Muitas vezes, certos domínios precisam ou podem se beneficiar de um conhecimento que você acha que não está relacionado. Por exemplo, se você estava programando um software de áudio, você realmente precisa saber trigonometria para lidar com formas de onda.

A magnitude também muda as coisas. Se você está classificando um conjunto de dados financeiros de 1000 itens, não é grande coisa. Se fossem 10 milhões de registros, no entanto, você se beneficiaria muito em saber matemática vetorial na verdade e ter um conhecimento profundo de classificação no nível binário (como um sistema classifica em ordem alfabética? Como ele sabe que 'a' é menor que 'b '?)

Você descobrirá que, como programador, sua base de conhecimento geral vai explodir, porque cada projeto exigirá mais aprendizado fora da esfera direta da programação. Se você é melindroso ou preguiçoso em relação à autoaprendizagem e não gosta da ideia de gastar mais de 10 horas por semana essencialmente fazendo 'lição de casa', não se torne um programador.

Se gosta de exercícios de reflexão, se gosta de aprender, se consegue pensar em coisas abstratas como matemática sem calculadora ou design sem bloco de desenho, se tem gostos amplos na vida e hobbies, se é autocrítico e pode jogar fora ' ideias favoritas, se você gosta de aperfeiçoar as coisas, torne-se um programador. Não baseie esta decisão na matemática, mas sim na capacidade de pensar logicamente e aprender. Isso é o que é importante; matemática é apenas o subproduto.


5

Claro que depende do tipo de programador que você deseja ser, ou melhor, que tipo de programador seus empregadores desejam que você seja. Eu acho que cálculo e álgebra são essenciais, estatística e programação linear é realmente uma boa ferramenta para ter em sua pasta, talvez a análise (derivada, integrais, funções ...) pudesse ser feita sem. Mas se você quiser saber como as coisas funcionam superficialmente (eletrônica, por exemplo, ou alguns algoritmos não triviais), matemática "avançada" é algo que é melhor não ficar sem nada.


5

A maior parte da programação que fiz envolveu simulações de física para pesquisa, incluindo coisas como eletromagnetismo, mecânica quântica e mecânica estrutural. Uma vez que os domínios do problema têm matemática avançada associada a eles, eu teria dificuldade em resolvê-los sem usar matemática avançada.

Portanto, a resposta à sua pergunta é - depende do que você está tentando fazer.


5

Conhecimento matemático avançado é vital se você pretende escrever uma nova linguagem de programação. Ou você precisa escrever seus próprios algoritmos.

No entanto, para a maior parte da programação do dia-a-dia - de sites a aplicativos de processamento de seguros - apenas a matemática básica é necessária .


5

Alguém com uma sólida formação matemática (que não é meramente aritmética) ou lógica lidará bem com algoritmos, uso de variáveis, raciocínio condicional e estruturas de dados.

  • Nem todos podem criar uma IU.
  • Nem todos podem criar códigos eficientes.
  • Nem todos podem comentar e documentar com clareza.
  • Nem todos podem fazer um bom algoritmo

A matemática o ajudará até certo ponto, mas apenas até certo ponto.


5

Não acho que o conhecimento avançado de matemática seja um requisito para um bom programador, mas com base na experiência pessoal, acho que os programadores que têm um melhor domínio de matemática avançada também são melhores programadores. Isso pode ser simplesmente devido a uma mente mais lógica, ou uma perspectiva mais lógica devido às suas experiências de resolução de problemas matemáticos.


5

O conceito fundamental da matemática é o seguinte, concepção, compreensão, implementação e uso de algoritmos. Se você não pode fazer matemática, é porque você não pode fazer essas coisas, e se você não pode fazer essas coisas, então você não pode ser um programador eficaz.

Tarefas comuns de programação podem não precisar de nenhum conhecimento matemático específico (por exemplo, você provavelmente não precisará de álgebra vetorial e cálculo, a menos que esteja fazendo tarefas como gráficos 3D ou simulações de física, por exemplo), mas os conjuntos de habilidades subjacentes são idênticos e falta de habilidade em um domínio será correspondido por uma falta de habilidade correspondente no outro domínio.


5

Math é uma caixa de ferramentas para criar programas. Eu recomendo a Introdução aos Algoritmos de Cormen. Ele toca nas coisas mais "matemáticas".

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Não acho que matemática avançada seja um requisito para ser um bom programador - como sempre, depende do que você está codificando.

Claro, se você estiver na programação de gráficos 3D, precisará de matrizes e outras coisas. Como autor de software empresarial, você provavelmente precisará de matemática estatística.

Mas sendo um programador profissional por quase 10 anos (e mais 10 anos amador), "matemática avançada" não é algo que eu precise regularmente. Em cerca de 99,8% de todos os casos é apenas mais, menos, divisão e multiplicação em algumas combinações inteligentes - na maioria dos casos, trata-se de algoritmos, não de matemática.


4

Aprender matemática avançada, para a maioria dos programadores, é importante simplesmente porque dobra o cérebro para pensar logicamente, passo a passo, para ir de uma coisa a outra.

Muito poucos trabalhos de programação, entretanto, exigem algo além da matemática do ensino médio. Eu usei álgebra linear uma vez. Nunca usei cálculo. Eu uso álgebra todos os dias.


4

O conhecimento matemático é frequentemente útil para um programador, assim como a habilidade de design gráfico, habilidade de resolver quebra-cabeças, ética de trabalho e uma série de outras habilidades e características. Poucos programadores são bons em tudo o que um programador pode fazer. Eu não concordaria com qualquer declaração da forma "você não é um programador de verdade, a menos que possa { inserir habilidade de programação favorita aqui }".

Mas eu desconfiaria de um programador que não sabe fazer matemática. Mais do que de quem não sabia desenhar.


4

Acho que realmente depende do que você está tentando fazer, mas, IMHO, a teoria do CS e do SO são mais importantes do que matemática aqui, e você realmente precisa apenas da matemática que eles envolvem.

Por exemplo, há muito histórico de CS em teoria e otimização de agendamento que está por trás de muitos agendadores em sistemas operacionais modernos. Esse é um exemplo de algo que exigiria alguma matemática, embora não seja algo supercomplicado.

Mas, honestamente, para a maioria das coisas, você não precisa de matemática. O que você precisa é aprender a capacidade de pensar nas bases 2 e 16, como a capacidade de OR / AND mentalmente. Por exemplo, se você tem um byte e dentro desse byte há dois campos de 3 bits e 2 bits perdidos, saber quais bits estão em quais campos estão ativos quando o valor do byte é algo como 11 tornará as coisas um pouco mais rápidas do que ter que usar caneta e papel.


Você já estudou a teoria das filas? Você já estudou gerenciadores de memória e os modelos estatísticos que fazem os desenvolvedores escolherem um ou outro? Não discordo necessariamente do peso da sua resposta, mas sim da sua simplificação exagerada.
San Jacinto,

@San: Tenho certeza de que estou simplificando demais, mas acho que a maioria dos desenvolvedores de sistemas nunca precisa saber dessas coisas neste nível. Estudei no nível básico nos meus dois primeiros graus, e um pouco mais profundamente durante o meu Ph.D., mas nunca foi meu forte, prefiro deixar para os especialistas. O pessoal do sistema operacional que eu conhecia tinha habilidades matemáticas que me surpreenderam.
Uri,

o que eu acho muito válido. Acho que é necessário diferenciar a programação de sistemas da programação do sistema operacional. Conceitos fortemente entrelaçados, mas diferentes, no entanto.
San Jacinto,

4

Comecei a programar na mesma época em que entrei na aula de pré-álgebra. Portanto, não diria que matemática é tão importante, embora possa ajudar em certos tipos de programação, especialmente funcional.

Ainda não fiz Matemática Discreta, mas vejo muitas coisas teóricas com programação escrita em notação matemática ensinada nesta aula.

Além disso, certifique-se de saber como calcular qualquer coisa em qualquer base, especialmente as bases 2, 8 e 16.

Além disso, uma aula que realmente trouxe alguns conceitos para mim foi esta aula de pré-programação. Nós aprendemos sobre sindicatos, cruzamentos e todas aquelas coisas felizes e quase exatamente um paralelo com a matemática bit a bit. E cobrimos bastante a lógica booleana. O que considerei mais útil foi quando aprendemos como reduzir declarações booleanas complexas. Isso foi muito útil:

(x|y) & (x|z) & (x|foo)

pode ser simplificado para

x | (y & z & foo)

O que eu anteriormente não entendia direito.


4

Bem, você gerou uma série de respostas, e não, não li todas elas. Eu estou no meio disso, não, você certamente não precisa de matemática para ser um programador. Os drivers Assembler vs Device no Linux não são nem mais nem menos complicados do que os outros e nem requerem matemática.

De forma alguma você precisa fazer ou passar em uma aula de matemática para nada disso.

Concordo que a mentalidade de resolução de problemas para a programação é bastante semelhante à das soluções matemáticas e, como resultado, a matemática provavelmente vem facilmente. ou o contrário, se a matemática for difícil, a programação pode ser difícil. Uma aula ou um diploma ou qualquer pedaço de papel ou troféu não são necessários, sair e aprender coisas, com certeza.

Agora, se você não pode converter de hexadecimal para binário para decimal rapidamente, seja em sua cabeça, no papel ou usando uma calculadora, você terá dificuldades. Se você quiser entrar em rede e outras coisas que envolvem tempo, o que os drivers do kernel costumam fazer, mas não precisam. Você vai lutar. Eu conheço uma lista muito longa de pessoas com graduação em matemática e / ou ciência da computação e / ou graduação em engenharia que lutam com os cálculos de taxa, bits por segundo, bytes por segundo, quanta memória você precisa para fazer algo, etc. em certa medida, pode ser considerado algum tipo de habilidade que alguns têm e outros precisam trabalhar.

Meu ponto principal é que acredito na força de vontade. Se você quiser aprender essas coisas, pode e vai, é tão simples quanto isso. Você não precisa fazer aulas ou gastar muito dinheiro, linux e qemu, por exemplo, podem mantê-lo ocupado por algum tempo, diferentes idiomas de asm, etc. ambientes crashable para desenvolvimento de kernel, embutidos, etc. Você não está limitado a isso , mas não acredito que você tenha que sair correndo e fazer alguma aula se não quiser. Se você quiser ter certeza de fazer algumas aulas de ee, algumas aulas de cs e algumas aulas de matemática.


Isso não é isca de fogo, mas realidade. Tudo o que você precisa saber sobre eletrônica digital e engenharia de software do ponto de vista da programação pode ser resumido. 0, 1 e, ou, não. Essas cinco coisas são as quais a eletrônica digital e todos os programas operam. Você pode construir qualquer coisa com uma grande caixa de portas nand rápidas.
old_timer

4

Você precisa de matemática. A programação nada mais é do que matemática. Quaisquer descobertas da física teórica não se tornam uma implicação prática (aplicável), a menos que sejam explicadas em termos de soluções matemáticas. Nenhum deles pode ser resolvido computacionalmente se não puderem ser interpretados em computadores e, mais especificamente, em linguagens de programação. Diferentes linguagens são projetadas para resolver problemas específicos. Mas para o propósito geral e linguagens de programação amplamente difundidas como java, c, c ++ muitas das nossas tarefas de programação envolvem soluções repetitivas (contínuas) para os mesmos problemas, como extrair valores de banco de dados, arquivos de texto, colocá-los em janelas (desktop, web), manipular mesmos valores, às vezes acessando alguns dados de dispositivos semelhantes (mas com nomes de marcas diferentes, portas diferentes e uma dor de cabeça), etc., que não envolve mais do que um método unitário,


3

IMO, você provavelmente precisa de aptidão para matemática, sem necessariamente ter muito conhecimento na área. Portanto, as coisas de que você precisa para ser bom em matemática são semelhantes às coisas de que você precisa para ser bom em programação.

Mas, em geral, não consigo me lembrar da última vez que usei qualquer tipo de matemática avançada na programação do dia-a-dia, então não.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.