Dễ học
Python và Fortran đều là những ngôn ngữ tương đối dễ học. Có thể dễ dàng tìm thấy các tài liệu học tập Python tốt hơn các tài liệu học tập tốt của Fortran vì Python được sử dụng rộng rãi hơn và Fortran hiện được coi là ngôn ngữ "đặc sản" cho điện toán số.
Tôi tin rằng việc chuyển đổi từ Python sang Fortran sẽ dễ dàng hơn. Python là ngôn ngữ được dịch, vì vậy số bước cần thiết để chương trình đầu tiên của bạn chạy nhỏ hơn (mở trình thông dịch, gõ print("Hello, world!")
vào dấu nhắc) so với Fortran (viết chương trình "Hello world", biên dịch, chạy). Tôi cũng nghĩ rằng có nhiều tài liệu tốt hơn để dạy phong cách hướng đối tượng trong Python so với Fortran và có nhiều mã Python có sẵn trên GitHub hơn mã Fortran.
Bắt đầu và chạy trên Windows
Cài đặt Python sẽ bớt đau đớn hơn; Có bản phân phối Windows có sẵn. Tôi khuyên bạn nên sử dụng phân phối khoa học như Anaconda hoặc Enth think Canopy. Không thực sự có một trình biên dịch, mỗi lần; thông dịch viên đảm nhận vai trò đó. Bạn sẽ muốn sử dụng trình thông dịch dựa trên CPython, bởi vì có nhiều thư viện số hơn và nó tương thích độc đáo với C, C ++ và Fortran. Các triển khai phiên dịch khác bao gồm Jython và PyPy.
Trên máy Windows, việc cài đặt trình biên dịch Fortran sẽ gây khó chịu. Trình biên dịch dòng lệnh điển hình là các chương trình như gfortran, ifort (từ Intel; miễn phí cho sử dụng cá nhân, nếu không thì tốn tiền) và pgfortran (từ PGI; phiên bản dùng thử miễn phí, nếu không thì tốn tiền). Để cài đặt các trình biên dịch này, bạn có thể cần phải cài đặt một số loại tương thích loại UNIX / POSIX, như Cygwin hoặc MinGW. Tôi thấy đó là một nỗi đau khi làm việc, nhưng một số người thích quy trình làm việc đó. Bạn cũng có thể cài đặt trình biên dịch với GUI, như Visual Fortran (một lần nữa, bạn phải trả tiền cho một giấy phép).
Trên Linux, việc cài đặt Python và trình biên dịch sẽ dễ dàng hơn; Tôi vẫn sẽ cài đặt Anaconda hoặc Enth think Canopy dưới dạng bản phân phối Python.
Tốc độ: năng suất so với hiệu suất đánh đổi
Khi sử dụng Python (hoặc MATLAB, Mathematica, Maple hoặc bất kỳ ngôn ngữ nào được giải thích), bạn từ bỏ hiệu suất để đạt năng suất. So với Fortran (hoặc C ++, C hoặc bất kỳ ngôn ngữ được biên dịch nào khác), bạn sẽ viết ít dòng mã hơn để hoàn thành cùng một nhiệm vụ, điều đó có nghĩa là bạn sẽ mất ít thời gian hơn để có được giải pháp làm việc.
Hình phạt hiệu suất hiệu quả khi sử dụng Python khác nhau và được giảm nhẹ bằng cách ủy thác các tác vụ tính toán chuyên sâu cho các ngôn ngữ được biên dịch. MATLAB làm một cái gì đó tương tự. Khi bạn thực hiện phép nhân ma trận trong MATLAB, nó gọi BLAS; hình phạt về hiệu suất gần như bằng không và bạn không phải viết bất kỳ Fortran, C hoặc C ++ nào để có hiệu suất cao. Một tình huống tương tự tồn tại trong Python. Nếu bạn có thể sử dụng các thư viện (ví dụ NumPy, SciPy, petc4py, dolfin từ FEniCS, PyClaw), bạn có thể viết tất cả mã của mình bằng Python và có hiệu suất tốt (mức phạt có thể là 10-40%) vì tất cả đều được tính toán phần chuyên sâu là các cuộc gọi đến thư viện ngôn ngữ biên dịch nhanh. Tuy nhiên, nếu bạn viết tất cả mọi thứ bằng Python thuần túy, hình phạt hiệu năng sẽ là một yếu tố 100-1000x. Vì vậy, nếu bạn muốn sử dụng Python và phải bao gồm một tùy chỉnh, thói quen chuyên sâu tính toán, bạn sẽ tốt hơn nếu viết phần đó bằng ngôn ngữ được biên dịch như C, C ++ hoặc Fortran, sau đó gói nó bằng giao diện Python. Có những thư viện tạo điều kiện cho quá trình này (như Cython và f2py), và hướng dẫn để giúp bạn; nó thường không phải là khó khăn
Phạm vi sử dụng
Python được sử dụng rộng rãi hơn như một ngôn ngữ có mục đích chung. Fortran phần lớn giới hạn trong tính toán số và khoa học, và chủ yếu cạnh tranh với C và C ++ cho người dùng trong miền đó.
Trong khoa học tính toán, Python thường không cạnh tranh trực tiếp với các ngôn ngữ được biên dịch do các hình phạt về hiệu suất mà tôi đã đề cập. Bạn sẽ sử dụng Python cho các trường hợp mà bạn muốn năng suất và hiệu suất cao là một sự cân nhắc thứ yếu, chẳng hạn như trong việc tạo nguyên mẫu các thuật toán chuyên sâu về số lượng, xử lý dữ liệu và trực quan hóa. Bạn sẽ sử dụng Fortran (hoặc ngôn ngữ được biên dịch khác) khi bạn có ý tưởng tốt về thuật toán và thiết kế ứng dụng của bạn, bạn sẵn sàng dành nhiều thời gian hơn để viết và gỡ lỗi mã của mình và hiệu suất là tối quan trọng. (Ví dụ, hiệu suất là một bước giới hạn trong quy trình mô phỏng của bạn hoặc là một khóa có thể phân phối được trong nghiên cứu của bạn.) Chiến lược phổ biến là trộn Python và ngôn ngữ được biên dịch (thường là C hoặc C ++, nhưng Fortran cũng đã được sử dụng), và chỉ sử dụng ngôn ngữ được biên dịch cho các phần nhạy cảm với hiệu năng nhất của mã; tất nhiên, chi phí phát triển là khó viết và gỡ lỗi chương trình bằng hai ngôn ngữ hơn chương trình bằng một ngôn ngữ.
Về mặt song song, tiêu chuẩn MPI hiện tại (MPI-3) có các ràng buộc Fortran và C bản địa. Tiêu chuẩn MPI-2 có các ràng buộc C ++ riêng, nhưng MPI-3 thì không, và bạn sẽ phải sử dụng các liên kết C. Các ràng buộc MPI của bên thứ ba tồn tại, chẳng hạn như mpi4py. Tôi đã sử dụng mpi4py; Nó hoạt động tốt, và dễ sử dụng. Đối với tính song song quy mô lớn (hàng chục nghìn lõi), bạn có thể muốn sử dụng ngôn ngữ được biên dịch bởi vì những thứ như tải động các mô-đun Python sẽ cắn bạn trong quy mô nếu bạn thực hiện theo cách ngây thơ. Có nhiều cách để khắc phục nút cổ chai đó, như đã được các nhà phát triển PyClaw thể hiện, nhưng đơn giản hơn là tránh nó.
Ý kiến cá nhân
Tôi có khoảng một thập kỷ kinh nghiệm trong Fortran 90/95 và tôi cũng đã lập trình trong Fortran 2003. Tôi có khoảng năm năm kinh nghiệm lập trình bằng Python. Tôi sử dụng Python nhiều hơn tôi sử dụng Fortran bởi vì thật lòng mà nói, tôi làm được nhiều việc hơn trong Python. Phần lớn công việc tôi cần làm không yêu cầu tài nguyên siêu máy tính lớn và thường không đáng để phát triển lại bằng ngôn ngữ khác, vì vậy Python chỉ tốt để giải quyết ODE và PDE. Nếu tôi cần sử dụng ngôn ngữ được biên dịch, tôi sẽ sử dụng C, C ++ hoặc Fortran theo thứ tự đó.
Hầu hết các mã Fortran mà tôi thấy là xấu, chủ yếu là do phần lớn cộng đồng khoa học tính toán dường như không biết hoặc không thích bất kỳ thực hành tốt nhất nào được phát hiện bởi các kỹ sư phần mềm trong 30 năm qua. Để dí dỏm: không có khung thử nghiệm đơn vị tốt trong Fortran. (Điều tốt nhất tôi gặp phải là FUnit, bởi NASA, và điều đó không còn được duy trì nữa.) Có một vài khung kiểm tra đơn vị Python tốt, trình tạo tài liệu Python tốt và nói chung là nhiều ví dụ tốt hơn về thực hành lập trình tốt.