मुझे पहली प्रोग्रामिंग भाषा के रूप में हाई स्कूल में C ++ सिखाया गया था, हालाँकि यह "C +" जैसा था , अब आप इसका उल्लेख करते हैं; हम cout
सांत्वना और फ़ाइलों के लिए पाठ लिखने के लिए इस्तेमाल किया , लेकिन यह भी कुछ सी कार्य ( getch()
मेरा पसंदीदा था)।
मुझे लगता है कि मूल बातें सिखाने का सबसे प्रभावी (और संभवतः मज़ेदार) तरीका एक लक्ष्य-उन्मुख पाठ्यक्रम का उपयोग कर रहा है: आउटपुट सामान, फिर कीबोर्ड इनपुट, फिर सरल फ़ाइल I / O, आदि को दिखाने के साथ शुरू करें। एक साधारण पाठ की प्रगति- आधारित खेल (या रोबोटिक्स समकक्ष)। फिर जब वे पूछते हैं, "मैं एक्स कैसे करता हूं?", तो आप एक्स को उन उदाहरणों के संदर्भ में तोड़ सकते हैं जो उन्होंने पहले ही देखे हैं, जैसे "पहले आपको उपयोगकर्ता से इनपुट प्राप्त करने की आवश्यकता होगी जैसे हमने जेड में किया था, फिर ... "(स्पष्ट रूप से यह अभ्यास में इतना आसान नहीं है क्योंकि एक्स कुछ होने की संभावना है, जो उन्हें करने के लिए अतिरिक्त ज्ञान की आवश्यकता होगी, जैसे" 3 डी ग्राफिक्स ", लेकिन आप अभी भी समझा सकते हैं कि यह उच्च स्तर में कैसे काम करेगा? मार्ग)।
आपके द्वारा दिखाए जाने वाले उदाहरण ब्लैक-बॉक्स कॉपी-पेस्ट किए गए जादू के रूप में सामने आएंगे, जिनके रहस्यों को सुलझाया जा सकता है क्योंकि प्रोग्रामिंग पहेली के टुकड़े धीरे-धीरे समझ में आते हैं। उदाहरण के लिए, आपके छात्र मूल रूप से if
बहुत तेज़ी से सीखेंगे , लेकिन उन्हें शायद यह एहसास नहीं होगा कि एक बूलियन अभिव्यक्ति विशेष रूप से एक if
's स्थिति (क्लासिक if (blah) return true; else return false;
कोड के लिए) के भीतर उपयोग करने के लिए सीमित नहीं है ।
चाहे आप एक सरणी या वेक्टर को एक कंटेनर के रूप में चुनते हैं, की सूक्ष्मताएं पहली बार में छात्रों के लिए अप्रासंगिक लगेंगी। एक वेक्टर / सरणी बस एक चर के रूप में बहुत सारे चर होने का एक तरीका होगा, एक सूचकांक के माध्यम से सुलभ। जहाँ आप कर सकते हैं, उससे चिपके रहें। पॉइंटर्स को बाद में या तो समझा नहीं जाएगा। यह कहना नहीं है कि आपको चीजों की व्याख्या नहीं करनी चाहिए; सिर्फ इतना है कि आप एक बार में सब कुछ नहीं समझा सकते हैं, और आपके द्वारा समझा गया सामान पूरी तरह से अवशोषित नहीं होगा। मनुष्य व्यवस्थित रूप से सीखता है, रैखिक रूप से नहीं। मैं cout
एक दो साल के लिए उपयोग कर रहा हूँ इससे पहले कि मैं ठीक से समझ गया कि ऑपरेटर ओवरलोडिंग क्या था!
ओह, और पुनरावृत्ति से डरो मत। "यह हैलो वर्ल्ड प्रोग्राम जैसा है - हमने याद किया कि हमने कंसोल को टेक्स्ट कैसे लिखा था?" (नहीं ...) "यह सुनिश्चित करने के लिए फिर से चलें।" ... और प्रश्न पूछें! छात्रों को मजेदार उदाहरणों और बहुत सारी बातचीत से जोड़े रखें।
C ++ एक जटिल भाषा है, और इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं, उस जटिलता का एक महत्वपूर्ण राशि (और सामान्य रूप से प्रोग्रामिंग का शिल्प) आपके छात्रों पर खो जाएगा। आप जो कुछ भी उन्हें दिखाते हैं, वह उनके लिए नया होगा; इसमें से अधिकांश समझ के गहरे स्तर पर नहीं डूबेंगे (कम से कम, अभी नहीं)। मेमोरी कैसे काम करती है, पीसी के घटक कैसे इंटरैक्ट करते हैं, स्टैक और हीप क्या हैं, पॉइंटर्स, क्लासेस, यहां तक कि लूप्स और अगर-और चेन को बहुमत से ठीक से नहीं समझा जाएगा । यह ठीक है! उन्हें इस्तेमाल करने के लिए समझने की ज़रूरत नहीं है - शानदार कार्यक्रमों की एक अद्भुत राशि को सुपर-बदसूरत 1000-लाइन फ़ंक्शंस के साथ लिखा जा सकता है जिसमें क्विंटुपल-नेस्टेड निरर्थक if
एस और 43 चर नाम जैसी चीजें हैं x_2r
। महत्वपूर्ण बात यह है कि छात्र लगातार सीख रहे हैं और सुधार कर रहे हैं। ब्लैक बॉक्स तब तक ठीक होते हैं जब तक कि वे लंबे समय में पारदर्शी (या कम से कम पारदर्शी ग्रे) हो जाते हैं। पाठ्यक्रम के अंत तक, वे यह नहीं जान सकते हैं कि डिज़ाइनर पेटेंट क्या हैं, लेकिन उन्हें उन कार्यक्रमों को देखने में सक्षम होना चाहिए जो उन्होंने पहले कुछ हफ्तों में लिखे थे और अपने कोड पर क्रिंज किया था। उन्हें विस्तार से एक महत्वपूर्ण स्तर पर समझना चाहिए कि उन्होंने जो पहला कार्यक्रम लिखा था, वह वास्तव में कैसे काम करता है (जबकि जब उन्होंने लिखा था कि उन्हें पता नहीं था)। लेकिन वे सब कुछ नहीं जानते होंगे - फिर भी ।