Простота обучения
Python и Fortran - относительно простые в изучении языки. Вероятно, легче найти хорошие учебные материалы по Python, чем хорошие учебные материалы по Фортрану, потому что Python используется более широко, и Фортран в настоящее время считается «специальным» языком для числовых вычислений.
Я считаю, что переход с Python на Fortran будет проще. Python является интерпретируемым языком, поэтому количество шагов, необходимых для запуска вашей первой программы, меньше (откройте интерпретатор, введите print("Hello, world!")
в командной строке), чем для Fortran (напишите программу «Hello world», скомпилируйте, запустите). Я также думаю, что есть лучшие материалы для обучения объектно-ориентированному стилю на Python, чем на Fortran, и на GitHub доступно больше кода Python, чем на Fortran.
Начало работы с Windows
Установка Python должна быть менее болезненной; Есть доступные дистрибутивы Windows. Я рекомендую использовать научный дистрибутив, такой как Anaconda или Enthought Canopy. Там на самом деле нет компилятора; переводчик берет эту роль. Вы захотите использовать интерпретатор на основе 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-1000 раз больше. Так что, если вы хотите использовать 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, но этого проще избежать.
Личные мнения
У меня есть примерно десятилетний опыт работы на Фортране 90/95, и я также программировал на Фортране 2003. У меня есть примерно пять лет опыта программирования на Python. Я использую Python гораздо больше, чем Фортран, потому что, честно говоря, я делаю больше в Python. Большая часть работы, которую мне нужно сделать, не требует больших ресурсов суперкомпьютеров и, как правило, не стоит пересматривать на другом языке, поэтому Python отлично подходит для решения ODE и PDE. Если мне нужно использовать скомпилированный язык, я буду использовать C, C ++ или Fortran в этом порядке.
Большая часть кода на Фортране, который я видел, была безобразна, главным образом потому, что большая часть компьютерного научного сообщества, кажется, не знает или не склонна к каким-либо лучшим методам, обнаруженным разработчиками программного обеспечения за последние 30 лет. Для остроумия: в Фортране нет хорошей платформы для юнит-тестирования (Лучшее, с чем я столкнулся, это FUnit от NASA, и он больше не поддерживается.) Есть несколько хороших платформ для модульного тестирования Python, хорошие генераторы документации по Python и, как правило, множество лучших примеров хороших практик программирования.