खेलों में नौकरी के लिए सी ++ काम करने का अनुभव प्राप्त करने का सबसे अच्छा तरीका (सी # से आना) [बंद]


19

मैं एक सॉफ्टवेयर डेवलपर हूं, जिसे कुछ अन्य भाषाओं के साथ C # (5 साल का अनुभव) के साथ अनुभव किया जाता है।

मेरा "ड्रीम जॉब" वीडियो गेम में एक डेवलपर के रूप में काम कर रहा है।

अधिकांश नौकरियों के लिए C ++ का ज्ञान आवश्यक है, जो वर्तमान में मेरे पास नहीं है (कुछ मूल बातों को छोड़कर)।

मैंने चारों ओर देखा है, और अधिकांश बड़ी गेम कंपनियों को सी ++ के साथ पिछले अनुभव के 3-5 वर्षों में कुछ की आवश्यकता होती है।

मेरा प्रश्न है - C # से आने वाले इस आवश्यक अनुभव स्तर तक खुद को पाने के लिए एक अच्छा मार्ग क्या होगा?

मैंने इसे करने के कुछ संभावित तरीकों के बारे में सोचा है:

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


1
धन्यवाद मैं इसे बाहर की जाँच करेगा। हालांकि मुझे यकीन नहीं है कि यह ठीक वैसा ही सवाल है जैसा कि मैं प्रोग्रामिंग में शुरुआती नहीं हूं।
spaceOwl

3
कोई भी इस बात की परवाह नहीं करता है कि आपको अपना अनुभव कैसे या कहां से मिला है, या आपको इसके लिए भुगतान किया गया था या नहीं। यदि आप C ++ में अनुभव चाहते हैं, तो C ++ प्रोग्रामिंग शुरू करें।
माईक सेमर

@liortal Repost: यह भी देखें कि शुरुआत के लिए कुछ बेहतरीन टिप्स क्या हैं? (कुछ अजीबों ने इस धागे पर मेरी सभी टिप्पणियाँ हटा दीं)।
बोब्बोबो

जवाबों:


29

एक गेम डेवलपर के रूप में, C # आदमी को हायर करने वाली मेरी मुख्य चिंता निम्न स्तर के ज्ञान की कमी होगी।

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

अगर मैं आपका साक्षात्कार कर रहा था, तो मुझे आपके फिर से शुरू होने पर C ++ के बारे में कम परवाह होगी और क्या आप मेरे C / C ++ / निम्न-स्तरीय साक्षात्कार प्रश्नों के उत्तर दे सकते हैं। मैं कुछ मानक साक्षात्कार के सवालों पर एक कड़ी ले जाऊँगा जिससे आपको परेशानी हो सकती है (चेतावनी: मैं कोई C # विशेषज्ञ नहीं हूँ):

  • स्मृति में C ++ कक्षाएं कैसे रखी जाती हैं? बाइट्स का आरेख बनाएं। शामिल चंचल संकेत और सदस्य चर के पैडिंग / संरेखण। एक व्युत्पन्न वर्ग के बारे में क्या? एक बहु-व्युत्पन्न वर्ग के बारे में क्या?
  • वर्चुअल फ़ंक्शन कॉल निम्न स्तर पर कैसे होता है? स्मृति में एक मान पढ़ने और एक पते पर कूदने जैसे विधानसभा संचालन के बारे में बात करें।
  • सी-स्टाइल कास्ट, स्टेटिक_कास्ट और डायनेमिक_कास्ट के बारे में विभिन्न उत्तराधिकार संबंधों के प्रकारों के बारे में जानें। उदाहरण के लिए, वर्ग B और C दोनों ही वर्ग A से निकलते हैं। तब क्या होता है जब आप इन विभिन्न जातियों का उपयोग करके A * से B * (या B * से C *) में डालने का प्रयास करते हैं? (मैं उल्लेख करता हूं क्योंकि मुझे नहीं लगता कि C # इन विशिष्ट जातियों को भी अनुमति देगा।)
  • संदर्भ के बजाय, मूल्य द्वारा एक stl वेक्टर पास करना क्यों भयानक है? (मैं उल्लेख करता हूं क्योंकि C # में अधिकांश प्रकार संदर्भ प्रकार हैं और इस प्रकार C # में इस तरह की गलती करना मूल रूप से असंभव है।)
  • कैश-फ्रेंडली होने के लिए संरचना या कार्य के लिए इसका क्या अर्थ है? एक संरचना-की-सरणियाँ किसी सरणी-संरचना से बेहतर प्रदर्शन क्यों कर सकती हैं?
  • ढेर, ढेर और स्थिर स्मृति को समझें। यदि कोई वस्तु नए के साथ आवंटित की गई थी, तो यह प्रक्रिया की स्मृति में कहां रहती है? एक स्थानीय चर के बारे में क्या? एक वैश्विक चर?
  • मेमोरी लीक क्या है? इनसे बचने के लिए कुछ सर्वोत्तम अभ्यास क्या हैं? (मैं उल्लेख करता हूं क्योंकि C # में कोई डिलीट नहीं है!)
  • आप मेमोरी एक्सेस उल्लंघन क्रैश को कैसे डिबग करेंगे? क्या होगा अगर दुर्घटना कुछ मिडलवेयर लाइब्रेरी में हुई जिसके लिए आपके पास स्रोत कोड नहीं है?

1
रेपोस्ट: मैं पहले से ही यह जानने की उपयोगिता जानता हूं कि वाइब्रेट पॉइंटर्स मेमोरी में कहां हैं क्योंकि मैं एक बग में भाग गया था जिसमें पहले था । हालाँकि, 2 वां प्रश्न कैसे उपयोगी है? "असेंबली लेवल ऑपरेशंस को वैल्यू इन द मेमोरी इन रीडिंग" कैसे पता चलता है कि एक सक्षम C ++ प्रोग्रामर बना है?
बोब्बोबो

वाह 1 यूआई इंटर्न स्पॉट के लिए मेरा ब्लिज़र्ड साक्षात्कार बिंदु 1, 2, 3 (कुछ हद तक) पर छुआ, 5, और 7. उन्होंने डिबगिंग / परीक्षण के बारे में भी सवाल पूछे (बिंदु 8 के समान) मुझे लगता है कि यह उत्तर बिल्कुल हाजिर है ऊपरी स्तर की खेल विकास कंपनियों के लिए सामान्य मामले में भी।
डीन नाइट

2
@DeanKnight मुझे संदेह नहीं है कि। लेकिन मैं अभी भी यह जानना चाहता हूं कि ओपी कैसे सोचता है कि इस तरह का प्रश्न किसी को एक अच्छा सी ++ प्रोग्रामर बनाता है (मूल प्रश्न एक बेहतर सी ++ प्रोग्रामर कैसे बनें) के रूप में सिर्फ किसी को साक्षात्कार में मदद करने के लिए विरोध किया।
बोबोबोबो

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

1

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

मैं पुरानी किताबों से भी सावधान रहूंगा, वे पुरानी प्रथाओं को सिखाते हैं। मैं व्यक्तिगत रूप से विश्वसनीय मंचों / वेबसाइटों, स्टैकओवरफ़्लो / आइसोकप को पसंद करता हूं।


धन्यवाद। मुझे अध्ययन के लिए भाषा विशेष के बजाय व्यापक, अधिक सामान्य सलाह / अनुशंसाओं की तलाश थी।
spaceOwl

"टालना new" वास्तव में एक समझदार सिफारिश नहीं है। newजब आपके पास पॉइंटर्स हों तो आप इसका इस्तेमाल करें । यदि class Derived : Base, तो Base var = Derived();अवैध है, लेकिन Base *var = new Derived();कानूनी है। तो आपको सही, बहुत काम करने के लिए बहुरूपता प्राप्त करने के लिए संकेत की आवश्यकता है।
बोबोबो

हां, लेकिन आप बहुरूपता को पूरा करने के लिए std :: unique_ptr का उपयोग कर सकते हैं और नग्न पॉइंटर से बच सकते हैं (हालाँकि आपके पास अभी भी यूनिक_प्ट्र कंस्ट्रक्टर में नया कीवर्ड होगा)
Eric B

मुझे क्षमा करें, मैंने उपरोक्त टिप्पणी में एक गलती की है। Base var = Derived() काम करेगा , लेकिन यह कटा हुआ होगा और, आपके लिए अनजान, जानकारी खो जाएगी var। स्लाइसिंग समस्या को ठीक करने के लिए, आप पॉइंटर्स का उपयोग कर सकते हैं।
बोबोबोबो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.