Łatwość nauki
Python i Fortran to języki stosunkowo łatwe do nauczenia się. Prawdopodobnie łatwiej jest znaleźć dobre materiały do nauki w języku Python niż dobre materiały do nauki w języku Fortran, ponieważ język Python jest używany w szerszym zakresie, a Fortran jest obecnie uważany za język „specjalistyczny” do obliczeń numerycznych.
Wierzę, że przejście z Python do Fortran byłoby łatwiejsze. Python jest językiem interpretowanym, więc liczba kroków potrzebnych do uruchomienia pierwszego programu jest mniejsza (otwórz interpreter, wpisz print("Hello, world!")
polecenie) w porównaniu z Fortranem (napisz program „Hello world”, skompiluj, uruchom). Myślę też, że istnieją lepsze materiały do nauczania stylu obiektowego w Pythonie niż w Fortranie, a na GitHub jest więcej kodu Python niż w języku Fortran.
Pierwsze kroki w systemie Windows
Instalowanie Pythona powinno być mniej bolesne; dostępne są dystrybucje Windows. Polecam użycie dystrybucji naukowej, takiej jak Anaconda lub Enthought Canopy. Tak naprawdę nie ma kompilatora; tłumacz pełni tę rolę. Będziesz chciał użyć interpretera opartego na CPython, ponieważ dostępnych jest więcej bibliotek numerycznych i dobrze współpracuje z C, C ++ i Fortran. Inne implementacje interpretera obejmują Jython i PyPy.
Na komputerze z systemem Windows instalacja kompilatora Fortran będzie denerwująca. Typowymi kompilatorami wiersza poleceń są programy takie jak gfortran, ifort (od Intela; bezpłatny do użytku osobistego, w przeciwnym razie kosztuje pieniądze) i pgfortran (z ChOG; bezpłatne wersje próbne, w przeciwnym razie kosztuje). Aby zainstalować te kompilatory, może być konieczne zainstalowanie jakiejś warstwy kompatybilności typu UNIX / POSIX, takiej jak Cygwin lub MinGW. Uznałem za trudny w pracy, ale niektórzy ludzie lubią ten przepływ pracy. Możesz także zainstalować kompilator z graficznym interfejsem użytkownika, taki jak Visual Fortran (ponownie, będziesz musiał zapłacić za licencję).
W systemie Linux łatwiej będzie zainstalować Python i kompilatory; Nadal instalowałbym Anaconda lub Enthought Canopy jako dystrybucję Pythona.
Szybkość: kompromis między wydajnością a wydajnością
Korzystając z Pythona (lub MATLAB, Mathematica, Klonu lub dowolnego tłumaczonego języka), rezygnujesz z wydajności dla produktywności. W porównaniu do Fortran (lub C ++, C lub dowolnego innego skompilowanego języka) napiszesz mniej wierszy kodu, aby wykonać to samo zadanie, co ogólnie oznacza, że znalezienie działającego rozwiązania zajmie Ci mniej czasu.
Skuteczna obniżka wydajności za używanie Pythona jest różna i jest zmniejszana przez delegowanie zadań intensywnie obliczeniowych na skompilowane języki. MATLAB robi coś podobnego. Kiedy wykonujesz mnożenie macierzy w MATLAB, wywołuje BLAS; kara za wydajność jest praktycznie zerowa i nie musiałeś pisać Fortran, C ani C ++, aby uzyskać wysoką wydajność. Podobna sytuacja występuje w Pythonie. Jeśli możesz używać bibliotek (na przykład NumPy, SciPy, petsc4py, dolfin z FEniCS, PyClaw), możesz napisać cały kod w Pythonie i uzyskać dobrą wydajność (kara może być 10-40%), ponieważ wszystkie obliczeniowo części intensywne to wywołania szybkich bibliotek językowych. Jeśli jednak napiszesz wszystko w czystym języku Python, kara za wydajność wyniesie 100-1000x. Więc jeśli chcesz używać Pythona i musisz dołączyć niestandardowy, intensywnie obliczeniowo, lepiej byłoby napisać tę część w skompilowanym języku, takim jak C, C ++ lub Fortran, a następnie zawinąć ją w interfejs Pythona. Istnieją biblioteki, które ułatwiają ten proces (takie jak Cython i f2py) oraz tutoriale, które mogą ci pomóc; ogólnie nie jest uciążliwe.
Zakres zastosowania
Python jest szeroko stosowany jako język ogólnego przeznaczenia. Fortran jest w dużej mierze ograniczony do obliczeń numerycznych i naukowych i konkuruje głównie z C i C ++ dla użytkowników w tej dziedzinie.
W dziedzinie informatyki Python zazwyczaj nie konkuruje bezpośrednio ze skompilowanymi językami z powodu wspomnianych kar wydajnościowych. Python byłby używany w przypadkach, w których wymagana jest wysoka wydajność, a wydajność jest kwestią drugorzędną, na przykład przy prototypowaniu algorytmów intensywnie numerycznych, przetwarzaniu danych i wizualizacji. Korzystasz z Fortran (lub innego skompilowanego języka), gdy masz dobre pojęcie o tym, jaki powinien być twój algorytm i projekt aplikacji, chcesz poświęcić więcej czasu na pisanie i debugowanie kodu, a wydajność jest najważniejsza. (Na przykład wydajność jest ograniczającym krokiem w procesie symulacji lub kluczowym rezultatem badań). Powszechną strategią jest mieszanie Pythona z językiem kompilowanym (zwykle C lub C ++, ale Fortran również był używany), i używaj skompilowanego języka tylko do najbardziej wrażliwych części kodu; koszt opracowania jest oczywiście taki, że trudniej jest napisać i debugować program w dwóch językach niż program w jednym języku.
Pod względem równoległości obecny standard MPI (MPI-3) ma natywne wiązania Fortran i C. Standard MPI-2 miał natywne wiązania C ++, ale MPI-3 nie, i trzeba by użyć powiązań C. Istnieją powiązania MPI innych firm, takie jak mpi4py. Użyłem mpi4py; działa dobrze i jest prosty w użyciu. W przypadku paralelności na dużą skalę (dziesiątki tysięcy rdzeni) prawdopodobnie będziesz chciał użyć skompilowanego języka, ponieważ takie rzeczy jak dynamiczne ładowanie modułów Pythona ugryzie Cię w tyłek na dużą skalę, jeśli zrobisz to w naiwny sposób. Istnieją sposoby na obejście tego wąskiego gardła, jak wykazali twórcy PyClaw, ale łatwiej jest tego uniknąć.
Osobiste opinie
Mam około dekadę doświadczenia w Fortran 90/95, a także programowałem w Fortran 2003. Mam około pięć lat doświadczenia w programowaniu w Pythonie. Używam Pythona znacznie częściej niż Fortrana, ponieważ, szczerze mówiąc, robię więcej w Pythonie. Większość pracy, którą muszę wykonać, nie wymaga dużych zasobów superkomputerowych i generalnie nie jest warta ponownego rozwijania w innym języku, więc Python jest w porządku do rozwiązywania ODE i PDE. Jeśli będę musiał użyć skompilowanego języka, użyję C, C ++ lub Fortran, w tej kolejności.
Większość kodu Fortrana, który widziałem, była brzydka, głównie dlatego, że większość społeczności nauk komputerowych wydaje się nieświadoma najlepszych praktyk odkrytych przez inżynierów oprogramowania w ciągu ostatnich 30 lat. To znaczy: w Fortranie nie ma dobrych ram testowania jednostek. (Najlepsze, na jakie natknąłem się, to FUnit, NASA, którego już nie utrzymuję.) Istnieje kilka dobrych ram testowania jednostek Pythona, dobrych generatorów dokumentacji Python i ogólnie wiele lepszych przykładów dobrych praktyk programistycznych.