आप कोड में संक्षिप्त अमूर्तता से कैसे निपटते हैं?


15

जब एक नए कोडबेस को देखता हूं तो मुझे नीचे-ऊपर के दृष्टिकोण से शुरू करना पसंद है।
जहां मैं एक फाइल को तैयार करता हूं और फिर अगले अमूर्त तक जाता हूं।
लेकिन अक्सर मैं खुद को भूल जाता हूं कि निचले स्तर का अमूर्त क्या कर रहा है।

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

क्या इस स्थिति से निपटने के लिए बेहतर रणनीति है?

क्या मुझे केवल निचले स्तर के विवरण के बारे में भूल जाना चाहिए और उन्हें दिए गए के रूप में लेना चाहिए? लेकिन फिर भी, कई बार निचले स्तर के अमूर्त की पिछली समझ यह समझने की जरूरत है कि वर्तमान अमूर्त क्या कर रहा है।



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

आप अपने सिर में सब कुछ याद नहीं है। आप संघों और अमूर्तताओं को याद रखने में मदद करने के लिए सरल आरेखों को खींचने के लिए कागज या आईपैड के एक टुकड़े का उपयोग कर सकते हैं।
sul4bh

जवाबों:


31

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

प्रोग्रामिंग निश्चित रूप से सबसे निश्चित रूप से "निचले स्तर के विवरण के बारे में भूल" है। कभी-कभी उच्च स्तरीय विवरण भी। आप विवरण को दूर धकेलते हैं और उनके साथ कुछ और करते हैं। चुपके से आप यह सब कर रहे हैं। क्या आप वास्तव में समझते हैं कि print "Hello world"आपके स्क्रीन पर दिखने के बीच क्या होता है ?

इन विवरणों को जाने देने के लिए संघर्ष करने के लिए नंबर एक चीज की मांग करना अच्छा नाम है। एक अच्छा नाम यह सुनिश्चित करता है कि जब आप अंदर देखेंगे तो आपको आश्चर्य नहीं होगा। यही कारण है कि आप आश्चर्यचकित नहीं थे कि printआपकी स्क्रीन पर कुछ रखा गया है और वास्तव में परवाह नहीं है कि कैसे। foo "Hello world"एक अलग कहानी होती।

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

निचले, उच्च, या बग़ल में, विवरण, जो कि इस एक जगह के बारे में मैं जो सोच रहा हूं, उसके बारे में नहीं हैं, या तो पूरी तरह से दूर जा सकते हैं या कम से कम एक अच्छे नाम के पीछे छिप सकते हैं।

तो अगर तुम सच में संघर्ष कर रहे हो फाइल से फाइल करने के लिए मैं किसी को बुरा नाम या टपका हुआ अमूर्त के साथ अटक गया है रखना होगा।

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

जाहिरा तौर पर मैं अकेला नहीं हूँ जब यह इस तरह से काम करता है:

जब भी मैं अपरिचित कोड पर काम करता हूं मैं तरीकों को निकालना शुरू करता हूं। जब मैं ऐसा करता हूं, तो मैं कोड का हिस्सा देखता हूं जिसे मैं नाम दे सकता हूं - फिर मैं निकालता हूं। यहां तक ​​कि अगर मैं बाद में निकाले गए तरीकों को खत्म कर रहा हूं, तो कम से कम मेरे पास अस्थायी रूप से विस्तार को छिपाने का एक तरीका है ताकि मैं समग्र संरचना देख सकूं।

माइकल पंख - ऑरेंज कोड


12

सबसे नीचे, कुछ अपडेट हैं कि यह मेरे लिए साल के हर तिमाही में कितना अच्छा है, मुझे लगता है कि वे मूल्यवान हैं।

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

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

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


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

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

तो आप क्या कर सकते हैं?

एक सहकर्मी को अपना कोड समझाएं और उनसे पूछें कि क्या यह उच्च स्तर के दृष्टिकोण से समझ में आता है।

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

यह मैं नहीं कह रहा हूं कि आगे बढ़ो और बकवास कोड लिखो जो कि प्रदर्शन करने वाला नहीं है या कुछ भी सम्मान नहीं करता है, लेकिन मैं जो कह रहा हूं वह है:

1) भूलना ठीक है। समय के साथ, आप अपने साथ काम कर रहे कोड को पढ़ने में बेहतर हो जाएंगे। यदि आप जिस कोड को पढ़ रहे हैं, वह मांग करता है कि आप निम्न स्तर के कार्यान्वयन को अच्छे स्तर पर जानते हैं, तो यह कोड बुरी तरह से लिखा गया है और यह उस भूमिका में है जो मैंने पहले कहा था: क्या कोई सहकर्मी आपको समझता है?

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

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

स्टार्टअप्स की सफलता में समय।

अपने समय और संसाधनों को एक सार्थक, लालची तरीके से आवंटित करें।


यहां संपादित करें, 6 महीने बाद:

यह एक पागल यात्रा रही है। मैंने कभी नहीं सोचा था कि सिर्फ जुदाई / अच्छा नामकरण और प्रलेखन मूल रूप से आपको अपने कोडबेस के अंदर और बाहर कुछ भी प्लग करने की अनुमति दे सकता है। मुझे नए बदलावों को गति देने के लिए इसे लाने के लिए बहुत सारे कोड को फिर से लिखना पड़ा और मैंने 2-3 दिनों में इसका अच्छा हिस्सा बना लिया। मैं सुरक्षित रूप से कह सकता हूं कि मैंने ज्ञान की कमी के कारण हर जगह SOLID का पालन नहीं किया, न ही सर्वोत्तम अभ्यास और मैं बता सकता हूं कि वे मेरे तकनीकी ऋण में हैं, लेकिन बहुत कुछ नहीं। अलग, नाम अच्छी तरह से और दस्तावेज़, यह आपको कुछ ही समय में कोड बदलने की अनुमति देगा जब आपको अंततः पता चलता है कि आप कितने विनम्र थे।

मुझे गलत न समझें: यदि आप अपने कोड को कसकर लिखते हैं, तो आप बहुत दर्द में होंगे, चाहे आप SOLID से नफरत करें या न करें, यहां तक ​​कि इसे समझने और आधार स्तर पर लागू करने से महान डिकूप्लिंग की अनुमति मिलती है, जो ईमानदारी से है, OOP के साथ वास्तव में मदद करता है कि केवल एक चीज। OOP कोड री-यूज़ के बारे में भी होना चाहिए था और जबकि यह यहाँ और वहाँ होता है, आप वास्तव में आपके द्वारा बनाई गई बहुत सारी वस्तुओं का फिर से उपयोग करने के लिए नहीं मिलते हैं, इसलिए, यह सुनिश्चित करने पर ध्यान दें कि आपका सिस्टम अच्छी तरह से अलग है। एक बार जब आप परिपक्वता तक पहुंच जाते हैं और मान लेते हैं कि अंकल बॉब आते हैं और आपकी परियोजना का नेतृत्व करते हैं, तो वह कहेंगे "ठीक है, यह नरक के रूप में गूंगा है लेकिन कम से कम सब कुछ अलग है, अच्छी तरह से नामित और प्रलेखित है, इसलिए कम से कम मुझे पता है कि यह सब क्या है " (मुझे उम्मीद है)। मेरे लिए, यह काम करता है। मेरा LOC लगातार बदलता रहता है, लेकिन लेखन के समय, यह 110k लाइनों की कोड, 110k लाइनों के प्रदर्शन कोड की है कि एक व्यक्ति के लिए सद्भाव में काम करता है एक बहुत कुछ है।


यहाँ एक संपादित, 3 महीने बाद, 8 महीने के कोड पर मैं रीफैक्टरिंग कर रहा हूँ:

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


अच्छा नामकरण। सबसे महत्वपूर्ण बिंदु। अधिकांश लोगों के लिए करना आसान है और यह चीजों को इतना आसान बनाता है।
gnasher729
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.