Um dos mais famosos Edsger Dijkstra As citações são de sua palestra do prêmio Turing de 1972, Como podemos dizer verdades que podem machucar?
Além de uma inclinação matemática, o, um domínio excepcionalmente bom da língua nativa é o ativo mais importante de um programador competente.
Observe que ele diz especificamente língua nativa, não inglês. O que me faz pensar por que todos os escritos mais importantes de Dijkstra estavam em inglês, e não em seu holandês nativo.
Mas estou divagando. Vamos considerar a primeira parte da citação de Dijkstra. Os programadores competentes devem ser “matematicamente inclinados”? Pode ser instrutivo pensar na programação como uma forma de matemática, pelo menos por um motivo: resistir à localização. Embora tenha havido tentativas de criar linguagens de programação localizadasAté onde eu sei, ninguém jamais tentou localizar o ¬¬ ou o número 3. Eles são universais. Portanto, nesse sentido, as linguagens de programação têm uma vaga e passageira semelhança com a matemática. O senhor aprende os símbolos uma vez e os usa em qualquer lugar do mundo, não importa qual seja sua língua nativa.
Por outro lado, não encontrei na prática que os programadores precisam ser matematicamente inclinados para se tornarem grandes desenvolvedores de software. Na verdade, é exatamente o contrário. Isso depende muito do tipo de código que o senhor está escrevendo, mas a grande maioria dos códigos que Eu visto consiste principalmente em matemática do tipo “equilibrar seu talão de cheques”, nada remotamente parecido com o que o senhor encontraria em um livro didático de cálculo universitário comum.
{ i = j++ / (x + v); }
Não é exatamente o material de que são feitos os matemáticos.
Nunca entendi o desejo de equiparar formalmente a habilidade em matemática com a habilidade em programação. Embora ser um especialista em matemática certamente não prejudica Como programador, é muito difícil para mim traçar uma linha direta entre “bom em matemática” e “bom em programação”. Assim como Rory, acredito que o o desenvolvimento de software requer algumas sensibilidades marcadamente do lado direito do cérebro.
Quando eu estava crescendo, lembro-me de ouvir as pessoas dizerem coisas como: “Se o senhor gosta de programação de computadores, então vai adorar matemática”. Sempre achei que essas pessoas eram completamente loucas. Embora haja algo intrinsecamente semelhante em certos tipos de matemática e programação de computadores, as duas são diferentes em muito mais aspectos do que são semelhantes.
Com a matemática, e não estou falando da filosofia matemática maluca da teoria dos números “Os números realmente existem?”, mas com as coisas aplicadas, há respostas corretas. Ou o senhor está correto ou está incorreto.
Com a codificação, o melhor que o senhor pode esperar é fazer algo bem feito. Com tantas maneiras diferentes de obter um único resultado, cabe a alguns cérebros muito diretos determinar se o objetivo foi alcançado, pois não há ninguém (exceto [another more experienced developer]) que possa lhe dizer se o senhor está certo ou não.
Se o senhor ignorar o cérebro direito, e estou falando em geral sobre abstração e estética, poderá criar um código que talvez funcione, mas que também pode ser um pesadelo de manutenção. Se se concentrar apenas no cérebro direito, poderá ter algo que funcione, mas que seja tão ineficiente e personalizado que o senhor seja a única pessoa na Terra capaz de entender o código e mantê-lo.
Deixando todas essas ressalvas de lado, as pessoas ainda defendem a ideia de que a matemática por si só tem o poder de torná-lo um programador melhor. Steve Yegge faz o melhor caso que já li sobre o programador-matemático, com seus cinco pontos:
- A matemática é muito mais fácil de aprender depois que o senhor sabe programar. Na verdade, se o senhor for um programador minimamente decente, verá que é quase instantâneo.
- Eles ensinam matemática de forma errada na escola. Muito, MUITO errado. Se o senhor se ensinar matemática da maneira correta, aprenderá mais rápido, lembrará por mais tempo e terá muito mais valor como programador.
- Saber até mesmo um pouco dos tipos certos de matemática pode permitir que o senhor escreva alguns programas bastante interessantes que, de outra forma, seriam muito difíceis. Em outras palavras, a matemática é algo que o senhor pode aprender um pouco de cada vez, sempre que tiver tempo livre.
- Ninguém conhece toda a matemática, nem mesmo os melhores matemáticos. O campo está em constante expansão, pois as pessoas inventam novos formalismos para resolver seus próprios problemas. E em qualquer problema matemático, assim como na programação, há mais de uma maneira de resolvê-lo. O senhor pode escolher a que mais lhe agrada. O senhor pode escolher a que mais lhe agrada.
- A matemática é… hummm, por favor, não diga a ninguém que eu disse isso; nunca mais serei convidado para outra festa enquanto eu viver. Mas matemática, bem… É melhor eu sussurrar isso, então ouça: (na verdade, é bem divertido).
Para mim, isso parece uma receita ampla para se tornar intelectualmente curioso e desenvolver habilidades para resolver problemas abstratos. Habilidades de programação importantes, com certeza, mas não necessariamente exclusivas do estudo da matemática. Se a matemática for sua forma preferida de afiar sua serraentão faça isso – mas dificilmente é o apenas caminho.
Recebi recentemente este e-mail:
Dirijo uma pequena loja de desenvolvimento web (4 pessoas) e estou descobrindo que os programadores mais jovens não tiveram o prazer de escrever em assembler ou gerenciar sem funções de biblioteca. Sempre achei que habilidades matemáticas sólidas são uma das habilidades mais úteis para a codificação e, quando se tem o Google e uma enorme biblioteca de funções, não é preciso ser bom em matemática para fazer as coisas funcionarem, até que elas quebrem, tenham casos extremos ou apresentem erros no sistema operacional ou na biblioteca.
Alguns exemplos rápidos: simplificação de equações complicadas para determinar índices de matriz ou deslocamentos de memória; trigonometria para ajudar em cálculos físicos; conversão mental de hex/bin/dec; igualdades lógicas, como o teorema de DeMorgan.
Ele tem a ideia certa; se vamos falar sobre matemática, vamos sair do abstrato e ir para o específico. Vamos falar de detalhes. Exemplos. O que poderia ser mais matemático do que isso?
Que código o senhor já escreveu pessoalmente em que um conhecimento detalhado de matemática facilitou seu trabalho? Posso pensar em algumas categorias amplas. Escrever um jogo em 3D. Ou uma simulação de física. Ou filtros de imagem de baixo nível. Ou algoritmos de compressão. A lista é infinita. Mas se estiver nessas situações, o senhor saberá.
Talvez eu seja um otimista sem esperança, mas acho que a maioria dos programadores é inteligente o suficiente para aprender qualquer matemática de que precisem bem a tempo para atacar o problema em questão.