Facilidad de aprendizaje
Python y Fortran son lenguajes relativamente fáciles de aprender. Probablemente sea más fácil encontrar buenos materiales de aprendizaje de Python que buenos materiales de aprendizaje de Fortran porque Python se usa más ampliamente, y actualmente Fortran se considera un lenguaje "especializado" para la computación numérica.
Creo que la transición de Python a Fortran sería más fácil. Python es un lenguaje interpretado, por lo que la cantidad de pasos necesarios para ejecutar su primer programa es menor (abra el intérprete, escriba print("Hello, world!")
en el indicador) que para Fortran (escriba un programa "Hola mundo", compile, ejecute). También creo que hay mejores materiales para enseñar estilo orientado a objetos en Python que en Fortran, y hay más código Python disponible en GitHub que el código Fortran.
Ponerse en marcha en Windows
Instalar Python debería ser menos doloroso; Hay distribuciones de Windows disponibles. Recomiendo usar una distribución científica como Anaconda o Enthought Canopy. No hay realmente un compilador, per se; El intérprete toma ese papel. Querrá usar un intérprete basado en CPython, porque hay más bibliotecas numéricas disponibles e interactúa muy bien con C, C ++ y Fortran. Otras implementaciones de intérpretes incluyen Jython y PyPy.
En una máquina con Windows, instalar un compilador Fortran será molesto. Los compiladores de línea de comandos típicos son programas como gfortran, ifort (de Intel; gratis para uso personal, de lo contrario cuesta dinero) y pgfortran (de PGI; versiones de prueba gratuitas, de lo contrario cuesta dinero). Para instalar estos compiladores, es posible que deba instalar algún tipo de capa de compatibilidad de tipo UNIX / POSIX, como Cygwin o MinGW. Me resultó difícil trabajar con él, pero a algunas personas les gusta ese flujo de trabajo. También podría instalar un compilador con una GUI, como Visual Fortran (nuevamente, tendría que pagar por una licencia).
En Linux, será más fácil instalar Python y compiladores; Todavía instalaría Anaconda o Enthought Canopy como una distribución de Python.
Velocidad: un equilibrio entre productividad y rendimiento
Al usar Python (o MATLAB, Mathematica, Maple o cualquier lenguaje interpretado), renuncia al rendimiento por productividad. En comparación con Fortran (o C ++, C o cualquier otro lenguaje compilado), escribirá menos líneas de código para realizar la misma tarea, lo que generalmente significa que le tomará menos tiempo obtener una solución que funcione.
La penalización de rendimiento efectiva por usar Python varía, y se mitiga delegando tareas computacionalmente intensivas en lenguajes compilados. MATLAB hace algo similar. Cuando haces una multiplicación matricial en MATLAB, llama a BLAS; la penalización de rendimiento es prácticamente cero, y no tuvo que escribir ningún Fortran, C o C ++ para obtener el alto rendimiento. Una situación similar existe en Python. Si puede usar bibliotecas (por ejemplo, NumPy, SciPy, petsc4py, dolfin de FEniCS, PyClaw), puede escribir todo su código en Python y obtener un buen rendimiento (una penalización de quizás 10-40%) porque todo el cálculo partes intensivas son llamadas a bibliotecas de idiomas compiladas rápidamente. Sin embargo, si escribiera todo en Python puro, la penalización de rendimiento sería un factor de 100-1000x. Entonces, si quería usar Python y tenía que incluir una costumbre, rutina computacionalmente intensiva, sería mejor escribir esa parte en un lenguaje compilado como C, C ++ o Fortran, luego envolverlo con una interfaz Python. Hay bibliotecas que facilitan este proceso (como Cython y f2py) y tutoriales para ayudarlo; generalmente no es oneroso.
Alcance de uso
Python se usa más ampliamente en general como lenguaje de propósito general. Fortran se limita en gran medida a la informática numérica y científica, y compite principalmente con C y C ++ para los usuarios de ese dominio.
En ciencia computacional, Python generalmente no compite directamente con lenguajes compilados debido a las penalizaciones de rendimiento que mencioné. Usaría Python para los casos en que desea una alta productividad y rendimiento es una consideración secundaria, como en la creación de prototipos de algoritmos numéricamente intensivos, procesamiento de datos y visualización. Usaría Fortran (u otro lenguaje compilado) cuando tenga una buena idea de cuál debería ser su algoritmo y diseño de aplicación, esté dispuesto a pasar más tiempo escribiendo y depurando su código, y el rendimiento es primordial. (Por ejemplo, el rendimiento es un paso limitante en su proceso de simulación, o es una entrega clave en su investigación.) Una estrategia común es mezclar Python y un lenguaje compilado (generalmente C o C ++, pero también se ha utilizado Fortran), y solo use el lenguaje compilado para las partes más sensibles al rendimiento del código; El costo de desarrollo es, por supuesto, que es más difícil escribir y depurar un programa en dos idiomas que un programa en un solo idioma.
En términos de paralelismo, el estándar MPI actual (MPI-3) tiene enlaces nativos Fortran y C. El estándar MPI-2 tenía enlaces C ++ nativos, pero MPI-3 no, y tendría que usar los enlaces C. Existen enlaces MPI de terceros, como mpi4py. He usado mpi4py; funciona bien y es fácil de usar. Para el paralelismo a gran escala (decenas de miles de núcleos), es probable que desee utilizar un lenguaje compilado porque cosas como cargar dinámicamente los módulos de Python lo morderán por el culo a escala si lo hace de una manera ingenua. Hay maneras de evitar ese cuello de botella, como lo demuestran los desarrolladores de PyClaw, pero es más sencillo evitarlo.
Opiniones personales
Tengo aproximadamente una década de experiencia en Fortran 90/95, y también he programado en Fortran 2003. Tengo aproximadamente cinco años de experiencia programando en Python. Uso Python mucho más de lo que uso Fortran porque, francamente, hago más cosas en Python. La mayoría del trabajo que necesito hacer no requiere recursos importantes de supercomputación y, por lo general, no vale la pena volver a desarrollarlo en otro idioma, por lo que Python está bien para resolver ODE y PDE. Si necesito usar un lenguaje compilado, usaré C, C ++ o Fortran, en ese orden.
La mayor parte del código de Fortran que he visto ha sido feo, principalmente porque la mayoría de la comunidad de la ciencia computacional parece desconocer o rechazar las mejores prácticas descubiertas por los ingenieros de software en los últimos 30 años. A saber: no existe un marco de pruebas de unidad buena en Fortran. (Lo mejor que encontré es FUnit, de la NASA, y eso ya no se mantiene.) Hay algunos buenos marcos de prueba de unidades Python, buenos generadores de documentación de Python y, en general, muchos mejores ejemplos de buenas prácticas de programación.