Простота навчання
Python і Fortran - це відносно легкі для вивчення мови. Напевно, простіше знайти хороші навчальні матеріали Python, ніж хороші навчальні матеріали Fortran, оскільки Python використовується ширше, а Fortran в даний час вважається мовою "спеціальності" для чисельних обчислень.
Я вважаю, що перехід від Python до Fortran був би простішим. Python - це інтерпретована мова, тому кількість кроків, які потрібно виконати для запуску першої програми, менша (відкрийте інтерпретатор, введіть print("Hello, world!")
підказку), ніж для Fortran (напишіть програму "Hello world", компілюйте, запустіть). Я також думаю, що в Python є кращі матеріали для викладання об'єктно-орієнтованого стилю, ніж у Fortran, і на GitHub доступно більше Python-коду, ніж код Fortran.
Початок роботи та роботи в Windows
Встановлення Python має бути менш болісним; доступні дистрибутиви Windows. Я рекомендую використовувати такий науковий дистрибутив, як Анаконда або Барабанний навіс. Компілятор насправді насправді не є; перекладач бере цю роль. Ви хочете використовувати інтерпретатор на основі CPython, оскільки є більше числових бібліотек, і він добре взаємодіє з C, C ++ та Fortran. Інші реалізації інтерпретатора включають Jython та PyPy.
На машині Windows установка компілятора Fortran буде дратувати. Типовими компіляторами командного рядка є такі програми, як gfortran, ifort (від Intel; безкоштовно для особистого використання, інакше коштує гроші) та pgfortran (від PGI; безкоштовні пробні версії, інакше коштують гроші). Щоб встановити ці компілятори, можливо, вам доведеться встановити якийсь шар сумісності типу UNIX / POSIX, наприклад Cygwin або MinGW. Я вважав болем працювати, але деяким людям подобається цей робочий процес. Ви також можете встановити компілятор з графічним інтерфейсом, наприклад, Visual Fortran (знову ж, вам доведеться заплатити за ліцензію).
В Linux буде простіше встановити Python та компілятори; Я б все-таки встановив Anaconda або Enthought Canopy як дистрибутив Python.
Швидкість: компроміс продуктивності та продуктивності
Використовуючи Python (або MATLAB, Mathematica, Maple або будь-яку інтерпретовану мову), ви відмовляєтесь від продуктивності. Порівняно з Fortran (або C ++, C або будь-якою іншою складеною мовою), ви будете писати менше рядків коду для виконання того ж завдання, що, як правило, означає, що вам знадобиться менше часу, щоб отримати робоче рішення.
Ефективне покарання за ефективність використання Python варіюється та зменшується шляхом делегування обчислювально інтенсивних завдань на компільовані мови. MATLAB робить щось подібне. Коли ви робите множення матриць у MATLAB, він викликає BLAS; штрафний показник практично дорівнює нулю, і вам не довелося писати жодних Fortran, C або C ++, щоб отримати високу продуктивність. Схожа ситуація існує і в Python. Якщо ви можете використовувати бібліотеки (наприклад, NumPy, SciPy, petsc4py, dolfin від FEniCS, PyClaw), ви можете написати весь свій код у Python і отримати хороші показники (пеня, можливо, 10-40%), оскільки всі обчислювальні Інтенсивні частини - це дзвінки до швидко складених мовних бібліотек. Однак якби ви писали все на чистому Python, покарання за продуктивність було б коефіцієнтом 100-1000x. Тож якщо ви хочете використовувати Python і повинні були включити користувальницький, обчислювально обчислювальна рутина, вам було б краще написати цю частину мовою, складеною на зразок C, C ++ або Fortran, а потім обернути її інтерфейсом Python. Є бібліотеки, які полегшують цей процес (наприклад, Cython та f2py), і навчальні посібники, які допоможуть вам; це, як правило, не обтяжливо.
Сфера використання
Python широко використовується в цілому як мова загального призначення. Fortran значною мірою обмежений чисельними та науковими обчисленнями і в основному конкурує з C і C ++ для користувачів у цій галузі.
У галузі обчислювальної техніки Python, як правило, не конкурує безпосередньо зі складеними мовами через пені, які я згадав. Ви б використовували Python у випадках, коли ви хочете, щоб висока продуктивність і продуктивність були вторинними питаннями, наприклад, при прототипуванні чисельно інтенсивних алгоритмів, обробці даних та візуалізації. Ви б використовували Fortran (або іншу мову, що склалася), коли ви добре розумієте, яким повинен бути ваш алгоритм та дизайн додатків, ви готові витратити більше часу на написання та налагодження свого коду, а продуктивність є першорядною. (Наприклад, продуктивність є обмежуючим кроком у вашому процесі моделювання, або він є ключовим результатом у ваших дослідженнях. Загальна стратегія - змішати Python та мову компіляції (зазвичай це використовується C або C ++, але також використовується Fortran), і використовувати лише скомпільовану мову для найбільш чутливих до продуктивності частин коду; вартість розробки полягає, звичайно, у тому, що складніше написати та налагодити програму двома мовами, ніж програму на одній мові.
З точки зору паралелізму, чинний стандарт MPI (MPI-3) має вроджені прив’язки Fortran і C. Стандарт MPI-2 мав вбудовані C ++ прив’язки, але MPI-3 не має, і вам доведеться використовувати зв'язки C. Існують сторонні MPI прив’язки, такі як mpi4py. Я використав mpi4py; він добре працює і простий у використанні. Для великомасштабного паралелізму (десятки тисяч ядер) ви, мабуть, захочете скористатися складеною мовою, тому що такі речі, як динамічне завантаження модулів Python, будуть кусати вас в дупу в масштабі, якщо ви будете робити це наївно. Існують способи обійти це вузьке місце, як показали розробники PyClaw, але цього простіше уникнути.
Особиста думка
Я маю приблизно десятиліття досвіду роботи у Fortran 90/95, а також програмував у Fortran 2003. У мене є приблизно п'ять років досвіду програмування в Python. Я використовую Python набагато більше, ніж я використовую Fortran, тому що, чесно кажучи, я більше роблю в Python. Більшість робіт, які мені потрібно виконати, не потребують великих суперкомп'ютерних ресурсів і, як правило, не варто переробляти іншою мовою, тому Python просто чудово вирішує ODE та PDE. Якщо мені потрібно використовувати компільовану мову, я буду використовувати в цьому порядку C, C ++ або Fortran.
Більшість коду Fortran, які я бачив, були некрасивими, головним чином тому, що більшість спільнот з обчислювальних наук, здається, не знають або не проти будь-яких найкращих практик, виявлених інженерами програмного забезпечення за останні 30 років. На кшталт: у Фортрана немає хорошої рамки тестування одиниць. (Найкраще, на що я стикався, - це FUnit, NASA, і це вже не підтримується.) Є кілька хороших рамок тестування модулів Python, хороші генератори документації Python і, як правило, багато кращих прикладів хороших практик програмування.