ในปี 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) และอาจเป็นไปได้ว่าคุณซึ่งเป็นอาจารย์สอนวิชาในจูเลียอาจไม่ได้มีประสบการณ์ด้านภาษามากนัก อย่างไรก็ตามปัญหาเหล่านี้เป็นปัญหาที่หายไปตามกาลเวลาในขณะที่ประโยชน์ของจูเลียที่ฉันกล่าวถึงข้างต้นนั้นเป็นหัวใจสำคัญของภาษาเหล่านั้น