Atualmente, sou programador, tenho quase 16 anos e reduzi minhas carreiras para algo que envolva um diploma em Ciência da Computação ou Engenharia Elétrica (eu sei que eles são bem diferentes, mas essa pergunta é sobre meu amigo), mas meu amigo não tem tanta certeza.
Ele está muito interessado em matemática e é muito bom nisso, e acho que ele gostaria de programar, mas não está disposto a tentar ( editar, ele está disposto a tentar, mas nunca o fez antes). Alguém pode me dar uma sugestão para uma linguagem ou ferramenta que ele possa usar na programação (em um nível razoavelmente básico, eu assumo) para resolver problemas de matemática ou envolver algum tipo de matemática.
Como eu digo, ele gosta muito de matemática, mas acho que ele gostaria de programar, o problema é que não quero que ele se deixe levar por coisas que não são relevantes nos níveis introdutórios, como alocação de memória et al. Eu sei que isso é muito importante, mas o ponto é que eu quero que ele aprenda um pouco de programação com matemática, então, se estiver interessado o suficiente, pode começar a aprender programação como programação.
Edit: Não é que ele esteja completamente desinteressado - mais do que ele não tenha explorado ativamente a área antes, talvez porque não esteja informado sobre isso. Eu não gostaria de forçá-lo a fazer algo que ele não quer; vejo isso como um pequeno empurrão para que ele possa aprender sobre programação. Se ele não gostar - é justo, eu não posso controlar isso e não quero, mas se ele se divertir - esse empurrão será a coisa certa.
Respostas:
Se você quer uma linguagem "matemática", Haskell é seu melhor amigo (para seu melhor amigo). Você pode facilmente criar novas funções sem problemas. É a melhor recomendação de idioma que posso oferecer a você, amigo. Aqui estão alguns links:
Mathematica
O Mathematica de Wolfram é outro interesse que ele pode ter.
Embora seja caro, vale a pena. Aqui estão alguns links:
Algoritmos
Os algoritmos são importantes para qualquer programa, mas seu amigo deve começar com eles quando se sentir confortável com um idioma. Aqui estão mais alguns links:
Espero que isto ajude! Se você tiver alguma dúvida ou feedback, sinta-se à vontade para comentar! A propósito, todos esses links são para liberar recursos. Se você quer um livro impresso, tenho algumas recomendações, deixe um comentário!
fonte
x = x + 1
ridículo.Programação funcional e linguagens na família ML ou Haskell tendem a se encaixar muito bem na mente dos matemáticos.
fonte
Se ele se especializa em matemática, ele sem dúvida acabará fazendo um pouco de programação, se não em linguagens de baixo nível como C ++, então em um nível superior, específico de matemática, linguagens como Maple ou Mathematica, dependendo do que está fazendo.
Além disso, dependendo de sua área de pesquisa, ele pode acabar fazendo matemática aplicada ou análise estática, os quais exigirão uma quantidade significativa de programação. É melhor ele se acostumar à programação agora, independentemente do que ele decidir.
fonte
Ensine-o Haskell. É uma linguagem em que você pode pensar como na matemática:
Eu sugiro que você mostre a ele http://learnyouahaskell.com , um dos melhores tutoriais para Haskell.
fonte
Como alguém que estudou matemática (eu tenho um bacharelado em matemática pura e acabei de receber meu MS em Matemática Aplicada / Estatística) e depois percebi a diversão / praticidade / importância da programação ao longo da minha carreira, eu realmente aprecio essa pergunta. Eu gostaria de ter um amigo como você há 10 anos para me empurrar para a programação.
Você deve verificar o Project Euler . O que é isso?
Embora não seja uma sugestão específica da linguagem, seria um grande motivador para começar a programar (especialmente se já houver interesse em matemática). Os problemas começam muito fáceis e acessíveis, mas rapidamente se tornam muito difíceis e / ou difíceis. Um bom desafio e motivação que vocês provavelmente irão gostar.
Quanto à linguagem a ser usada, tenho experiência com C ++, R, Matlab e Mathematica, que são excelentes e amplamente utilizados na comunidade matemática. Mas, mais especificamente, sugiro fortemente o aprendizado de Python, que é muito útil para a matemática, mas não é tão restrito à matemática quanto alguns outros (caso ele queira mais opções posteriormente na vida). É fácil começar a usar o Python, mas há muito o que aprender. Também é gratuito, diferente de alguns outros. O C ++ também pode ser uma boa escolha, mas pode ter mais obstáculos desde o início.
fonte
Para os matemáticos, a maior excitação é o algoritmo. Seu amigo deve começar a implementá-los em Python (é amigável).
Ambientes de computação numérica como o MATLAB serão úteis para manipulação de matrizes, plotagem de funções e dados, implementação de algoritmos.
fonte
Depende da área de matemática em que ele está interessado.
Se ele gosta mais de Álgebra Abstrata ou Combinatória, provavelmente gostaria de Haskell, pois o sistema complexo de tipos permite a programação direta de uma variedade de matemáticas. ATS também pode ser uma opção.
Eu recomendaria Learn You a Haskell for Great Great para um tutorial de introdução e estruturas de dados puramente funcionais para Algoritmos.
Se ele gosta mais de análise matricial, equações diferenciais ou sistemas dinâmicos, recomendo Matlab , NumPy ou Octave . APL é via Dyalog também pode ser interessante; embora eu não o iniciasse nisso. Receitas Numéricas , enquanto em C ++, podem ser adaptadas para servir como um bom guia para algoritmos.
Se ele quer fazer Estatística, então R é a escolha natural.
fonte
Sou estudante de graduação em matemática e fiz minha graduação em ciência da computação. Eu mantenho um blog chamado Math ∩ Programming no qual exploro aplicações da matemática na programação (e vice-versa), e tenho que admitir que acho a maioria dos aspectos menos matemáticos da ciência da computação bastante secos e sem inspiração (basicamente, minha oposição a todos os hacks ridículos que entram na programação de sistemas na minha experiência na indústria).
Por outro lado, no meu blog, analiso problemas como reconhecimento facial (um pouco de álgebra linear), métodos de criptografia, máquinas de Turing e autômatos celulares, modelos para prever a atividade de serial killers, mecanismos de busca e vários outros conceitos matemáticos . A melhor parte é que eu consigo implementar as idéias, e todas as minhas!
Para fazer com que seu amigo goste de programar como todos nós, ache-o realmente interessanteprojeto. O aspecto da programação não ficará sem ele trabalhar em direção a um produto que ele considera bonito. Quanto aos idiomas, recomendo o Mathematica, o Racket (um derivado do Scheme muito amigável, mas ainda poderoso), o Python e o Haskell. O Mathematica é provavelmente o melhor, porque ele pode implementar seletivamente suas próprias funções matemáticas e usar as bibliotecas incorporadas do Mathematica para concluir o projeto (por exemplo, escreva uma função que calcule os coeficientes de Fourier e use o Mathematica para o restante da análise, como como filtragem, geração de imagens etc.). Até os tópicos básicos como integração oferecem alguns projetos fascinantes (regras de quadratura diferentes, integração monte carlo, uma transição suave para o aprendizado de máquina com grandes conjuntos de dados).
Além disso, parece que muitas das respostas aqui são de pessoas que não praticam matemática ou que não usaram as linguagens sugeridas para fazer software matemático. A razão pela qual as pessoas recomendam Haskell é porque é o mais próximo possível de uma implementação literal da teoria das categorias e se encaixa bem com algumas definições matemáticas de alguns conceitos básicos. Mas se o seu amigo tem quase a sua idade, ele não está pronto para a teoria das categorias matematicamente (essa maturidade é mais ou menos inútil até a faculdade, e muito difícil de ensinar a si mesmo) e, como primeira língua, Haskell é o mais inclinado.curva de aprendizado das línguas sugeridas (talvez o Prolog seja mais íngreme). Eu usei Haskell para implementar um compilador Javascript e acabei com um belo e elegante código, mas para coisas intuitivas como mutação variável, você já precisa se envolver em mônadas não triviais.
Python e Mathematica serão muito mais amigáveis, e o Mathematica tem a curva de aprendizado mais superficial simplesmente porque todas as bibliotecas são empacotadas em uma ótima interface de usuário com documentação incrível (basta pressionar F1!). Por outro lado, há um livro que ouvi (mas não li) que fornece uma transição para a matemática avançada e uma introdução a Haskell simultaneamente . Parece ter avaliações positivas da Amazon, então você pode querer dar uma olhada. Ele pode mudar para linguagens como C # e Java se quiser fazer coisas da indústria, mas é mais provável que ele nunca precise entrar nessa selva (e muita coisa da matemática da indústria é pura Matlab).
Mas, como eu disse, com o projeto certo, aprender o idioma se torna uma alegria, qualquer que seja o projeto.
fonte
Se seu amigo gosta de lógica formal e acha interessante a Inteligência Artificial, ele pode dar uma olhada no Prolog .
Com esse idioma, você declara seus predicados (suposições iniciais, "fatos") e regras de inferência ("relações") e depois faz perguntas.
O Prolog dispara e descobre se a pergunta pode ser respondida usando apenas os fatos e as relações fornecidas e, nesse caso, indica a resposta.
Então você diz que "tom é um gato" e "todos os gatos são animais" e pergunta "é tom um animal?" e você obterá a resposta "verdadeira".
Ou você pode pedir para "listar todos os animais que você conhece" e você obterá a lista de itens únicos "tom".
Claro que a sintaxe é um pouco mais complicada do que isso, mas você entende a ideia geral.
fonte
A melhor maneira de incentivar seu amigo a tentar fazer isso é fazê-lo começar a programar sem pensar muito no fato de ele estar programando.
Quando ele estiver pronto para lidar mais com a "programação", você poderá começar com o mesmo livro e aprender programação a partir de uma base mais matemática. Dois dos meus livros favoritos atuais são:
"Estrutura e interpretação de programas de computador" SICP (Abelson / Sussman)
"Land of Lisp: Aprenda a programar no Lisp, um jogo de cada vez!" (Barski) , ensina programação através de exercícios de programação de jogos.
O SICP pode ser visto livremente no site da MIT Press .
Se o seu amigo é matematicamente inclinado, o Lisp não apresentará nenhuma dificuldade e liberará você de ter que aprender qualquer sintaxe especial. Acho que Lisp é mais fácil de aprender do que Haskell.
fonte
Concordo com Haskell, mas, do ponto de vista prático, ele também deve aprender um idioma em uma máquina abstrata amplamente usada. Quero dizer uma linguagem JVM ou .NET, é claro.
Existem idiomas nessas plataformas que são um pouco mais interessantes do que os idiomas principais. Na JVM, dê uma olhada em Clojure e Scala. Na plataforma .NET, dê uma olhada no F #.
Havia também uma linguagem .NET da Microsoft Research chamada c-omega que era muito interessante, mas era apenas um projeto de pesquisa.
fonte
O Matlab é comumente usado para programação matemática e científica. É uma linguagem baseada em script, não é difícil de aprender e todos os problemas de memória estão ocultos do usuário.
Engenharia de Software e Engenharia Elétrica podem ser combinadas em Engenharia de Computação.
fonte
Se seu amigo não estiver disposto a tentar programar, não vejo por que você deseja forçar o problema. Eu acho que a chave para ser um programador é estar disposto a aprender, e se ele não estiver disposto a aprender, provavelmente a programação não é para ele
Mas, dito isso, sua melhor aposta pode ser criar um pequeno programa e mostrar a ele. Talvez deixe algumas partes inacabadas e veja se você pode interessá-lo em ajudá-lo a terminar. Sei por mim que os algoritmos e a lógica por trás de um programa são muito mais interessantes do que escrever a sintaxe, então talvez tente ajudá-lo com a lógica do programa e depois codifique a coisa e deixe-o ver o resultados disso.
Se ele mostrar algum interesse no código fonte, mostre a ele como escrever suas próprias coisas. Pessoalmente, acho que o idioma em si não importa, desde que seja fácil de aprender e tenha muita documentação.
fonte
Existe toda uma biblioteca matemática gratuita e comunidade construídas em torno do Python. Eu começaria com "Sage", ele realmente deveria gostar de usá-lo e aprenderá a programação em Python por acaso.
fonte
Eu acho que você deve mostrar ao seu amigo algumas variantes diferentes, como:
Eu acho que C e LISP são bons pontos de partida, mostrando que idiomas diferentes podem ser mais adequados para tarefas diferentes. Não acredito em usar Haskell ou Erlang para tudo.
O código da máquina (ou montador) para um processador simples também pode ser interessante. Sempre fiquei feliz por começar com o código da máquina no meu primeiro C64 . ( MOS 6510 ) Experiência prática difícil de obter quando adulto com tempo limitado para "desperdiçar".
fonte
Para mim, a programação começa por querer "fazer alguma coisa", um "e se?" questão:
"Gostaria de criar meu próprio site", então aprenda sobre HTML etc.
"Detesto ter que clicar no X ou ver Y neste site toda vez que o visito. Não existe uma maneira de automatizar isso?" Então você aprende sobre bookmarklets ou como escrever extensões de navegador.
"Quero catalogar todas as minhas músicas e nenhuma das ferramentas que vi fazem da maneira que quero", para que você aprenda sobre bancos de dados.
"Quero acompanhar as despesas do meu Clube de Matemática", para aprender sobre planilhas, macros de programação ou talvez até bancos de dados.
Para que a unidade realmente esteja lá, o problema subjacente tem que vir dele . Eu tentaria encontrar um problema que ele quisesse resolver e depois escolheria uma ferramenta / linguagem / sistema que lhe permitisse automatizar / programar a solução.
fonte
Haskell e Mathematica são o caminho a percorrer, na minha opinião. A maioria das linguagens funcionais também é boa para matemática. Python também é bom, confira a documentação matemática .
fonte