हाई स्कूल के छात्रों को पहली बार C ++ पढ़ाना: रेखा कहाँ खींचना है?


35

मैं FIRST रोबोटिक्स प्रतियोगिता के लिए हाई स्कूल के छात्रों की एक टीम का उल्लेख करूंगा, यहाँ ज्यादातर टीमें C ++ का उपयोग करके अपने रोबोट सॉफ्टवेयर का विकास करती हैं। टीम के कई छात्रों के लिए यह प्रोग्रामिंग का उनका पहला परिचय होगा। मैंने हाई स्कूल वालों को प्रोग्रामिंग सिखाने के लिए C ++ नहीं चुना होगा (जैसे कि पायथन या जावास्क्रिप्ट आसान होगा मुझे लगता है) लेकिन पसंद सेट है।

मैं उन्हें उचित C ++ सिखाना चाहता हूं (यानी मिश्रित C ​​/ C ++ बोली से बचने के लिए, C +) लेकिन मैं उन्हें या तो अनावश्यक जटिलता से डराना नहीं चाहता। उस बात के लिए:

  • क्या मुझे पहले दिन से एसटीएल का उपयोग करना शुरू कर देना चाहिए। vectorया बस मानक सरणियों के साथ रहना? Arrays परिचय के लिए आसान है लेकिन पॉइंटर त्रुटियों को पकड़ना कठिन हो सकता है।
  • I / O के लिए, क्या मुझे coutउससे मिलना चाहिए , आदि या क्या आपको लगता है कि printfसीखना आसान होगा?
  • क्या सी ++ के लिए कोई ऑनलाइन संसाधन हैं जो ऐसे युवा शिक्षार्थियों के लिए उपयोग करने के लिए उपयुक्त हैं?

धन्यवाद!

संपादित करें : इतने उत्कृष्ट उत्तर के लिए धन्यवाद। त्वरित सी ++ के अलावा , जो कई लोगों द्वारा सुझाया गया है, मैंने पाया है कि सी ++ फॉर एवरीवन एक उत्कृष्ट पाठ है।


52
हे भगवान कृपया किसी को भी पहली भाषा के रूप में जावास्क्रिप्ट सिखाना मत!
सोपबॉक्स

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

7
आप क्यों कहते हैं कि सरणियों को लागू करना आसान है? मुझे लगता है कि वैक्टर नए लोगों के लिए कहीं अधिक सहज हैं क्योंकि आपको पॉइंटर्स या इस तरह के किसी भी कॉम्प्लेक्स के बारे में सोचने की ज़रूरत नहीं है।
केसी पैटन

19
यदि आप उच्च विद्यालय के छात्रों को C ++ सिखा रहे हैं, तो आप पहले ही लाइन पार कर चुके हैं।
tylerl

7
C ++ सिखाने का विकल्प COBOL नहीं है।
झॉकिंग

जवाबों:


40

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

कारण यह है कि आप लोगों को चर और अंतर्निहित कंप्यूटर आर्किटेक्चर के अलावा बहुत कुछ समझे बिना ऐरे को समझना सिखा सकते हैं, लेकिन आप vectorउन्हें पहले कक्षाओं को पढ़ाए बिना समझने के लिए नहीं सिखा सकते हैं । यदि आप एसटीएल का उपयोग गेट गो से करते हैं, तो आपके छात्रों को सिर्फ यह जानने का प्रयास करना होगा कि vectorवास्तव में कैसे काम करता है। और फिर जब आप उस बिंदु पर पहुँचते हैं, तो उनके पास पॉइंटर्स और सरणियों और उन चीजों की अच्छी समझ नहीं होगी, जो आपको अपने खुद के वेक्टर क्लास लिखने, अपनी खुद की लिंक्ड लिस्ट क्लास लिखने, इत्यादि जैसे सामानों से मिलती हैं। इसकी विशेषताओं की सराहना करना और उनका फायदा उठाना। यह मुझे गुस्सा दिलाता है जब छात्र कहते हैं कि "क्या है?" और शिक्षकों का कहना है "बस इसे अनदेखा करें, आप इसे बाद में सीखेंगे।"

और जैसा कि डेमियन ने टिप्पणियों में बताया, टेम्प्लेट त्रुटियों से आपको प्राप्त होने वाले अपेक्षाकृत गुप्त संदेशों को समझने में, एरर्स / नॉन-टेम्प्लेट निर्माण से प्राप्त त्रुटियों को समझने की तुलना में काफी कठिन है।

मैं के बारे में एक ही तरह से नहीं लग रहा है coutऔर printf। न ही अन्य की तुलना में कोई निम्न-स्तर है, सिवाय इसके कि coutऑपरेटर ओवरलोडिंग का उपयोग करता है।

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

मैं अक्सर यह कहता हूं, लेकिन मैं इसे फिर से कहूंगा: पहले छात्रों को लंबे समय तक पढ़ाने के लिए बेहतर है और फिर उन्हें कैलकुलेटर का उपयोग करने की अनुमति दें ताकि वे उन्हें कैलकुलेटर का उपयोग करने दें।

शुरुआती को पढ़ाने के लिए पुस्तकों के रूप में, अच्छी सी ++ पुस्तकों की मास्टर सूची देखें ।


4
मैं वास्तव में एक ही राय का था लेकिन स्ट्रूप्रुप्स टीचिंग सी ++ पुस्तक ( stroustrup.com/Programming ) को देखा और वह स्पष्ट रूप से vectorअधिक सरणियों के उपयोग की वकालत करता है । मै टूट चुका हूँ।
प्राप्तकर्ता चालक

4
@recipriversexclusion: बस स्पष्ट बताते हुए, लेकिन मिस्टर स्ट्रॉस्ट्रुप हाई स्कूल के छात्रों से बहुत दूर है;)
डेमियन ब्रेख्त

14
हे भगवान। कैसे दुनिया में कोई भी सोच सकता है कि गतिशील रूप से आवंटित सरणियों को मैन्युअल रूप से हेरफेर करना C ++ के लिए "सबसे आसान-पहला" मार्ग हो सकता है, जब वहां std::stringऔर std::vector? क्या वह 32 सी प्रोग्रामर अपवोटिंग है? मैं एक दशक से C ++ सिखा रहा हूँ, प्रोग्रामिंग करने वालों को, जावा के एक वर्ष के छात्रों को, और प्रोग्रामिंग पेशेवरों को। मैं उपयोग करता हूं std::stringऔर पहले std::vectorदिन से। वे उपयोग करने में आसान हैं, चाहे उनके निर्दोष कोई भी हो। (आप वीबी के तार को पढ़ाने से पीछे नहीं हटेंगे क्योंकि यह अंदर से बहुत जटिल है!)
sbi

18
यहाँ अपने downvote है। एक घर में रहने के लाभों का आनंद लेने के लिए आपको घर बनाना सीखना नहीं है। आपको std::vectorइसका उपयोग करने में सक्षम होने के लिए लिखने में सक्षम होने की आवश्यकता नहीं है । और कक्षाएं C ++ का एक अत्यंत बुनियादी हिस्सा हैं। जो मूल नहीं है, वे उन सभी त्रुटियों को डीबग कर रहे हैं, जो वे देशी सरणियों और बिंदुओं का उपयोग करने वाले हैं।
डेडएमजी सेप

6
@DeadMG: घर का रूपक काम नहीं करता है। एक घर में, एक बार नींव बन जाने के बाद आपको इसके बारे में दोबारा सोचने की ज़रूरत नहीं है। तुम बस बाकी सब निर्माण करते जाओ। C ++ में, तुरंत आप देख newकीवर्ड, आप स्मृति प्रबंधन terrirory में सही वापस आ गए हैं। और अक्सर पुस्तकालय पुस्तकालयों के लिए पूछते हैं और आपको खुद से पूछने की ज़रूरत है, "क्या यह स्वामित्व लेने वाला है? या क्या मुझे अभी भी इसे साफ करने की आवश्यकता है?"। मेरा पैर फाउंडेशन। एक नाखून या दुम या कुछ और की तरह।
क्रिस एबरले

38

यह मेरा अपना अनुभव है। इसके लायक जो भी हो, ले लो।

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

पाठ 1:
यह मेमोरी के 10 बाइट्स है। यह अक्षर "a" को सेल नंबर 3 में रखा जा रहा है। "a" वैल्यू है, और 3 एड्रेस है। ठीक है? यह संख्या 3 को सेल 5 में रखा जा रहा है। इसका मान 3 है और यह पता 5 है। अब नंबर 3 का क्या अर्थ हो सकता है? वैसे यह सिर्फ एक नंबर 3-हो सकता है-यह पते के लिए एक संदर्भ हो सकता है । 3. जैसे 1 नंबर हो सकता है या देश कोड हो सकता है। यह सिर्फ एक संख्या है, यह सब इस बात पर निर्भर करता है कि हम इसे कैसे मानते हैं।

पाठ 2:
आइए बाइनरी में गिनती करना सीखें। आइए बाइनरी फिंगर काउंटिंग का उपयोग करके 10 तक गिनती करें। दिलचस्प है न? देखें कि कैसे केवल 4 उंगलियों की जरूरत है? तो हम कहते हैं कि केवल 4 बिट्स (1/2 सेल) की आवश्यकता है। जो उच्चतम आप एक हाथ से गिन सकते हैं (उत्तर 31)। कैसे लगभग 2 हाथ (उत्तर 1023 है)। समझाएं कि अधिक बिट्स का मतलब उच्च संख्या सीमाएं कैसे हैं। उन्हें याद दिलाएं कि एक मेमोरी सेल 8 बिट्स है। पूछें कि क्या होता है जब एक संख्या को 8 बिट से अधिक की आवश्यकता होती है। वे मेमोरी में (तार्किक तरीके से) मल्टी-बाइट नंबर कैसे डालेंगे? उन्हें चार्ट, शॉर्ट्स, पूर्णांक और लोंगों से परिचित कराएं।

पाठ 3:
यहाँ एक कार्यक्रम है जो मैंने C ++ में लिखा है। यह 32-बिट पूर्णांक का उपयोग करता है। और यह भी एक संख्या है। लेकिन यह एक ऐसा नंबर है जो इंगित करने के लिए उपयोग किया जाता है। इस छोटी तारिका वाली चीज़ का उपयोग करके हम एक वादा कर रहे हैं कि संख्या इंगित करने के लिए उपयोग होने वाली है। और यहां बताया गया है कि हम इसे पहले नंबर पर कैसे बताते हैं। थोड़ा एम्परसेंड हमारे लिए मूल्य भरता है। नीट हुह?

आदि। एक बार जब आप बेसिक मेमोरी डाउन कर लेते हैं, तो बाकी सब केक होता है। यह गरीब छात्र हैं जो मानते हैं कि कंपाइलर कुछ जादुई कर रहा है (या कि उन्हें स्मृति प्रबंधन के बारे में कभी नहीं सोचना है) जो सबसे ज्यादा संघर्ष करते हैं। और सी ++ पानी को पिघला देता है क्योंकि कुछ चीजें स्वचालित रूप से साफ हो जाती हैं (यानी एक सामान्य वेक्टर) जबकि अन्य चीजें नहीं होती हैं (यानी "नया" का उपयोग करके आवंटित एक वेक्टर)। और मुझे स्ट्रिंग्स पर भी शुरू न करें (char * बनाम std :: string - यह बताने की कोशिश करें कि बिना सूचक ज्ञान के)।

मुझे नहीं पता कि आपके रोबोट प्रतियोगिता को किस मंच पर लक्षित किया जाएगा, लेकिन अगर यह एक सीमित-मेमोरी वातावरण है, तो स्मृति प्रबंधन कौशल महत्वपूर्ण हैं।

संपादित करें

एक बार जब आप उन्हें मूल सिद्धांतों को पढ़ाते हैं, तो मैं कहता हूं कि सभी तरह से सी ++ जाओ। तकनीकी रूप से वे सिर्फ अलग-अलग पुस्तकालय हैं, लेकिन हाँ, उन्हें एक से अधिक प्रतिमानों के साथ भ्रमित करने का कोई मतलब नहीं है। उन्हें C ++ टूल दें (जिसमें पॉइंटर्स और एरेज़ शामिल हैं)।


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

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

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

+1, यह वही है जो मैं कहना चाहता था, लेकिन बेहतर है। मैकेनिक को प्रशिक्षित करते समय, उन्हें ड्राइविंग विशेषज्ञ बनाने से पहले उन्हें इंजन को समझना चाहिए
सेठ कार्नेगी

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

31

क्या मुझे पहले दिन से एसटीएल का उपयोग करना शुरू कर देना चाहिए। वेक्टर या सिर्फ मानक सरणियों के साथ रहना? Arrays परिचय के लिए आसान है लेकिन पॉइंटर त्रुटियों को पकड़ना कठिन हो सकता है।

निश्चित रूप से मानक पुस्तकालय प्रकारों का उपयोग कर सही जाना। एक std::stringया std::vectorक्या वे अक्सर का उपयोग करना चाहिए और इन प्रकार के (के कार्यान्वयन के विशाल बहुमत), त्रुटि का पता लगाने और त्रुटि हैंडलिंग के कुछ फार्म की पेशकश छात्रों से जटिलताओं के कई सार संक्षेप, जबकि है।

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

std::vectorC सरणी की तुलना में (बनाएं / पढ़ें / लिखें) का सिंटैक्स अधिक जटिल नहीं है। तुलनात्मक रूप से, मैनुअल मेमोरी प्रबंधन और सभी सामान्य त्रुटियां जो नए शिक्षार्थी C सरणियों के साथ करते हैं, उन्हें सीखना, सिखाना और उपयोग करना अधिक कठिन है।

I / O के लिए, क्या मुझे cout, आदि से चिपके रहना चाहिए या क्या आपको लगता है कि printf सीखना आसान होगा?

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

वास्तव में, मुझे लगता है कि आपको Koenig और Moo द्वारा त्वरित C ​​++ पढ़ना चाहिए , और संभवतः इसे निर्देश के लिए उपयोग करना चाहिए (प्रश्न 3 का अप्रत्यक्ष रूप से उत्तर देना)। पुस्तक में, वे (पृष्ठ 3) std::coutसे ठीक पहले परिचय देते हैं return, और अध्याय 10. तक बिंदुओं और सरणियों को बचाते हैं, अगर मैं आपके प्रश्न के उत्तर के रूप में उस पुस्तक की प्रस्तावना को कॉपी और पेस्ट कर सकता हूं, तो मैं करूंगा। (नोट: मैं आपको सी + + शिक्षण के परिप्रेक्ष्य के लिए इसे पढ़ने की सलाह देता हूं)।

संपादित करें यहाँ प्रस्तावना है

क्या सी ++ के लिए कोई ऑनलाइन संसाधन हैं जो ऐसे युवा शिक्षार्थियों के लिए उपयोग करने के लिए उपयुक्त हैं?

यदि आप त्वरित C ​​++ का उपयोग नहीं करना चाहते हैं (जो सामान्य रूप से प्रोग्रामिंग के साथ कुछ पृष्ठभूमि ग्रहण करता है), तो शायद आप E ++el की सोच C ++ में पसंद करेंगे । मैंने इसे नहीं पढ़ा है, लेकिन यह एक स्वतंत्र रूप से वितरित सी ++ इंट्रो टेक्स्ट है।


1
+1 ... और मुझे बहुत मुश्किल होगा "वे std का परिचय देते हैं :: वापसी से ठीक पहले cout (पेज 3)" उस एक में झांकना होगा :)
फेलिक्स डॉमबेक

1
@ फेलिक्स और सीधे std::cout'परिचय से पहले , घुंघराले ब्रेसिज़ पेश किए जाते हैं =) (यह सर्वव्यापी "हैलो, वर्ल्ड" का एक सरल विच्छेदन है)
जस्टिन

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

11

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

लेकिन क्या करता है एक बड़ी भूमिका निभाते हैं, और हो सकता है बहुत समझना कठिन सभी के विभिन्न रूप हैं नियंत्रण कि चले जाते हैं।

इसलिए मैंने नियंत्रण पर बहुत जोर दिया। मूल बातें से शुरू करें: if, for,while । क्या उन लोगों ने बहुत अभ्यास किया है। उन्हें अच्छी तरह से जानने के लिए उन्हें प्राप्त करें ...।

... लेकिन फिर यह कठिन हो जाता है। मध्यम आकार का कोई भी रोबोट कोड अंततः कुछ पेचीदा नियंत्रण पैटर्न के लिए जाता है:

  • बड़ा "मुख्य" लूप, जो सब कुछ कहता है

  • राज्य मशीनें (ये बहुत कुछ दिखाती हैं)

  • पिछले मानों को सहेजना / काउंटर चलाना (पीआईडी ​​के लिए)

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

इसके अलावा, अच्छी किस्मत! उम्मीद है कि सीजन अच्छा गुजरे।


2
+1; यह एक नियमित डेस्कटॉप वातावरण नहीं है, लेकिन वास्तविक एम्बेडेड कोड है। राज्य मशीनें std :: वेक्टर बनाम सरणियों से कहीं अधिक महत्वपूर्ण हैं।
MSalters

8
  • क्या मुझे पहले दिन से एसटीएल का उपयोग करना शुरू कर देना चाहिए। vectorया बस मानक सरणियों के साथ रहना? Arrays परिचय के लिए आसान है लेकिन पॉइंटर त्रुटियों को पकड़ना कठिन हो सकता है।

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

  • I / O के लिए, क्या मुझे coutउससे मिलना चाहिए , आदि या क्या आपको लगता है कि printfसीखना आसान होगा?

आर्कटिक प्रारूप स्ट्रिंग सम्मेलनों का एक सेट क्यों होगा जो आपके कार्यक्रम को छत के माध्यम से उड़ाता है जिस पल आपको कुछ गलत हो जाता है (जो होता है कि आप जिस समय typedefकुछ प्रतीत होता है असंबंधित हेडर में बदलते हैं ) किस प्रकार की सुरक्षा के लिए बेहतर है std::cout?

  • क्या सी ++ के लिए कोई ऑनलाइन संसाधन हैं जो ऐसे युवा शिक्षार्थियों के लिए उपयोग करने के लिए उपयुक्त हैं?

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


एक दशक तक, मैंने आधार के रूप में कोएनिग / मू के त्वरित सी ++ का उपयोग करके बहुत अलग पृष्ठभूमि वाले छात्रों को सी ++ सिखाया है । उस दशक में मेरा पाठ्यक्रम बहुत बदल गया है, अब यह पुस्तक के पास नहीं है, अंतर्निहित सिद्धांत को छोड़कर: शुरुआत से ही आधुनिक, सही, सुरक्षित मुहावरों का उपयोग करें। अपने छात्रों को यह न सिखाएं कि कैसे स्मृति को मैन्युअल रूप से हेरफेर करना है, बस उन्हें बाद में अनजान करना है कि सुरक्षित मुहावरों के पक्ष में है। जैसा कि आप यहां दिए गए कुछ जवाबों पर देख सकते हैं, यह काम नहीं करता है: जो लोग पहले मैनुअल तरीके सिखाते थे, वे शायद ही कभी आधुनिक, सुरक्षित मुहावरों का उपयोग करने के लाभ को समझेंगे।


7

यदि आप C ++ को पढ़ाना चाहते हैं, तो मैं सीधे C ++ के साथ वेक्टर और कॉउट के रूप में शुरू करूँगा, इसके बजाय प्रिंट की तरह सी सबसेट।


7

क्या मुझे पहले दिन से एसटीएल का उपयोग शुरू करना चाहिए ...?

हाँ। C ++ में देशी सरणियों का उपयोग करना त्रुटि प्रवण है और केवल 99% समय के लिए बुरा अभ्यास है।

I / O के लिए, क्या मुझे cout, आदि से चिपकना चाहिए ...?

हाँ।

क्या सी ++ के लिए कोई ऑनलाइन संसाधन हैं जो ऐसे युवा शिक्षार्थियों के लिए उपयोग करने के लिए उपयुक्त हैं?

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


5

मुझे पहली प्रोग्रामिंग भाषा के रूप में हाई स्कूल में C ++ सिखाया गया था, हालाँकि यह "C +" जैसा था , अब आप इसका उल्लेख करते हैं; हम coutसांत्वना और फ़ाइलों के लिए पाठ लिखने के लिए इस्तेमाल किया , लेकिन यह भी कुछ सी कार्य ( getch()मेरा पसंदीदा था)।

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

आपके द्वारा दिखाए जाने वाले उदाहरण ब्लैक-बॉक्स कॉपी-पेस्ट किए गए जादू के रूप में सामने आएंगे, जिनके रहस्यों को सुलझाया जा सकता है क्योंकि प्रोग्रामिंग पहेली के टुकड़े धीरे-धीरे समझ में आते हैं। उदाहरण के लिए, आपके छात्र मूल रूप से ifबहुत तेज़ी से सीखेंगे , लेकिन उन्हें शायद यह एहसास नहीं होगा कि एक बूलियन अभिव्यक्ति विशेष रूप से एक if's स्थिति (क्लासिक if (blah) return true; else return false;कोड के लिए) के भीतर उपयोग करने के लिए सीमित नहीं है ।

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

ओह, और पुनरावृत्ति से डरो मत। "यह हैलो वर्ल्ड प्रोग्राम जैसा है - हमने याद किया कि हमने कंसोल को टेक्स्ट कैसे लिखा था?" (नहीं ...) "यह सुनिश्चित करने के लिए फिर से चलें।" ... और प्रश्न पूछें! छात्रों को मजेदार उदाहरणों और बहुत सारी बातचीत से जोड़े रखें।

C ++ एक जटिल भाषा है, और इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं, उस जटिलता का एक महत्वपूर्ण राशि (और सामान्य रूप से प्रोग्रामिंग का शिल्प) आपके छात्रों पर खो जाएगा। आप जो कुछ भी उन्हें दिखाते हैं, वह उनके लिए नया होगा; इसमें से अधिकांश समझ के गहरे स्तर पर नहीं डूबेंगे (कम से कम, अभी नहीं)। मेमोरी कैसे काम करती है, पीसी के घटक कैसे इंटरैक्ट करते हैं, स्टैक और हीप क्या हैं, पॉइंटर्स, क्लासेस, यहां तक ​​कि लूप्स और अगर-और चेन को बहुमत से ठीक से नहीं समझा जाएगा । यह ठीक है! उन्हें इस्तेमाल करने के लिए समझने की ज़रूरत नहीं है - शानदार कार्यक्रमों की एक अद्भुत राशि को सुपर-बदसूरत 1000-लाइन फ़ंक्शंस के साथ लिखा जा सकता है जिसमें क्विंटुपल-नेस्टेड निरर्थक ifएस और 43 चर नाम जैसी चीजें हैं x_2r। महत्वपूर्ण बात यह है कि छात्र लगातार सीख रहे हैं और सुधार कर रहे हैं। ब्लैक बॉक्स तब तक ठीक होते हैं जब तक कि वे लंबे समय में पारदर्शी (या कम से कम पारदर्शी ग्रे) हो जाते हैं। पाठ्यक्रम के अंत तक, वे यह नहीं जान सकते हैं कि डिज़ाइनर पेटेंट क्या हैं, लेकिन उन्हें उन कार्यक्रमों को देखने में सक्षम होना चाहिए जो उन्होंने पहले कुछ हफ्तों में लिखे थे और अपने कोड पर क्रिंज किया था। उन्हें विस्तार से एक महत्वपूर्ण स्तर पर समझना चाहिए कि उन्होंने जो पहला कार्यक्रम लिखा था, वह वास्तव में कैसे काम करता है (जबकि जब उन्होंने लिखा था कि उन्हें पता नहीं था)। लेकिन वे सब कुछ नहीं जानते होंगे - फिर भी


5

मैंने हाई स्कूल से कॉलेज तक अपने जीवन में प्रोग्रामिंग कक्षाओं का एक समूह लिया है। मैं कह सकता हूं कि मैं वास्तव में मेरी पहली सी ++ क्लास से बहुत कुछ नहीं सीख पाया था कि चीजों को स्ट्रीम में कैसे प्रिंट किया जाए।

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

मुझे लगता है कि उन्हें सिखाना सी एक बेहतर तरीका है, इसके बारे में जाने के लिए (यह अभी भी लगभग हमेशा सी ++ के रूप में संकलित करता है जैसा कि आप जानते हैं)। उन्हें सिखाना कि टर्मिनल वास्तव में क्या है, उनका प्रोग्राम इसके साथ कैसे इंटरैक्ट करता है, कि एक स्ट्रिंग एक वर्ण है, जो स्मृति में a \ 0 के साथ समाप्त होता है, मॉलॉक क्या है और C ++ इसे कैसे अमूर्त करता है, कैसे एक char और int को मेमोरी में संग्रहीत किया जाता है , ect ... ये चीजें हैं जो किसी को वास्तव में एक समस्या को हल करने का तरीका बताती हैं जब वे विकास में आते हैं।

मैं बच्चों को कार्यक्रम देने और मुख्य रूप से प्रश्नों के उत्तर देने के महत्व पर जोर नहीं दे सकता। मेरे अनुभव में, आप इसका उपयोग करके एक भाषा सीखते हैं। पुस्तकें और पाठ उपयोगी हो सकते हैं और आरंभ करने के लिए आवश्यक हैं, लेकिन अंत में, मैं कहता हूं कि उन्हें C / C ++ फ़ाइल दें और कहें: यह X का उदाहरण है, मैं आपको Y करना चाहता हूं (जो किया जा सकता है) X हैक करके)। उन्हें मैन पेज का उपयोग करने का तरीका दिखाएं (यदि वे * NIX का उपयोग कर रहे हैं) या उन्हें cplusplus.com दिखाएं और उन्हें अपने दम पर चीजों का पता लगाने के लिए std libs का पता लगाने दें।

टीएल; डॉ। बच्चों को खुद पढ़ाने दें। संरचना प्रदान करने और सवालों के जवाब देने के लिए वहां रहें।

इसके अलावा: लिंक की गई सूचियां सच्चाई हैं!


4

आप उन्हें सामान्य तरीके से प्रोग्रामिंग नहीं सिखा रहे हैं, आप उन्हें रोबोट और इस तरह की एम्बेडेड प्रोग्रामिंग सिखा रहे हैं। अगर मैं सही से समझ गया।

सबसे पहले, मुझे लगता है कि आपको जांचना चाहिए कि आप किन पुस्तकालयों का उपयोग करने जा रहे हैं और आपको क्या चाहिए।

यदि आपके पास बहुत सारे संकेत और सी-सरणियों के साथ सी-लाइब्रेरी का उपयोग करने के लिए सी-लाइब्रेरी है, तो मुझे लगता है कि आपको उन्हें यह सिखाने का तरीका चाहिए कि इसका उपयोग कैसे करें या आप इसका उपयोग क्यों करते हैं।

लेकिन, आप उन्हें स्ट्रिंग्स और वैक्टर के साथ आरंभ करने के लिए कुछ सरल कोड दिखा सकते हैं, यही सी + + काम करता है। इसका मतलब यह नहीं है कि आप उन्हें संकेत नहीं दे सकते।

हो सकता है कि आपको यह निम्न स्तर C ++ (जो C से मिलता जुलता है) और STL के साथ उच्च स्तर C ++ के बीच के अंतर को स्पष्ट कर दे। शुरुआती लोगों के लिए सी ++ में सबसे कठिन बात यह है कि सी क्या है, सी ++ क्या है और विभिन्न सिस्टम एपीआई क्या हैं।

जैसा कि यहां लक्ष्य सामान्य प्रोग्रामिंग सीखना नहीं है, लेकिन रोबोट प्रतियोगिता में प्रवेश करना है, मैं इस तरह से शिक्षण को उन्मुख करूंगा।


2

मैंने पिछले साल के अंत में छात्रों को C ++ पढ़ाना शुरू किया और यह गर्मियों में हमारी FIRST रोबोटिक्स टीम के लिए भी।

हम स्ट्रॉस्ट्रप के प्रोग्रामिंग - सिद्धांत और अभ्यास का उपयोग कर रहे हैं C ++ । मैंने पुस्तक को अप्राप्य, पठनीय और सुव्यवस्थित पाया है। हमने लगभग 6 छात्रों को अपने अध्यायों के माध्यम से पढ़ा है। मैं शब्दावली और प्रश्नों के साथ उनकी मदद करने के लिए वहां हूं। वे पुस्तक में सभी अभ्यास करते हैं।

मेरे पास छात्रों को अध्याय 14 के माध्यम से काम करना था। धाराओं पर अध्यायों को छोड़ना (एफआरसी प्रोग्रामिंग के लिए उपयोगी नहीं)। अध्याय 14 के माध्यम से उपयोगी है क्योंकि उन्हें उपवर्गों का परिचय मिलता है। हालांकि, संभवतः उन्हें उपवर्गों से संबंधित कंस्ट्रक्टर और विध्वंसक को बेहतर ढंग से समझने के लिए किताब में आगे जाना होगा।

अपने छात्रों को कम मत समझो। छात्रों को पुस्तक, पढ़ना, सीखना और अभ्यास करना अच्छा लगता है; और यह अपने समय पर गर्मियों के दौरान था! ऐसे कई छात्र हैं जो समझ नहीं पाएंगे। उन्हें किसी और चीज़ पर आगे बढ़ना चाहिए; हर कोई प्रोग्रामिंग को नहीं समझता है।

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

शुभ लाभ।


+1: अब तक का सर्वश्रेष्ठ उत्तर। पाठ्य पुस्तक का उत्कृष्ट विकल्प। आपकी सफलता पर शुभकामनाएं।
केविन क्लाइन

1

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

  1. इस तरह से आप एक कार्यक्रम बनाते हैं [int main (..) {वापसी 0; }]। प्रोग्रामिंग परिवेश का एक मूल अवलोकन दें जो आप चाहते हैं कि वे भी आज़माएं। उन्हें यह जानना होगा कि परियोजना कैसे बनाई जाए और वास्तव में इसे कैसे संकलित / चलाया जाए।

  2. यह एक परिवर्तनशील है। चर डेटा (इंट, चार, फ्लोट, आदि) को स्टोर कर सकते हैं।

  3. स्ट्रिंग्स (C ++ वाले का उपयोग करना आसान है)।

  4. यह आप डेटा को कैसे पढ़ते और लिखते हैं (सिनेमा, कॉट)। "नमस्ते,% s!"

  5. सशर्त (कंप्यूटर को निर्णय लेने की आवश्यकता होती है)।

  6. लूप्स (कंप्यूटर एक ही चीज़ को बार-बार करने में अच्छे होते हैं)। छोरों के लिए और दिखाएं

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

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

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

एक अच्छा उदाहरण जिसने मुझे कुछ अवधारणाओं में मदद की, एक कोक मशीन का निर्माण किया:

  • वस्तुओं और कीमतों का एक मेनू आउटपुट (मेनू को संग्रहीत करना उपयोगकर्ता-परिभाषित संरचना का एक सरणी था। C ++ में एक वर्ग हो सकता है)। आउटपुट के लिए इसे लूप की आवश्यकता होती है।
  • उपयोगकर्ता के चयन में पढ़ें।
  • पैसे के लिए उपयोगकर्ता से पूछें। वे सिर्फ सेंट में सिक्का संप्रदाय (1, 5, 10, 20, 50, 100, 200 में प्रवेश कर सकते हैं)। अज्ञात संप्रदायों को अनदेखा करें। जबकि उपयोगकर्ता ने पर्याप्त पैसा नहीं डाला है, पूछते रहें (लूप्स)।
  • आवश्यक परिवर्तन (मॉडुलो डिवीजन) की गणना करें, कम से कम सिक्के दें। आउटपुट को स्क्रीन पर प्रिंट करें।
  • अगले उपयोगकर्ता की प्रतीक्षा करें।

उसके बाद आप C ++ कंस्ट्रक्शन पर आगे बढ़ सकते हैं; इससे पहले कि वे कम से कम एक बुनियादी कार्यक्रम कर सकें, आप बहुत दूर तक नहीं गोता लगाना चाहते हैं।

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


1

मुझे लगता है कि आपको सी ++ दृष्टिकोण ("सी ++ हैलो वर्ल्ड") से चीजें नहीं सिखानी चाहिए, लेकिन समस्या डोमेन से - इस मामले में, रोबोटिक्स - दृष्टिकोण। तो, आपकी नमस्ते दुनिया एक एलईडी या मोटर चला रही होगी।

निश्चित रूप से आप वैचारिक रूप से सार्थक C ++ कार्यों को बढ़ाने के प्रकारों, कार्यों और IO कार्यों को शामिल करते हुए प्रत्येक छोटे रोबोटिक्स कार्य को विघटित कर सकते हैं / करना चाहिए।

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

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


0

मैं सख्त C ++ सिखाऊंगा। आप जानते हैं कि जब आप प्रिंटफ़ लिखते हैं और इसे छोटे-छोटे परिमों को देते हैं या गलत प्रकार कुछ अजीब होता है? और यदि आप अमान्य पॉइंटर्स का उपयोग करते हैं तो खराब चीजें हो सकती हैं? यह नहीं है

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

तो संक्षेप में उन्हें कुछ भी न सिखाएं जो उन्हें परेशानी दे सकता है। Iostreams, संरचनाएं सिखाएं, उन्हें बताएं कि वे टाइपकास्ट पर भी निशान खो देते हैं और डिजाइन सिखाने की कोशिश नहीं करते हैं। आप किसी को भी एक अनुभवी पेशेवर नहीं बनना चाहते हैं


0

यह सी ++ व्याख्यान श्रृंखला नहीं है, लेकिन रिचर्ड बकलैंड की COMP1917 सी में प्रोग्रामिंग ( COMP1927 , डेटा संरचनाओं के साथ) पर प्रोग्रामिंग पर एक उत्कृष्ट व्याख्यान श्रृंखला है ।

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


0

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

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

अपने रोबोट पर "उन चीज़ों की सूची बनाएं जिन्हें वे नियंत्रित करना चाहते हैं" और प्रत्येक को एक पाठ में बदल दें ... उन्हें जानने के लिए कम से कम क्या चाहिए ...?

  • यदि कोई स्विच किसी विशेष सेटिंग में है तो "कूल लुकिंग" करें?
  • खोलने या बंद करने के लिए एक वायवीय वाल्व बताएं (जैसे: एक धरनेवाला लगाव)?
  • ड्रिल मोटर्स को चालू करें और बंद करें (ड्राइवट्रेन के लिए)?
  • अगर बाधा का पता लगाने वाला सेंसर सक्रिय हो जाए तो रोबोट को दिशाओं में बदलाव करना चाहिए?
  • 2 पहिया बनाम 4 पहिया ड्राइव मोड के बीच रोबोट स्विच करें?
  • जॉयस्टिक की संवेदनशीलता को समायोजित करें?
  • आदि।

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


0

डीटेल और डीटेल द्वारा प्रोग्राम C ++ का उपयोग कैसे करें । मेरी राय में उत्कृष्ट पाठ्यपुस्तक।

लगता है कि आप नौसिखियों को सिखाने की कोशिश कर रहे हैं कि कैसे प्रोग्राम करें और फिर उन्हें उसी समय कुछ उन्नत स्तर पर प्रोग्राम करें। यदि आप उन्हें कुछ बंदर देखने की उम्मीद करते हैं तो बंदर को स्निपेट कोडिंग w / o कोडिंग करते हुए समझ में आता है कि आप विफलता के लिए बर्बाद हैं।

शुरुआती वर्ग के लिए एसटीएल से दूर रहें।

यदि आपके पास पहले से ही अपने रोबोट के लिए एक कोडिंग समाधान है - या बहुत अच्छा विचार है कि यह कैसा दिखेगा तो शायद आप पाठ्यपुस्तक में पाठों को रोबोट के लिए कोडिंग कार्यों के लिए "मैप" कर सकते हैं। लेकिन पाठ्यपुस्तक को सीखने को चलाने दें।

यदि आप कोडिंग को बल देते हैं, तो छात्रों को बहुत संकीर्ण पाठ और भाषा के संपर्क में आने के बाद मुझे लगता है कि आपके द्वारा लिखे गए कोड का महासागर बड़ा और बड़ा हो जाएगा, यह सिर्फ कुत्ते के पैडल करने के लिए सीखा होगा और आप डूब जाएंगे क्योंकि REAL तैराकी आवश्यक है।

यह सवाल नहीं है कि "क्या उन्हें cout या printf सीखना चाहिए?" यह सीखने का पर्याप्त प्रश्न है कि हल करने के लिए दिए गए रोबोट प्रोग्रामिंग कार्यों के लिए कोड कैसे लिखना है, इसके बारे में अंतर्दृष्टि होना चाहिए।

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

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