ทักษะหลักใดที่นักวิทยาศาสตร์การคำนวณควรมี [ปิด]


52

นักวิทยาศาสตร์ทุกคนจำเป็นต้องรู้เกี่ยวกับสถิติเล็กน้อย: ความหมายถึงความสัมพันธ์กันคืออะไรช่วงความมั่นใจคืออะไร ในทำนองเดียวกันนักวิทยาศาสตร์ทุกคนควรรู้เล็กน้อยเกี่ยวกับการคำนวณ: คำถามคืออะไร มีเหตุผลอะไรที่จะคาดหวังให้นักวิทยาศาสตร์ที่ทำงานทุกคนรู้เกี่ยวกับการสร้างและการใช้ซอฟต์แวร์ รายการทักษะหลักของเรา --- สิ่งที่ผู้คนควรรู้ก่อนที่พวกเขาจะแก้ไขปัญหาอะไรกับ "คลาวด์" หรือ "พีต้า" ในชื่อ --- คือ:

  • การเขียนโปรแกรมพื้นฐาน (ลูป, เงื่อนไข, รายการ, ฟังก์ชั่นและไฟล์ I / O)
  • สคริปต์เชลล์ / พื้นฐานเชลล์
  • การควบคุมเวอร์ชัน
  • ทดสอบโปรแกรมมากแค่ไหน
  • SQL พื้นฐาน

มีจำนวนมากที่ไม่ได้อยู่ในรายการนี้: การเขียนโปรแกรมเมทริกซ์ (MATLAB, NumPy, และอื่น ๆ ), สเปรดชีตเมื่อใช้งานได้ดีพวกเขามีประสิทธิภาพเทียบเท่ากับภาษาโปรแกรมส่วนใหญ่) เครื่องมืออัตโนมัติสำหรับงานเช่น Make และอื่น ๆ

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


1
เป็นคำถามที่ดีมาก! แต่ฉันไม่ชัดเจนเกี่ยวกับสิ่งหนึ่ง: คุณหมายถึงอะไรโดยนักวิทยาศาสตร์การคำนวณ? นักวิทยาศาสตร์คนใดที่ใช้การคำนวณ หรือคนกลุ่มเล็ก ๆ จำนวนมากที่คิดว่าตำแหน่งวิชาชีพของพวกเขาเป็น "นักวิทยาศาสตร์การคำนวณ"?
David Ketcheson

9
ทำให้รายการคำถามไม่ดีในรูปแบบ Stack Exchange เราจำเป็นต้องทำสิ่งนี้ในทุก ๆ ไซต์หรือไม่?
dmckee

4
@Dan Community Wiki ไม่ใช่ข้อแก้ตัวสำหรับการอนุญาตคำถามที่ไม่ได้อยู่ในเว็บไซต์ ฉันต้องการสนับสนุนผู้ที่ตอบคำถามจาก Jed และอย่างน้อยลองและอธิบายว่าทำไมคุณถึงต้องการทักษะที่แน่นอนหรือไม่ต้องการผู้อื่น
Ivo Flipse

5
@IvoFlipse: นี่เป็นคำถามที่อยู่ในเว็บไซต์ในบางรูปแบบ อาจไม่เป็นไปตามที่ระบุไว้ในปัจจุบัน; บางทีมันอาจจำเป็นต้องถูกแฮ็กให้เป็นคำถามที่เล็กลงและใช้ถ้อยคำซ้ำอีกครั้ง แต่ปัญหาของวิศวกรรมซอฟต์แวร์ที่น่าสงสารในวิทยาศาสตร์การคำนวณเป็นสิ่งที่สำคัญอย่างยิ่งโดยเฉพาะอย่างยิ่งเนื่องจากวิทยาศาสตร์การคำนวณในฐานะที่เป็นระเบียบยังอยู่ในขั้นตอนการก่อสร้าง บทความในธรรมชาตินี้ระบุว่าทำไม เกร็กกำลังให้บริการที่ยอดเยี่ยมแก่ชุมชนวิทยาศาสตร์การคำนวณผ่านเว็บไซต์ของเขา
Geoff Oxberry

5
ฉันไม่เห็นด้วยกับคำถามนี้ที่ถูกปิด โปรดดู (และลงคะแนนให้กับ) meta.scicomp.stackexchange.com/questions/179/…
David Ketcheson

คำตอบ:


46

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

ความรู้เกี่ยวกับโดเมน (เช่นพื้นหลังด้านฟิสิกส์และวิศวกรรม)

ทุกคนควรรู้พื้นฐานของชั้นเรียนของปัญหาที่พวกเขากำลังแก้ไข หากคุณทำงานกับ PDE นี่หมายถึงความคุ้นเคยทั่วไปกับ PDE บางคลาส (เช่นปัวซองความยืดหยุ่นและการบีบอัดและการบีบอัด Navier-Stokes) โดยเฉพาะคุณสมบัติที่สำคัญในการจับ "แน่นอน" และสิ่งที่สามารถแยกออกได้ ข้อผิดพลาด (นี่เป็นการแจ้งวิธีการเลือกเกี่ยวกับการอนุรักษ์ในท้องถิ่นและผู้รวบรวม symplectic) คุณควรรู้เกี่ยวกับฟังก์ชั่นและประเภทการวิเคราะห์ที่น่าสนใจสำหรับแอพพลิเคชั่น (การเพิ่มประสิทธิภาพของการยกและลาก, การทำนายความล้มเหลว, การผกผันของพารามิเตอร์, ฯลฯ )

คณิตศาสตร์

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

วิศวกรรมซอฟต์แวร์และห้องสมุด

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

เครื่องมือ

การทำงานกับซอฟต์แวร์เป็นส่วนสำคัญของวิทยาศาสตร์การคำนวณ ความชำนาญด้านภาษาที่คุณเลือกการสนับสนุนโปรแกรมแก้ไข (เช่นแท็กการวิเคราะห์แบบคงที่) และเครื่องมือการดีบัก (ดีบักเกอร์ valgrind) ช่วยปรับปรุงประสิทธิภาพการพัฒนาของคุณได้อย่างมาก หากคุณทำงานในสภาพแวดล้อมแบบแบตช์คุณควรทราบวิธีการส่งงานและรับเซสชันแบบโต้ตอบ หากคุณทำงานกับรหัสที่คอมไพล์แล้วความรู้ในการทำงานของคอมไพเลอร์ลิงค์และเครื่องมือสร้างเช่น Make จะช่วยประหยัดเวลาได้มาก การควบคุมเวอร์ชันเป็นสิ่งจำเป็นสำหรับทุกคนแม้ว่าคุณจะทำงานคนเดียว เรียนรู้ Git หรือ Mercurial และใช้มันสำหรับทุกโครงการ หากคุณพัฒนาไลบรารีคุณควรรู้มาตรฐานภาษาอย่างสมบูรณ์เพื่อให้คุณเขียนโค้ดพกพาได้เกือบทุกครั้งในครั้งแรกไม่เช่นนั้นคุณจะถูกฝังในคำขอการสนับสนุนผู้ใช้เมื่อรหัสของคุณไม่ได้สร้างในสภาพแวดล้อมที่ขี้ขลาด

น้ำยาง

LaTeX เป็นมาตรฐานจริงสำหรับสิ่งพิมพ์ทางวิทยาศาสตร์และการทำงานร่วมกัน ความชำนาญกับ LaTeX เป็นสิ่งสำคัญที่จะสามารถสื่อสารผลลัพธ์ของคุณทำงานร่วมกันในข้อเสนอ ฯลฯ การเขียนสคริปต์การสร้างตัวเลขก็เป็นสิ่งสำคัญสำหรับการทำซ้ำและการให้ข้อมูล


7
ฉันเห็นด้วยกับเจด น้ำยางมีความจำเป็นอย่างยิ่ง! :)
เปาโล

1
ฉันจะเปลี่ยน "ฟิสิกส์และวิศวกรรม" เป็นความเชี่ยวชาญเฉพาะด้าน ท้ายที่สุดเราไม่ใช่นักฟิสิกส์หรือวิศวกร จิตวิญญาณของคำตอบนั้นอยู่ในสถานที่ที่เหมาะสม แต่มีข้อสันนิษฐานที่ชัดเจน
Fomite

ขอบคุณ @EpiGrad ฉันเปลี่ยนเป็น "ความรู้เกี่ยวกับโดเมน" โดยใช้เป็นตัวอย่าง
Jed Brown

รายการที่ดี ควรมีความเข้าใจพื้นฐานเกี่ยวกับปัญหาด้านประสิทธิภาพด้วย ฉันได้พบกับผู้คนจำนวนมากเกินไปที่ไม่เข้าใจแนวคิดเรียบง่ายของการทำโปรไฟล์ NB: ประสิทธิภาพควรจะหมายถึงไม่เพียง แต่ปัญหาความเร็ว แต่ยังใช้หน่วยความจำ
Faheem Mitha

Typos: "probelms" และ "burried" SE จะไม่ให้ฉันแก้ไข - การแก้ไขน้อยเกินไป
Faheem Mitha

26

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

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

จุดหนึ่งที่เกี่ยวข้องกับวิทยาศาสตร์คอมพิวเตอร์เล็กน้อยที่ผมอยากจะเพิ่มเติมก็คือการแนะนำสั้น ๆ เกี่ยวกับการทำงานของโปรเซสเซอร์และสิ่งที่ดีและสิ่งที่ไม่ดี ตัวอย่างเช่น:

  • การเพิ่มและการคูณนั้นรวดเร็วฟังก์ชั่นการหารหรือยอดเยี่ยมไม่ใช่ ฉันเคยเห็นผู้ชายที่โตแล้วมาแทนที่การดำเนินการรากที่สองด้วยสิ่งที่ต้องใช้สามแผนกและคิดว่าพวกเขาทำสิ่งที่ยอดเยี่ยม (การหารและรากที่สองมีราคาแพง)
  • แคชระดับ 3 เริ่มใหญ่ขึ้นทุกปีใช่ แต่แคชระดับ 0 คือแคชที่เร็วจริง ๆ ยังคงมีเพียงไม่กี่กิโลไบต์
  • คอมไพเลอร์ไม่ใช่เวทมนตร์ พวกเขาอาจคลี่ลูปขนาดเล็กหรือ vectorize การดำเนินการตรงไปข้างหน้ามาก แต่พวกเขาจะไม่เปลี่ยน bubbleort ที่เป็น quicksort
  • วิธีการเรียกใช้บนวัตถุ polymorphic ที่มีการสืบทอดหลายครั้งในลูปด้านในสุดของคุณอาจจะเป็นแนวคิดที่หวาน แต่มันจะทำให้ซีพียูของคุณต้องการฆ่าตัวตาย

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

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


2
ไม่น่าเบื่อเลย ฉันจะเรียนหลักสูตรนี้ถ้ามี :-)
Faheem Mitha

18

ฉันอาจจะเพิ่มสิ่งนี้ในภายหลัง แต่สำหรับผู้เริ่มฉันจะลบ "shell scripting" และแทนที่ด้วย "Python scripting" โดยเฉพาะ Python สามารถพกพาได้ง่ายกว่าการเขียนสคริปต์เชลล์และสามารถอ่านได้มากกว่าภาษาเชลล์และสคริปต์อื่น ๆ ห้องสมุดมาตรฐานขนาดใหญ่และความนิยมในด้านวิทยาศาสตร์ (ด้วยข้อยกเว้นที่เป็นไปได้ทางชีววิทยาซึ่งใช้ Perl) ทำให้มันเป็นภาษากลางที่ใช้คอมพิวเตอร์ได้ดีไม่ต้องพูดถึงภาษาแรกที่ดีสำหรับการเรียนรู้การเขียนโปรแกรม ตอนนี้เป็นภาษาแรกที่สอนให้กับวิชาเอก EECS ที่ MIT และเป็นที่นิยมในตลาดงานโดยเฉพาะอย่างยิ่งในการคำนวณทางวิทยาศาสตร์ เอกสารออนไลน์ของมันมีอยู่มากมายและยังมีข้อความการเขียนโปรแกรมจำนวนหนึ่งซึ่งอิงจาก Python ที่มีอยู่ออนไลน์

การใช้ Python คุณสามารถสอนโครงสร้างการเขียนโปรแกรมพื้นฐานรวมถึงการเขียนสคริปต์ นอกจากนี้ Python ยังมีการสนับสนุนการทดสอบหน่วยที่ยอดเยี่ยมดังนั้น Python จึงสามารถใช้ในการสอนการทดสอบหน่วยได้เช่นกัน Python ยังมี API ฐานข้อมูลที่กว้างขวาง (ซึ่งสามารถแทนที่หรือเพิ่มเติมได้ที่ต้องเรียนรู้ SQL) และยูทิลิตีบิลด์คู่ที่มีฟังก์ชั่น Make-like ฉันชอบ SCons มากกว่า Make เพราะฉันพบว่า Python ง่ายต่อการจัดทำเอกสารและทดสอบมากกว่าเชลล์สคริปต์

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

Python ยังไม่ตรงกับ MATLAB SciPy และ NumPy ยังมีอีกหลายวิธีในการใช้งาน แต่สำหรับยูทิลิตี้ทั่วไปฉันใช้ Python สำหรับงานที่หลากหลายกว่า MATLAB


7
ฉันช่วยไม่ได้ แต่ไม่เห็นด้วยกับเรื่องนี้อย่างสมบูรณ์ Python ปวดหัวกับผู้ดูแลระบบเนื่องจากเป็นเป้าหมายที่เคลื่อนไหวเล็กน้อย นักวิทยาศาสตร์การคำนวณควรมีความเข้าใจพื้นฐานของการทุบตีหรือ csh สำหรับการติดกาวขั้นพื้นฐานที่สุดของสิ่งต่าง ๆ เข้าด้วยกันและการทำงานในระบบที่พวกเขาน่าจะใช้ Python นั้นยอดเยี่ยมและฉันสนับสนุนให้คุณสนับสนุนให้คนใช้เรียนรู้ได้ แต่ไม่ต้องเสียค่าใช้จ่ายในการใช้งานเชลล์พื้นฐาน
Bill Barth

7
@BillBarth: ฉันคิดว่านักวิทยาศาสตร์การคำนวณทุกคนต้องเรียนรู้การทุบตีพื้นฐานหรือ csh สำหรับสคริปต์พื้นฐานมาก ๆ เหตุผลที่ฉันสนับสนุนให้ใช้ Python สำหรับการเขียนสคริปต์เชลล์นอกเหนือจากงานพื้นฐานเหล่านั้นก็เพราะฉันได้รับสคริปต์สคริปต์ทุบตีบรรทัดหนึ่งพันเส้นที่ใช้งานโปรแกรมเป็นหลัก มันส่งไฟล์กลับไปกลับมาเป็น semaphores เรียกใช้ PBS ซ้ำ ๆ และไม่มีวิธีการทดสอบเลย การเขียนสคริปต์ของเชลล์นั้นยอดเยี่ยมสำหรับงานเล็ก ๆ แต่ไม่ใช่งานที่มีขนาดใหญ่และฝันร้ายของท่อและเทปฟองนี้ทำให้ฉันต้องเสียเวลาสองปีในการทำวิทยานิพนธ์ของฉัน
Geoff Oxberry

2
อย่างที่ฉันพูดฉันไม่เห็นด้วยว่า "เรียนรู้หลาม" อาจเหมาะสมสำหรับรายการ ฉันแค่ไม่อยากทำมันด้วยค่าใช้จ่ายของ "shell scripting" ทั้งคู่มีความสำคัญและไม่มีใครให้คุณเรียกใช้ ipython เป็นเชลล์ของคุณดังนั้นการเขียนสคริปต์เชลล์จึงมีความสำคัญอย่างมาก
Bill Barth

3
@BillBarth: ฉันไม่แนะนำให้ Python แทนที่เชลล์ ฉันแค่แนะนำว่า Python จะแทนที่ bash สำหรับการสร้างสคริปต์ ฉันเชื่อว่าถ้าคุณเรียนรู้การทุบตีพื้นฐานคุณรู้พอที่จะเขียนสคริปต์โดยไม่มีโครงสร้างการควบคุมดังนั้นไม่จำเป็นต้องเจาะลึกลงไปใน "การทุบตีสคริปต์" ทันทีที่คุณต้องการรวมโครงสร้างการควบคุมคุณควรเปลี่ยนไปใช้ภาษาอื่นเนื่องจากการเขียนโปรแกรมใน bash นั้นเป็นปัญหาสำหรับซอฟต์แวร์และผู้ดูแลห้องสมุด
Geoff Oxberry

1
+1 Python เป็นภาษาโปรแกรมหลักของฉันมาระยะหนึ่งแล้ว มันไม่สมบูรณ์แบบ แต่จะทำจนกว่าจะมีคนคิดค้นภาษาการเขียนโปรแกรมที่สมบูรณ์แบบ
Faheem Mitha

14

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

การอ้างอิงที่ชื่นชอบสำหรับหัวข้อนี้น่าจะเป็น "สิ่งที่นักวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรรู้เกี่ยวกับเลขทศนิยม (2534)" โดย David Goldberg http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.6768


1
เอกสารนี้มีการกล่าวถึงหลายครั้งในฟอรัมออนไลน์ แต่มันเป็นบทความที่ยาวและหนาแน่นและฉันไม่แน่ใจว่ามีคนจำนวนมากที่สามารถนำสิ่งที่มีประโยชน์ออกไปได้
johngreen

12

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

คณิตศาสตร์:

  1. การวิเคราะห์เชิงตัวเลข
  2. พีชคณิตเชิงเส้น
  3. สมการเชิงอนุพันธ์สามัญ, บางส่วนและ / หรือสุ่ม
  4. การเพิ่มประสิทธิภาพ
  5. สถิติและ / หรือความน่าจะเป็น
  6. ทฤษฎีผกผัน

วิทยาศาสตร์คอมพิวเตอร์:

  1. อัลกอริทึม
  2. โครงสร้างข้อมูล
  3. การเขียนโปรแกรมแบบขนาน (MPI, OpenMP, CUDA ฯลฯ )
  4. การสร้างภาพทางวิทยาศาสตร์
  5. สถาปัตยกรรมคอมพิวเตอร์
  6. ใช้สภาพแวดล้อม Linux

วิทยาศาสตร์ / วิศวกรรม - ขึ้นอยู่กับแอปพลิเคชันที่คุณต้องการให้เชี่ยวชาญในกรณีเฉพาะของฉัน (วิศวกรรมศาสตร์) ฉันจะเพิ่มสิ่งต่าง ๆ เช่นกลศาสตร์ต่อเนื่องการถ่ายเทความร้อนพลศาสตร์ของไหลวิธีการไฟไนต์เอลิเมนต์ ฯลฯ ฉันจะบอกว่า คุณมีสาขาวิชาวิทยาศาสตร์หลายแขนงยิ่งคุณมีความสามารถหลากหลายมากขึ้นในฐานะนักวิทยาศาสตร์การคำนวณ


คุณสามารถอธิบายรายละเอียดเกี่ยวกับ "Inverse Theory" ได้หรือไม่?
Faheem Mitha

1
@FaheemMitha: โดยปกติเราตั้งค่าพารามิเตอร์ของแบบจำลองก่อน (เช่นสมการเชิงอนุพันธ์ย่อย) จากนั้นสังเกตพฤติกรรมของระบบ "ปัญหาการผกผัน" กำลังย้อนกลับ เราเริ่มต้นด้วยการสังเกตการส่งออกของระบบและพยายามกำหนดพารามิเตอร์ของแบบจำลองที่สร้างการสังเกตเหล่านี้ ทฤษฎีผกผันอธิบายวิธีการในการทำภารกิจนี้ให้สำเร็จ
พอล

ขอบคุณสำหรับคำอธิบาย คุณมีลิงค์ / อ้างอิงที่ดีสำหรับหัวข้อนี้หรือไม่?
Faheem Mitha

2
en.wikipedia.org/wiki/Inverse_problem เป็นจุดเริ่มต้นที่ดี space.fmi.fi/graduateschool/Lectures07/HK_inversion.pdfก็มีภาพรวมที่ดีเช่นกัน แต่เพื่อความเข้าใจที่ลึกซึ้งยิ่งขึ้นฉันอยากจะแนะนำหนังสือเช่นamazon.com/Parameter-Estimation-Inverse-Problems-Second/dp/…
Paul

4

คำถามที่ยอดเยี่ยมตามด้วยคำตอบที่น่าสนใจ! ฉันต้องการจะชนด้วยนอกจากนี้เพียงเล็กน้อย เท่าที่ฉันเคยมีประสบการณ์ (ตัวฉันเองและตัวแทน) เครื่องมือ All-in-One มักจะรู้ดีจริงๆ เครื่องมือดังกล่าวอาจเป็น MATLAB, Octave หรือ Python (กับไลบรารี่) เมื่อใดก็ตามที่คุณมีปัญหาใน "เขตสบาย" ความคิดที่ดี (เท่าที่ฉันรู้และคิด) จะลองใช้เครื่องมือ All-in-One คุณสามารถลองเขียนรหัสของคุณเองในภายหลัง ความสวยงามของแพ็คเกจดังกล่าวคือการเขียนโปรแกรมไม่รบกวนความเข้าใจในสิ่งที่คุณกำลังทำ

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

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


-1

สามัญสำนึกและอุทรความรู้สึก ... หลังมีเพียงเวลาและหลังจากที่ "รอดชีวิต" สองประสบการณ์น่าอับอายในโลกที่เลวร้าย


3
ฉันไม่รู้ว่า "ความรู้สึกไส้" เป็นทักษะจริง ๆ หรือไม่ มันเป็นเพียงแค่ปฏิกิริยาตอบสนองต่อสัญชาตญาณของประสบการณ์ก่อนหน้า
naught101
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.