Qual idioma devo aprender para a ciência da computação?

11

Sou totalmente novo na noção de ciência da computação e estou procurando um bom ponto de partida.

Entendo que não existe uma linguagem objetivamente melhor, mas gostaria de aprender uma linguagem que tenha uma presença indiscutivelmente forte e proeminente em relação à ciência da computação - uma considerada com capacidade e eficiência excepcionais.

Para começar, eu estava inclinado a modelagem relacionada a ligações e interações de átomos, com um requisito para representações / simulações gráficas.

Algumas línguas tendem a ser melhores para alguns campos do que outros (por exemplo, física versus matemática pura)? Ou a escolha de um idioma é baseada em outros fatores?

Eu ouvi o nome Fortran sendo jogado muito por aí.

Sugestões?

user1299028
fonte
1
C ++ e Fortran são linguagens bem conhecidas na comunidade. Recentemente, você pode ver um aumento no uso de linguagens dinâmicas. Muitas vezes você escolhe sua biblioteca e não seu idioma.
precisa saber é o seguinte
9
Lembro-me do ditado de que os programadores reais podem escrever o Fortran em qualquer idioma.
hardmath
1
Aqui está uma pergunta muito semelhante com muitas respostas: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík
1
"Entendo que não há uma linguagem objetivamente melhor" - precisamente, então por que não aprender a ser independente da linguagem, para que você possa escrever em qualquer linguagem que seja usada para você?
JM
2
Você tem que dominar o inglês. Sem ele, você não chegará a lugar algum na Ciência da Computação.
Johannes

Respostas:

15

Principalmente, tudo se resume às bibliotecas numéricas disponíveis, que ajudarão a realizar sua tarefa. O C / C ++ possui um grande número de bibliotecas numéricas implementadas para eles, mas o fato de serem linguagens de baixo nível não é o melhor para prototipar algo rapidamente.

Eu acho que para avançar rapidamente em direção a uma solução, eu recomendaria o uso de algo como Matlab ou Mathematica. Eles têm um conjunto de ferramentas grande e são de nível muito alto. Provavelmente, sua implementação não será dimensionada para uso em produção, mas pode ser um bom cenário para experimentar métodos diferentes. Depois de conhecer um caminho a seguir, você sempre pode implementar algo em C / C ++ com mais eficiência.

akg
fonte
4
Muitas pessoas - dentro e fora da academia - não confiam realmente no código, a menos que ele tenha pelo menos algum conjunto mínimo de testes automatizados. Não sei como são as ferramentas para essas coisas no matlab e no mathematica, mas existem vários pacotes interessantes para linguagens mais populares, como Python e C ++.
precisa saber é o seguinte
3
O MATLAB possui o MATLAB xUnit, mas o Python e o C ++ têm mais (e, na minha opinião, melhores) suítes de testes.
Geoff Oxberry
24

Pitão!

  1. Comece diretamente usando a biblioteca numpy , pequenos scripts e o shell interativo ipython .
  2. Fique mais avançado com a ajuda de vários livros e tutoriais gratuitos .
  3. Torne-se mais produtivo usando o scipy como um front-end para rotinas numéricas de alto desempenho e matplotlib para visualização
  4. Aproveite os módulos bem desenvolvidos e poderosos para computação científica como Krypy , FeNiCS e muitos outros
  5. Observe que a transição suave entre programação plana e orientada a objetos e a modularidade inerente do Python facilitam o gerenciamento de projetos maiores.
  6. Torne seu código o mais rápido que C ou Fortran, simplesmente reescrevendo partes críticas em cython . Você também pode facilmente incluir rotinas escritas em Fortran ou C .

Isso parafraseia o que eu acho que é a melhor maneira de abordar um problema na computação científica. Comece ajudando o problema a brincar com exemplos de brinquedos em pequenos scripts. Torne-se mais sistemático e configure um conjunto de códigos. Então faça seu código funcionar !!! Finalmente, se necessário, faça a otimização do código. Não reinvente a roda e não faça otimização prematura.

(Pontos positivos: o Python é gratuito - sem problemas de licença, grande comunidade, por exemplo, sobre stackoverflow, módulos para uma boa programação como teste de unidade ou registro ...)

Jan
fonte
5

Fortran: tipo Matlab, fácil de aprender e usar e rapidamente se torna produtivo, mas só é bom para computação numérica

C ++: difícil de dominar (levará anos), mas muito usado fora da computação numérica (segurança no trabalho)

Python: recomendado muito hoje em dia, mas muito lento para trabalhos não triviais. Você escreverá todos os seus kernels computacionalmente caros subjacentes em C e os chamará do Python, o que significa que você terá que aprender (pelo menos) duas línguas

user4245
fonte
1
Eu argumentaria que a curva de aprendizado do Fortran e C ++ é um pouco semelhante. Eu adquiri habilidades suficientes em ambos para resolver o final mais simples dos problemas em questão de alguns meses, cada um proveniente de java, matlab e c #. Dependendo dos idiomas que alguém conhece, eu pude ver o c ++ muito mais fácil de aprender do que o fortran, já que a maioria dos códigos grandes existentes são escritos em versões datadas.
Godric Seer
@Godric: No ~ 600 páginas o padrão Fortran 2008 é menos da metade do C ++ 11 (~ 1300 páginas)
stali
1
@ stali, Sim, mas por exemplo eu trabalho com aproximadamente um quarto de milhão de linhas de código legado escritas em Fortran77. Então, eu tive que aprender o estilo dos 77 para poder trabalhar com ele, 90-95 para fazer alterações sustentáveis ​​(já que os blocos comuns são atrozes) e, em seguida, '08 para não ficar preso durante uma década no passado. O Fortran, enquanto um idioma antigo, passou por enormes mudanças nas últimas décadas e, a menos que você esteja começando do zero, aprender o seu legado não é trivial.
Godric Seer
2
Eu discordo da afirmação de que o Python é "muito lento para um trabalho não trivial". De fato, se você escrever suas multiplicações de vetores matriciais (e similares) puramente em Python, terá um mau momento. A abstração para algumas linguagens mais eficientes já foi feita para você: NumPy, Scipy provavelmente tem tudo que você precisa. Ou um dos outros 50.000 pacotes.
Nico Schlömer
1
@ NicoSchlömer, eu concordo com "muito lento para trabalho não trivial". Minha simulação em Python (Numpy / Scipy) é mais lenta que o mesmo código na versão Fortran90 cerca de 10x. Eu recomendo o Fortran90 ou C ++.
fronthem 22/02
4

Resposta curta
Aprenda sobre os conceitos básicos de código orientado a objetos por meio de python e aprenda sobre os conceitos básicos de ciência da computação em C. Quando você estiver pelo menos bem com as duas outras linguagens, aprenda C ++, porque você pode fazer praticamente qualquer coisa em C ++ e faça funcionar rapidamente (embora demore uma eternidade para escrever).

Resposta mais longa
Então, eis o seguinte: para o seu primeiro projeto, você estará no laboratório de alguém trabalhando no código de outra pessoa. Nesse caso, eles escolherão a linguagem de programação. O que eu pessoalmente acho ótimo!

Quero dizer, como iniciante, você realmente não vai conhecer o seu traseiro por um tempo e, especialmente quando você não sabe o que está fazendo, aprender a programar pode ser um empréstimo. Portanto, é bom ter a estrutura e os limites resultantes do trabalho no código de outra pessoa, e é bom ter a motivação e o entusiasmo que só podem resultar do trabalho em um projeto real.

Ainda assim, independentemente do idioma que seu laboratório usa (especialmente se for o Matlab), você provavelmente deve aprender python, C e C ++. Em particular, se você não é oriundo de ciência da computação, DEVE ler "The C Programming Language", de Kernighan e Ritchie. Tem 35 anos e dá a impressão distinta de que seus autores estavam programando em cartões perfurados, mas é o mais raro dos pássaros: um livro de ciência da computação atemporal. Isso tornará muitas coisas muito mais claras.

tel
fonte