Primeiro: sou matemático - profissional (pois sou pago para fazer matemática). Eu não sou um programador. Eu faço alguma programação, mas definitivamente da variedade Cargo Cult (veja o primeiro comentário em https://tex.stackexchange.com/q/451/86 e minha resposta) e nada do tipo que normalmente me levaria a isso site (de fato, me registrei aqui para postar esta resposta depois de ver um link para ela na sala de bate-papo do TeX).
O resumo da minha resposta é: Matemática é Programação .
Recentemente, eu comecei a dar um curso de matemática para um grupo não-matemático de estudantes. Eles eram a seção de programação. Eu pensei que isso era fantástico! Por fim, eu seria capaz de ensinar matemática a pessoas que já entendiam as idéias básicas e que já tinham um conjunto de ferramentas rudimentares para fazer matemática. Fiquei incrivelmente desapontado quando perguntei quantos deles haviam realmente escrito um programa e obtive uma resposta entre 0 e 1.
Antes de prosseguir, devo esclarecer algumas coisas. Existem áreas da matemática que se preocupam diretamente com a programação e têm a ver com a avaliação de algoritmos e a classificação de linguagens e afins. Eu não estou falando sobre isso. Há também um programa que está tentando traduzir toda a matemática em uma linguagem formal que pode ser avaliada por um computador. Isso é um pouco mais próximo do que estou falando, mas, mesmo assim, focar nisso perderia a parte principal do que estou tentando dizer. A matemática que eu faço e a programação que eu faço não têm quase nenhuma relação com o tópico. A conexão entre eles está em um nível diferente.
Onde eu gostaria de começar é com o comentário sobre a questão principal:
Se isso é matemática, toda atividade humana é uma forma de matemática. Se for esse o caso, a palavra matemática não tem um significado útil, porque não pode ser usada para distinguir uma atividade de outra.
Sim, isso é matemática. Mas "matemática" ainda é uma palavra útil porque, como diz a música, "não é o que você faz, é o jeito que você faz". Eu diria que estou fazendo matemática quando estou abordando algo de uma maneira matemática . Às vezes, isso é matemática do "núcleo duro": formular definições, provar teoremas. Às vezes não é. Às vezes, está escrevendo pequenos programas tolos para que meus filhos aprendam suas palavras de ortografia.
É com isso que a matemática me ajuda quando programa:
Abstração Esta é provavelmente a habilidade transferível mais importante da matemática. Com isso, quero dizer a capacidade de remover todas as coisas desnecessárias e focar nas propriedades importantes.
Perspectiva Se eu pudesse escolher apenas uma coisa que todos os meus alunos deveriam aprender, seria isso: a capacidade de mudar o ponto de vista de acordo com o problema. Geralmente, tratamos isso em álgebra linear com fórmulas de mudança de base (que levam a matrizes horrendas e complicações horrendas), mas é muito mais aplicável do que isso. No fundo, é a ideia de que apenas porque algo lhe foi apresentado de uma maneira, não precisa ser a maneira como você trabalha com ele. Isso separa a visão da coisa em si da maneira como ela foi apresentada. Isso pode ser extremamente prático: trata-se de tornar algo útil ou eficiente. Se eu tiver uma lista de vetores e for mais eficiente armazená-los como uma lista de coordenadas xe uma lista de coordenadas y, que assim seja .
Forma versus Função Liderando acima; se uma coisa pode ser apresentada de muitas maneiras diferentes, não é mais justo dizer que uma apresentação em particular é a coisa. Para citar essa música novamente: "Não é o que você é, é o que você faz " que importa.
Eu poderia continuar, mas esses são os que vêm à mente.
Agora, provavelmente há muitas reações (negativas) ao que escrevi até agora. Um deles será "Isso não é matemática, é apenas bom senso". (ou mau senso) a que me refiro à minha observação acima, concordando com o sentimento de que "toda atividade humana é uma forma de matemática". Outro será "Esse não é o tipo de matemática que se quer dizer na pergunta". Isso quase certamente é verdade e aqui eu realmente tenho muito mais simpatia com a pessoa que disse: "Pelo menos eu não toquei na matemática há dez anos". Ele ou ela está errado, é claro, eles fazem matemática há 10 anos, porque sempre que escreviam um programa estavam fazendo matemática . Eles simplesmente não perceberam.
Na verdade, eu uso algumas "matemáticas reais" em meus programas. Recentemente, codifiquei um divertido explorador de formas em 3D que envolvia o uso de matemática para descobrir as projeções e outras transformações que eu tinha que aplicar aos meus dados. Fiquei levemente divertido ao me ver realmente codificando quaternions! Mas é claro que a matemática envolvida era trivial em comparação com a matemática que eu faço quando estou trabalhando. Era coisa de "envelope". Esse tipo de matemática, então eu concordo com o sentimento de que você apanha quando precisa, e se precisar de algo mais complicado do que pode encontrar na Wikipedia, encontrará um matemático real para fazer isso por você. No entanto, para que você possa buscá-lo quando precisar, precisará aprender algo. Essa coisa pode não ser algo que você realmente usa, mas aprender que algo facilita ainda mais o que você realmente usa mais tarde na vida. Portanto, este é o lugar onde eu discordo com Coder: você precisa aprender algumas matemática, se você está indo cada vez para usar quaisquer matemática e você precisa aprender a partir do lado matemático (o que não significa teoremas provam, por sinal).
E, finalmente, para o "Mathematics is Programming". Você pode aprender todas essas coisas sendo um bom programador. E se você aprendeu essas coisas, encontrará a matemática muito mais fácil porque entenderá que quando falamos de um vetor em um espaço vetorial, é apenas uma instância da classe, o Vector
que significa que podemos fazer tudo o que Vector
faz para nessa instância: adicione, subtraia, dimensione e assim por diante. É por isso que eu adoraria ensinar matemática aos programadores. Mas, falando como matemático, eu diria que o primeirodestes, "Abstração", é mais fácil aprender em matemática do que em programação, porque a matemática é a busca da abstração. Sempre que vemos algum comportamento, nosso treinamento é sempre perguntar: "O que há nessa coisa que faz com que ela se comporte dessa maneira? E se eu pegasse outra coisa que fosse semelhante, ela se comportaria da mesma maneira? Quanto do que essa coisa teria que perder para que parasse de se comportar assim? " (Levar isso ao extremo leva a "matemática centopéia" - procure o termo). Mas não fazemos isso com (apenas) objetos do "mundo real" (sejam eles quais forem), fazemos com coisas que já foram abstraídas.
Isso já durou o suficiente, então deixe-me concluir com uma das piadas matemáticas clássicas:
Um matemático e um físico participaram de um seminário sobre algum novo modelo envolvendo espaço 24 dimensional. Depois, eles discutiram e o físico observou: "Isso foi realmente difícil. Quero dizer, como alguém visualiza o espaço 24-dimensional?" ao qual o matemático respondeu: "Oh, é fácil. Apenas visualize o espaço n-dimensional e defina n = 24".
Adicionado 2012-03-2
Houve alguns comentários sobre esta resposta expressando uma variedade de pontos de vista. Agora, eles foram excluídos por um moderador, por entender que eu tentaria incorporá-los (ou responder a eles) na minha resposta.
No entanto, não tenho certeza de que posso. Lendo esses comentários e o restante do conteúdo desta página, só posso concluir que há um enorme mal-entendido sobre o que realmente é a matemática. Além disso, não me sinto competente o suficiente para explicar isso. Felizmente, alguém já se vinculou ao Lamento de Lockhart, por isso vou adiar a explicação para isso. Embora eu possa ter dito de outra maneira (como cresci em um ambiente científico, enfatizaria mais a natureza experimental da matemática), não acho que poderia colocá-lo melhor .
Ainda acho que posso adicionar algo. Assim como os mal-entendidos sobre o que é matemática , também existem mal-entendidos sobre o que significa "fazer matemática". Eu vejo duas posições quase contraditórias:
Matemática é sobre equações e fórmulas. Portanto, não há necessidade de estudá-lo porque a Wikipedia existe (isso é quase o contrário do desafio apócrifo de Euler a Diderot ).
A matemática trata de teoremas e definições. Portanto, não há necessidade de estudá-lo, pois os programas nunca provam nada (que é uma falácia tão completa quanto ... insira falácia favorita aqui).
Enquanto as duas posições se contradizem, elas terminam no mesmo lugar: não faz sentido um programador aprender matemática - e certamente não de um matemático! Afinal, o que eles sabem sobre alguma coisa? Qualquer coisa que um programador realmente precise saber pode ser encontrada na Wikipedia ou usada por outra pessoa.
Acima, eu me descrevi como um programador de cultos de carga. Aposto que a maioria de vocês deu uma risadinha particular e pensou: "Ah, sim, aposto que sei como são os seus programas então". Você provavelmente se sentiu um pouco convencido e superior (embora eu tenha certeza de que se sentiu mal por sentir-se convencido e superior).
O que eu descrevi logo acima é Cargo Cult Mathematics.
Então, quando digo que você deveria aprender um pouco de matemática para entender como ela funciona, estou dizendo exatamente pelo mesmo motivo que você faria se visse um pouco do código que eu havia escrito: "Quanto mais fácil sua vida seria se você parasse o código de recortar e colar do StackOverflow e aprendesse um pouco sobre como fazê-lo corretamente. ".
O mais importante, porém, é que você deve aprender com os matemáticos. Por quê então? Aqui está uma analogia. A linguagem que eu mais gosto é o TeX. (Diz tudo, sério!). Agora, suponha que eu queira aprender um pouco mais sobre o TeX e acontece que Don Knuth está na cidade e se ofereceu para dar alguns tutoriais sobre o TeX. Ou eu poderia apenas ler sobre isso na Wikipedia. Ou talvez seja Perl e Larry Wall, ou C # (esse é o correto?) E Jon Skeet. Pode ser que essas pessoas não sejam os melhores professores , mas certamente compensam isso na quantidade que sabem!
E é isso que os matemáticos são. Somos as pessoas que escrevem o idioma real e depois escrevemos as bibliotecas que você usa. Obviamente, você não precisa saber como provar um teorema - não vai escrever uma biblioteca! Mas se você souber um pouco sobre como pensamos, isso poderá ajudá-lo a entender por que escrevemos a biblioteca da maneira como escrevemos e se você entender que isso pode ajudá-lo a fazer melhor uso dela.
Há um meio termo entre procurar equações na Wikipedia e provar a conjectura de Poincaré, assim como - para se referir ao lamento de Lockhart - há um meio termo entre "eu não sei muito sobre arte, mas sei do que gosto" e sendo Monet, e entre "Onde está a chave 'QUALQUER'?" e sendo Don Knuth. Se você ainda está na universidade, tem uma oportunidade incrível de aprender com pessoas que são especialistas em sua área e que - por alguma razão - estão dispostas a gastar seu tempo explicando isso para você.
O outro ponto que eu queria expandir um pouco foi por que, como programador, você não deveria ter medo de aprender um pouco mais de matemática. Não são as conexões profundas, nem a utilidade. É que sua capacidade de programar um computador pode ajudá-lo diretamente a aprender matemática. Eu só quero mencionar alguns.
Compreendendo variáveis. Muitas pessoas ficam confusas com declarações simples como "Seja n um número natural ...". Ou "Deixe epsilon> 0". Há lugares na matemática em que é importante lembrar o escopo de uma variável. Tudo isso é comum na programação. Aprenda a traduzir uma declaração matemática em um programa e você achará muito mais fácil acompanhar o que é o quê.
A natureza da prova. Se você já escreveu um teste ou escreveu um programa para ser usado por outra pessoa, entende o núcleo das provas. Ao fazer isso, você deve saber que, independentemente do que o usuário colocar, poderá lidar com isso (insira a referência obrigatória do xkcd aqui). Isso é tudo que uma prova é! Uma demonstração de que, independentemente do que o "usuário / universo" coloque, a declaração será válida. Os experimentalistas se inclinam para o "Se funcionar em circunstâncias normais, é verdade", mas os programadores sabem que sempre existe aquele garoto que tentará Alt + G + Shift + ÅØÆ apenas para ver o que acontece.
SECO. Desculpe quebrar isso para você, mas nós a inventamos, não você. Estamos "não nos repetindo" há milênios. É por isso que tenho uma cópia dos elementos de Euclides em minhas prateleiras e ainda é útil .
E tem mais. Se eu soubesse um pouco mais sobre programação, escreveria um livro chamado "Matemática para programadores", onde o objetivo não era ensinar "A matemática que os programadores devem saber", mas "matemática que todos deveriam saber, mas otimizada para programadores". . Mas provavelmente nunca saberei o suficiente sobre programação para escrevê-lo - a menos que alguém se ofereça para colaborar comigo!
Vou deixar lá. Provavelmente, se eu pensasse mais, mudaria o que escrevi; espero que eu explique melhor. Dentro de alguns meses, posso até discordar de algumas partes. Se alguém desejar discutir mais ou comentar de outra forma, provavelmente é melhor não fazer isso nos comentários aqui. Você sabe onde me encontrar .