2011-05-24 10 views
5

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

तो, यहां समस्या है। क्या आप किसी भी कोड लेखन रणनीति को जानते हैं जो आपको काम करने, परीक्षण करने और अच्छा बनाने के बारे में सोचने पर 90% समय व्यतीत किए बिना काम करने, परीक्षण करने, अच्छे कोड लिखने के लिए तैयार करता है?

अग्रिम धन्यवाद।

+2

यह लगभग निश्चित रूप से [प्रोग्रामर] (http://programmers.stackexchange.com) पर निर्भर करता है लेकिन माइग्रेशन से पहले कुछ ध्यान देने के लिए मुझे यहां छोड़कर खुशी हुई! –

+1

क्षमा करें मैं अभी भी स्टैक एक्सचेंज के ब्रह्मांड में उन्मुख नहीं हो सकता। ऐसी कई साइटें हैं जिन्हें मैं अक्सर खो देता हूं :) –

+1

यह एक चमत्कार है जिसे अभी तक बंद नहीं किया गया है। आनन्द! –

उत्तर

9

क्या आपको कोई कोड लेखन रणनीति पता है जो आपको काम करने, परीक्षण करने और अच्छा बनाने के बारे में सोचने के लिए 9 0% समय व्यतीत किए बिना काम कर रहे, परीक्षण किए गए अच्छे कोड को लिखता है?

हां, here

गंभीरता से, नहीं। बिना सोच के अच्छे कोड लिखना संभव नहीं है।

जब मैं अपने अच्छी तरह से लिखा कोड देखते हैं, यह एक नई कार्यक्षमता जोड़ने और सोचने के लिए मुश्किल है "मैं इस जहां रखना चाहिए? मैं पहले से ही कोड के इस टुकड़े इस्तेमाल किया है? क्या यह करने के लिए सबसे अच्छा तरीका क्या होगा? " और अक्सर मैं काम स्थगित कर दिया।

इसे "विश्लेषण पक्षाघात" कहा जाता है। आपको The Pragmatic Programmer के "अच्छे पर्याप्त सॉफ्टवेयर" अनुभाग को पढ़ने में रुचि हो सकती है। आपका कोड सही नहीं होना चाहिए।

1

मेरा सुझाव है कि आप टीडीडी (परीक्षण संचालित विकास) को एक रन दें। इस संदर्भ में, आप इसे कार्यान्वित करने से पहले कार्यक्षमता के प्रत्येक टुकड़े के लिए स्वचालित परीक्षण लिखेंगे, फिर आप सुविधा को पूरा करने के बाद परीक्षण चलाते हैं।

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

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

हालांकि, ध्यान रखें कि ओएस को स्वचालित परीक्षण लागू करने से कुछ चुनौती तकनीकी चुनौती मिल सकती है!

+0

मुझे लगता है कि बीडीडी जाने का एक बेहतर तरीका हो सकता है। इसकी मूल रूप से टीडीडी है, लेकिन आप एक ही व्यवहार के आसपास परीक्षण लिख रहे हैं, जिसे आप अपनी कक्षा को सक्षम करना चाहते हैं। यह मुख्य रूप से वही है, लेकिन एक मन शिफ्ट है जो 'मुझे कुछ परीक्षण लिखने की आवश्यकता' से अधिक सहायक है। आप क्या परीक्षण लिखते हैं? Thats बीडीडी सहायक थे। – Andy

+0

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

4

उन चीजों पर व्यापक रूप से चर्चा की जाती है।मेरे लिए this legendary blog entry जोएल स्पॉस्की और अनुवर्ती चर्चा (रॉबर्ट मार्टिन answered this) हर जगह एक वेब में सभी प्रो और विपक्ष शामिल हैं और अभी भी पढ़ने के लिए मजेदार है।

यहाँ जायज़ा लेने के लिए जो ऊपर से जुड़ा हुआ पोस्ट में प्रकट होता है जेमी ज़विन्सकी से एक उद्धरण है: "

दिन के अंत में, फू **** जी बात जहाज! अपने कोड को फिर से लिखना और इसे क्लीनर बनाना बहुत अच्छा है और तीसरे बार यह वास्तव में सुंदर होगा। लेकिन यह बात नहीं है- आप कोड लिखने के लिए यहां नहीं हैं; आप यहां उत्पादों को शिप करने के लिए हैं। "

संबंधित मुद्दे