पहले प्रोग्रामिंग कोर्स के लिए भाषा का चयन करने के लिए मानदंड


35

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

मेरा सवाल यह है कि:

प्रथम वर्ष के विश्वविद्यालय प्रोग्रामिंग पाठ्यक्रम के आधार के रूप में उपयोग करने के लिए एक प्रोग्रामिंग भाषा का चयन करने के लिए एक शिक्षक क्या उद्देश्य मानदंड का उपयोग कर सकता है? इन मानदंडों का आधार क्या है?

नोट : मैं प्रोग्रामिंग भाषाओं की सूची नहीं देखना चाहता हूं और वे उपयोग करने के लिए सबसे अच्छे क्यों हैं। सवाल सबसे अच्छी भाषा के बारे में नहीं है, यह भाषा के चयन के मापदंड के बारे में है । हालाँकि, विशेष बिंदुओं को समझने के लिए प्रोग्रामिंग भाषाओं का उपयोग किया जा सकता है।


यह प्रश्न एक अन्य प्रश्न से प्रेरित था जिसे ऑफ-टॉपिक समझा गया था: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language


1
इस सवाल पर है कि क्या इस बारे में या ऑफ-टॉपिक खोला गया है: meta.cs.stackexchange.com/questions/362/…
डेव क्लार्क

7
<ग्रेब पॉपकॉर्न> To paraphrase Otto Neugebauer : मनुष्य को ज्ञात कोई भी पहली प्रोग्रामिंग भाषा हर किसी को बर्बाद करने में सक्षम नहीं है।
जेफई

3
@ राफेल: मुझे लगता है कि दिज्कस्ट्रा की प्रतिक्रिया संभवतः " हर आदमी को ज्ञात हर भाषा को हर किसी को बर्बाद करने में सक्षम है।"
जेफई

2
@ edA-qamort-ora-y, हाँ, उन्हें कई प्रोग्रामिंग प्रतिमानों के संपर्क में लाया जाना चाहिए। नहीं, ऐसा पहले कोर्स में नहीं किया जा सकता है।
वॉनब्रांड

3
हमारे पास SMLबस इसलिए था क्योंकि यह संभव नहीं है कि कोई भी छात्र उस भाषा को हाथ से पहले जानता हो। यह पाठ्यक्रम शुरू करने के लिए हर छात्र को कमोबेश समान स्तर पर संतुलित करता है।
मार्कस मल्कुच

जवाबों:


14

मैं अपने दो सेंट में फेंक दूंगा हालांकि मेरा मानना ​​है कि यह विषय एक अथाह गड्ढा है। मुझे गलत मत समझो, मुझे लगता है कि यह एक आकर्षक सवाल है, लेकिन शायद हम सभी की संतुष्टि के लिए यहां हल नहीं करेंगे।

संक्षेप में, मैं कहूंगा कि भाषा को वही करना चाहिए जो आप करना चाहते हैं , सरल और अस्पष्ट तरीके से जितना संभव हो सके, और अधिक नहीं

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

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

जिन बिंदुओं पर मैं महत्वपूर्ण विचार करता हूं, वे कई चीजों के साथ ओवरलैप हो सकते हैं जो पहले ही कह चुके हैं, लेकिन मेरा मानना ​​है कि सबसे अंत में निम्नलिखित चार में से एक का सबसेट हो सकता है:

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

  • असंदिग्धता : सादगी का एक करीबी भाई, प्रत्येक अवधारणा के लिए एक निर्माण होना चाहिए, जहां तक ​​संभव हो कम ओवरलैप हो। इसे ऐसे समझें कि हर अवधारणा को लागू करने का केवल एक "सही" तरीका है। तीन अलग-अलग प्रकार के लूप जो शब्दार्थ सभी समान कार्य करते हैं? या पंद्रह अलग-अलग तरीके एक चर बढ़ाने के लिए? अच्छा नही। इससे होमवर्क सही हो जाता है या आमतौर पर आपके छात्रों के कोड को समझना बहुत आसान हो जाता है। आपके शिक्षण सहायक इसकी सराहना करेंगे।

  • पोर्टेबिलिटी : छात्र लिनक्स, विंडोज और ओएसएक्स मशीनों के साथ कक्षा में जाएंगे, और प्रोग्रामिंग वातावरण तीनों के समान (समान) होना चाहिए। किसी भी कार्यक्रम के परिणाम भी समान होने चाहिए। यह एक और बिंदु है कि शिक्षण सहायक, होमवर्क को चिह्नित करने और प्रश्नों / समस्याओं से निपटने के लिए जिम्मेदार हैं, बहुत सराहना करेंगे।

  • उद्योग की प्राथमिकता : गंभीरता से, हमें इस बारे में केवल तभी चिंता करना शुरू कर देना चाहिए जब "उद्योग" खुद कभी यह तय करे कि उसे कौन सी प्रोग्रामिंग भाषा पसंद है। कंप्यूटर के आविष्कार के बाद से यह लगातार चलने वाला लक्ष्य रहा है। फिलहाल, यदि आपके छात्र वास्तव में प्रोग्राम करना सीखते हैं, तो यह भाषा पर निर्भर नहीं होगा। हालांकि, कुछ क्षेत्र हैं जहां उद्योग मानक पर सहमत होने का प्रबंधन करता है, उदाहरण के लिए सर्किट डिजाइन के लिए VHDL या डेटाबेस प्रश्नों के लिए SQL, इसलिए यह अभी भी एक वैध बिंदु है।

फिर, एक भाषा इस सूची में कैसे फिट बैठती है, यह इस बात पर निर्भर करता है कि आप क्या सिखाने की कोशिश कर रहे हैं!


4
वास्तव में VHDL और वेरिलोग के बीच सर्किट डिजाइन में एक विभाजन है।
अवकर

@ वकार: आवा, बकवास। मैं इसे अपने उत्तर में ठीक करूंगा, इसे इंगित करने के लिए धन्यवाद!
पेड्रो

Yikes, इसे पढ़ा और सोचा कि यह मेरे व्याख्याताओं में से एक है। ओबेरॉन के लिए +1, जब तक कि लोअरकेस कीवर्ड स्विच का उपयोग स्वचालित रूप से सक्षम हो जाता है; इतना लिखने के लिए दर्दनाक WHILE expr DO stmts ENDआदि
कैलम रोजर्स

3
+1 के लिए "आपके पाठ्यक्रम के लक्ष्य क्या हैं?" और एक अतिरिक्त ध्यान दें, सबसे सामान्य लक्ष्य में से एक, भले ही यह वर्तनी नहीं है, अन्य चीजों (पाठ्यक्रम और इंटर्नशिप) के लिए मूल बातें देना है, जिसमें प्रोग्रामिंग के रूप में शर्त है।
एपीग्रामग्राम

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

13
  • मुख्य लक्ष्य के रूप में समस्याओं को हल करने के लिए एल्गोरिथम सोच विकसित करना: पहले पाठ्यक्रम में एक वस्तु-उन्मुख प्रतिमान का उपयोग करने के बारे में एक बुरी बात यह है कि विरासत, बहुरूपता, आदि जैसी चीजों में नए शिक्षार्थियों को प्राप्त करना, उन्हें उपर्युक्त मुख्य लक्ष्य से विचलित करता है। वास्तव में, इस मूल लक्ष्य के बगल में किसी भी माध्यमिक विचार का परिचय, जैसे सॉफ्टवेयर इंजीनियरिंग, पोर्टेबिलिटी, उद्योग की उपयोगिता आदि, काउंटर-प्रोडक्टिव हैं, कारण बताया गया है।

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

इसलिए, अंत में, मैं एक प्रक्रियात्मक भाषा के लिए जाऊंगा, उन्नत सुविधाओं से बचना, एल्गोरिथम सोच विकसित करने पर ध्यान केंद्रित करना। लेकिन, उन्नत सुविधाओं से परहेज करने का मेरा मतलब यह नहीं है कि चुनौतीपूर्ण समस्याओं से बचें। मेरा मतलब है, कि चुनौतीपूर्ण समस्याओं में भी, छात्रों को पहले सिद्धांतों, सरल साधनों का उपयोग करके इसे हल करना चाहिए।


आप प्रक्रियात्मक शैली दिखाने के लिए जावा के सबसे पहले, आसानी से कह सकते हैं। फिर आप पेंडोरा के बॉक्स को खोलते हैं और दिखाते हैं कि ओओपी के साथ एक ही सामान कैसा दिखता है।
राफेल

3
@ राफेल: public static void main()जावा में बचना असंभव है , जो कुछ वर्ग के संदर्भ में होना चाहिए। यह जावा को पहली भाषा के रूप में आदर्श से कम बनाता है, हालांकि बाधा बहुत बढ़िया नहीं है।
डेव क्लार्क

एक अच्छी IDE public static void main()बहुत लंबे समय के लिए टाल सकती है। ब्लूज एक आईडीई का एक अच्छा उदाहरण है जो छात्रों mainको इसमें कहीं भी एक के बिना प्रोग्राम लिखने देता है।
बैरी ब्राउन

2
ओओपी के साथ समस्या यह है कि पहले वर्ष में कवर की गई खिलौना समस्याओं की श्रेणी या प्रोग्रामिंग के लिए यह सिर्फ स्पष्ट लाभ के बिना, रास्ते में मिलता है। OOP महत्वपूर्ण हो जाता है (और सराहना की जाती है) जब आपके कार्यक्रम एक हजार लाइनें या तो होते हैं। "OOP के बिना जावा" भयानक है, पूरी तरह से अपारदर्शी सामान की बहुत सारी है कि "इस तरह से लिखा जाना है" लोगों के सीखने के खिलाफ जाता है , तोते नहीं।
वॉनब्रांड

11

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

मैं @ Kaveh की धारणा से सहमत नहीं हूं कि उद्योग की प्रासंगिकता महत्वपूर्ण है; यह एक बोनस हो सकता है, लेकिन यह यहां मामूली महत्व का है। सीएस सिद्धांतों में एक ठोस आधार के साथ, बाद के पाठ्यक्रमों में "औद्योगिक" भाषा सीखना अपेक्षाकृत आसान होगा।

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


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

@ केव: यह मेरे लिए एक तकनीकी विश्वविद्यालय के पाठ्यक्रम जैसा लगता है।
राफेल

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

3
@Kaveh: वास्तविक दुनिया में चीजें हासिल करने के लिए तैयार की गई भाषाएं अवधारणाओं को सिखाने या कौशल विकसित करने के लिए जरूरी नहीं हैं। लक्ष्य बहुत अलग हैं।
जेफ

1
@ केव: मैंने कभी नहीं लिखा कि उद्योग में उपयोग की जाने वाली भाषाओं का ज्ञान महत्वहीन है। मेरा मतलब है कि एक ठोस पहली प्रोग्रामिंग भाषा को देखते हुए, बाद के पाठ्यक्रमों में छात्रों को कुछ सिखाने में कोई समस्या नहीं होगी कि वे वास्तव में स्नातक होने पर क्या करेंगे। खुद को (टीए के रूप में) कई परिचयात्मक पाठ्यक्रमों को पढ़ाने का हिस्सा होने के बाद, मैं कहूंगा कि आप जो कौशल सीखते हैं, वह उद्योग में जरूरी कुछ नहीं हैं (इसके लिए बहुत कम समय है)। यदि यह मामला है, तो मुझे उन्हें ठोस अवधारणाएं देना बेहतर लगता है ताकि वे बेहतर प्रोग्रामर बन सकें, न कि केवल $ भाषा-प्रोग्रामर।
badcandybag

8

मेरी मुख्य चिंता सार्वभौमिकता है , इस अर्थ में कि इस प्रोग्रामिंग भाषा को सीखने से छात्र को अधिकांश प्रोग्रामिंग भाषाओं को संभालने में सक्षम होना चाहिए।

मुझे जितना पछतावा है, यह कसौटी शुद्ध कार्यात्मक भाषाओं को छोड़ देती है। यह उस पाठ्यक्रम पर भी लागू होता है जिसमें भाषा की विदेशी विशेषताओं का उपयोग नहीं किया जाना चाहिए।

... लेकिन यह केवल सामान्य ज्ञान है।


1
हास्केल में भिक्षुओं के साथ, यह तर्क है कि यह मानदंड शुद्ध कार्यात्मक भाषाओं पर लागू नहीं है।
डेव क्लार्क

@DaveClarke: भिक्षु गैर-कार्यात्मक सामान करने का एक बहुत अच्छा तरीका है। लेकिन क्या यह सीधे तौर पर सीधे बदले के बजाय मोनड ओवरहेड के साथ इस सामान को सीखना जोखिम भरा है? (शायद यह मैं नहीं जानता, नहीं है!)
jmad

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

@DaveClarke: वाह, मैंने इसके बारे में नहीं सुना। यह बहुत अच्छा है! दुर्भाग्य से जब हास्केल सीखने के लिए यह बहुत उपयोगी है, तो यह समस्या को संबोधित नहीं करता है कि यह अन्य भाषाओं को सीखने में मदद नहीं कर सकता है।
jmad

4
@ बान: मेरी भावना यह है कि मैनुअल मेमोरी प्रबंधन एक ऐसी चीज है जो आजकल कुछ भाषाओं के लिए विशिष्ट है (और यह कि आप इन विशिष्ट मामलों में सीखते हैं) प्रोग्रामिंग की एक मूलभूत चीज से अधिक है। अगर आप इससे सहमत नहीं हैं तो मुझे लगता है कि यह C (या C ++) की ओर इशारा करता है।
जम्मूतवी

8

पहली प्रोग्रामिंग भाषा चुनते समय, कई मुद्दे हैं जिन पर विचार करने की आवश्यकता है। इनमें से कई को उपरोक्त उत्तरों में माना गया है। मैं 3 और शामिल करता हूं क्योंकि ये मेरे बंद प्रश्न के जवाब का एक हिस्सा थे ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) - मूल रूप से इस सवाल से प्रेरित । मैंने बंद प्रश्नों को हटाने की वर्तमान नीति के आधार पर अपने उत्तर की प्रतिलिपि यहां (और इसे संशोधित) कर दी है।

उदाहरण के रूप में कुछ प्रोग्रामिंग भाषाओं का उपयोग करके विचार करने के लिए यहां 3 बिंदु हैं।

छोटे में बड़े बनाम प्रोग्रामिंग में प्रोग्रामिंग

जब पहली बार प्रोग्राम करना सीखते हैं, तो किसी को बड़े में प्रोग्रामिंग में मदद करने के लिए मैकेनिज्म सीखने के लिए आगे बढ़ने से पहले, छोटे में प्रोग्राम करना सीखना होगा ।

छोटे में प्रोग्रामिंग करके, मेरा मतलब है कि 100 से कम लाइनों वाले प्रोग्राम लिखना। इन कार्यक्रमों में एल्गोरिदम शामिल होंगे जो सरल डेटा संरचनाओं में हेरफेर करते हैं, सरल नियंत्रण प्रवाह होते हैं, और सरल समस्याओं को हल करेंगे। वे सामान्य रूप से आवेदन के रूप में नहीं माने जाएंगे ।

बड़े में प्रोग्रामिंग करके, मेरा मतलब है कि कई घटकों / वर्गों से निर्मित बड़े कार्यक्रमों को लिखना, एक एपीआई के ऊपर निर्माण करना, एक जीयूआई के साथ, एक डेटाबेस, संभवतः एक क्लाइंट-सर्वर कॉन्फ़िगरेशन में।

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

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

दूसरी ओर, पायथन, रूबी, स्कीम या हास्केल जैसी भाषा सीधे प्रोग्राम लिखना आसान बनाती है।

उच्च-स्तर बनाम निम्न-स्तर

C ++ और C जैसी भाषाएं निचले स्तर की भाषा हैं। वे प्रोग्रामर को सीधे मेमोरी में संदर्भों में हेरफेर करने में सक्षम बनाते हैं। हालांकि, यह एक को बहुत कुशल कोड लिखने की अनुमति देता है, निचले स्तर का विवरण भाषा सीखने के लिए पहले प्रोग्रामर के लिए मुश्किल हो सकता है। कुछ लोग तर्क देंगे कि समस्या को हल करने के लिए तर्क लिखने के तरीके में ये निम्न स्तर के विवरण मिलते हैं।

पायथन जैसी उच्च-स्तरीय भाषा समस्या समूह के संदर्भ में अवधारणाओं को अधिक सीधे व्यक्त करना आसान बनाती है।

स्टेटिकली टाइप्ड बनाम डायनामिकली टाइप्ड

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

पायथन, रूबी और स्कीम गतिशील रूप से टाइप की गई हैं। इसका मतलब है कि प्रोग्राम चलते समय त्रुटियों का पता लगाया जाता है। कोई यह तर्क दे सकता है कि त्रुटियों का पता लगाने में बहुत देर हो चुकी है (लेकिन ऐसी त्रुटियों से बचने के लिए परीक्षण का उपयोग भी किया जा सकता है)। फिर से, धार्मिक तर्क से बचते हुए, एक गतिशील टाइप की गई प्रोग्रामिंग भाषा में सरल प्रोग्राम लिखते समय जिस तरह की त्रुटियों का सामना करना पड़ता है, उसका लाभ इस प्रकार का होता है कि इस ऑपरेशन को कैसे करना है । एक छोटे से कार्यक्रम के संदर्भ में, इन त्रुटियों को समझना और ट्रैक करना आसान है।

C जैसी भाषाओं में कमजोर टाइपिंग होती है, जिसका अर्थ है कि हालांकि कंपाइलर कुछ त्रुटियों के साथ मदद करता है, लेकिन रन-टाइम दूसरों को फंसाने में विफल रहता है, जैसे कि अमान्य मेमोरी एक्सेस। परिणामस्वरूप, प्रोग्रामर को दिया गया त्रुटि संदेश "प्रोग्राम क्रैश हो गया" जैसा है। एक गतिशील रूप से टाइप की गई भाषा इन त्रुटियों को जाल में डाल देती है और उन्हें एक अधिक समझदार त्रुटि संदेश में बदल देती है।

अन्य लोग

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


दिल से सहमत हूँ।
वॉनब्रांड

1
"स्थिर बनाम गतिशील प्रकार" विवाद के बारे में मेरी अपनी प्राथमिकताएं भी हैं। हालांकि, एक सामान्य सीएस कार्यक्रम में, जब तक दोनों को कुछ बिंदु के रूप में पढ़ाया जाता है, मेरा मानना ​​है कि आदेश इतना मायने नहीं रखता है। यदि सिक्के का केवल एक पक्ष प्रस्तुत किया जाता है, हालांकि, यह मेरे लिए एक बड़ा मुद्दा है।
चि

8

परिचयात्मक टिप्पणी के रूप में, एक से अधिक भाषा (एक पाठ्यक्रम में) प्रस्तुत करने की संभावना पर विचार करें। अपने पहले कार्यकाल में हमने SML और Java दोनों को दिखाया। इसके विपरीत में अपना बहुत ही महत्वपूर्ण और महत्वपूर्ण संदेश था: नौकरी के लिए सही उपकरण चुनें।

लेकिन अब मापदंड के लिए, मनमाने क्रम में।

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

समृद्धि : भाषा (ओं) को उन सभी अवधारणाओं के लिए पर्याप्त समृद्ध होना चाहिए जिन्हें आप सिखाना चाहते हैं। उदाहरण के लिए, यदि आप उच्च-क्रम के कार्यों पर चर्चा करना चाहते हैं, तो आपको एक ऐसी भाषा की आवश्यकता होती है जहाँ फ़ंक्शन मान हैं, जैसे कि कार्यात्मक भाषाएँ या स्काला।

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

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

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

उपलब्धता : वास्तव में ऐसे लोग हैं जो Matlab या Visual C ++ का उपयोग करना सिखाते हैं। इस बात पर विचार करें कि हर किसी के पास लाइसेंस या एक मशीन नहीं हो सकती है जो आवश्यक कार्यक्रम चला सके। आपको कई तरह के प्लेटफार्मों पर चलने वाली मुफ्त भाषाओं का पक्ष लेना चाहिए।

निर्मलता : आप शायद अपने छात्रों के सोचने के तरीके को आकार देना चाहते हैं। भाषा जितनी गन्दी होगी, उतनी ही गड़बड़ वे सोचेंगे; मैं एक कोर्स में PHP का प्रस्ताव कभी नहीं होगा। सामान्य रूप से गतिशील भाषाओं में यहां नुकसान हैं: वे अनुमति देते हैं, कभी-कभी प्रचार भी करते हैं, बुरी आदतें।

आपके लिए दूसरों की तुलना में कौन से मापदंड अधिक महत्वपूर्ण हैं यह इस बात पर भी निर्भर करता है कि आप क्या सिखाना चाहते हैं। क्या यह सचमुच एक प्रोग्रामिंग कोर्स है? क्या यह एक एल्गोरिदम और डेटा संरचना पाठ्यक्रम है? क्या यह एक कोर्स है जो विभिन्न भाषाओं में प्रोग्रामिंग भाषाओं की अवधारणाओं का परिचय देता है? क्या यह सॉफ्टवेयर विकास के बारे में एक कोर्स है?


For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala. ... या C या पास्कल, जो दोनों के पास फंक्शन पॉइंट्स थे, बहुत ज्यादा हमेशा के लिए। व्यावहारिक रूप से एकमात्र (मुख्य धारा) भाषा यह मानदंड वास्तव में अलग है जावा।
मेसन व्हीलर

अलग-अलग वाक्यविन्यासों और अंतर्निहित अवधारणाओं की एक नई कहानी को पढ़ाने की कोशिश करना सिर्फ दिमाग का काम है।
वॉनब्रांड

6

आकर्षक प्रश्न; मुझे वस्तुनिष्ठ मानदंडों पर आपका जोर पसंद है। हम सीखना चाहते हैं:

प्रोग्रामिंग अवधारणाओं : पहली प्रोग्रामिंग भाषा का समर्थन करना चाहिए: फ़ंक्शन कॉल, पुनरावृत्ति, पुनरावृत्ति

मौलिक विचार : पहली प्रोग्रामिंग भाषा को सरणियों का समर्थन करना चाहिए (सौम्य परिचय में पहले चरण के लिए कि स्मृति वास्तव में कैसे काम करती है और संकेत कैसे काम करते हैं)

व्यावहारिक प्रोग्रामिंग कौशल : डिबगर का उपयोग कैसे करें, प्रोफाइलर का उपयोग कैसे करें, बड़ी समस्याओं को कैसे हल करें (एक उच्च स्तरीय भाषा), बड़े सिस्टम को एक साथ कैसे रखा जाए, समस्याओं को कैसे दूर किया जाए (समस्याओं का अपघटन), लेखन से कैसे बचें जटिल कोड, निष्पादन योग्य बयानों की एक (अक्सर गुप्त) श्रृंखला के पीछे के इरादे से मनुष्यों को कैसे संवाद करना है

तथ्य यह है कि पूर्व-लिखित पुस्तकालय सॉर्ट () जैसी चीजों के लिए मौजूद हैं, और उनका उपयोग कैसे करें - यानी, यह तथ्य कि खरोंच से सब कुछ लिखना आवश्यक नहीं है।

पहली भाषा के लिए अन्य मानदंड :

व्याख्या की गई (त्वरित प्रतिक्रिया सीखने की प्रक्रिया में मदद करती है)।

एक इंटरैक्टिव वातावरण जो सीखने, परीक्षण और डीबगिंग को गति देता है।

छात्रों के लिए उस भाषा में पढ़ने के लिए उच्च-गुणवत्ता वाला स्रोत कोड उपलब्ध है

"पढ़ने में आसान", "सिंटैक्स जो प्राकृतिक भाषा से संपर्क करता है" (सोर्सकोड को पढ़ना और ग्रेड करना आसान बनाने के लिए)

पोर्टेबल (मैक ओएस, विंडोज, यूनिक्स पर चलता है)। भाषा का कम से कम एक मुफ्त सॉफ्टवेयर कार्यान्वयन।

उपवास करना, "कुछ गोचैस" - उदाहरण के लिए, "[I] टी पहले ओओपीएल के रूप में जावा के बजाय शुरुआती पायथन और फिर जावा को सिखाने के लिए तेज़ हो सकता है।" - "ऑब्जेक्ट-ओरिएंटेड प्रोगामिंग लैंग्वेज की तुलना" और टेलीस्कोप Rule

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

एक दूसरी प्रोग्रामिंग भाषा के लिए मानदंड

सामान हम छात्रों को सीखना चाहते हैं, लेकिन शायद यह दूसरी प्रोग्रामिंग भाषा के लिए इंतजार कर सकता है:

एक "प्रासंगिक" भाषा जो "बहुत गूढ़ नहीं है"; कुछ "उद्योग में लोकप्रिय"

जटिलता सिद्धांत: उन कार्यों को कैसे पहचानें जो वर्तमान तकनीक के साथ असंभव हैं।

उच्च-स्तरीय सामान: नौकरी के लिए सही उपकरण कैसे चुनें , कंपाइलर, स्ट्रक्चर, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, फंक्शनल प्रोग्रामिंग, लॉजिक प्रोग्रामिंग, कंपाइलर डिज़ाइन, कंपोज़िंग और मैनिपुलेटिंग फंक्शन्स (लिस्प / एमएल सेंस में) का उपयोग कैसे करें समवर्ती और वितरित प्रोग्रामिंग,

निम्न-स्तरीय सामान: सूचक अंकगणित, कंप्यूटर वास्तुकला। मेमोरी प्रबंधन, स्टैक फ्रेम, असेंबली प्रोग्रामिंग, मशीन आर्किटेक्चर, डिवाइस ड्राइवर और ऑपरेटिंग सिस्टम डिज़ाइन (ताकि मशीन "कुछ भयावह ब्लैक बॉक्स की तरह प्रतीत न हो" वे घुसना नहीं कर सकते)

संपादित करें: मुझे लगता है कि यह निराशाजनक है कि मैंने कुछ अन्य लोगों के साथ मिलकर कुछ का सारांश पोस्ट किया, "एक कानूनी मामला नहीं हो सकता है"।

इसलिए मैं अपने पिछले अनौपचारिक लिंक के लिए एक अधिक औपचारिक प्रशस्ति पत्र जोड़ रहा हूं , उचित उपयोग और अन्य विकी कॉपीराइट मुद्दों का अनुपालन करने का प्रयास कर रहा हूं ।

यह उत्तर पोर्टलैंड पैटर्न रिपोजिटरी में फ्रेशमैन की पहली भाषा (एनॉन 2011) का सारांश है ।

(एनोन 2011) कई अनाम और विभिन्न अन्य लेखक। "फ्रेशमैन फर्स्ट लैंग्वेज"। पोर्टलैंड पैटर्न रिपोजिटरी। 27 सितंबर, 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage


क्या आपने मूल लेखकों के साथ जाँच की है कि क्या आपको उनकी सामग्री को पुन: पेश करने की अनुमति है? स्रोत एक कॉर्पोरेट वेबसाइट है और मुझे यह घोषणा नहीं मिली कि सामग्री मुफ़्त थी, इसलिए यह कानूनी पद नहीं हो सकता है!
राफेल

1
@ राफेल स्रोत एक विकी है (इसलिए संभावित रूप से कई अलग-अलग लेखक हैं)। यदि इस सामग्री का लेखक (कोई सह-लेखक) इसे यहां शामिल नहीं करना चाहता है, तो उसे [इस पृष्ठ के निचले भाग में सूचीबद्ध संपर्क पते] पर एक DMCA टेकडाउन नोटिस भेजना चाहिए (mailto: team+cs@stackexchange.com) । इसके अलावा, सूचना कॉपीराइट द्वारा कवर नहीं की जाती है, केवल इसे व्यक्त करने का तरीका। थोड़ी सी भी रिफैक्टिंग और रिमूवगर्हिंग राइटिंग RunTatelyWikiWikiStyle इस उत्तर को बेहतर बनाएगी और कॉपीराइट उल्लंघन के किसी भी जोखिम को दूर करेगी।
गाइल्स 'एसओ- बुराई को रोकें'

1
+ अच्छा जवाब है, लेकिन मेरे पास लेने के लिए एक नट है - प्रोफाइलर्स। उनके पीछे कोई सिद्धांत नहीं है - सिर्फ "सामान्य ज्ञान"। यह आमतौर पर शिक्षाविदों के बीच सराहना नहीं है कि कई समस्याएं हैं जो उन्हें नहीं मिलती हैं, और एक अन्य तकनीक है। इस लिंक को देखें।
माइक डनलैवी

5

मुझे लगता है कि सरलता और सीखने में आसानी मुख्य मानदंडों में से एक है। प्रोग्रामिंग पर एक परिचयात्मक पाठ्यक्रम में हम अनावश्यक प्रोग्रामिंग बाधाओं से बचना चाहते हैं और प्रोग्रामिंग और एल्गोरिदम समस्या समाधान के सिद्धांतों पर जितना संभव हो उतना ध्यान केंद्रित करना चाहते हैं। पहले वर्ष के छात्रों में अक्सर समस्याओं के बारे में एल्गोरिथम सोचने की क्षमता का अभाव होता है, इसलिए पाठ्यक्रम एल्गोरिथम सोच को पढ़ाने के बारे में भी होता है।

एक और मापदंड उद्योग में भाषा की उपयोगिता है। हम ऐसी भाषा नहीं सिखाना चाहेंगे जो उद्योग में किसी काम की न हो। छात्रों का एक स्पष्ट बहुमत उद्योग में काम करने जा रहा है, इसलिए किसी को इस बात पर ध्यान देना चाहिए कि उद्योग में स्नातक होने के दौरान (और छात्रों के स्नातक होने पर इसका उपयोग किया जाएगा)।

तीसरा मानदंड उन पाठ्यक्रमों का होगा जो छात्र बाद के वर्षों में लेने जा रहे हैं। पाठ्यक्रम, विशेष रूप से आवश्यक पाठ्यक्रम, स्वयं पर नहीं बल्कि अन्य पाठ्यक्रमों के समन्वय में डिज़ाइन किए गए हैं।

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

मुझे लगता है कि कई विश्वविद्यालयों ने जावा / सी ++ / सी से प्रोग्रामिंग कोर्स के लिए अपना मुख्य परिचय पायथन में स्थानांतरित कर दिया है, हालांकि वे समय-समय पर अन्य भाषाओं में प्रोग्रामिंग का परिचय प्रदान कर सकते हैं (अक्सर गैर-कंप्यूटर विज्ञान की बड़ी कंपनियों, जैसे इलेक्ट्रिकल इंजीनियरिंग की बड़ी कंपनियों के लिए सी) हालाँकि, यदि प्रशिक्षक दूसरी भाषा को एक बार में सिखाने के साथ प्रयोग करना चाहता है, तो वे लचीलापन दिखा सकते हैं।


3
मैं एक परिचयात्मक प्रोग्रामिंग पाठ्यक्रम में बहुत अधिक उद्योग में उपयोगिता को दर नहीं करूंगा। जंगली में एक सफल प्रोग्रामर को संभवतः अपने करियर के दौरान कई भाषाओं को सीखना होगा, उनमें से कुछ "नौकरी पर", इसलिए नई भाषाओं को चुनने और सीखने की क्षमता एक महत्वपूर्ण कौशल है जिसे सिखाने की आवश्यकता है। नतीजतन मैं उम्मीद नहीं करूंगा कि पहली भाषा को विश्वविद्यालय-लंबाई के पाठ्यक्रम में पढ़ाया जाना जरूरी है जब वे स्नातक हों।
बेन

1
@बेन: उद्योग में उपयोगिता विशेष रूप से महत्वपूर्ण है अगर छात्र सीएस में प्रमुख नहीं जा रहे हैं। मैं कहां से कई लोगों से आते हैं जीव विज्ञान या अन्य विज्ञानों और, यह देखते हुए कि वे नहीं होते कितने भाषाओं को जानने के लिए समय पर काम करने के लिए जाना है, उनके पारिस्थितिकी तंत्र में कुछ आम सीखने की तरह अजगर होने की संभावना अधिक उपयोगी तो एमएल, जावा या सी हो जाएगा
hugomg

1
उद्योग से किसी के रूप में बोलना (एक विशेष उद्योग, जरूरी प्रतिनिधि नहीं), मुझे नहीं लगता कि उद्योग की प्रासंगिकता एक कारक है जब यह भविष्य के टियर -1 प्रोग्रामर की बात आती है। कई प्रतिमानों के लिए एक्सपोजर बेहतर प्रोग्रामर बनाता है, भले ही मेरे डोमेन (एम्बेडेड प्रोग्रामिंग) में हम ज्यादातर सी का उपयोग करते हैं। भाषा के विवरणों को एक मैनुअल में सीखा जा सकता है, सामान्य अवधारणाओं को स्कूल में पढ़ाया जाता है। आकस्मिक प्रोग्रामर (उदाहरण के लिए वैज्ञानिक) के लिए, प्राथमिकताएं अलग-अलग हैं - लेकिन फोरट्रान पर बहुत अधिक ध्यान केंद्रित करने से लोग Numpy को अनदेखा कर सकते हैं जब वह उपयोग कर रहा हो।
गाइल्स 'एसओ- बुराई पर रोक'

5

तो, मैं तुरंत अपने घुटने के झटका प्रतिक्रिया के साथ बांटना होगा, जो कि सभी को SICP के माध्यम से प्रोग्रामिंग सीखनी चाहिए क्योंकि लिस्प द राइट विंग है।

भाषा के चयन के लिए पहले से ही कई अच्छे मानदंड दिए गए हैं ... सादगी और सुवाह्यता सबसे महत्वपूर्ण है। हालांकि, मुझे यह भी लगता है कि नए छात्रों के लिए यह महत्वपूर्ण है कि वे प्रोग्रामिंग के बारे में गलत विचार न लें (या कोई विचार नहीं है) आधुनिक भाषाओं के पर्दे के पीछे क्या हो रहा है।

यद्यपि इनमें से कुछ अन्य पोस्टों ने उत्कृष्ट मानदंड की पेशकश की है, मैं एक विशेष भाषा का उपयोग यह बताने के लिए करना चाहूंगा कि 'मानदंडों को पूरा करना' कैसा दिखता है।

जोएल स्पोलस्की की ब्लॉग पोस्ट, द पेरिल्स ऑफ जावास्कूल में इन चिंताओं में से कुछ को संबोधित किया गया है (इससे बेहतर मैं जितना प्रयास कर सकता था) । जावा या पायथन जैसी भाषाओं को चुनना सीएस में कठिन (और सबसे महत्वपूर्ण) अवधारणाओं में से दो से अधिक बंद हो जाता है; अर्थात्, संकेत और पुनरावृत्ति।

बेशक, सी में एक इंट्रो कोर्स सिखाना अविश्वसनीय रूप से सघन होने वाला है, जबकि पुनरावृत्ति से संबंधित कई महत्वपूर्ण अवधारणाओं की संभावना भी गायब है। इसी तरह, एक पाठ्यक्रम लिस्प में पढ़ाया जाता है कवर के तहत पता संकेत करने के लिए है, के रूप में होगा carऔर cdrलिंक्ड सूचियों से संबंधित महत्वपूर्ण अवधारणाओं मतलब, भाषा संभाल दे जबकि विवरण।

मूल रूप से, मुझे जो मिल रहा है, वह यह है कि छात्रों को डेटा संरचनाओं और एल्गोरिदम के मूल सिद्धांतों को समझने की आवश्यकता है, साथ ही व्यावहारिक कार्यान्वयन भी।

मैं एक वस्तु-उन्मुख भाषा का उपयोग करने के सुझाव से भी असहमत हूं । मुझे लगता है कि वास्तविक दुनिया की मॉडलिंग करने के लिए ऑब्जेक्ट ओरिएंटेड भाषाओं की उपयोगिता नए प्रोग्रामर्स के लिए एक सकारात्मक संपत्ति है, जब तक कि प्रतिबाधा बेमेल को स्पष्ट नहीं किया जाता है, और यह कि ऑब्जेक्ट-ओरिएंटेड भाषाएं कई के बीच एक प्रतिमान हैं।

मैं यह प्रस्तावित करूंगा कि रूबी (किसी अन्य पद पर भी संभावना के रूप में सुझाव दिया गया है) प्रोग्रामिंग कोर्स के लिए परिचय के लिए उपयोग करने के लिए एक भाषा में देखने के लिए कई गुणों का उदाहरण देता है।

मैं इस दावे को पल-पल पर सही ठहराऊंगा, लेकिन पहले मैं एक प्रवृत्ति पर टिप्पणी करना चाहता हूं जो मुझे इंट्रो सीएस पाठ्यक्रमों में परेशान करती है। मैं एक विश्वविद्यालय में काम करता हूं, जिसने कई स्कूलों की तरह, हाल ही में अपने इंट्रो पाठ्यक्रमों के लिए पायथन का उपयोग करने के लिए स्विच किया है। मेरा दृढ़ विश्वास है कि पायथन नया मूल है, और भाषा की प्रवृत्ति शक्ति और अभिव्यंजना पर नई-मित्रता का चयन करना है, जैसा कि मैंने हाल ही में कहीं और तर्क दिया है । यह एक असहमति है, और हमें उन प्रोग्रामरों के बारे में सोचने की ज़रूरत है जो वे बनेंगे, न कि इस समय जो नए हैं वे।

किसी भी तरह, रूबी को परिचयात्मक भाषा के रूप में सही ठहराते हुए ...

  • रूबी, हालांकि टेल-कॉल अनुकूलित नहीं, बल्कि अच्छी तरह से पुनरावृत्ति करता है। तो वहीं है।
  • रूबी बहु-प्रतिमान है। यद्यपि यह एक शुद्ध वस्तु-उन्मुख भाषा है, यह कार्यात्मक प्रोग्रामिंग को भी गले लगाती है, साथ ही साथ कुछ अनिवार्य, सी-व्युत्पन्न प्रशिक्षण पहियों से निपटती है। इसकी तुलना पाइथन से करें, जो एक प्रक्रियात्मक भाषा है जिसमें कुछ टैकल-ऑन ओओ (हालांकि बोल्ट दिखाई दे रहे हैं), और कुछ कार्यात्मक तत्व (जो पायथन के बीडीएफएल ने बार-बार एक्साइज करने की कोशिश की है ) है।
  • CRuby (उर्फ एमआरआई या 'रूबी क्लासिक') सी में लिखा और विस्तारित किया गया है, आप छात्रों malloc()को सी में भाषा का विस्तार करने के लिए सिखाकर पॉइंटर्स, मेमोरी मैनेजमेंट और खूंखार भगवान के बारे में सिखा सकते हैं।
  • यहां तक ​​कि सोचा कि यह एक उच्च-स्तरीय, गतिशील भाषा है, आप डेटा संरचनाओं, प्रकारों आदि के बारे में बहुत कुछ सिखा सकते हैं; लाल-काले पेड़ों से लेकर बतख-टाइपिंग के साथ अजीब चीजें करने के लिए आपके द्वारा कल्पना की जा सकने वाली कुछ भी लाइब्रेरी (रत्न) हैं।

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

किसी भी तरह ... यह मेरा US $ .02 है। मैं आपको रूबी, माइंड यू ... का उपयोग करने के लिए मनाने की कोशिश नहीं कर रहा हूं ... सिर्फ इंट्रो कोर्स सिखाने के लिए भाषा में देखने के लिए गुणों का एक उदाहरण के रूप में उपयोग कर रहा हूं।


2
"मेरा दृढ़ विश्वास है कि पायथन नया बुनियादी है" - कि नकल। "सीएस में कठिन (और सबसे महत्वपूर्ण) अवधारणाओं में से दो; अर्थात्, संकेत और पुनरावृत्ति" - मैंने कभी भी स्पष्ट रूप से संकेत देने वाली भाषा नहीं सीखी है, और मैंने कभी भी कुछ भी याद नहीं किया है। जब मैंने सीखा कि कंपाइलर कैसे काम करते हैं, तो पॉइंटर्स जहां जल्दी से पर्याप्त समझाया गया है।
राफेल

मैं सहमत हूं कि एक बहु-प्रतिमान भाषा का अपना आकर्षण है (हालांकि दो से तीन "शुद्ध" भाषाओं को पढ़ाना बेहतर हो सकता है), लेकिन मैं उस कारण से रूबी को नहीं चुनूंगा। एक बेहतर काम करने के लिए अन्य भाषाओं, विशेष रूप से बुनियादी पुस्तकालय के संबंध में, इहो। उदाहरण के लिए, स्काला के पास अपरिवर्तनीय संग्रह की पूरी लाइब्रेरी है।
राफेल

3
मेरा यह भी मानना ​​है कि पायथन नया मूल है। लेकिन क्यों अजगर के खिलाफ एक तर्क है?
जेफई

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

1
@DaveClarke: यह व्हाट्सएप के साथ संकेत देता है, जो उन लोगों के लिए बनाता है।
राफेल

5

मेरी पहली प्रोग्रामिंग भाषा एक खिलौना असेंबली भाषा थी। दूसरा था फोरट्रान। बीच में, मुझे एक "एल्गोरिदम" संकेतन सिखाया गया था, जो कि लगभग अल्गोल 60 था। मैं काफी ठीक निकला। वास्तव में, मुझे लगता है कि जो मुझे सिखाया गया था वह बहुत अधिक परिपूर्ण था।

जब मैंने पहली बार कार्यात्मक प्रोग्रामिंग को देखा, शोध पत्रों में हालांकि एक कार्यान्वित भाषा में नहीं था, तो मैं गया "वाह, यह पूरी तरह से अलग है। यह काफी गणितीय है!" अधिकांश लोग जो कार्यात्मक प्रोग्रामिंग सिखाते हैं, उनके पास अभी भी "वाह" अनुभव का एक ही प्रकार है। मुझे लगता है कि महान है।

मुझे लगता है कि अनिवार्य प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग दुनिया को देखने के दो पूरी तरह से अलग तरीके हैं। यदि हम उस विविध अनुभव को लूटते हैं, तो हम अपने छात्रों की सेवा करेंगे।

सबसे अच्छी पहली प्रोग्रामिंग भाषा कुछ ऐसी होनी चाहिए जो यथासंभव सरल हो और जितना संभव हो उतना स्पष्ट हो, ताकि छात्र स्पष्ट रूप से सोचने के तरीके पर ध्यान केंद्रित करने में सक्षम हों। दुर्भाग्य से, विधानसभा, फोरट्रान और अल्गोल 60 की सादगी और स्पष्टता सबसे आधुनिक दिन प्रोग्रामिंग भाषाओं द्वारा बेजोड़ है। हास्केल एक अच्छा अपवाद है। लेकिन, हास्केल मेरी आदर्श दूसरी प्रोग्रामिंग भाषा बनाएंगे, पहली नहीं। एफिल या ओबेरॉन शायद बिल फिट कर सकते थे।


5

पर विज्ञान और गणित के उत्तरी कैरोलिना स्कूल , हम 2004 से अजगर के लिए छात्रों पेश किया है हम, इसका इस्तेमाल प्रक्रियात्मक प्रोग्रामिंग सिखाने के लिए क्योंकि हमें लगता है कि क्षमता कम लिखने के लिए, सही प्रक्रियाओं भारी उपकरणों के साथ बाद में प्रगति, OO सहित के लिए महत्वपूर्ण है प्रोग्रामिंग।

हम इन कारणों से इसे पसंद करते हैं।

  1. पायथन एक मुक्त-स्वरूप भाषा नहीं है। यह छात्रों को इंडेंटेशन का उपयोग करके ब्लॉक में अपना कोड लिखने के लिए मजबूर करता है। (एक तकनीकी नोट के रूप में, हम set tabstop=4 set etकष्टप्रद समस्याओं को खत्म करने और कोड इंडेंटेशन के लिए ध्यान देने योग्य होने के लिए [ ] .vrcrc का उपयोग करते हैं और ध्यान देने योग्य होने के लिए लेकिन बदसूरत अत्यधिक क्षैतिज बहाव का कारण नहीं बनते हैं)। हमारे छात्रों को व्हाट्सएप द्वारा सीमांकित कार्यक्रमों की पदानुक्रमित संरचना को देखने की आदत है। नतीजतन, उनकी प्रारूपण आदतें बहुत अच्छी होती हैं क्योंकि वे अन्य भाषाओं में कार्यक्रम करते हैं।

  2. पायथन की वाक्य-रचना सरलता इसे शुरुआती के अनुकूल बनाती है। सरल कार्यक्रमों को कम से कम रहस्यमय कीवर्ड और जादुई झुकाव के साथ लिखा जा सकता है। हम ऐसा छात्र चाहते हैं जो आमतौर पर इसे आज़माने के लिए प्रोग्रामिंग के बारे में नहीं सोचता। पायथन की प्यारी सादगी पर ध्यान दें hello.py; यह स्पष्ट है कि क्या हो रहा है।

  3. अजगर गतिशील रूप से टाइप किया जाता है और बतख टाइप किया जाता है। इससे वेरिएबल्स को पेश करना आसान हो जाता है। मैं अपने छात्रों को बताता हूं कि चर केवल लेबल हैं। वे वस्तुओं की ओर इशारा करते हैं। आप चर नाम का उपयोग करके किसी वस्तु को संदेश भेजते हैं, जैसे कोई आपको फोन पर कॉल करके संदेश भेजता है।

  4. अजगर एक ऐसा उपकरण है जिसे महत्वाकांक्षी छात्र आगे नहीं बढ़ाएंगे। इसमें परिष्कृत पुस्तकालय हैं जो उपयोगी सामानों के मेजबान हैं। यह एक शक्तिशाली रचनात्मक उपकरण है जो शुरुआती लोगों के लिए सुलभ है।

  5. अजगर स्वतंत्र है और सभी प्रमुख प्लेटफार्मों पर चलता है। हमारे स्कूल में सभी प्रकार की मशीनों के साथ एक विषम ओएस वातावरण है। हमें सिरदर्द के बारे में चिंता करने की ज़रूरत नहीं है जैसे कि संगतता मुद्दे। यह सिर्फ किसी भी कंप्यूटर के बारे में चलेगा।

  6. अजगर के पास उत्कृष्ट दस्तावेज हैं। हम अपने छात्रों को लाइनों के बाहर तलाशने, टिंकर करने और रंग करने के लिए प्रोत्साहित करते हैं। वे पायथन प्रलेखन का उपयोग करने के बारे में सीखते हैं और अक्सर कक्षा के बाहर शांत सामान की खोज करते हैं।

हम पायथन से बहुत प्रसन्न हुए हैं।


1
स्वागत हे! यह एक अच्छा केस स्टडी है, लेकिन चयन मानदंड, इम्हो के बाद सवाल का जवाब देने के लिए बहुत कम है। अपनी वस्तुओं को पीछे की ओर पढ़ना उस तरह का हो सकता है, लेकिन मुझे यकीन नहीं है कि आपने इसे इस तरह से बनाया है।
राफेल

कोई विशेष आदेश नहीं था। यह एक "और" है।
ncmathsadist

3

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

(से पलायन जवाब https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )


1

टी एल; डॉ: कोई रास्ता नहीं करने के लिए नहीं है निष्पक्ष है, क्योंकि वहाँ कोई इस जवाब उद्देश्य इसके पीछे मापदंड के लिए आधार। यह उतना ही मनमाना है जितना कि नीली, निष्पक्ष रूप से बहस करने की कोशिश करना , एक "बेहतर" लाल से रंग, या वेनिला आइसक्रीम है अगर निष्पक्ष "स्वादिष्ट" चॉकलेट की तुलना में।


मुझे लगता है कि कुछ अद्भुत पोस्ट पहले से मौजूद हैं, लेकिन मैं अपने 2 सेंट जोड़ूंगा।

क्या उद्देश्य?प्रथम वर्ष के विश्वविद्यालय प्रोग्रामिंग पाठ्यक्रम के आधार के रूप में उपयोग करने के लिए एक प्रोग्रामिंग भाषा का चयन करने के लिए एक शिक्षक मानदंड का उपयोग कर सकता है?

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

क्यूं कर? क्योंकि जब भी हम पेड्रो के उत्तर में उल्लिखित उचित मानदंडों को देखते हैं , हर कोई अभी भी एक होगा व्यक्तिपरक कैसे प्रत्येक कारक किसी और के विचारों के खिलाफ "ऊपर रखती है" को ध्यान में रखते।

उदाहरण के लिए, क्या पाइथन की तुलना में रूबी निष्पक्ष रूप से "सरल" है? किस अर्थ में सरल? किस बात को लेकर? आपके लिए "सरल" का क्या अर्थ है ? क्या इसका मतलब है "कोड की कम लाइनें"? क्या इसका मतलब है "पढ़ने और समझने में आसान"? दूसरों के बारे में क्या? यहां किसी विशेष चयन से किसी को सहमत क्यों होना चाहिए? मुझे नहीं लगता कि हम उस सवाल का जवाब दे सकते हैं निष्पक्ष रूप से

इससे अगला प्रश्न सामने आता है।

इन मानदंडों का आधार क्या है?

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

उदाहरण के लिए, क्यों नहीं

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

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

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

यह कहना नहीं है कि आपकी प्राथमिकताओं को सही ठहराने के लिए आपके पास अच्छे कारण नहीं हो सकते हैं, लेकिन दिन के अंत में, वे सिर्फ आपकी प्राथमिकताएं हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.