ความง่ายในการเรียนรู้
Python และ Fortran เป็นทั้งภาษาที่เรียนรู้ได้ง่าย อาจเป็นเรื่องง่ายที่จะหาสื่อการเรียนรู้ Python ที่ดีกว่าวัสดุการเรียนรู้ Fortran ที่ดีเพราะ Python มีการใช้กันอย่างแพร่หลายมากขึ้นและในปัจจุบัน Fortran ถือเป็นภาษา "พิเศษ" สำหรับการคำนวณเชิงตัวเลข
ฉันเชื่อว่าการเปลี่ยนจาก Python เป็น Fortran จะง่ายขึ้น Python เป็นภาษาที่ถูกตีความดังนั้นจำนวนขั้นตอนที่ใช้ในการทำให้โปรแกรมแรกของคุณทำงานมีขนาดเล็กลง (เปิดตัวแปลให้พิมพ์print("Hello, world!")
ที่พรอมต์) มากกว่าที่ใช้สำหรับ Fortran (เขียนโปรแกรม "Hello world" คอมไพล์รัน) ฉันคิดว่ามีวัสดุที่ดีกว่าในการสอนสไตล์เชิงวัตถุใน Python มากกว่าใน Fortran และมีรหัส Python สำหรับ GitHub มากกว่ารหัส Fortran
เริ่มต้นใช้งาน Windows
การติดตั้ง Python จะทำให้เจ็บปวดน้อยลง มีการแจกแจงของ Windows ที่มีอยู่ ฉันแนะนำให้ใช้การกระจายทางวิทยาศาสตร์เช่น Anaconda หรือ Enthought Canopy ไม่มีคอมไพเลอร์จริงๆ ล่ามใช้บทบาทนั้น คุณจะต้องการใช้ล่ามที่ใช้ CPython เนื่องจากมีไลบรารีที่เป็นตัวเลขมากกว่าและมันทำงานร่วมกับ C, C ++ และ Fortran ได้อย่างดี การใช้งานล่ามอื่น ๆ ได้แก่ Jython และ PyPy
บนเครื่อง Windows การติดตั้งคอมไพเลอร์ Fortran จะน่ารำคาญ คอมไพเลอร์บรรทัดคำสั่งโดยทั่วไปคือโปรแกรมเช่น gfortran, ifort (จาก Intel; ฟรีสำหรับการใช้งานส่วนตัว, ค่าใช้จ่ายเป็นอย่างอื่น) และ pgfortran (จาก PGI; รุ่นทดลองใช้ฟรีหรือค่าใช้จ่ายเงิน) ในการติดตั้งคอมไพเลอร์เหล่านี้คุณอาจต้องติดตั้งเลเยอร์ความเข้ากันได้ประเภท UNIX / POSIX บางประเภทเช่น Cygwin หรือ MinGW ฉันพบว่ามันเจ็บปวดที่จะทำงานด้วย แต่บางคนชอบเวิร์กโฟลว์นั้น คุณสามารถติดตั้งคอมไพเลอร์ด้วย GUI เช่น Visual Fortran (อีกครั้งคุณต้องจ่ายค่าลิขสิทธิ์)
บน Linux จะเป็นการง่ายกว่าในการติดตั้ง Python และคอมไพเลอร์ ฉันยังคงติดตั้งอนาคอนดาหรือเอนเทิร์นซี 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 สำหรับกรณีที่คุณต้องการผลิตภาพและประสิทธิภาพสูงเป็นข้อพิจารณารองเช่นในการสร้างต้นแบบอัลกอริธึมเชิงตัวเลขการประมวลผลข้อมูลและการสร้างภาพ คุณจะใช้ 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 ปีที่ผ่านมา หากต้องการปัญญา: ไม่มีกรอบการทดสอบหน่วยที่ดีใน Fortran (สิ่งที่ดีที่สุดที่ฉันเจอคือ FUnit โดย NASA และไม่ได้รับการบำรุงรักษาอีกต่อไป) มีกรอบการทดสอบหน่วย Python ที่ดีอยู่สองสามตัวเครื่องกำเนิดเอกสาร Python ที่ดีและตัวอย่างการปฏิบัติโปรแกรมที่ดี