2014 में, मैंने पायथन कहा होगा। 2017 में, मैं पूरे दिल से मानता हूं कि अंडरग्रेजुएट्स को पढ़ाने के लिए भाषा जूलिया है।
शिक्षण हमेशा एक व्यापार के बारे में है। एक तरफ, आप कुछ ऐसा चुनना चाहते हैं जो इतना सरल हो कि उसे समझना आसान हो। लेकिन दूसरी बात, आप कुछ ऐसा सिखाना चाहते हैं जिसमें शक्ति रहे, यानी ऐसी चीज़ जो आपके साथ बढ़ सके। सामान्य गतिशील भाषाएं (पायथन / MATLAB / R) सभी अपने गैर-विद्यमान बॉयलरप्लेट कोड के कारण आसानी से श्रेणी 1 में आते हैं और एक दुभाषिया खोलने और कोड बाहर थूकने में आसानी होती है, जबकि C / C ++ / फोरट्रान दूसरी श्रेणी में आते हैं। वे भाषाएँ जिनके साथ आज की दुनिया के प्रमुख अति-निष्पादित सॉफ्टवेयर लिखे गए थे।
लेकिन ऐसी भाषा का उपयोग करने के मुद्दे हैं जो पूरी तरह से अन्य श्रेणी पर कब्जा नहीं करते हैं। पायथन जैसी भाषा का उपयोग करते समय, यह प्रकार और पूर्णांक अतिप्रवाह जैसी चीजों को दूर करता है। पहले सेमेस्टर कंप्यूटिंग को पढ़ाने के लिए यह अच्छा है, लेकिन जैसा कि आप वास्तव में काम कर रहे हैं, उसमें गहराई और गहराई से खुदाई करना चाहते हैं, पायथन की भाषा एक अच्छा शिक्षण उपकरण होने के लिए अंतर्निहित धातु से बहुत दूर है। लेकिन C / C ++ / फोरट्रान (या जावा ... मैंने जावा को पहले सीखा ...) सभी में इतनी बड़ी स्टार्टअप लागत है कि सीखने के लिए सबसे मुश्किल काम है हेडर सेटअप और main
संकलित करना है, जो वास्तव में प्रोग्राम सीखने से विचलित करता है ।
जूलिया दर्ज करें। जब आप पहली बार जूलिया का उपयोग करते हैं, तो आप प्रकारों के पूरे विचार को अलग कर सकते हैं और इसे MATLAB या पायथन की तरह उपयोग कर सकते हैं। लेकिन जैसा कि आप और अधिक सीखना चाहते हैं, भाषा के लिए गहराई का "खरगोश छेद" है। चूंकि यह वास्तव में एक प्रकार की प्रणाली पर आधारित एक अमूर्त परत है + LLVM पर कई प्रेषण, यह अनिवार्य रूप से "स्टेटिकली संकलित कोड लिखने का एक आसान तरीका है" (और टाइप-स्टेबल फ़ंक्शन वास्तव में स्टेटिक रूप से संकलित किया जा सकता है)। इसका मतलब यह है कि C / C ++ का विवरण भी सुलभ है। आप बॉयलरप्लेट कोड के बिना सरल लूप और फ़ंक्शन लिखना सीख सकते हैं, और फिर फ़ंक्शन पॉइंटर्स में खोद सकते हैं। जूलिया के मेटाप्रोग्रामिंग फीचर्स आपको सीधे एएसटी का उपयोग करने देते हैं, और मैक्रो हैं जो संकलन श्रृंखला के प्रत्येक भाग को दिखाते हैं। इसके अलावा, लिस्प के रूप में, कार्यात्मक प्रोग्रामिंग शैलियों के लिए उत्तरदायी है। और इसमें बहुत सी समानांतर कंप्यूटिंग क्षमताएं हैं। जूलिया में पैरामीट्रिक टाइपिंग और टाइप-स्टेबिलिटी जैसे विचार काफी अनोखे और गहरे हैं।
यदि आप स्वयं प्रोग्रामिंग भाषाओं का अध्ययन करना चाहते हैं, तो आप यह देख सकते हैं कि संकलन का उपयोग कैसे @code_lowered
कम करके काम करता है, टाइपिंग-एएसटी @code_typed
देखें, एलएलवीएम आईआर के साथ टाइप करें-एएसटी देखें @code_llvm
, और अंत में मूल विधानसभा कोड के साथ @code_native
। इसका उपयोग यह दिखाने के लिए किया जा सकता है कि गतिशील चर की लागत क्या है और वास्तव में "वैरिएबल बॉक्सिंग" कैसे काम करता है, और यह ब्लॉग पोस्ट दिखाता है कि इन आत्मनिरीक्षण उपकरणों का उपयोग यह सिखाने के लिए किया जा सकता है कि कंपाइलर अनुकूलन कैसे हो सकता है / नहीं हो सकता है।
केवल कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग विचारों का पता लगाने के लिए नहीं हैं, बल्कि समृद्ध गणितीय विचार भी हैं। चूँकि जूलिया के मुख्य पुस्तकालयों को जेनेरिक टाइपिंग को ध्यान में रखते हुए लिखा गया है, इसलिए मैट्रिक्स से मुक्त ऑपरेटर बनाना और उनका उपयोग करके GMRES करने के लिए IterativeSolvers.jl का उपयोग करना तुच्छ है। आप आत्मनिरीक्षण उपकरणों का उपयोग कर सकते हैं जैसे @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
यह मुझे सीधे \ की परिभाषा के लिए इंगित करता है । इसे जूलिया में लागू किया गया है, इसलिए कोई व्यक्ति जो जूलिया को जानता है, तब एल्गोरिथ्म सीख सकता है और यह मैट्रिक्स उपप्रकारों की पहचान करने और जब संभव हो (गौसियन उन्मूलन के लिए वापस आना) के माध्यम से काम करता है। चूंकि जूलिया का कोड एमआईटी लाइसेंस प्राप्त है (और लगभग सभी पैकेज एमआईटी लाइसेंस प्राप्त हैं), तो छात्र इन विचारों का उपयोग अपने कोड में (अटेंशन के साथ) करने के लिए स्वतंत्र हैं (जब कोड जीपीएल लाइसेंस प्राप्त हो, जैसा कि अधिकांश MATLAB और R संकुल के साथ होता है) उन्हें लाइसेंस के मुद्दों के बारे में सावधान रहने की जरूरत है!)।
चूंकि भाषा कोर एक बहुत ही सक्रिय ओपन सोर्स समुदाय के साथ बनाया गया है, इसलिए भाषा के विकास के इतिहास पर एक समृद्ध संसाधन भी है: इसके Gutti मुद्दे । क्या वास्तव में एक मैट्रिक्स स्थानांतरण है जैसे भाषा के सवालों को समझना ? इन गणितीय वस्तुओं को अधिक विस्तार से समझने के लिए बहुत ज्ञानवर्धक हो सकता है।
लेकिन अंत में, आप अपने छात्रों को यह सिखाना चाहते हैं कि कैसे बनाएं। अफसोस की बात यह है कि अजगर या आर को सीखने का मतलब यह नहीं है कि आपके पास "विकसित करने के लिए पायथन / आर" है, क्योंकि व्यापक रूप से उपयोग किए गए और अच्छी तरह से अनुकूलित पैकेजों में से अधिकांश में सी / सी ++ / फोरट्रान कोड की पर्याप्त मात्रा होती है। प्रदर्शन पाने के लिए। इस प्रकार, इन छात्रों को इन भाषाओं के लिए वैज्ञानिक पारिस्थितिक तंत्र में योगदान करने में सक्षम होने के लिए, उन्हें अंततः किसी बिंदु पर दूसरी भाषा सीखना होगा। जबकि यह पूरी तरह से भयानक नहीं है, यह अब उप-इष्टतम है कि जूलिया मौजूद है। चूंकि प्रकार-स्थिर जूलिया सी / फोरट्रान की गति को प्राप्त करने में सक्षम है, जूलिया पारिस्थितिकी तंत्र के अधिकांश पैकेज शुद्ध जूलिया कोड हैं। जूलिया सीखने का मतलब है कि किसी ने जूलिया को विकसित करना सीखा है। और चूंकि बेस जूलिया भी ज्यादातर जूलिया कोड है (बस कुछ आदिम और पार्सर नहीं है),
उस ने कहा, जूलिया की पसंद के लिए कुछ डाउनसाइड हैं। एक के लिए, यह इन अन्य भाषाओं की तुलना में बहुत नया है और इसलिए यह संसाधनों पर थोड़ा अधिक दुर्लभ है। आपको अपने आप बहुत सारे शिक्षण उपकरण के साथ आना होगा, या वेब पर उन संसाधनों से खींचना होगा जो जूलिया वेबसाइट पर सूचीबद्ध हैं । इसके अलावा, भाषा विवरण काफी व्यवस्थित नहीं हैं, हालांकि 1.0 जल्द ही बाहर आ रहा है (2017 के अंत तक)। और यह भी काफी संभावना है कि आप, जूलिया में एक पाठ्यक्रम के संभावित शिक्षक, भाषा के साथ खुद को इतना अनुभव नहीं हो सकता है। हालाँकि, ये उस प्रकार की समस्याएं हैं जो समय के साथ दूर हो जाती हैं, जबकि जूलिया के जो लाभ मैंने ऊपर उल्लेख किए हैं, वे स्वयं भाषाओं के लिए अधिक महत्वपूर्ण हैं।