Facilità di apprendimento
Python e Fortran sono entrambi lingue relativamente facili da imparare. Probabilmente è più facile trovare buoni materiali didattici Python che buoni materiali didattici Fortran perché Python è usato più ampiamente e Fortran è attualmente considerato un linguaggio "specializzato" per il calcolo numerico.
Credo che il passaggio da Python a Fortran sarebbe più semplice. Python è un linguaggio interpretato, quindi il numero di passaggi necessari per far funzionare il tuo primo programma è inferiore (apri l'interprete, digita print("Hello, world!")
al prompt) rispetto a Fortran (scrivi un programma "Hello world", compila, esegui). Penso anche che ci siano materiali migliori per insegnare lo stile orientato agli oggetti in Python che in Fortran, e su GitHub è disponibile più codice Python che codice Fortran.
Alzarsi e funzionare su Windows
L'installazione di Python dovrebbe essere meno dolorosa; ci sono distribuzioni di Windows disponibili. Consiglio di utilizzare una distribuzione scientifica come Anaconda o Enthought Canopy. Non c'è davvero un compilatore, di per sé; l'interprete assume quel ruolo. Ti consigliamo di utilizzare un interprete basato su CPython, perché ci sono più librerie numeriche disponibili e interagisce bene con C, C ++ e Fortran. Altre implementazioni di interpreti includono Jython e PyPy.
Su un computer Windows, l'installazione di un compilatore Fortran sarà fastidiosa. Tipici compilatori da riga di comando sono programmi come gfortran, ifort (da Intel; gratuito per uso personale, altrimenti costa denaro) e pgfortran (da IGP; versioni di prova gratuite, altrimenti costa denaro). Per installare questi compilatori, potrebbe essere necessario installare una sorta di livello di compatibilità di tipo UNIX / POSIX, come Cygwin o MinGW. Ho trovato doloroso lavorare con, ma ad alcune persone piace quel flusso di lavoro. Puoi anche installare un compilatore con una GUI, come Visual Fortran (di nuovo, dovresti pagare per una licenza).
Su Linux, sarà più semplice installare Python e compilatori; Vorrei comunque installare Anaconda o Enthought Canopy come distribuzione Python.
Velocità: un compromesso tra produttività e prestazioni
Usando Python (o MATLAB, Mathematica, Maple o qualsiasi linguaggio interpretato), si rinuncia alle prestazioni per la produttività. Rispetto a Fortran (o C ++, C o qualsiasi altro linguaggio compilato), si scriveranno meno righe di codice per svolgere la stessa attività, il che significa generalmente che ci vorrà meno tempo per ottenere una soluzione funzionante.
L'efficace penalità prestazionale per l'utilizzo di Python varia e viene mitigata delegando compiti intensivamente computazionali a linguaggi compilati. MATLAB fa qualcosa di simile. Quando si esegue una moltiplicazione di matrici in MATLAB, chiama BLAS; la penalità delle prestazioni è praticamente zero e non è stato necessario scrivere Fortran, C o C ++ per ottenere prestazioni elevate. Una situazione simile esiste in Python. Se puoi usare le librerie (ad esempio NumPy, SciPy, petsc4py, dolfin di FEniCS, PyClaw), puoi scrivere tutto il tuo codice in Python e ottenere buone prestazioni (una penalità del 10-40%) perché tutto il calcolo le parti intensive sono chiamate a librerie di lingue compilate rapidamente. Tuttavia, se dovessi scrivere tutto in puro Python, la penalità prestazionale sarebbe un fattore di 100-1000x. Quindi, se volevi usare Python e dovevi includere un'abitudine, computazionalmente intensiva, faresti meglio a scrivere quella parte in un linguaggio compilato come C, C ++ o Fortran, quindi a racchiuderlo con un'interfaccia Python. Ci sono librerie che facilitano questo processo (come Cython e f2py) e tutorial per aiutarti; generalmente non è oneroso.
Ambito di utilizzo
Python è usato più ampiamente nel complesso come linguaggio generico. Fortran è in gran parte limitato al calcolo numerico e scientifico ed è principalmente in concorrenza con C e C ++ per gli utenti di quel dominio.
Nella scienza computazionale, Python in genere non compete direttamente con i linguaggi compilati a causa delle penalità prestazionali che ho citato. Utilizzerai Python nei casi in cui desideri una produttività elevata e le prestazioni siano una considerazione secondaria, come ad esempio nella prototipazione di algoritmi a elaborazione numerica, elaborazione dei dati e visualizzazione. Utilizzeresti Fortran (o un altro linguaggio compilato) quando hai una buona idea di come dovrebbe essere il tuo algoritmo e il design dell'applicazione, sei disposto a dedicare più tempo alla scrittura e al debug del codice e le prestazioni sono fondamentali. (Ad esempio, le prestazioni sono un passaggio limitante nel processo di simulazione, oppure sono un risultato chiave nella ricerca.) Una strategia comune è quella di mescolare Python e un linguaggio compilato (di solito C o C ++, ma è stato utilizzato anche Fortran), e utilizzare il linguaggio compilato solo per le parti del codice più sensibili alle prestazioni; il costo di sviluppo è, ovviamente, che è più difficile scrivere ed eseguire il debug di un programma in due lingue rispetto a un programma in una sola lingua.
In termini di parallelismo, l'attuale standard MPI (MPI-3) ha attacchi Fortran e C nativi. Lo standard MPI-2 aveva collegamenti C ++ nativi, ma MPI-3 no, e dovresti usare i collegamenti C. Esistono collegamenti MPI di terze parti, come mpi4py. Ho usato mpi4py; funziona bene ed è semplice da usare. Per il parallelismo su larga scala (decine di migliaia di core), probabilmente vorresti usare un linguaggio compilato perché cose come il caricamento dinamico dei moduli Python ti morderanno nel culo su larga scala se lo fai in modo ingenuo. Ci sono modi per aggirare quel collo di bottiglia, come dimostrato dagli sviluppatori di PyClaw, ma è più semplice evitarlo.
Opinioni personali
Ho circa un decennio di esperienza in Fortran 90/95 e ho anche programmato in Fortran 2003. Ho circa cinque anni di esperienza nella programmazione in Python. Uso Python molto più di quanto non usi Fortran perché, francamente, faccio di più in Python. La maggior parte del lavoro che devo svolgere non richiede importanti risorse di supercalcolo e in genere non vale la pena ri-svilupparla in un'altra lingua, quindi Python va bene per risolvere ODE e PDE. Se devo usare un linguaggio compilato, userò C, C ++ o Fortran, in questo ordine.
La maggior parte del codice Fortran che ho visto è stato brutto, principalmente perché la maggior parte della comunità scientifica computazionale sembra inconsapevole o avversa alle migliori pratiche scoperte dagli ingegneri del software negli ultimi 30 anni. Vale a dire: non esiste un buon framework di unit test in Fortran. (Il migliore in cui mi sono imbattuto è FUnit, della NASA, e non è più gestito.) Ci sono alcuni buoni framework di test di unità Python, buoni generatori di documentazione Python e in genere molti esempi migliori di buone pratiche di programmazione.