कंप्यूटर प्रोग्रामिंग में स्नातक पाठ्यक्रम पढ़ाने के लिए मुझे किस भाषा का उपयोग करना चाहिए?


22

कंप्यूटर प्रोग्रामिंग के लिए परिचय नामक स्नातक स्तर के छात्रों को पढ़ाने के लिए जा रहे हैं। मैं थोड़ा उलझन में हूं। कम्प्यूटेशनल भौतिकी में वैज्ञानिक C / C ++ या Python या Fortran, CUDA आदि का उपयोग करते हैं ..... यह उनके आधार के निर्माण का समय है। मुझे क्या उपयोग करना चाहिए? मुझे पता है कि आप अपने जीवन में कभी भी नई प्रोग्रामिंग भाषा सीख सकते हैं, लेकिन जो मेरे लिए बाद में उन सभी बुनियादी प्रोग्रामिंग अवधारणाओं और ओओपी अवधारणाओं को विस्तृत करने के लिए समझदार विकल्प है।


9
@ k20: मुझे आशा है कि आपका सुझाव जीभ-इन-गाल था; अन्यथा यह अकादमिक नैतिकता का गंभीर उल्लंघन होगा।
क्रिश्चियन क्लैसन

6
@ k20: यह सब ऑफ-टॉपिक है, लेकिन शिक्षक को किसी भी तरह के किकबैक (किसी भी प्रकार) पर आधारित सॉफ्टवेयर का चयन करना और पढ़ाए जाने वाली सामग्री पर निश्चित रूप से अनैतिक नहीं है। (बस इसे स्पष्ट करने के लिए, यह "स्वैग" है, मुझे इस पर आपत्ति है।) आमतौर पर जो किया जाता है वह यह है कि कंपनियां सॉफ्टवेयर को काफी कम कीमत पर (या मुफ्त में) उपलब्ध कराती हैं।
ईसाई क्लैसन

3
@ k20: इसके अलावा, ध्यान रखें कि सॉफ़्टवेयर कंपनी की प्रेरणा पूरी तरह से परोपकारी नहीं है: आपके छात्रों को अभी मुफ्त में सॉफ़्टवेयर मिल सकता है, लेकिन यह भी संभावना है कि उन्हें अपने जीवन में कुछ समय बाद सॉफ़्टवेयर खरीदना होगा (या एक नया सीखना होगा) सॉफ्टवेयर)।
Wrzlprmft

3
@ k20 मतलाब और गणितज्ञ वास्तव में गंभीर वैज्ञानिक संगणना के लिए बहुत अधिक उपयोग नहीं किए गए हैं। वे विचारों को आज़माने के लिए अधिक खोजपूर्ण उपकरण हैं। यदि पाठ्यक्रम का उद्देश्य बुनियादी एल्गोरिदम को सिखाना है, तो ये उपयुक्त हो सकते हैं (विशेषकर मैटलैब), लेकिन यदि यह सामान्य प्रोग्रामिंग है, तो आप C ++ के पायथन जैसे सामान्य प्रोग्रामिंग भाषा के साथ जाना चाहते हैं।
ट्रूमैन एलिस

2
MATLAB का एक डिज़ाइन है (यदि मैं राजनयिक नहीं होता तो मैं त्रुटिपूर्ण कहूंगा :)) जिसकी आवश्यकता अन्य भाषाओं में है। कई अन्य चीजें बस किसी भी चीज़ से अलग हैं, इसलिए "बाहर जाना" मुश्किल हो सकता है। गणितज्ञ ने, मेरी राय में, एक सुंदर डिजाइन, लेकिन यह किसी भी अन्य भाषा के समान नहीं है (शायद लिस्प के अलावा, लेकिन विज्ञान में इसका उपयोग नहीं किया गया है), इसलिए आपने जो सीखा वह किसी अन्य भाषा को सीखने के लिए ज्यादातर बेकार है। OTOH, C <-> पायथन जाना बहुत आसान है।
डेविड एम

जवाबों:


32

सबसे पहले, यदि आपके अंडरग्रेजुएट हमारे जैसे हैं और कंप्यूटर से कोई पूर्व परिचय नहीं था, तो उन्हें कुछ समय बिताने की अपेक्षा करें, ताकि बुनियादी सामान का उपयोग कैसे करें, जैसे कि एक उचित संपादक का उपयोग करना (जैसे, एमएस वर्ड नहीं), कमांड लाइन, आदि।

मुझे लगता है कि उत्तर कुछ हद तक इस बात पर निर्भर करता है कि आपने अपने पाठ्यक्रम का फोकस कहां सेट किया है (या आपको क्या सिखाना है)। उदाहरण के लिए: कंप्यूटर के आंतरिक कामकाज कितने प्रासंगिक हैं? क्या आपको कक्षाओं और अन्य उन्नत ओओपी संरचनाओं की आवश्यकता है? क्या आप उन्हें सिखाना चाहते हैं कि वे कुशल कार्यक्रम कैसे तैयार कर सकते हैं या क्या आप खुश हैं यदि वे काम के कार्यक्रम तैयार करते हैं? इसके अलावा, यह मत भूलो कि आपको सबसे अधिक सक्षम ट्यूटर्स की आवश्यकता होगी।

लेकिन अब भाषाओं के फायदे और नुकसान के बारे में कुछ, मैं इससे परिचित हूं। ध्यान दें कि यह मुख्य रूप से एक कम्प्यूटेशनल भौतिक विज्ञानी के रूप में मेरे अनुभव से है और इसमें से कुछ विशेष क्षेत्र, कार्यसमूह, विश्वविद्यालय, आदि पर निर्भर हो सकते हैं।

अजगर

मैं आमतौर पर लगभग शुरू से ही नम्पी का उपयोग करने की सलाह देता हूं और मैं इसे निम्नलिखित में उपयोग करने के लिए मान रहा हूं।

लाभ:

  • यह सीखना आसान है और इसलिए अन्य लोगों के कोड (उदाहरण के लिए, आपका उदाहरण कोड, लेकिन ट्यूटर के लिए छात्रों का कोड) भी पढ़ रहा है।
  • इनपुट और आउटपुट (जो अपने पाठ्यक्रम का ध्यान केंद्रित नहीं होना चाहिए) पूरी तरह से कवर किया जा सकता print, Numpy के savetxtऔर loadtxt, और हो सकता है sys.argv। इसे मक्खी पर पेश किया जा सकता है और यह अधिक प्रोग्रामिंग समय नहीं खाती है।
  • आपको नंबर के प्रतिनिधित्व, मेमोरी प्रबंधन, डेटा प्रकार जैसे विवरणों से निपटने की आवश्यकता नहीं है। इस प्रकार यह प्रोग्राम करने के लिए तेज़ है और आप वास्तविक एल्गोरिदम पर ध्यान केंद्रित कर सकते हैं।
  • यह संकलित भाषा नहीं है। इसके दो फायदे हैं: छात्रों को एक संकलक से निपटने की आवश्यकता नहीं है और छात्र कार्यक्रम को संकलित, पुनः आरंभ और पुन: संकलित किए बिना सीधे कंसोल में सामान का परीक्षण कर सकते हैं। संबंधित, डिबगिंग आसान है।
  • लगभग हर चीज के लिए आसानी से उपयोग होने वाले पुस्तकालय हैं।
  • आपको शेल स्क्रिप्ट, मेक, ग्नुप्लोट जैसी अतिरिक्त स्क्रिप्ट भाषाओं को सीखने की आवश्यकता नहीं है - यह सब पायथन से किया जा सकता है।
  • बहुत सारे अच्छे ट्यूटोरियल हैं (मुफ्त में)।

नुकसान:

  • यह संकलित नहीं है। इसलिए कम्प्यूटेशनल भौतिकी के लिए प्रासंगिक कुछ मामलों में संकलित कार्यक्रमों की तुलना में पायथन कार्यक्रम काफी धीमा हो सकता है। हालांकि, अन्य मामलों में, पुस्तकालयों (विशेषकर नॉम्पी) एक तुलनीय प्रदर्शन कर सकते हैं। दूसरा तरीका, पायथन के साथ अच्छा प्रदर्शन करने के लिए प्रासंगिक कोड स्निपेट को C¹ जैसी किसी अन्य भाषा में लिखना है। जाहिर है आपको इसके लिए इस भाषा को सीखने की आवश्यकता है, लेकिन यह बाद में किया जा सकता है और आपका समय सीखना पायथन व्यर्थ नहीं है।
  • संख्या प्रतिनिधित्व, स्मृति प्रबंधन, डेटा प्रकार और उनके नुकसान के रूप में इस तरह के विवरण को पढ़ाना अधिक कठिन है, क्योंकि वे कुछ हद तक मोटे हैं।

C / C ++

लाभ:

  • यह संकलित है और इसलिए कुशल कोड का उत्पादन करना आसान है।
  • आप सीधे संख्या प्रतिनिधित्व, स्मृति प्रबंधन, डेटा प्रकारों के साथ काम कर रहे हैं और इस प्रकार इन को पढ़ाने के लिए अधिक सहज ज्ञान युक्त है - आपके छात्र अपने कंप्यूटर में वास्तव में क्या हो रहा है, उसके करीब पहुंच जाएंगे।
  • मूल रूप से सब कुछ के लिए पुस्तकालय हैं, लेकिन एक पुस्तकालय को समझने और उपयोग करने से कुछ काम होता है।
  • C / C ++ में मौजूदा कोड की एक प्रासंगिक राशि है और इस प्रकार छात्रों को इस कोड के साथ काम करना चाहते हैं तो उन्हें भाषा सीखने की आवश्यकता है।
  • यदि आप पहले से ही C / C ++ जानते हैं, तो आप पायथन (उदाहरण के लिए) बहुत तेजी से सीख सकते हैं।

नुकसान:

  • यह संकलित है और आपके छात्रों को कंपाइलर, प्रीप्रोसेसर, हेडर इत्यादि से निपटना है। आपको आश्चर्य होगा कि इस चरण में, सेमेस्टर के अंत में भी छात्र कितना असफल रहे।
  • यह बहुत ही धीमा है और काम करने वाले कोड का उत्पादन करने में अधिक समय लेता है।
  • सीमांत सामान जैसे कि इनपुट और आउटपुट से निपटने में शिक्षण के साथ-साथ प्रोग्रामिंग में भी कुछ समय लगता है। C ++ में, इनपुट और आउटपुट के लिए एक अतिरिक्त वाक्यविन्यास है।
  • कंपाइलर और ऑपरेटिंग-सिस्टम निर्भरता।
  • आपको सी / सी ++ भ्रम से निपटना होगा।
  • सिंटैक्स फीचर्स की विशाल मात्रा के कारण अन्य का कोड पढ़ना विशेष रूप से C ++ में काफी मुश्किल हो सकता है।

C ++ (C, कक्षाएं, टेम्प्लेट) के मुख्य लाभ आपके पाठ्यक्रम के लिए प्रासंगिक नहीं होने चाहिए और केवल बड़ी परियोजनाओं के लिए प्रासंगिक होते जा रहे हैं। इसलिए मैं दोनों में से C को चुनूंगा, क्योंकि यह अधिक संक्षिप्त है।

अन्य लोग

अन्य भाषाओं पर कुछ टिप्पणियां:

  • फोरट्रान: यह अभी भी बहुत सारे समूहों द्वारा उपयोग किया जाता है और बहुत सारी विरासत कोड है, लेकिन आप पुराने मानकों और उनकी विशाल सीमाओं और नुकसान से निपटने के आसपास नहीं पहुंच सकते हैं (बहुत से लोग अभी भी फोरट्रान 77 के साथ काम कर रहे हैं)। साथ ही, ट्यूटोरियल खोजने में बहुत मुश्किल होगी, इंटरनेट और इतने पर मदद मिलेगी।
  • मतलाब / Mathematica: मालिकाना सॉफ्टवेयर की सभी समस्याएं। विशेष रूप से विचार करें कि आपके छात्रों को उन लोगों के साथ सहयोग करने की संभावना है, जिनके पास इस सॉफ़्टवेयर और आगामी समस्याओं तक पहुंच नहीं है।
  • Cuda: यह केवल कुछ समस्याओं के लिए प्रासंगिक है, यदि प्रदर्शन मायने रखता है। इसके अलावा, आखिरकार मुझे पता है, आप इस तरह से प्रोग्रामिंग सीखना नहीं चाहते हैं।

¹ जो कम से कम हमारे समूह में मानक वर्कफ़्लो है।


बहुत सटीक उत्तर
अफान बशीर

1
मैं यह भी कहना चाहूंगा कि पायथन के एकतरफा बोनस में से एक यह है कि कई वैज्ञानिक वितरण (एनाकोंडा / उत्साहित / पायथनएक्सवाई / एसएजीई) हैं जो वास्तव में एक ही कंप्यूटिंग पेज में सभी को प्राप्त करने की प्रक्रिया को सुचारू करते हैं। इसके अलावा, यहां तक ​​कि कूलर भी वेब आधारित दृष्टिकोण (वकारी और एसएजीई) हैं जो इसे ब्राउज़र उर्फ ​​0 स्थापित सॉफ़्टवेयर के माध्यम से प्रदान करते हैं। सी + + या फोरट्रान को पढ़ाने से कोड-स्पीड में प्राप्त समय की तुलना में एक संकलक को खोने में अधिक समय लगेगा।
मेवोप्लप

कम्प्यूटेशनल भौतिकी के लिए अजगर में एक अद्भुत पारिस्थितिकी तंत्र है। नैम्पी, बुनियादी सुविधाओं को प्रदान करने के लिए डरावना, मायावी, विज़ुअलाइज़ेशन के लिए tvtk। पायथन वैज्ञानिक कंप्यूटिंग समुदाय में काफी परिपक्व है। मैं उत्पादन में C ++ का उपयोग करता हूं, लेकिन कोई फर्क नहीं पड़ता कि यह उपयोग करने के लिए दर्द है।
साईं वेंकट

@meawoppl: "शिक्षण सी + + या फोरट्रान के परिणामस्वरूप कोड-स्पीड में प्राप्त समय की तुलना में एक संकलक से लड़ने में अधिक समय खो जाएगा।" - यह पाठ्यक्रम के लिए अभ्यास की कोड गति नहीं है जो मायने रखता है (कार्यक्रम या तो बहुत तेज़ होंगे) जब तक कि व्यायाम विशेष रूप से ऐसे नहीं किए जाते कि वे नहीं होते), लेकिन उन कार्यक्रमों की कोड गति जो वे वास्तविक जीवन या इसी तरह के लिए लिखेंगे। और कुछ सामान है जो केवल पायथन में कुशलता से नहीं किया जा सकता है।
Wrzlprmft

1
मैं कहूंगा कि CUDA सामान्य उद्देश्य पाठ्यक्रम के लिए प्रश्न से बाहर है, क्योंकि इसमें हार्डवेयर की आवश्यकता होती है जो हर किसी के पास नहीं है। और अगर आपके पास इसके बिना केवल एक लैपटॉप है, तो लगभग कोई रास्ता नहीं है जिसे आप स्थापित कर सकते हैं।
डेविड एमएच 27'14

22

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 के अंत तक)। और यह भी काफी संभावना है कि आप, जूलिया में एक पाठ्यक्रम के संभावित शिक्षक, भाषा के साथ खुद को इतना अनुभव नहीं हो सकता है। हालाँकि, ये उस प्रकार की समस्याएं हैं जो समय के साथ दूर हो जाती हैं, जबकि जूलिया के जो लाभ मैंने ऊपर उल्लेख किए हैं, वे स्वयं भाषाओं के लिए अधिक महत्वपूर्ण हैं।


आश्चर्य है कि यदि थोड़ी सी इस्तेमाल की गई भाषा समझ में आती है क्योंकि वाक्य रचना का ज्ञान खो जाने की संभावना होगी और यह गारंटी नहीं है कि छात्रों को कई भाषाओं को सीखना होगा। शायद इस तरह के दृष्टिकोण में, अजगर अभी भी एक अच्छा लेना है।
जेवियर कॉम्बेल

1
इसलिए मैंने जूलिया को पहले नहीं कहा था, लेकिन अब जब यह बहुत आम है तो आप इसे इस्तेमाल कर सकते हैं।
क्रिस रैकाकस

मुझे लगता है कि जूलिया अभी भी नई है। उद्योग में, छात्रों को पायथन, C ++, (ew) MATLAB, और आर जानने की उम्मीद होगी। मुझे लगता है कि यह एक समृद्ध अनुभव के रूप में सीखने के लिए दूसरी या तीसरी भाषा के रूप में बेहतर है। छात्रों को निकट भविष्य में जूलिया का फिर से उपयोग करने की संभावना नहीं है।
मतीन उल्हाक

2
छात्रों को हस्तांतरणीय कौशल सीखना चाहिए, न कि कॉपी और पेस्ट करने का खाका। उस अर्थ में, पायथन / MATLAB / R सार कंप्यूटर से बहुत सरल शिक्षण प्रोग्रामिंग से परे एक अच्छा शिक्षण उपकरण हो सकता है, लेकिन एक अच्छा शिक्षण उपकरण होने के लिए C ++ बहुत निम्न स्तर है। निश्चित रूप से, यदि आप एक संख्यात्मक विश्लेषण पाठ्यक्रम की तरह एक ओर भाषा रखने जा रहे हैं, तो वह करें जो आप उपयोग करेंगे क्योंकि पाठ्यक्रम प्रोग्रामिंग के बारे में नहीं है। लेकिन अगर प्रोग्रामिंग अवधारणाओं के बारे में है, तो जूलिया बहुत ही सरल भाषा है जो वास्तव में इसके डिजाइन में अधिकांश अवधारणाएं हैं।
क्रिस रैकॉकास

2

एक बहुत-बहुत दूर के स्नातक के रूप में बोलते हुए, और यह मानते हुए कि आप सीएस विभाग में नहीं पढ़ा रहे हैं, मुझे लगता है कि सी, सी ++, या फोरट्रान (या भगवान की मनाही) के साथ छात्रों को कंप्यूटर प्रोग्रामिंग से परिचित कराना एक आपदा होगी। CUDA), भले ही दूसरों ने इंगित किया हो कि वे वैज्ञानिक कंप्यूटिंग में संभवतः यथास्थिति हैं।

यदि आप छात्रों को वैज्ञानिक कंप्यूटिंग सिखाने और उन्हें उसी पाठ्यक्रम में प्रोग्रामिंग करने के लिए पेश करने की उम्मीद कर रहे हैं , तो मैं शर्त लगा सकता हूं कि जब तक आप मैटलैब या अजगर जैसी व्याख्यात्मक भाषा से न चिपके, तब तक सेमेस्टर में कवर करना बहुत जरूरी है। मेरे अनुभव में, स्नातक स्तर पर वैज्ञानिक कंप्यूटिंग में अधिकांश कक्षाएं उन दो में से किसी एक में कैसे सिखाई जाती हैं, और अजगर हर दिन उत्पादन स्तर की भाषा के रूप में अधिक उपयोगी होता जा रहा है, इसलिए यह अभी भी व्यावहारिक कौशल के रूप में कुछ उपयोगिता रखता है ( प्रोग्रामिंग की मूल बातें सिखाने से परे, मेरा मतलब है)।

केवल मेरे दो सेंट्स।


4
आपदा छात्रों को C, C ++, या फोरट्रान पढ़ाने का वर्णन करने के लिए उपयोग करने के लिए एक शब्द भी मजबूत है। इनमें से कोई भी भाषा (C, C ++, Fortran, या Python) प्रोग्रामिंग और वैज्ञानिक कंप्यूटिंग को सिखाने के लिए ठीक हो सकती है कि आप इसे कैसे देखते हैं।
बिल बर्थ

1
सीएस विभाग (सी ++), और खगोलविदों (फोरट्रान 77) के लिए एक वर्ग के मेरे अनुभव से, सी / सी ++ / फोरट्रान पूरी तरह से नए प्रोग्रामर (अपवादों को छोड़कर) के लिए अजगर की तुलना में पर्याप्त सहायता प्रदान नहीं करते हैं। C / C ++ / फोरट्रान का उपयोग करना या तो डिबगर (या IDE का उपयोग) का उपयोग करने के तरीके के बारे में सीखना सीखता है, जबकि अजगर का उपयोग इस पर किया जा सकता है।
जेम्स टॉकनेल

0

C, C ++, & Fortran (कोई विशेष क्रम में सूचीबद्ध) तीन मुख्य प्रोग्रामिंग भाषाएं हैं जिनका उपयोग कम्प्यूटेशनल गणित / भौतिकी के लिए किया जाता है यदि आप सुपर कंप्यूटर पर बड़ी समस्याओं को हल करना चाहते हैं। मुझे लगता है कि CUDA को एक पुस्तकालय माना जाता है जो त्वरित GPU कंप्यूटिंग के लिए अन्य भाषाओं के साथ संयोजन में उपयोग किया जाता है। Matlab और python आउटपुट डायग्नोस्टिक्स चलाने और प्रोटोटाइप मॉडल बनाने के लिए सीखने के लिए महान हैं। वे सीखना आसान भी हैं और एक ऐसे कोर्स के लिए बेहतर हो सकता है जहाँ आप प्रोग्राम करना सीख रहे हैं कि एल्गोरिदम के पार जाना चाहते हैं।

इस प्रकार, यदि आपका पाठ्यक्रम विशुद्ध रूप से प्रोग्रामिंग के बारे में है, तो मैं C ++ का चयन करूंगा या, यदि यह पहली बार प्रोग्रामिंग कर रहा है, तो पायथन। उन दोनों भाषाओं की वैज्ञानिक कंप्यूटिंग की दुनिया के बाहर उच्च उपयोगिता है। यदि पाठ्यक्रम भौतिकी आधारित समस्याओं को हल करने के लिए लर्निंग एल्गोरिदम के आसपास केंद्रित है, तो मुझे लगता है कि मतलब निस्संदेह विजेता है।


0

संक्षिप्त: इस बात पर ध्यान दें कि वैज्ञानिक कंप्यूटिंग अपने आप में जटिल है। क्या आप वास्तव में प्रोग्रामिंग भाषा खेलना चाहते हैं?

गणित उन समस्याओं को हल करने के लिए अमूर्तता का उपयोग करता है जिन्हें अंतर्ज्ञान द्वारा हल नहीं किया जा सकता है। इसलिए अवधारणाओं में अमूर्त होने की प्रवृत्ति है। ऐसा क्यों है, यह समझने के लिए तुच्छ नहीं है कि अवधारणाओं को क्या करना है। वैज्ञानिक कंप्यूटिंग में "पशु" "वाहन" जैसी कक्षाओं के लिए सामान्य उदाहरण बेकार हैं। यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए सच है, लेकिन मेरा मानना ​​है कि कंप्यूटर पर अमूर्त अवधारणाओं को पुन: प्रस्तुत करना इंपीरियल प्रोग्रामिंग में भी मामूली नहीं है।

यही कारण है कि मेरा मानना ​​है कि यहां हम दो अलग-अलग प्रयासों से काम कर रहे हैं: एक तरफ प्रोग्रामिंग, और दूसरी तरफ वैज्ञानिक कंप्यूटिंग। स्नातक स्तर पर, जहां छात्र विषम पृष्ठभूमि से आते हैं, आप एक ही समय में दो अलग-अलग चीजों को पढ़ाना समाप्त कर सकते हैं।

यदि आपका लक्ष्य वैज्ञानिक कंप्यूटिंग सिखा रहा है तो मुझे लगता है कि यह काफी मुश्किल है। प्रोग्रामिंग भाषा के रूप में एक अतिरिक्त बाधा होने (हम सभी सहमत हैं कि C ++ को प्रशिक्षण की आवश्यकता है) छात्रों के एक अच्छे भाग को ध्वस्त कर देगा, यही कारण है कि मैं अजगर के साथ जाने का सुझाव देता हूं।

यदि आपका पाठ्यक्रम "SC का परिचय" है, तो मेरा मानना ​​है कि अजगर का सबसे अच्छा परिणाम / प्रयास अनुपात होता है।

पुनश्च: अब हमारे पास अच्छे कंप्यूटर हैं, हमें वास्तव में स्नातक स्तर पर दक्षता की तलाश करने की आवश्यकता नहीं है।


अपने पीएस के बारे में: केवल स्नातक से कम के लिए प्रदर्शन क्यों मायने नहीं रखता? इस तथ्य के अलावा कि अंडरग्रेजुएट्स के लिए कार्यों की कल्पना करना आसान है जहां प्रदर्शन मायने रखता है, यह उन कार्यों को नहीं है जो वे वास्तविक जीवन के लिए प्रदर्शन सीख रहे हैं। साथ ही, कंप्यूटर की गति अधिक हो गई है, लेकिन हमारी अपेक्षाएं हैं।
Wrzlprmft

क्षमा करें मैं बहुत तेज था। मुझे इसे "छात्रों द्वारा कोड अनुकूलन में खुदाई करने और फिर एक संकलित भाषा में जाने से पहले" एक व्याख्या की गई भाषा के साथ संतोषजनक बड़े एप्लिकेशन चला सकते हैं।
निकोला कैवलिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.