मेरे C / C ++ कोड का स्तर बढ़ाना


16

मैं अब 3-4 साल से प्रोग्रामिंग कर रहा हूं और मुझे लगता है कि अब मुझे शुरुआती नहीं कहा जा सकता है, लेकिन मैं इस साइट पर कुछ प्रश्न पढ़ता हूं और सोचता हूं कि डब्ल्यूटीएफ वे किस बारे में बात कर रहे हैं? मैं उसी तरह महसूस करता हूं जब मैं आजकल प्रोग्रामिंग किताबें उठाता हूं।

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

मैं एक गेम प्रोग्रामर बनने की योजना बना रहा हूं, लेकिन मुझे हाल ही में उन पर काम करने का मौका (सीरियल इंटरफ़ेस) होने के बाद एम्बेडेड सिस्टम में कुछ दिलचस्पी हो गई है।

मैंने परिचय और शुरुआती पुस्तकों को पूरा करने के बाद अपनी शिक्षा को जारी रखने के लिए सामग्री ढूंढना बहुत मुश्किल पाया है क्योंकि मैं कोई इंटरमीडिएट सी ++ किताबें नहीं पा रहा हूं।

मेरे ज्ञान और कौशल को बढ़ने और बढ़ाने के लिए आप क्या सलाह देंगे? विशिष्ट संसाधनों की बहुत सराहना की जाएगी।


C ++ की पुस्तकों के लिए यह प्रश्न देखें: stackoverflow.com/questions/388242/…
नवीन

जवाबों:


10

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

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

आप C ++ सीखने के लिए अच्छी पुस्तकों की एक बड़ी सूची के लिए StackOverflow पर इस लिंक की जाँच कर सकते हैं ।


3
नहीं, C ++ सीखने के लिए सबसे अच्छा संसाधन एक अच्छी पुस्तक, या अधिमानतः पुस्तकें हैं।
नील बटरवर्थ

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

+1 के लिए "यदि आप C / C ++ की बात कर रहे हैं, तो आप निश्चित रूप से कुछ अतिरिक्त अनुभव का उपयोग कर सकते हैं।" -1 के लिए "C ++ सीखने का सबसे अच्छा संसाधन StackOverflow" है, इसलिए कोई वोट नहीं।
रेसिडम

5

सबसे पहले, आप जो कुछ भी अभी तक नहीं जानते हैं उसमें अपनी बुनियादी सैद्धांतिक पृष्ठभूमि बढ़ाएं। सिद्धांत का अध्ययन करें और कुछ छोटे उदाहरण लिखें।

उदाहरण मूल सैद्धांतिक पृष्ठभूमि में शामिल हैं:

  • एल्गोरिदम और डेटास्ट्रक्चर
  • सॉफ्टवेयर डिजाइन (UML, डिजाइन पैटर्न, OOP)
  • ऑपरेटिंग सिस्टम और समानांतर प्रोग्रामिंग

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

अगला एक नया डोमेन (वेब ​​प्रोग्रामिंग, कंप्यूटर ग्राफिक्स, इमेज प्रोसेसिंग, कंप्यूटर विजन, डेटा एक्सेस, ...) चुनें। सिद्धांत का अध्ययन करें और कुछ छोटे उदाहरण लिखें।

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

उम्मीद है, आप सीखेंगे कि नए दृष्टिकोण और तकनीक कैसे सीखें और उन्हें एक अच्छी वास्तुकला के साथ एकीकृत करें।


विशेष रूप से गेम प्रोग्रामिंग के लिए मैं निम्नलिखित डोमेन / प्रौद्योगिकियों को चुनने की सलाह देता हूं:

  • छवि प्रसंस्करण मूल बातें
  • कोई विशिष्ट UI तकनीक
  • कंप्यूटर ग्राफिक्स मूल बातें
  • कोई भी विशिष्ट ग्राफिक्स इंजन (जैसे DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • यांत्रिक भौतिकी मूल बातें
  • कोई विशिष्ट भौतिकी इंजन (जैसे PhysX, ...)
  • कोई विशिष्ट गेम इंजन (जैसे XNA, ...)
  • मल्टी थ्रेडेड प्रोग्रामिंग
  • वितरित प्रोग्रामिंग


संपादित करें:

कैसे सीखे:

  • कोडप्रोजेक्ट से उदाहरण पढ़ें और चलाएं।
  • किताब / ई-पुस्तक पुस्तकालय या स्टोर में कुछ पुस्तकों के माध्यम से ब्राउज़ करें जब तक कि आपको कुछ ऐसी पुस्तकें न मिलें जो आपकी पसंद की हों (जो आपकी पढ़ने की शैली से मेल खाती हों + उन विषयों को कवर करें जिन्हें आप पढ़ना चाहते हैं)।
  • ब्लॉग पढ़ें।
  • चीजों को आज़माएं और अटक जाने पर StackOverlow पर पूछें।

मुझे प्रत्यक्ष x पता है। दूसरा मैंने इसके बारे में सोचा है लेकिन बहुत आधारभूत बातों से परे कोई संसाधन नहीं खोज सकता, क्या आपको चीजों को सीखने के लिए HOW पर कोई सलाह है?
स्कीथ

2
उदाहरण लिखकर - परीक्षण और त्रुटि सबसे अच्छा तरीका है। इसके अलावा, संपादित देखें।
डैनी वारोड

1

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

मैं आपके मामले में हूँ और मैं अभी भी उन भाषाओं के बारे में सीख रहा हूँ। मैं भी एम्बेडेड सिस्टम पर काम करना सीखता हूं।

यहाँ मेरी सलाह है:

  • उन किताबों को पढ़ें: /programming/388242/the-definitive-c-book-guide-and-list -> परिचय की किताबों से शुरू करें, भले ही आपको लगे कि आप शुरुआती नहीं हैं, क्योंकि आप आगे बढ़ने से पहले अपने बुनियादी ज्ञान को हल करना। फिर टेम्पलेट मेटाप्रोग्रामिंग और एम्बेडेड सिस्टम प्रतिबंधों के बारे में जानें।
  • बहुत अभ्यास करें: जितना अधिक आप जो सीखते हैं उसे लागू करते हैं, जितना अधिक आप इसे समझते हैं। इस बिंदु पर, मेरा ऐसा करने का तरीका भाषाओं के किसी भी कोने और छोटे परीक्षण परियोजनाओं में संदर्भ का परीक्षण करना है। मेरे पास "बड़ी" घरेलू परियोजनाएं भी हैं जहां मैं हर चीज पर नियंत्रण रखता हूं और मैं नई तकनीकों का अभ्यास करता हूं और उन्हें तोड़ने तक धक्का देता हूं।

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

आप अपनी यात्रा शुरू कर रहे हैं।


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

0

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

  • यदि आप OOP की मूल बातें से सहज नहीं हैं - तो पहले सीखें। विरासत और इनकैप्सुलेशन की मूल बातें समझें। पता है कि आभासी, सार्वजनिक / संरक्षित और निजी और स्थिर कीवर्ड कैसे व्यवहार करते हैं।

  • बिंदुओं और संदर्भों का उपयोग करके सहज रहें (और आम तौर पर संदर्भ पसंद करते हैं)। "ऑटोमैगिकल" मेमोरी प्रबंधन को प्राप्त करने के लिए smart_ptr <> कंस्ट्रक्शन सीखें और उसका उपयोग करें।

  • C ++ टेम्प्लेट का उपयोग करना सीखें - शुरू में केवल कंटेनर डेटा प्रकारों के रूप में। आप लगातार नई और अधिक शक्तिशाली तकनीकों की खोज करेंगे जो C ++ टेम्प्लेट मेटा-प्रोग्रामिंग के माध्यम से प्रदर्शन कर सकते हैं।

  • STL सीखें: स्ट्रिंग, iostream, अपवादों और कंटेनर कक्षाओं का उपयोग करें, और जब भी व्यावहारिक हों, निम्न स्तर के चार *, File *, और char [] डेटाटिप्स पर उन्हें प्राथमिकता दें।

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

  • मज़े करो! गंभीरता से - कोड करने के लिए कुछ पालतू परियोजनाओं को चुनें। यदि आप एम्बेडेड प्रोग्रामिंग परियोजनाओं को पसंद करते हैं तो शायद Arduino बोर्डों के साथ टिंकर करें।

  • कुछ चौड़ाई का अनुभव प्राप्त करें - यदि आपने केवल Windows / Visual Studio C ++ का उपयोग किया है, तो Linux / g ++, या OS X / XCode के लिए कुछ कोड लिखने का प्रयास करें (आप Mac पर C ++ कोड कर सकते हैं, या आप वास्तव में अपने क्षितिज का विस्तार कर सकते हैं और जा सकते हैं उद्देश्य-सी के लिए, यह देखने के लिए कि ओओपी भाषाओं की एक और शाखा चीजों से कैसे निपटती है! "

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