ฉันควรใช้ภาษาอะไรเมื่อสอนหลักสูตรระดับปริญญาตรีในการเขียนโปรแกรมคอมพิวเตอร์


22

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


9
@ k20: ฉันหวังว่าข้อเสนอแนะของคุณคือลิ้นในแก้ม; มิฉะนั้นจะเป็นการละเมิดจริยธรรมทางวิชาการอย่างร้ายแรง
Christian Clason

6
@ k20: ทั้งหมดนี้อยู่นอกหัวข้อ แต่การเลือกซอฟต์แวร์ตาม kickbacks (ใด ๆ ) กับครูและไม่ได้อยู่ในเนื้อหาที่จะสอนนั้นผิดจรรยาบรรณแน่นอน (เพียงเพื่อให้ชัดเจนมันเป็น "swag" ที่ฉันคัดค้าน) สิ่งที่ทำกันคือ บริษัท ให้ซอฟต์แวร์ที่มีราคาลดลงอย่างมีนัยสำคัญ (หรือฟรี)
Christian Clason

3
@ k20: โปรดจำไว้ว่าแรงจูงใจของ บริษัท ซอฟต์แวร์นั้นไม่เห็นแก่ผู้อื่นทั้งหมด: นักเรียนของคุณอาจได้รับซอฟต์แวร์ฟรีในตอนนี้ แต่ก็เป็นไปได้ว่าพวกเขาจะต้องซื้อซอฟต์แวร์ในภายหลังในชีวิตของพวกเขา (หรือเรียนรู้ใหม่ ซอฟต์แวร์).
Wrzlprmft

3
@ k20 Matlab และ Mathematica ไม่ได้ใช้มากนักในการคำนวณทางวิทยาศาสตร์อย่างจริงจัง พวกเขาเป็นเครื่องมือสำรวจเพิ่มเติมสำหรับทดลองความคิด หากวัตถุประสงค์ของหลักสูตรคือการสอนอัลกอริธึมพื้นฐานสิ่งเหล่านี้อาจเหมาะสม (โดยเฉพาะ Matlab) แต่ถ้าเป็นการเขียนโปรแกรมทั่วไปคุณต้องไปกับภาษาโปรแกรมทั่วไปเช่น Python ของ C ++
Truman Ellis

2
MATLAB มีการออกแบบ (ถ้าฉันไม่ได้เป็นนักการทูตฉันจะบอกว่ามีข้อบกพร่อง :)) ที่ต้องใช้สิ่งที่เป็นภาษาอื่นที่ไม่ดี สิ่งอื่น ๆ อีกมากมายแตกต่างจากสิ่งอื่นดังนั้นการออกไปข้างนอกอาจเป็นเรื่องยาก Mathematica มีในความคิดของฉันการออกแบบที่สวยงาม แต่มันไม่มีอะไรคล้ายกับภาษาอื่น ๆ (ยกเว้นบางที Lisp แต่ไม่ได้ใช้ในวิทยาศาสตร์) ดังนั้นสิ่งที่คุณเรียนรู้ส่วนใหญ่ไม่มีประโยชน์ที่จะเรียนรู้ภาษาอื่น OTOH ไปที่ C <-> Python ง่ายกว่ามาก
Davidmh

คำตอบ:


32

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

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

แต่ตอนนี้มีบางอย่างเกี่ยวกับข้อดีและข้อเสียของภาษาที่ฉันคุ้นเคย โปรดทราบว่าส่วนใหญ่มาจากประสบการณ์ของฉันในฐานะนักฟิสิกส์การคำนวณและบางสิ่งนี้อาจขึ้นอยู่กับสาขาเฉพาะกลุ่มงานมหาวิทยาลัย ฯลฯ

หลาม

โดยทั่วไปฉันแนะนำให้ใช้ Numpy ตั้งแต่เริ่มต้นและฉันคาดว่าจะใช้ในต่อไปนี้

ข้อดี:

  • มันง่ายที่จะเรียนรู้และก็คือการอ่านรหัสของคนอื่น (เช่นรหัสตัวอย่างของคุณ แต่ยังเป็นรหัสนักเรียนสำหรับผู้สอนด้วย)
  • อินพุตและเอาต์พุต (ซึ่งไม่ควรจะเป็นจุดสำคัญของหลักสูตรของคุณ) จะได้รับการคุ้มครองอย่างเต็มที่โดยprint, Numpy ของsavetxtและและอาจloadtxt sys.argvสามารถแนะนำได้ทันทีและไม่กินเวลาในการเขียนโปรแกรมมากนัก
  • คุณไม่จำเป็นต้องจัดการหรือต้องการเพียงเล็กน้อยในการจัดการรายละเอียดเช่นการแสดงตัวเลขการจัดการหน่วยความจำชนิดข้อมูล ดังนั้นจึงรวดเร็วในการตั้งโปรแกรมและคุณสามารถมุ่งเน้นไปที่อัลกอริทึมจริง
  • มันไม่ใช่ภาษาที่รวบรวม สิ่งนี้มีข้อดีสองข้อ: นักเรียนไม่จำเป็นต้องจัดการกับคอมไพเลอร์และนักเรียนสามารถทดสอบเนื้อหาในคอนโซลได้โดยตรงโดยไม่ต้องคอมไพล์รีสตาร์ทและรันโปรแกรมอีกครั้ง การดีบักนั้นง่ายกว่า
  • มีไลบรารีที่ใช้งานง่ายสำหรับเกือบทุกอย่าง
  • คุณไม่จำเป็นต้องเรียนรู้ภาษาสคริปต์เพิ่มเติมเช่นเชลล์สคริปต์, สร้าง, Gnuplot และอื่น ๆ ทั้งหมดนี้สามารถทำได้จาก Python
  • มีแบบฝึกหัดที่ดีมากมาย (ฟรี)

ข้อเสีย:

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

C / C ++

ข้อดี:

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

ข้อเสีย:

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

ข้อได้เปรียบหลักของ C ++ เหนือ C (คลาสเทมเพลต) ไม่ควรเกี่ยวข้องกับหลักสูตรของคุณและเกี่ยวข้องกับโครงการขนาดใหญ่เท่านั้น ดังนั้นฉันจะเลือก C ของทั้งสองเพราะมันกระชับกว่า

คนอื่น ๆ

ความคิดเห็นเกี่ยวกับภาษาอื่น:

  • Fortran: กลุ่มนี้ยังคงใช้งานกันเป็นจำนวนมากและมีรหัสดั้งเดิมจำนวนมาก แต่คุณไม่สามารถรับมือกับมาตรฐานเก่าและข้อ จำกัด และข้อผิดพลาดที่มีขนาดใหญ่ (ผู้คนจำนวนมากยังคงทำงานกับ Fortran 77) นอกจากนี้การหาบทช่วยสอนทางอินเทอร์เน็ตและอื่น ๆ จะทำได้ยากขึ้น
  • Matlab / Mathematica:ปัญหาทั้งหมดของซอฟต์แวร์ที่เป็นกรรมสิทธิ์ พิจารณาเป็นพิเศษว่านักเรียนของคุณมีแนวโน้มที่จะร่วมมือกับผู้ที่ไม่สามารถเข้าถึงซอฟต์แวร์นี้และปัญหาที่ตามมา
  • Cuda:สิ่งนี้เกี่ยวข้องกับปัญหาบางอย่างเท่านั้นหากประสิทธิภาพมีความสำคัญ นอกจากนี้หลังจากทั้งหมดฉันรู้คุณไม่ต้องการเรียนรู้การเขียนโปรแกรมด้วยวิธีนี้

¹เวิร์กโฟลว์มาตรฐานอย่างน้อยในกลุ่มของเราคือ


คำตอบที่แม่นยำมาก
Afnan Bashir

1
ฉันยังจะพูดถึงหนึ่งในโบนัสที่ไม่ได้กล่าวถึงของ Python คือมีการแจกแจงทางวิทยาศาสตร์จำนวนมาก (Anaconda / Ensequt / PythonXY / SAGE) ที่ทำให้กระบวนการของการทำให้ทุกคนในหน้าการคำนวณเหมือนกัน ยิ่งไปกว่านั้นแนวทางการใช้เว็บ (Wakari และ SAGE) ที่ให้ความเย็นยิ่งขึ้นนั้นมอบทุกอย่างผ่านซอฟต์แวร์ที่ติดตั้งในเบราว์เซอร์หรือ 0 การเรียนการสอนระดับปริญญาตรี c ++ หรือ Fortran จะทำให้เสียเวลาในการต่อสู้กับคอมไพเลอร์มากกว่าเวลาที่ได้รับจากความเร็วของโค้ด
meawoppl

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

@ meawoppl:“ การสอน undergrads c ++ หรือ Fortran จะทำให้การต่อสู้คอมไพเลอร์เสียเวลามากกว่าเวลาที่ได้รับจาก code-speed” - มันไม่ใช่ความเร็วของรหัสสำหรับแบบฝึกหัดสำหรับหลักสูตรที่สำคัญ (โปรแกรมจะเร็วมากทั้งสองวิธี เว้นแต่ว่าการฝึกนั้นถูกสร้างขึ้นมาเป็นพิเศษโดยที่พวกมันไม่ได้ทำ) แต่ความเร็วของโค้ดของโปรแกรมที่พวกเขาจะเขียนในชีวิตจริงหรือในทำนองเดียวกัน และมีบางสิ่งที่ไม่สามารถทำได้อย่างมีประสิทธิภาพใน Python เท่านั้น
Wrzlprmft

1
ฉันอยากจะบอกว่า CUDA นั้นไม่ได้เป็นคำถามสำหรับหลักสูตรวัตถุประสงค์ทั่วไปเพราะมันต้องใช้ฮาร์ดแวร์ที่ทุกคนไม่มี และถ้าคุณมีแล็ปท็อปที่ไม่มีมันก็ไม่มีทางที่คุณจะสามารถติดตั้งได้
Davidmh

22

ในปี 2014 ฉันจะบอกว่างูหลาม ในปี 2560 ฉันเชื่ออย่างสุดใจว่าภาษาที่ใช้ในการสอนนักศึกษาปริญญาตรีคือจูเลีย

การสอนอยู่เสมอเกี่ยวกับการแลกเปลี่ยน ในอีกด้านหนึ่งคุณต้องการเลือกสิ่งที่ง่ายพอที่จะเข้าใจได้ง่าย แต่ประการที่สองคุณต้องการสอนสิ่งที่มีอำนาจอยู่นั่นคือสิ่งที่สามารถเติบโตไปพร้อมกับคุณได้ ภาษาพลวัตทั่วไป (Python / MATLAB / R) ทั้งหมดตกอยู่ในหมวดที่ 1 ได้ง่ายเนื่องจากไม่มีรหัสสำเร็จรูปและความสะดวกในการเปิดล่ามและแยกรหัสในขณะที่ C / C ++ / Fortran ตกอยู่ในประเภทที่สองเป็น ภาษาที่ซอฟแวร์หลักที่มีประสิทธิภาพสูงในโลกปัจจุบันถูกเขียนขึ้น

แต่มีปัญหาเกี่ยวกับการใช้ภาษาที่ไม่สามารถจับภาพหมวดหมู่อื่นได้อย่างเต็มที่ เมื่อใช้ภาษาอย่าง Python มันจะสรุปสิ่งต่าง ๆ เช่นประเภทและจำนวนเต็มล้น นี่เป็นสิ่งที่ดีสำหรับการสอนการคำนวณภาคการศึกษาแรก แต่เมื่อคุณต้องการที่จะขุดลึกลงไปและลึกลงไปในสิ่งต่าง ๆ ที่ใช้งานได้จริงภาษาของ Python นั้นห่างไกลจากโลหะต้นแบบที่จะเป็นเครื่องมือในการสอนที่ดี แต่ C / C ++ / Fortran (หรือ Java ... ฉันเรียนรู้ Java ก่อน ... ) ทั้งหมดมีค่าใช้จ่ายในการเริ่มต้นที่ยิ่งใหญ่ที่สิ่งที่ยากที่สุดในการเรียนรู้คือการติดตั้งส่วนหัวและmainเรียบเรียงซึ่งเบี่ยงเบนจากการเรียนรู้จริงไปยังโปรแกรม .

ป้อน Julia เมื่อคุณใช้ Julia ครั้งแรกคุณสามารถแยกความคิดทั้งหมดออกเป็นประเภท ๆ และใช้มันเหมือนกับ MATLAB หรือ Python แต่ในขณะที่คุณต้องการเรียนรู้เพิ่มเติมมี "ความลึกของกระต่าย" ในภาษา เนื่องจากเป็นเลเยอร์ที่เป็นนามธรรมโดยอ้างอิงจากระบบ type + การแจกจ่ายหลายครั้งบน LLVM จึงเป็น "วิธีง่ายๆในการเขียนโค้ดที่คอมไพล์แบบคงที่" (และฟังก์ชั่นประเภทที่มีความเสถียรสามารถรวบรวมได้แบบสแตติก) สิ่งนี้หมายความว่าสามารถเข้าถึงรายละเอียดของ C / C ++ ได้เช่นกัน คุณสามารถเรียนรู้วิธีการเขียนลูปและฟังก์ชั่นง่าย ๆ โดยไม่ต้องใช้รหัสสำเร็จรูปจากนั้นจึงขุดลงในพอยน์เตอร์ของฟังก์ชัน คุณสมบัติ metaprogramming ของ Julia ช่วยให้คุณเข้าถึง AST ได้โดยตรงและมีมาโครที่แสดงทุกส่วนของเชนการคอมไพล์ นอกจากนี้ในฐานะที่เป็นเสียงกระเพื่อมก็คล้อยตามรูปแบบการเขียนโปรแกรมที่ใช้งานได้ และมีความสามารถในการคำนวณแบบขนานจำนวนมาก แนวคิดเช่นการพิมพ์พารามิเตอร์และการพิมพ์มีความเสถียรมีความเป็นเอกลักษณ์และลึกซึ้งใน Julia

หากคุณต้องการที่จะศึกษาการเขียนโปรแกรมภาษาตัวเองคุณสามารถเรียนรู้ขั้นตอนของวิธีการรวบรวมผลงานโดยใช้@code_loweredเพื่อดูสิ่งที่จะลดให้ดูที่พิมพ์-AST กับ@code_typedดู LLVM IR ด้วยและในที่สุดการชุมนุมรหัสพื้นเมืองที่มี@code_llvm @code_nativeสิ่งนี้สามารถนำมาใช้เพื่อแสดงให้เห็นว่าต้นทุนของตัวแปรแบบไดนามิกคืออะไรและทำงานอย่างไร "การชกมวยตัวแปร" และโพสต์บล็อกนี้แสดงให้เห็นว่าเครื่องมือวิปัสสนาเหล่านี้สามารถนำมาใช้เพื่อสอนได้อย่างไรว่า

มีไม่เพียง แต่วิทยาการคอมพิวเตอร์และความคิดทางวิศวกรรมซอฟต์แวร์ในการสำรวจ แต่ยังมีความคิดทางคณิตศาสตร์ที่หลากหลาย เนื่องจากไลบรารี่หลักของ Julia นั้นถูกเขียนขึ้นโดยคำนึงถึงการพิมพ์ทั่วไปมันเป็นเรื่องไม่สำคัญที่จะสร้างโอเปอเรเตอร์ที่ปราศจากเมทริกซ์และใช้ IterativeSolvers.jl เพื่อทำการ GMRES โดยใช้มัน คุณสามารถใช้เครื่องมือวิปัสสนา@whichเพื่อแสดงให้คุณเห็นว่ามีการใช้งานอย่างไร ตัวอย่างเช่น\ทำงานอย่างไร

@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805

ที่จุดผมตรงไปที่ความหมายของ \ มันถูกนำไปใช้ใน Julia ดังนั้นใครบางคนที่รู้ว่า Julia สามารถเรียนรู้อัลกอริทึมและวิธีการทำงานผ่านการจำแนกประเภทย่อยของเมทริกซ์และเชี่ยวชาญเมื่อทำได้ (กลับไปที่การกำจัดแบบเกาส์) เนื่องจากรหัสของ Julia คือ MIT ที่ได้รับอนุญาต (และเกือบทุกแพ็คเกจเป็น MIT ที่มีลิขสิทธิ์) นักเรียนจึงสามารถใช้ความคิดเหล่านี้ในรหัสของตัวเอง (มีการแสดงที่มา) (เมื่อรหัสเป็น GPL ที่ได้รับอนุญาตเช่นในกรณีของแพ็คเกจ MATLAB และ R พวกเขาจำเป็นต้องระมัดระวังเกี่ยวกับปัญหาสิทธิ์ใช้งาน!)

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

แต่ท้ายที่สุดคุณต้องการสอนนักเรียนถึงวิธีการสร้าง น่าเศร้าที่การเรียนรู้ Python หรือ R ไม่ได้แปลว่าคุณมีสิ่งที่จะ "พัฒนา Python / R" เนื่องจากแพ็คเกจส่วนใหญ่ที่ใช้กันอย่างแพร่หลายและได้รับการปรับให้เหมาะสมนั้นมีรหัส C / C ++ / Fortran จำนวนมาก เพื่อให้ได้ประสิทธิภาพ ดังนั้นเพื่อให้นักเรียนเหล่านี้สามารถมีส่วนร่วมในระบบนิเวศทางวิทยาศาสตร์สำหรับภาษาเหล่านี้ในที่สุดพวกเขาจะต้องเรียนรู้ภาษาอื่นในบางจุด แม้ว่ามันจะไม่ได้แย่นัก แต่ก็เป็นสิ่งที่ดีที่สุดในตอนนี้ที่จูเลียมีอยู่ เนื่องจาก Julia ชนิดที่เสถียรสามารถบรรลุความเร็วของ C / Fortran แพ็คเกจส่วนใหญ่ในระบบนิเวศ Julia จึงเป็นรหัส Julia ที่บริสุทธิ์ การเรียนรู้ Julia หมายถึงการเรียนรู้ที่จะพัฒนา Julia และเนื่องจาก Base Julia ยังเป็นรหัส Julia ส่วนใหญ่ (มีเพียงบางตัวและไม่ใช้ parser)

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


สงสัยว่าการใช้ภาษาที่ใช้เพียงเล็กน้อยนั้นสมเหตุสมผลหรือไม่เนื่องจากความรู้เกี่ยวกับไวยากรณ์จะหายไปและไม่รับประกันว่านักเรียนจะได้เรียนรู้หลายภาษา บางทีในมุมมองแบบนี้หลามก็ยังคงเป็นเรื่องดี
ซาเวียร์ Combelle

1
นั่นเป็นเหตุผลที่ฉันไม่เคยพูด Julia มาก่อน แต่ตอนนี้มันเป็นเรื่องธรรมดาที่คุณอาจจะใช้มัน
Chris Rackauckas

ฉันคิดว่าจูเลียยังใหม่อยู่ ในอุตสาหกรรมนักเรียนจะต้องรู้จัก Python, C ++, (ew) MATLAB และ R ฉันคิดว่ามันจะดีกว่าในการเรียนภาษาที่สองหรือสามเพื่อประสบการณ์การเรียนรู้ที่ดียิ่งขึ้น นักเรียนไม่น่าจะใช้ Julia อีกในอนาคตอันใกล้
Mateen Ulhaq

2
นักเรียนควรเรียนรู้ทักษะที่สามารถถ่ายโอนได้ไม่ใช่เทมเพลตที่จะคัดลอกและวาง ในแง่นั้น Python / MATLAB / R มีบทคัดย่อมากเกินกว่าที่คอมพิวเตอร์จะเป็นเครื่องมือการสอนที่ดีเกินกว่าการเขียนโปรแกรมที่ง่ายที่สุด แต่ C ++ อยู่ในระดับต่ำเกินไปที่จะเป็นเครื่องมือในการสอนที่ดี แน่นอนถ้าคุณจะมีภาษาด้านข้างในหลักสูตรการวิเคราะห์เชิงตัวเลขให้ทำสิ่งที่คุณจะใช้เพราะหลักสูตรไม่ได้เกี่ยวกับการเขียนโปรแกรม แต่ถ้าเป็นเรื่องเกี่ยวกับแนวคิดการเขียนโปรแกรม Julia เป็นภาษาง่าย ๆ เพียงภาษาเดียวซึ่งจริงๆแล้วมีแนวคิดส่วนใหญ่ในการออกแบบ
Chris Rackauckas

2

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

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

แค่สองเซ็นต์ของฉัน


4
ความเสียหายนั้นรุนแรงเกินคำที่ใช้อธิบายการสอนนักเรียน C, C ++ หรือ Fortran ภาษาใด ๆ เหล่านี้ (C, C ++, Fortran หรือ Python) สามารถใช้ได้สำหรับการสอนการเขียนโปรแกรมและการคำนวณทางวิทยาศาสตร์ขึ้นอยู่กับว่าคุณทำมันอย่างไร
Bill Barth

1
จากประสบการณ์การเรียนในชั้นเรียนของฉันโดยแผนก CS (C ++) และชั้นเรียนสำหรับนักดาราศาสตร์ (Fortran 77), C / C ++ / Fortran ไม่ได้ให้ความช่วยเหลือเพียงพอเมื่อเทียบกับ python สำหรับโปรแกรมเมอร์ใหม่อย่างสมบูรณ์ (segfaults เทียบกับข้อยกเว้น) การใช้ C / C ++ / Fortran อาจหมายถึงการเรียนรู้เกี่ยวกับวิธีใช้ดีบักเกอร์ (หรือการใช้ IDE) ในขณะที่หลามสามารถใช้ด้วยตนเอง
James Tocknell

0

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

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


0

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

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

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

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

หากหลักสูตรของคุณคือ "รู้เบื้องต้นเกี่ยวกับเซาท์แคโรไลนา" ฉันเชื่อว่างูใหญ่มีอัตราส่วนผลลัพธ์ / ความพยายามที่ดีที่สุด

PS: ตอนนี้เรามีคอมพิวเตอร์ค่อนข้างดีเราไม่จำเป็นต้องมองหาประสิทธิภาพในระดับปริญญาตรี


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

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