कोड रिट्रीट के लिए कॉनवे के "गेम ऑफ लाइफ" का उपयोग क्यों किया जाता है?


15

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

एक चीज जो मुझे अभी भी नहीं मिली है वह यह है कि "गेम ऑफ लाइफ" टीडीडी के लिए एक अच्छी समस्या है, और इसके लिए क्या अच्छा और बुरा टीडीडी महसूस होता है।

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


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

@ एना लियर: धन्यवाद, लेकिन चैट की तलाश में नहीं, जवाब की तलाश में। यदि यह एक अच्छा सवाल नहीं है, तो यह ठीक है।
ब्लंडर्स

3
@AnnaLear मुझे लगता है कि ओपी की तुलना में सवाल विषय पर अधिक है और इसका श्रेय वह खुद देते हैं।
टॉम स्क्वॉयर

1
@ मैं इसके बारे में अपने दम पर सोच रहा था, और मुझे यह अच्छा लग रहा है। गलत होने की खुशी। :)
एडम लेअर

जवाबों:


26

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

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

कोडरट्रीट सरल डिजाइन (विशेष रूप से सरल डिजाइन के 4 नियम), परीक्षण-संचालित विकास और सॉफ्टवेयर विकास के अन्य मूलभूत पहलुओं की हमारी समझ को बेहतर बनाने पर केंद्रित है। संरचनात्मक दृष्टिकोण से बहुत समृद्ध होते हुए भी समझने के लिए GoL को एक बहुत ही सरल समस्या होने का लाभ है। यह आसानी से सिस्टम के कुछ हिस्सों को प्रदान करता है जिनका उपयोग हम उन सभी विषयों के उदाहरण के रूप में कर सकते हैं जो हम कोडरेट पर अभ्यास करते हैं। उदाहरण के लिए, एक सामान्य कार्यान्वयन जो कई तरीकों में (x, y) मापदंडों को लेता है, DRY सिद्धांत के बारे में बात करने का एक शानदार अवसर है (ज्ञान का प्रत्येक टुकड़ा आपके सिस्टम में एक और केवल एक प्रतिनिधित्व होना चाहिए) के टोपोलॉजी के संबंध में प्रणाली। ऐसे कई अन्य पहलू हैं जिनका उपयोग डिजाइन के निर्माण के उदाहरण के रूप में किया जा सकता है जो परिवर्तन की लागत को कम करता है।

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


10

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

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


10
मैं एक ग्लाइडर को "आकस्मिक" व्यवहार मानूंगा। आपके इकाई परीक्षणों को केवल एक विशिष्ट संख्या वाले पड़ोसियों को दी गई कोशिकाओं के जीवन और मृत्यु के नियमों को एनकोड करना होगा।
रॉबर्ट हार्वे

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

3

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

यदि चुनौती के चश्मे में न्यूनतम प्रदर्शन और अधिकतम मेमोरी फुटप्रिंट शामिल हैं , तो परीक्षणों में तेजी से बढ़ते पैटर्न, या पैटर्न शामिल हैं जो विभिन्न दिशाओं में दूर-दूर तक यात्रा करते हैं, यह एक बहुत ही निराशाजनक चुनौती बन सकती है।

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

और चूंकि अधिकांश "वैश्विक" परीक्षण प्रदर्शन मानक को विफल कर देंगे, इसलिए आपको छोटे लक्ष्यों, छोटे उप-परीक्षणों को विकसित करने की आवश्यकता होती है जो कैविट्स को इस्त्री करते हैं ...


2

यह सब इस बात पर निर्भर करता है कि आप अपनी प्रक्रिया के किस पहलू के लिए अभ्यास / प्रशिक्षण लेना चाहते हैं।

आपके द्वारा चुने गए दृष्टिकोण / परियोजना प्रबंधन प्रतिमान की परवाह किए बिना एक भी दिन सॉफ्टवेयर इंजीनियरिंग के सभी पहलुओं को कवर करने के लिए पर्याप्त नहीं है। इसलिए इसे प्रभावी बनाने के लिए आपको संभवतः पूरे के एक छोटे उपसमूह पर ध्यान केंद्रित करना चाहिए।

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

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

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

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

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