Facilité d'apprentissage
Python et Fortran sont tous deux des langages relativement faciles à apprendre. Il est probablement plus facile de trouver de bons supports d'apprentissage Python que de bons supports d'apprentissage Fortran car Python est utilisé plus largement et Fortran est actuellement considéré comme un langage "spécialisé" pour l'informatique numérique.
Je pense que la transition de Python à Fortran serait plus facile. Python est un langage interprété, donc le nombre d'étapes nécessaires pour lancer votre premier programme est plus petit (ouvrez l'interpréteur, tapez print("Hello, world!")
à l'invite) que pour Fortran (écrivez un programme "Hello world", compilez, exécutez). Je pense également qu'il existe de meilleurs matériaux pour enseigner le style orienté objet en Python que dans Fortran, et qu'il y a plus de code Python disponible sur GitHub que de code Fortran.
Mise en route et exécution sous Windows
L'installation de Python devrait être moins pénible; il existe des distributions Windows. Je recommande d'utiliser une distribution scientifique comme Anaconda ou Enthought Canopy. Il n'y a pas vraiment de compilateur en soi; l'interprète joue ce rôle. Vous voudrez utiliser un interpréteur basé sur CPython, car il y a plus de bibliothèques numériques disponibles et il interagit bien avec C, C ++ et Fortran. D'autres implémentations d'interpréteur incluent Jython et PyPy.
Sur une machine Windows, l'installation d'un compilateur Fortran va être ennuyeuse. Les compilateurs en ligne de commande typiques sont des programmes comme gfortran, ifort (d'Intel; gratuit pour un usage personnel, sinon coûte de l'argent) et pgfortran (de PGI; versions d'essai gratuites, sinon coûte de l'argent). Pour installer ces compilateurs, vous devrez peut-être installer une sorte de couche de compatibilité de type UNIX / POSIX, comme Cygwin ou MinGW. J'ai trouvé ça pénible de travailler avec, mais certaines personnes aiment ce flux de travail. Vous pouvez également installer un compilateur avec une interface graphique, comme Visual Fortran (encore une fois, vous devrez payer pour une licence).
Sous Linux, il sera plus facile d'installer Python et des compilateurs; J'installerais toujours Anaconda ou Enthought Canopy en tant que distribution Python.
Vitesse: un compromis productivité / performance
En utilisant Python (ou MATLAB, Mathematica, Maple ou tout autre langage interprété), vous abandonnez les performances pour la productivité. Par rapport à Fortran (ou C ++, C ou tout autre langage compilé), vous écrirez moins de lignes de code pour accomplir la même tâche, ce qui signifie généralement qu'il vous faudra moins de temps pour obtenir une solution de travail.
La pénalité de performance effective pour l'utilisation de Python varie et est atténuée par la délégation de tâches gourmandes en calcul aux langages compilés. MATLAB fait quelque chose de similaire. Lorsque vous effectuez une multiplication matricielle dans MATLAB, il appelle BLAS; la pénalité de performance est pratiquement nulle et vous n'avez pas eu à écrire de Fortran, C ou C ++ pour obtenir des performances élevées. Une situation similaire existe en Python. Si vous pouvez utiliser des bibliothèques (par exemple, NumPy, SciPy, petsc4py, dolfin de FEniCS, PyClaw), vous pouvez écrire tout votre code en Python et obtenir de bonnes performances (une pénalité de 10 à 40% peut-être) à cause de tout le calcul les parties intensives sont des appels à des bibliothèques de langues compilées rapidement. Cependant, si vous deviez tout écrire en Python pur, la pénalité de performance serait un facteur de 100 à 1000x. Donc, si vous vouliez utiliser Python et deviez inclure une personnalisation, routine de calcul intensif, vous feriez mieux d'écrire cette partie dans un langage compilé comme C, C ++ ou Fortran, puis de l'encapsuler avec une interface Python. Il existe des bibliothèques qui facilitent ce processus (comme Cython et f2py), et des tutoriels pour vous aider; il n'est généralement pas onéreux.
Portée d'utilisation
Python est utilisé plus largement dans l'ensemble comme langage à usage général. Fortran est largement limité à l'informatique numérique et scientifique, et est principalement en concurrence avec le C et le C ++ pour les utilisateurs de ce domaine.
En science informatique, Python n'est généralement pas en concurrence directe avec les langages compilés en raison des pénalités de performances que j'ai mentionnées. Vous utiliseriez Python pour les cas où vous souhaitez une productivité et des performances élevées est une considération secondaire, comme dans le prototypage d'algorithmes à forte intensité numérique, le traitement des données et la visualisation. Vous utiliseriez Fortran (ou un autre langage compilé) lorsque vous avez une bonne idée de ce que devraient être la conception de votre algorithme et de votre application, que vous êtes prêt à passer plus de temps à écrire et à déboguer votre code, et que les performances sont primordiales. (Par exemple, les performances sont une étape limitante dans votre processus de simulation, ou c'est un livrable clé dans votre recherche.) Une stratégie courante consiste à mélanger Python et un langage compilé (généralement C ou C ++, mais Fortran a également été utilisé), et n'utilisez le langage compilé que pour les parties du code les plus sensibles aux performances; le coût de développement est, bien sûr, qu'il est plus difficile d'écrire et de déboguer un programme en deux langues qu'un programme en une seule langue.
En termes de parallélisme, la norme MPI actuelle (MPI-3) a des liaisons Fortran et C natives. La norme MPI-2 avait des liaisons C ++ natives, mais pas MPI-3, et vous devriez utiliser les liaisons C. Il existe des liaisons MPI tierces, telles que mpi4py. J'ai utilisé mpi4py; cela fonctionne bien et est simple à utiliser. Pour le parallélisme à grande échelle (des dizaines de milliers de cœurs), vous voudrez probablement utiliser un langage compilé parce que des choses comme le chargement dynamique des modules Python vous mordront dans le cul à l'échelle si vous le faites de manière naïve. Il existe des moyens de contourner ce goulot d'étranglement, comme l'ont démontré les développeurs de PyClaw, mais il est plus simple de l'éviter.
Opinions personnelles
J'ai environ une décennie d'expérience en Fortran 90/95, et j'ai également programmé en Fortran 2003. J'ai environ cinq ans d'expérience en programmation en Python. J'utilise Python beaucoup plus que j'utilise Fortran parce que, franchement, j'en fais plus en Python. La majorité du travail que je dois faire ne nécessite pas de ressources de calcul intensif et ne vaut généralement pas la peine d'être re-développé dans un autre langage, donc Python est très bien pour résoudre les ODE et les PDE. Si j'ai besoin d'utiliser un langage compilé, j'utiliserai C, C ++ ou Fortran, dans cet ordre.
La plupart du code Fortran que j'ai vu est moche, principalement parce que la plupart de la communauté des sciences informatiques semble ignorer ou être opposée aux meilleures pratiques découvertes par les ingénieurs logiciels au cours des 30 dernières années. À savoir: il n'y a pas de bon cadre de tests unitaires à Fortran. (Le meilleur que j'ai rencontré est FUnit, de la NASA, et ce n'est plus maintenu.) Il y a quelques bons cadres de test d'unité Python, de bons générateurs de documentation Python et généralement de nombreux meilleurs exemples de bonnes pratiques de programmation.