Kemudahan belajar
Python dan Fortran keduanya bahasa yang relatif mudah dipelajari. Mungkin lebih mudah untuk menemukan materi pembelajaran Python yang baik daripada materi pembelajaran Fortran yang baik karena Python digunakan lebih luas, dan Fortran saat ini dianggap sebagai bahasa "khusus" untuk komputasi numerik.
Saya percaya transisi dari Python ke Fortran akan lebih mudah. Python adalah bahasa yang ditafsirkan, jadi jumlah langkah yang diperlukan untuk menjalankan program pertama Anda lebih kecil (buka penerjemah, ketik print("Hello, world!")
di prompt) daripada Fortran (tulis program "Hello world", kompilasi, jalankan). Saya juga berpikir bahwa ada bahan yang lebih baik untuk mengajarkan gaya berorientasi objek dalam Python daripada di Fortran, dan ada lebih banyak kode Python yang tersedia di GitHub daripada kode Fortran.
Bangun dan berjalan di Windows
Menginstal Python seharusnya tidak terlalu menyakitkan; ada distribusi Windows yang tersedia. Saya sarankan menggunakan distribusi ilmiah seperti Anaconda atau Enthought Canopy. Sebenarnya tidak ada kompiler, per se; penerjemah mengambil peran itu. Anda akan ingin menggunakan juru bahasa berbasis CPython, karena ada lebih banyak perpustakaan numerik yang tersedia dan dapat beroperasi dengan baik dengan C, C ++, dan Fortran. Implementasi juru bahasa lainnya termasuk Jython dan PyPy.
Pada mesin Windows, menginstal kompiler Fortran akan mengganggu. Kompiler baris perintah yang umum adalah program-program seperti gfortran, ifort (dari Intel; gratis untuk penggunaan pribadi, jika tidak memerlukan biaya), dan pgfortran (dari PGI; versi uji coba gratis, jika tidak perlu biaya). Untuk menginstal kompiler ini, Anda mungkin perlu menginstal semacam lapisan kompatibilitas tipe UNIX / POSIX, seperti Cygwin atau MinGW. Saya merasa sulit untuk bekerja dengannya, tetapi beberapa orang menyukai alur kerja itu. Anda juga dapat menginstal kompiler dengan GUI, seperti Visual Fortran (sekali lagi, Anda harus membayar lisensi).
Di Linux, akan lebih mudah untuk menginstal Python dan kompiler; Saya masih akan menginstal Anaconda atau Enthought Canopy sebagai distribusi Python.
Kecepatan: tradeoff produktivitas vs kinerja
Dalam menggunakan Python (atau MATLAB, Mathematica, Maple, atau bahasa apa pun yang ditafsirkan), Anda menyerahkan kinerja untuk produktivitas. Dibandingkan dengan Fortran (atau C ++, C, atau bahasa kompilasi lainnya), Anda akan menulis lebih sedikit baris kode untuk menyelesaikan tugas yang sama, yang secara umum berarti Anda membutuhkan waktu lebih sedikit untuk mendapatkan solusi yang berfungsi.
Denda kinerja yang efektif untuk menggunakan Python bervariasi, dan dikurangi dengan mendelegasikan tugas intensif komputasi ke bahasa yang dikompilasi. MATLAB melakukan hal serupa. Ketika Anda melakukan perkalian matriks dalam MATLAB, ia memanggil BLAS; penalti kinerja hampir nol, dan Anda tidak perlu menulis Fortran, C, atau C ++ apa pun untuk mendapatkan kinerja tinggi. Situasi serupa ada di Python. Jika Anda dapat menggunakan perpustakaan (misalnya, NumPy, SciPy, petsc4py, dolfin dari FEniCS, PyClaw), Anda dapat menulis semua kode Anda dengan Python dan mendapatkan kinerja yang baik (penalti mungkin 10-40%) karena semua komputasi bagian intensif adalah panggilan ke perpustakaan bahasa yang dikompilasi dengan cepat. Namun, jika Anda menulis semuanya dengan Python murni, hukuman kinerja akan menjadi faktor 100-1000x. Jadi jika Anda ingin menggunakan Python dan harus memasukkan kebiasaan, Komputasional intensif rutin, Anda akan lebih baik menulis bagian itu dalam bahasa yang dikompilasi seperti C, C ++, atau Fortran, kemudian membungkusnya dengan antarmuka Python. Ada perpustakaan yang memfasilitasi proses ini (seperti Cython dan f2py), dan tutorial untuk membantu Anda; umumnya tidak memberatkan.
Lingkup penggunaan
Python digunakan secara lebih luas secara keseluruhan sebagai bahasa tujuan umum. Fortran sebagian besar terbatas pada komputasi numerik dan ilmiah, dan terutama bersaing dengan C dan C ++ untuk pengguna di domain itu.
Dalam ilmu komputasi, Python biasanya tidak bersaing secara langsung dengan bahasa yang dikompilasi karena hukuman kinerja yang saya sebutkan. Anda akan menggunakan Python untuk kasus-kasus di mana Anda menginginkan produktivitas dan kinerja tinggi adalah pertimbangan sekunder, seperti dalam membuat prototipe algoritma numerik intensif, pemrosesan data, dan visualisasi. Anda akan menggunakan Fortran (atau bahasa kompilasi lain) ketika Anda memiliki ide yang bagus tentang apa yang harus menjadi algoritma dan desain aplikasi Anda, Anda bersedia menghabiskan lebih banyak waktu menulis dan men-debug kode Anda, dan kinerja sangat penting. (Misalnya, kinerja adalah langkah pembatas dalam proses simulasi Anda, atau itu adalah kunci yang diberikan dalam penelitian Anda.) Strategi yang umum adalah mencampur Python dan bahasa yang dikompilasi (biasanya C atau C ++, tetapi Fortran telah digunakan juga), dan hanya menggunakan bahasa yang dikompilasi untuk bagian kode yang paling sensitif terhadap kinerja; biaya pengembangan, tentu saja, lebih sulit untuk menulis dan men-debug suatu program dalam dua bahasa daripada program dalam satu bahasa.
Dalam hal paralelisme, standar MPI saat ini (MPI-3) memiliki ikatan Fortran dan C asli. Standar MPI-2 memiliki binding C ++ asli, tetapi MPI-3 tidak, dan Anda harus menggunakan binding C. Binding MPI pihak ketiga ada, seperti mpi4py. Saya telah menggunakan mpi4py; ini bekerja dengan baik, dan mudah digunakan. Untuk paralelisme skala besar (puluhan ribu inti), Anda mungkin ingin menggunakan bahasa yang dikompilasi karena hal-hal seperti memuat modul Python secara dinamis akan menggigit Anda di pantat pada skala jika Anda melakukannya dengan cara yang naif. Ada beberapa cara untuk mengatasi hambatan itu, seperti yang ditunjukkan oleh pengembang PyClaw, tetapi lebih mudah untuk menghindarinya.
Pendapat pribadi
Saya memiliki sekitar satu dekade pengalaman di Fortran 90/95, dan saya juga memprogram di Fortran 2003. Saya memiliki sekitar lima tahun pengalaman pemrograman dengan Python. Saya menggunakan Python lebih dari saya menggunakan Fortran karena, terus terang, saya mendapatkan lebih banyak dilakukan dengan Python. Mayoritas pekerjaan yang perlu saya lakukan tidak memerlukan sumber daya superkomputer utama dan umumnya tidak layak dikembangkan kembali dalam bahasa lain, jadi Python tidak masalah untuk menyelesaikan ODE dan PDE. Jika saya perlu menggunakan bahasa yang dikompilasi, saya akan menggunakan C, C ++, atau Fortran, dalam urutan itu.
Sebagian besar kode Fortran yang saya lihat jelek, terutama karena sebagian besar komunitas sains komputasi tampaknya tidak mengetahui atau menolak praktik terbaik apa pun yang ditemukan oleh insinyur perangkat lunak dalam 30 tahun terakhir. Intinya: tidak ada kerangka pengujian unit yang baik di Fortran. (Yang terbaik yang saya temui adalah FUnit, oleh NASA, dan itu tidak dipertahankan lagi.) Ada beberapa kerangka kerja pengujian unit Python yang baik, generator dokumentasi Python yang baik, dan umumnya banyak contoh yang lebih baik dari praktik pemrograman yang baik.