Facilidade de aprendizado
Python e Fortran são linguagens relativamente fáceis de aprender. Provavelmente é mais fácil encontrar bons materiais de aprendizado em Python do que bons materiais de aprendizado em Fortran, porque o Python é usado mais amplamente, e o Fortran atualmente é considerado uma linguagem "especializada" para computação numérica.
Acredito que a transição do Python para o Fortran seria mais fácil. Python é uma linguagem interpretada, portanto, o número de etapas necessárias para executar o primeiro programa é menor (abra o interpretador, digite print("Hello, world!")
no prompt) do que para o Fortran (escreva um programa "Hello world", compile, execute). Também acho que existem materiais melhores para ensinar estilo orientado a objetos no Python do que no Fortran, e há mais código Python disponível no GitHub do que o código Fortran.
Instalando e executando no Windows
Instalar o Python deve ser menos doloroso; existem distribuições do Windows disponíveis. Eu recomendo usar uma distribuição científica como Anaconda ou Enthought Canopy. Não existe realmente um compilador, por si só; o intérprete assume esse papel. Você deseja usar um intérprete baseado em CPython, porque há mais bibliotecas numéricas disponíveis e ele interopera bem com C, C ++ e Fortran. Outras implementações de intérpretes incluem Jython e PyPy.
Em uma máquina Windows, a instalação de um compilador Fortran será irritante. Compiladores de linha de comando típicos são programas como gfortran, ifort (da Intel; gratuito para uso pessoal, caso contrário custa dinheiro) e pgfortran (da PGI; versões de avaliação gratuita, caso contrário, custa dinheiro). Para instalar esses compiladores, pode ser necessário instalar algum tipo de camada de compatibilidade do tipo UNIX / POSIX, como Cygwin ou MinGW. Achei difícil trabalhar com isso, mas algumas pessoas gostam desse fluxo de trabalho. Você também pode instalar um compilador com uma GUI, como o Visual Fortran (novamente, você teria que pagar por uma licença).
No Linux, será mais fácil instalar o Python e os compiladores; Eu ainda instalaria o Anaconda ou o Enthought Canopy como uma distribuição Python.
Velocidade: uma troca entre produtividade e desempenho
Ao usar Python (ou MATLAB, Mathematica, Maple ou qualquer linguagem interpretada), você desiste do desempenho pela produtividade. Comparado ao Fortran (ou C ++, C ou qualquer outra linguagem compilada), você escreverá menos linhas de código para realizar a mesma tarefa, o que geralmente significa que levará menos tempo para obter uma solução funcional.
A penalidade de desempenho efetiva pelo uso do Python varia e é atenuada pela delegação de tarefas computacionalmente intensivas em linguagens compiladas. O MATLAB faz algo semelhante. Quando você faz uma multiplicação de matrizes no MATLAB, ele chama BLAS; a penalidade de desempenho é praticamente zero e você não precisa escrever nenhum Fortran, C ou C ++ para obter o alto desempenho. Uma situação semelhante existe no Python. Se você pode usar bibliotecas (por exemplo, NumPy, SciPy, petsc4py, dolfin do FEniCS, PyClaw), você pode escrever todo o seu código em Python e obter um bom desempenho (uma penalidade de talvez 10-40%), porque tudo computacionalmente partes intensivas são chamadas para bibliotecas de idiomas compiladas rapidamente. No entanto, se você escrever tudo em Python puro, a penalidade de desempenho seria um fator de 100-1000x. Portanto, se você quisesse usar o Python e tivesse que incluir um personalizado, Na rotina de computação intensiva, seria melhor escrever essa parte em uma linguagem compilada como C, C ++ ou Fortran e, em seguida, agrupá-la com uma interface Python. Existem bibliotecas que facilitam esse processo (como Cython e f2py) e tutoriais para ajudá-lo; geralmente não é oneroso.
Âmbito de uso
O Python é usado mais amplamente como uma linguagem de uso geral. O Fortran é amplamente limitado à computação numérica e científica e está competindo principalmente com C e C ++ pelos usuários desse domínio.
Na ciência da computação, o Python normalmente não compete diretamente com linguagens compiladas devido às penalidades de desempenho que mencionei. Você usaria o Python para casos em que deseja alta produtividade e desempenho. É uma consideração secundária, como na prototipagem de algoritmos numericamente intensivos, processamento de dados e visualização. Você usaria o Fortran (ou outra linguagem compilada) quando tiver uma boa idéia de qual deve ser o design do seu algoritmo e aplicativo; você está disposto a gastar mais tempo escrevendo e depurando seu código, e o desempenho é fundamental. (Por exemplo, o desempenho é uma etapa limitante do seu processo de simulação ou é uma entrega essencial em sua pesquisa.) Uma estratégia comum é misturar o Python e uma linguagem compilada (geralmente C ou C ++, mas o Fortran também foi usado), e use apenas a linguagem compilada para as partes mais sensíveis ao desempenho do código; o custo de desenvolvimento é, obviamente, mais difícil de escrever e depurar um programa em dois idiomas do que um programa em um único idioma.
Em termos de paralelismo, o atual padrão MPI (MPI-3) possui ligações Fortran e C nativas. O padrão MPI-2 tinha ligações C ++ nativas, mas o MPI-3 não, e você teria que usar as ligações C. Existem ligações MPI de terceiros, como mpi4py. Eu usei o mpi4py; funciona bem e é fácil de usar. Para o paralelismo em larga escala (dezenas de milhares de núcleos), você provavelmente desejaria usar uma linguagem compilada, porque coisas como carregar dinamicamente os módulos Python o morderão em grande escala se você fizer isso de uma maneira ingênua. Existem maneiras de contornar esse gargalo, como demonstrado pelos desenvolvedores do PyClaw, mas é mais simples evitá-lo.
Opiniões pessoais
Tenho cerca de uma década de experiência no Fortran 90/95 e também programado no Fortran 2003. Tenho cerca de cinco anos de experiência em programação em Python. Eu uso o Python muito mais do que o Fortran porque, francamente, eu faço mais no Python. A maior parte do trabalho que eu preciso fazer não requer grandes recursos de supercomputação e geralmente não vale a pena ser re-desenvolvida em outra linguagem; portanto, o Python é adequado para resolver ODEs e PDEs. Se eu precisar usar uma linguagem compilada, usarei C, C ++ ou Fortran, nessa ordem.
A maior parte do código Fortran que eu vi foi feia, principalmente porque a maioria da comunidade de ciência da computação parece desconhecer ou aversa a quaisquer práticas recomendadas descobertas por engenheiros de software nos últimos 30 anos. A saber: não há uma boa estrutura de teste de unidade no Fortran. (O melhor que me deparei é o FUnit, da NASA, e isso não é mais mantido.) Existem algumas boas estruturas de teste de unidade Python, bons geradores de documentação Python e geralmente muitos exemplos melhores de boas práticas de programação.