Öğrenme kolaylığı
Python ve Fortran'ın her ikisi de nispeten öğrenmesi kolay dillerdir. Muhtemelen iyi Python öğrenme materyalleri bulmak iyi Fortran öğrenme materyallerinden daha kolaydır çünkü Python daha yaygın olarak kullanılmaktadır ve Fortran şu anda sayısal hesaplama için bir "uzmanlık" dili olarak kabul edilmektedir.
Python'dan Fortran'a geçişin daha kolay olacağına inanıyorum. Python yorumlanmış bir dildir, bu nedenle ilk programınızı çalıştırmak için gereken adım sayısı daha azdır (yorumlayıcıyı açın, yazınprint("Hello, world!")
Fortran için , istemde yazın) ("Merhaba dünya" programı yazın, derleyin, çalıştırın). Ayrıca Python'da nesneye yönelik stili öğretmek için Fortran'dan daha iyi materyaller olduğunu ve GitHub'da Fortran kodundan daha fazla Python kodu olduğunu düşünüyorum.
Windows'ta çalışmaya başlama
Python'u kurmak daha az acı verici olmalı; kullanılabilir Windows dağıtımları vardır. Anaconda veya Enthought Canopy gibi bilimsel bir dağıtım kullanmanızı öneririm. Aslında bir derleyici yoktur; tercüman bu rolü üstlenir. CPython tabanlı bir tercüman kullanmak isteyeceksiniz, çünkü daha fazla sayısal kütüphane mevcut ve C, C ++ ve Fortran ile güzel bir şekilde birlikte çalışıyor. Diğer tercüman uygulamaları Jython ve PyPy'dir.
Bir Windows makinesinde, bir Fortran derleyicisinin yüklenmesi sinir bozucu olacaktır. Tipik komut satırı derleyicileri gfortran, ifort (Intel'den; kişisel kullanım için ücretsiz, aksi takdirde paraya mal olur) ve pgfortran (PGI'den; ücretsiz deneme sürümleri, aksi takdirde paraya mal olur) gibi programlardır. Bu derleyicileri yüklemek için Cygwin veya MinGW gibi bir çeşit UNIX / POSIX tipi uyumluluk katmanı yüklemeniz gerekebilir. Çalışmak için bir acı buldum, ancak bazı insanlar bu iş akışını seviyor. Visual Fortran gibi bir GUI içeren bir derleyici de yükleyebilirsiniz (yine lisans için ödeme yapmanız gerekir).
Linux'ta Python ve derleyicileri kurmak daha kolay olacaktır; Yine de Anaconda veya Enthought Canopy'yi Python dağıtımı olarak kurarım.
Hız: verimlilik ve performans dengelemesi
Python (veya MATLAB, Mathematica, Maple veya herhangi bir yorumlanmış dil) kullanırken, verimlilik için performanstan vazgeçersiniz. Fortran (veya C ++, C veya herhangi bir derlenmiş dil) ile karşılaştırıldığında, aynı görevi gerçekleştirmek için daha az kod satırı yazacaksınız, bu da genellikle çalışan bir çözüm bulmanızın daha az zaman alacağı anlamına gelir.
Python'u kullanmak için etkili performans cezası değişiklik gösterir ve hesaplamalı yoğun görevleri derlenmiş dillere devrederek hafifletilir. MATLAB benzer bir şey yapar. MATLAB'de bir matris çarpımı yaptığınızda, BLAS'ı çağırır; performans cezası neredeyse sıfırdır ve yüksek performansı elde etmek için herhangi bir Fortran, C veya C ++ yazmak zorunda kalmadınız. Python'da da benzer bir durum var. Kütüphaneleri (örneğin, NumPy, SciPy, petsc4py, FEniCS, PyClaw'dan dolfin) kullanabiliyorsanız, tüm kodlarınızı Python'a yazabilir ve iyi bir performans elde edebilirsiniz (belki% 10-40 ceza) Yoğun bölümler, hızlı derlenen dil kitaplıklarına yapılan çağrılardır. Ancak, her şeyi saf Python'a yazacak olsaydınız, performans cezası 100-1000x'lik bir faktör olurdu. Python kullanmak istiyorsanız ve bir özel dahil etmek zorunda kaldıysanız, Hesaplama açısından yoğun bir rutin olarak, bu bölümü C, C ++ veya Fortran gibi derlenmiş bir dilde yazıp Python arayüzü ile silmeniz daha iyi olur. Bu işlemi kolaylaştıran kütüphaneler (Cython ve f2py gibi) ve size yardımcı olacak öğreticiler; genellikle zahmetli değildir.
Kullanım kapsamı
Python genel olarak genel amaçlı bir dil olarak daha yaygın olarak kullanılmaktadır. Fortran büyük ölçüde sayısal ve bilimsel hesaplama ile sınırlıdır ve esas olarak bu alandaki kullanıcılar için C ve C ++ ile rekabet etmektedir.
Hesaplamalı bilimde, Python bahsettiğim performans cezaları nedeniyle genellikle derlenmiş dillerle doğrudan rekabet etmez. Sayısal olarak yoğun algoritmaların prototiplenmesi, veri işleme ve görselleştirme gibi yüksek verimlilik ve performansın ikincil bir husus olmasını istediğiniz durumlarda Python'u kullanırsınız. Algoritmanızın ve uygulama tasarımınızın ne olması gerektiği konusunda iyi bir fikriniz olduğunda Fortran'ı (veya başka bir derlenmiş dili) kullanırsınız, kodunuzu yazmak ve hata ayıklamak için daha fazla zaman harcamak istersiniz ve performans çok önemlidir. (Örneğin, performans simülasyon sürecinizde sınırlayıcı bir adımdır veya araştırmanızda önemli bir anahtardır.) Ortak bir strateji, Python ile derlenmiş bir dili karıştırmaktır (genellikle C veya C ++, ancak Fortran da kullanılmıştır), ve derlenmiş dili yalnızca kodun performansa en duyarlı bölümleri için kullanın; geliştirme maliyeti, elbette, bir programın iki dilde yazılması ve hatalarının ayıklanmasının tek bir dilde programdan daha zor olmasıdır.
Paralellik açısından, mevcut MPI standardı (MPI-3) doğal Fortran ve C bağlarına sahiptir. MPI-2 standardında doğal C ++ bağlamaları vardı, ancak MPI-3 içermiyor ve C bağlarını kullanmanız gerekecek. Mpi4py gibi üçüncü taraf MPI bağlamaları vardır. Mpi4py kullandım; iyi çalışır ve kullanımı kolaydır. Büyük ölçekli paralellik için (on binlerce çekirdek) muhtemelen derlenmiş bir dil kullanmak istersiniz, çünkü Python modüllerini dinamik olarak yüklemek gibi şeyler, naif bir şekilde yaparsanız, sizi ölçekte ölçeklendirir. PyClaw geliştiricileri tarafından gösterildiği gibi bu darboğazdan kurtulmanın yolları var, ancak bundan kaçınmak daha basit.
Kişisel görüşler
Yaklaşık 90 yıllık Fortran 90/95 deneyimim var ve ayrıca Fortran 2003'te programladım. Python'da kabaca beş yıllık deneyimim var. Python'u Fortran'ı kullandığımdan çok daha fazla kullanıyorum çünkü açıkçası Python'da daha fazlasını yapıyorum. Yapmam gereken işlerin çoğu büyük süper hesaplama kaynakları gerektirmiyor ve genellikle başka bir dilde yeniden gelişmeye değmez, bu nedenle Python ODE'leri ve PDE'leri çözmek için iyidir. Derlenmiş bir dil kullanmam gerekirse, bu sırayla C, C ++ veya Fortran kullanacağım.
Gördüğüm Fortran kodunun çoğu çirkindi, çünkü bilişimsel bilim topluluğunun çoğu, son 30 yıl içinde yazılım mühendisleri tarafından keşfedilen en iyi uygulamalardan habersiz ya da bunlardan farklı görünüyor. Buna karşılık: Fortran'da iyi bir birim test çerçevesi yoktur. (Karşılaştığım en iyi şey NASA tarafından FUnit'tir ve artık sürdürülmemektedir.) Birkaç iyi Python birimi test çerçevesi, iyi Python dokümantasyon üreteçleri ve genellikle iyi programlama uygulamalarına çok daha iyi örnekler vardır.