ฉันควรเรียนภาษาใดสำหรับวิทยาศาสตร์การคำนวณ


11

ฉันใหม่ทั้งหมดเกี่ยวกับความคิดของวิทยาศาสตร์การคำนวณและกำลังมองหาจุดเริ่มต้นที่ดี

ฉันเข้าใจว่าไม่มีภาษาที่ดีที่สุดอย่างเป็นกลาง แต่ฉันต้องการเรียนรู้ภาษาที่มีความแข็งแกร่งและโดดเด่นอย่างไม่น่าเชื่อเกี่ยวกับวิทยาศาสตร์การคำนวณ - มีการพิจารณาว่ามีความสามารถและประสิทธิภาพที่ยอดเยี่ยม

ในการเริ่มต้นฉันก็เอนตัวไปสู่การสร้างแบบจำลองที่เกี่ยวข้องกับพันธะอะตอมและการโต้ตอบโดยมีข้อกำหนดสำหรับการนำเสนอ / การจำลองเชิงกราฟิก

ภาษาบางภาษามีแนวโน้มที่จะดีกว่าสำหรับบางสาขามากกว่าภาษาอื่น (เช่นฟิสิกส์กับคณิตศาสตร์บริสุทธิ์) หรือไม่ หรือเลือกภาษาจากปัจจัยอื่น ๆ ?

ฉันได้ยินชื่อฟอร์แทรนถูกโยนไปรอบ ๆ

ข้อเสนอแนะ?


1
C ++ และ Fortran เป็นภาษาที่รู้จักกันดีในชุมชน เมื่อเร็ว ๆ นี้คุณสามารถเห็นการใช้ภาษาแบบไดนามิกที่เพิ่มขึ้น บ่อยครั้งที่คุณเลือกห้องสมุดและไม่ใช่ภาษาของคุณ
vanCompute

9
ฉันนึกถึง dictum ที่โปรแกรมเมอร์จริงสามารถเขียน Fortran ในภาษาใด ๆ
hardmath

1
นี่เป็นคำถามที่คล้ายกันมากกับคำตอบมากมาย: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
OndřejČertík

1
"ฉันเข้าใจว่าไม่มีภาษาที่ดีที่สุดอย่างเป็นกลาง" - อย่างแม่นยำดังนั้นทำไมไม่เรียนรู้ที่จะเป็นผู้ไม่เชื่อเรื่องภาษาเพื่อให้คุณสามารถเขียนในสิ่งที่ภาษาโยนคุณ?
JM

2
คุณต้องเชี่ยวชาญภาษาอังกฤษ ก็ไม่ได้คุณจะไม่ได้รับทุกที่ในวิทยาศาสตร์การคำนวณ
โยฮันเนส

คำตอบ:


15

ส่วนใหญ่จะเป็นไลบรารีตัวเลขที่มีให้คุณซึ่งจะช่วยในการทำงานให้สำเร็จ C / C ++ มีไลบรารีตัวเลขจำนวนมากที่นำมาใช้กับพวกเขา แต่การเป็นภาษาระดับต่ำนั้นไม่ใช่วิธีที่ดีที่สุดในการสร้างต้นแบบอย่างรวดเร็ว

ฉันคิดว่าจะใช้วิธีแก้ปัญหาอย่างรวดเร็วฉันจะแนะนำให้ใช้บางอย่างเช่น Matlab หรือ Mathematica พวกเขามีชุดเครื่องมือขนาดใหญ่และอยู่ในระดับสูงมาก เป็นไปได้มากที่การใช้งานของคุณที่นั่นจะไม่ขยายไปถึงการใช้งานจริง แต่อาจเป็นสนามเด็กเล่นที่ดีสำหรับการลองใช้วิธีการต่าง ๆ เมื่อคุณรู้เส้นทางที่จะใช้คุณสามารถนำบางสิ่งบางอย่างไปใช้ใน C / C ++ ได้อย่างมีประสิทธิภาพมากขึ้น


4
คนจำนวนมาก - ทั้งในและนอกสถาบันการศึกษา - อย่าเชื่อถือรหัสจริงๆเว้นแต่จะมีชุดการทดสอบอัตโนมัติน้อยที่สุด ฉันไม่รู้ว่าการใช้เครื่องมือเป็นอย่างไรสำหรับสิ่งเหล่านี้ใน matlab และ mathematica แต่มีแพ็คเกจที่ดีมากมายสำหรับภาษากระแสหลักเช่น Python และ C ++
cjordan1

3
MATLAB มี MATLAB xUnit แต่ Python และ C ++ มีชุดการทดสอบ (และในความเห็นของฉันดีกว่า) มากกว่า
Geoff Oxberry

24

งูหลาม!

  1. เริ่มต้นโดยตรงโดยใช้ไลบรารีnumpyสคริปต์ขนาดเล็กและเชลล์การโต้ตอบipython
  2. ได้รับสูงมากขึ้นด้วยความช่วยเหลือของหลายหนังสือฟรีและแบบฝึกหัด
  3. รับผลผลิตมากขึ้นโดยใช้scipyเป็นส่วนหน้าไปยังรูทีนตัวเลขที่มีประสิทธิภาพสูงและmatplotlibสำหรับการสร้างภาพ
  4. ใช้ประโยชน์จากโมดูลที่ได้รับการพัฒนาและมีประสิทธิภาพสำหรับการคำนวณทางวิทยาศาสตร์เช่นKrypy , FeNiCSและ อื่น ๆ อีกมากมาย
  5. ขอให้สังเกตว่าการเปลี่ยนแปลงอย่างราบรื่นระหว่างการเขียนโปรแกรมแบบแบนและแบบเชิงวัตถุและแบบแยกส่วนของ Python ทำให้โครงการขนาดใหญ่จัดการได้ง่าย
  6. ทำให้รหัสของคุณให้เร็วที่สุดเท่า C หรือ Fortran โดยเพียงแค่เขียนใหม่ส่วนที่สำคัญในCython นอกจากนี้คุณยังสามารถรวมถึงขั้นตอนการเขียนใน Fortran หรือ C

การถอดความสิ่งนี้ฉันคิดว่าเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหาในการคำนวณทางวิทยาศาสตร์ เริ่มต้นด้วยการรับมือกับปัญหาด้วยการเล่นกับของเล่นตัวอย่างในสคริปต์ขนาดเล็ก เป็นระบบมากขึ้นและตั้งค่ารหัส จากนั้นทำให้โค้ดทำงานได้ !!! สุดท้ายหากจำเป็นให้ทำการเพิ่มประสิทธิภาพของรหัส อย่าบูรณาการล้อและไม่ทำการเพิ่มประสิทธิภาพก่อนวัย

(ข้อเพิ่มเติม: Python มาฟรี - ไม่มีปัญหาลิขสิทธิ์, ชุมชนขนาดใหญ่เช่นใน stackoverflow, โมดูลสำหรับการเขียนโปรแกรมที่ดีเช่นการทดสอบหน่วยหรือการบันทึก ... )


11

ลองหลามตามที่อธิบายไว้เช่นในหนังสือหลามสคริปต์สำหรับวิทยาศาสตร์



5

Fortran: Matlab เหมือนง่ายต่อการเรียนรู้และใช้งานและรับผลผลิตอย่างรวดเร็ว แต่ดีสำหรับการคำนวณเชิงตัวเลขเท่านั้น

C ++: เป็นเรื่องยากที่จะเชี่ยวชาญ (จะใช้เวลาหลายปี) แต่ใช้งานนอกระบบคอมพิวเตอร์เป็นจำนวนมาก (ความปลอดภัยของงาน)

Python: แนะนำมากในวันนี้ แต่ช้าเกินไปสำหรับงานที่ไม่สำคัญ คุณจะเขียนเคอร์เนลราคาแพงทั้งหมดของคุณใน C แล้วเรียกมันจาก Python ซึ่งหมายความว่าคุณจะต้องเรียนรู้ (อย่างน้อย) สองภาษา


1
ฉันขอยืนยันว่าช่วงการเรียนรู้สำหรับ Fortran และ C ++ นั้นค่อนข้างคล้ายคลึงกัน ฉันเลือกทักษะที่เพียงพอทั้งสองอย่างเพื่อแก้ปัญหาที่ง่ายที่สุดในเวลาไม่กี่เดือนแต่ละอันมาจากพื้นหลังของ java, matlab และ c # ฉันเห็นว่า c ++ นั้นง่ายต่อการเรียนรู้มากกว่า fortran เนื่องจากขึ้นอยู่กับภาษาที่ใครบางคนรู้เพราะมีโค้ดขนาดใหญ่ส่วนใหญ่เขียนไว้ในเวอร์ชันเก่า
Godric Seer

@Godric: ที่หน้า 600 ~ มาตรฐาน Fortran 2008 น้อยกว่าครึ่งหนึ่งของ C ++ 11 (~ 1300 หน้า)
stali

1
@stali ใช่ แต่ตัวอย่างเช่นฉันทำงานกับรหัสมรดกประมาณหนึ่งในสี่ล้านบรรทัดที่เขียนใน Fortran77 ดังนั้นฉันจึงต้องเรียนรู้สไตล์ 77 เพื่อให้สามารถทำงานกับมันได้ 90-95 เพื่อทำการเปลี่ยนแปลงที่บำรุงรักษาได้ (ตั้งแต่บล็อกทั่วไปมีความน่าสนใจ) และจากนั้น '08 จะไม่ติดอยู่ในทศวรรษที่ผ่านมา Fortran ในขณะที่ภาษาเก่ามีการเปลี่ยนแปลงอย่างมากในช่วงทศวรรษที่ผ่านมาและถ้าคุณไม่เริ่มต้นจากการเกาการเรียนรู้มรดกของมันนั้นไม่ใช่เรื่องเล็กน้อย
Godric Seer

2
ฉันไม่เห็นด้วยกับข้อความที่ว่า Python นั้น "ช้าเกินไปสำหรับงานที่ไม่สำคัญ" หากคุณเขียนการคูณเมทริกซ์เวกเตอร์ (และอื่น ๆ ) ใน Python คุณจะมีเวลาไม่ดี มีการทำสิ่งที่เป็นนามธรรมให้กับคุณแล้ว: NumPy, Scipy อาจมีทุกอย่างที่คุณต้องการ หรือหนึ่งใน 50,000 แพ็คเกจอื่น ๆ
Nico Schlömer

1
@ NicoSchlömerฉันเห็นด้วยกับ "ช้าเกินไปสำหรับงานที่ไม่สำคัญ" การจำลองของฉันใน Python (Numpy / Scipy) ช้ากว่ารหัสเดียวกันในรุ่น Fortran90 ประมาณ 10 เท่า ฉันแนะนำ Fortran90 หรือ C ++
fronthem

4

คำตอบสั้น ๆ
เรียนรู้เกี่ยวกับพื้นฐานของโค้ดเชิงวัตถุผ่านไพ ธ อนและเรียนรู้เกี่ยวกับพื้นฐานของวิทยาการคอมพิวเตอร์ผ่าน C เมื่ออย่างน้อยคุณก็โอเคกับภาษาอื่น ๆ ทั้งสองเรียนรู้ C ++ เพราะคุณสามารถทำอะไรได้มากใน C ++ และทำให้มันทำงานได้อย่างรวดเร็ว (แม้ว่ามันจะใช้เวลาตลอดไปในการเขียน)

คำตอบอีกต่อไป
นี่คือสิ่ง: สำหรับโครงการแรกของคุณคุณจะอยู่ในห้องทดลองของใครบางคนที่ทำงานกับรหัสของคนอื่น ในกรณีนี้พวกเขาจะเป็นคนที่เลือกภาษาการเขียนโปรแกรม ซึ่งโดยส่วนตัวแล้วฉันคิดว่ามันเยี่ยมมาก!

ฉันหมายความว่าในฐานะผู้เริ่มต้นคุณจะไม่รู้จักก้นของคุณจากข้อศอกสักพักหนึ่งและโดยเฉพาะอย่างยิ่งเมื่อคุณไม่รู้ว่าคุณกำลังทำอะไร ดังนั้นจึงเป็นเรื่องดีที่มีโครงสร้างและข้อ จำกัด ที่มาจากการทำงานกับรหัสของคนอื่นและเป็นเรื่องดีที่มีแรงจูงใจและความตื่นเต้นที่สามารถมาจากการทำงานในโครงการจริงเท่านั้น

อย่างไรก็ตามไม่ว่าภาษาของคุณจะใช้ห้องปฏิบัติการใด (โดยเฉพาะอย่างยิ่งถ้าเป็น Matlab) คุณควรเรียนรู้ภาษาไพ ธ อน C และ C ++ โดยเฉพาะอย่างยิ่งถ้าคุณไม่ได้มาจากพื้นหลังวิทยาศาสตร์คอมพิวเตอร์คุณต้องอ่าน Kernighan และ Ritchie's "ภาษา C การเขียนโปรแกรม" อายุ 35 ปีและให้ความประทับใจที่ชัดเจนว่าผู้เขียนเขียนโปรแกรมลงบนบัตรเจาะ แต่เป็นนกที่หายากที่สุด: หนังสือวิทยาศาสตร์คอมพิวเตอร์ที่ไร้กาลเวลา มันจะทำให้หลาย ๆ อย่างชัดเจนขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.