"चतुर" कोड लिखने से बचने के लिए खुद को कैसे प्रशिक्षित करें? [बन्द है]


75

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

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

"चतुर" कोड लिखने के आग्रह का विरोध करने के लिए मैं क्या कर सकता हूं और घंटी बजनी चाहिए कि मैं इसे गलत कर रहा हूं ?

समस्या और भी अधिक बढ़ रही है क्योंकि मैं अब अनुभवी डेवलपर्स की एक टीम के साथ काम कर रहा हूं, और कभी-कभी स्मार्ट कोड लिखने के मेरे प्रयास खुद को मूर्खतापूर्ण लगते हैं, समय के बाद भी लालित्य का भ्रम दूर हो जाता है।


5
विषय से थोड़ा हटकर, लेकिन thedailywtf.com/Articles/…

@ जो: यह बहुत विषय पर है, धन्यवाद! मैंने लेख पढ़ा है, लेकिन अब इसे फिर से खोज लेना खुशी की बात है।
डैन

33
बहुत चालाक कोड का डीबग करें ... जो चाल करना चाहिए।
दान ओल्सन

@Joe डेटाबेस उस लेख में लिंक के लिए मरने के लिए है।

संक्षिप्त उत्तर: सबसे छोटा, सरल कोड जीतता है। दोहराव को खत्म करें, लेकिन "सिर्फ इसलिए" परतों को न जोड़ें। Fowler की Refactoring आपको कुछ जानकारी दे सकती है।
केविन क्लाइन

जवाबों:


54

समस्या और भी अधिक बढ़ रही है क्योंकि मैं अब अनुभवी डेवलपर्स की एक टीम के साथ काम कर रहा हूं, और कभी-कभी स्मार्ट कोड लिखने के मेरे प्रयास खुद को मूर्खतापूर्ण लगते हैं, समय के बाद भी लालित्य का भ्रम दूर हो जाता है।

आपका समाधान यहाँ निहित है। मैं मान रहा हूँ कि इस संदर्भ में "अनुभवी" का अर्थ है "आपसे अधिक अनुभवी।" बहुत कम से कम, आप स्पष्ट रूप से उनका सम्मान करते हैं। यह एक मूल्यवान सीखने का अवसर है - यह मानकर कि आपका अहंकार हिट ले सकता है। (अजीब बातें, अहंकार। एक दया हमें उनकी ज़रूरत है।)

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

कोड की समीक्षा के दौरान आपका चेहरा लाल हो जाने पर आप अक्सर अपनी सीट पर बैठते हैं। इसे समाप्त करें। आप सीख रहे हैं।

फिर, एक बार जब आप इनमें से कुछ को अपनी बेल्ट के नीचे पा लेते हैं, तो उन क्षणों पर ध्यान दें जहां आपको संदेह है कि आप संभवतः ओवरडिजाइन कर रहे हैं। जब वे क्षण आते हैं, तो अपने आप से पूछें: "अगर कोड समीक्षा के दौरान कोई मुझे इस पर कॉल करता है, तो क्या मैं अपने समाधान का सबसे अच्छा उपलब्ध के रूप में बचाव कर सकता हूं? या क्या मैं एक सरल समाधान है जो मैं त्याग कर रहा हूं?"

कभी-कभी, अपने स्वयं के काम पर एक अच्छी नज़र पाने के लिए सहकर्मी की समीक्षा सबसे अच्छा तरीका है।


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

7
कोई कोड समीक्षाएँ? Urk। मैं सभी आत्म-धार्मिक और भयभीत कुछ लिखूंगा, लेकिन मैंने उस वातावरण में भी काम किया है। वे समय लेने वाली और हर किसी की गांड में दर्द की तरह हैं, लेकिन वे वास्तव में हाथ और आपके स्वयं के व्यक्तिगत विकास दोनों के लिए मूल्यवान हैं। यदि "क्या हमें कोड की समीक्षा करनी चाहिए?" कभी भी आता है, सुनिश्चित करें कि आप नीचे "नरक हाँ!" और अगर वे अपने स्वयं के उभरते समय सीमा के साथ पटक नहीं रहे हैं, तो आप सहकर्मियों से पूछ सकते हैं कि आप काम देने के लिए सम्मान करते हैं, आप अनौपचारिक कोड-समीक्षा-लाइट के बारे में निश्चित नहीं हैं।
ब्लेयरहिप्पो

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

2
अरे मेरा। रोमांचक लगता है - सभी अच्छे और बुरे अर्थों के साथ जो शब्द इसके साथ होता है। :-) शुभकामनाएं मेट; यहाँ उम्मीद है कि आप कुछ शानदार शुरुआत कर रहे हैं।
ब्लेयरहिप्पो

8
@ ब्लेयरहिपो: मैंने बस आपकी सलाह का पालन किया, शांत हो गया और कृपया सहकर्मी से पूछा, जिन्होंने मेरे साथ अनौपचारिक समीक्षा करने के लिए मेरे परिवर्तनों द्वारा पेश की गई समस्या पर ध्यान दिया, और वह सहमत हो गए। इसने हमारी बातचीत से कुछ अजीबों को दूर करने में भी मदद की (जैसा कि "आप जटिल कोड लिखते हैं और मुझे इसे ठीक करना है ..")। धन्यवाद!
दान

20

सबसे अच्छी बात यह है कि ब्रायन केर्निगन की अधिकतम को ध्यान में रखना है:

“पहली बार कोड लिखने में डिबगिंग दोगुना कठिन है। इसलिए, यदि आप कोड को चतुराई से लिखते हैं, तो आप परिभाषा के अनुसार हैं, न कि इसे डिबग करने के लिए पर्याप्त स्मार्ट हैं। "


1
मैं पूरे दिल से भाव से सहमत हूं लेकिन सवाल यह है कि चतुर लड़का होने का प्रलोभन कैसे दूर किया जाए ? जब आप बीमार हों तो आपको आइसक्रीम नहीं खाने के लिए कहा जा सकता है लेकिन कभी-कभी यह मदद नहीं करता है।
डैन

13
एक अधिकतम के लिए +1 जिसे प्रत्येक कोड बंदर को दिल से जानना चाहिए, लेकिन -1 ओपी को अपने स्वयं के काम पर इसे लागू करने के बारे में कोई जानकारी नहीं देने के लिए। तो यह सब बिना किसी तीर के क्लिक करने के लिए विकसित होता है।
ब्लेयरहिपो

2
महान उद्धरण, लेकिन वास्तव में ओपी के सवाल का जवाब नहीं।
जिम जी।

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

2
-1: ओपी के सवाल का ज़रा सा भी जवाब नहीं देता।
थॉमस ईडिंग

15

किसी भी महत्व की सॉफ़्टवेयर समस्याओं के लिए आमतौर पर कम से कम तीन समाधान होते हैं: स्पष्ट तरीका, एक गैर-स्पष्ट जटिल तरीका (चतुर), और एक गैर-स्पष्ट सरल तरीका (सुरुचिपूर्ण)। लेखकों के बारे में एक उद्धरण यहां लागू है:

वह सब कुछ रखो जो तुम्हारे सिर में आता है और फिर तुम एक लेखक हो। लेकिन एक लेखक वह है जो बिना किसी अफ़सोस के अपने सामान की कीमत का अंदाज़ा लगा सकता है, और ज़्यादातर को तबाह कर सकता है। - कोलेट

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

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


3
यह मुझे एक पुराने गणितज्ञ के उद्धरण की याद दिलाता है: "हर समस्या के लिए एक समाधान है जो सरल, सुरुचिपूर्ण और गलत है।"
जोरिस टिमरमैन

9

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


जब भी समय मिलता है, मैं निश्चित रूप से इसे खुद पर थोपने की कोशिश करता हूं।
जुवेमैन

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

6

जब एक बड़ी और गतिशील टीम के लिए काम किया जाता है, जो कई अलग-अलग कौशल सेटों और वर्षों में फैलती है, तो विकास को टीम के वर्तमान या ऐतिहासिक सबसे रूढ़िवादी या सबसे बौद्धिक रूप से कमी वाले सदस्य के निम्नतम स्तर पर "गूंगा" होना पड़ता है।

यह आवश्यक रूप से एक बुरी बात नहीं हो सकती है क्योंकि चतुर कोड डिबग करने के लिए कठिन हो सकता है, तकनीकी विनिर्देश में व्यक्त करने के लिए कठिन हो सकता है, और विकास के समय को धीमा करते हुए लिखने में अधिक समय लग सकता है।

ऐसे समय होते हैं जब चतुर कोड महत्वपूर्ण होता है, जैसे कि जब चतुर कोड कार्यकुशलता और प्रदर्शन लाभ देता है तो बाद में सॉफ्टवेयर के परिपक्वता चक्र में जब प्रदर्शन एक आवश्यकता बन जाता है।

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

मुझे खेद है कि पहले एक खुले दिमाग का नहीं था और काश मैं ऐसे "चतुर" जूनियर डेवलपर पर इतना कठोर नहीं होता।

मेरा कहना है कि "चतुर" कोड होना संदिग्ध है, लेकिन हमें इसके खिलाफ धर्मयुद्ध में नहीं जाना चाहिए क्योंकि यह रचनात्मकता और नवाचार को प्रभावित कर सकता है।

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


6

यदि 20% (आपकी% भिन्न हो सकती है) या आपकी जोड़ी गई लाइनों में से अधिक को दस्तावेज़ीकरण करने की आवश्यकता है - यह वापस कदम और पुनर्विचार करने का समय है ।

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


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

@ डेडलनिक्स: बुरी बात नहीं। मुझे संदेह है कि मेरा% अधिक से अधिक होगा क्योंकि मैं आमतौर पर एक अन्यथा मृत और भारी मैक्रोइडी असेंबली भाषा में कोड करता हूं। पढ़ने के लिए कठिन और प्रत्येक नए भाड़े के लिए भाषा सीखने की आवश्यकता होती है, परिणामस्वरूप अधिक टिप्पणी की आवश्यकता होती है।
DKnight

2
@deadalnix - यह समझाने के लिए दस्तावेज़ीकरण कि आपका कोड कैसे है, यह स्पष्ट नहीं है। बहुत आवश्यकता क्यों है, यह समझाने के लिए दस्तावेज़ीकरण। मैंने कोड के सभी बहुत सारे टुकड़े देखे हैं जो मैं समझ सकता हूं कि उन्होंने क्या किया था, लेकिन नहीं कि उन्होंने इसे गैर-उद्देश्यपूर्ण तरीके से करने का फैसला क्यों किया। जिससे इसे बनाए रखना बहुत मुश्किल हो जाता है।
HLGEM

@HLGEM यह तर्कपूर्ण है। कोड की अस्पष्टता बुरी तरह से डिज़ाइन किए गए लिबास / एपीआई से हो सकती है, गर्भाधान के भीतर अस्पष्टता से लेकर चिंताओं के बुरे अलगाव की तरह। हम वास्तविक दुनिया में रह रहे हैं और हमारी क्षमताएं परिमित हैं, इसलिए हमें निश्चित रूप से प्रलेखन की आवश्यकता होती है, लेकिन प्रत्येक बार जब हमें इसकी आवश्यकता होती है, तो इसका मतलब है कि किसी ने अप्रतिष्ठित कोड लिखा है। कोई भी दस्तावेज ऐसा नहीं है जो आपको करना चाहिए - इसके बारे में सोचें भी नहीं, लेकिन आपको सही दिशा में सुधार रखने के लिए हर समय सोचना होगा।
डेडलिंक

@deadalnix - सही कोड वास्तविक दुनिया में कभी भी व्यावहारिक समाधान नहीं है।
जेफ

4

मैं कुछ चालाक कोशिश करने का विरोध नहीं कर सकता।

तो मैं इसे एक खिलौना परियोजना पर करता हूं, अपने समय पर, घर पर।

जब नवीनता पहनती है - समस्या हल।


3

मेरा मानना ​​है कि यह पता लगाने का एक तरीका है कि क्या आपका कोड बहुत "चतुर" है, एक कदम पीछे लेना है और अपने आप से निम्नलिखित पूछना है:

अगर मैं इस कोड का प्रिंटआउट किसी ऐसे व्यक्ति को देता, जिसने इस प्रोजेक्ट / कोड पर कभी काम नहीं किया, तो क्या वे इसे पढ़ पाएंगे और मेरे बारे में बताएंगे कि फ़ंक्शन क्या करता है (उन्हें कुछ संक्षिप्त संदर्भ देने के बाद)? यदि नहीं, तो मुझे कितना समझाना होगा? मैं CS101 लेने वाले किसी व्यक्ति को यह कैसे समझाऊंगा?

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


मैंने इसे "रबर डकिंग" कहा है जब समस्या को हल करने के लिए आवेदन किया है; जब स्टम्प्ड होता है, तो समस्या को किसी ऐसे व्यक्ति को समझाने की कोशिश करें जो इसके बारे में कुछ नहीं जानता (जैसे, आप जानते हैं, आपका रबर डकी) और देखें कि क्या समाधान आपकी गोद में नहीं गिरा है। मुझे लगता है कि इसके लिए भी काम करना होगा।
ब्लेयरहिप्पो

2

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

समस्याओं का चतुर समाधान शानदार हो सकता है, जब तक कि आपको उन्हें डिबग या विस्तार नहीं करना है। कभी-कभी इसका एकमात्र समाधान होता है। यदि आप सही तरीके से वर्णन कर सकते हैं कि यह क्या करता है, और यह कैसे करता है, तो चतुर समाधान स्वीकार्य हो सकते हैं।

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


2
टिप्पणी चाल मेरे लिए भी काम करती है। अन्य कारणों के अलावा, मैं हमेशा किसी भी गैर-तुच्छ सबरूटीन्स के ऊपर एक टिप्पणी ब्लॉक को शामिल करता हूं, जो कि अंतिम पवित्रता जांच का एक प्रकार है। अगर मुझे लगता है कि मुझे बहुत समझाने (या यहाँ तक कि, मौके पर माफी माँगने) के लिए कोड या अजीब इनपुट पार्म्स के विलम्बित या आपत्तिजनक वर्गों के लिए या जो कुछ भी है, तो यह चेतावनी संकेत है कि मुझे समाधान को थोड़ा पुनर्विचार करने की आवश्यकता हो सकती है।
ब्लेयरहिप्पो

@BairairHippo हा! "अंतिम पवित्रता जाँच" मुझे पसंद है।
फिलिप

2

संभवत: सरल कोड लिखना शुरू करने का एक अच्छा तरीका चतुरता जुनून को एक परियोजना पर जारी करना है जो चतुरता पूछता हैशेष उत्तर .NET के लिए विशिष्ट है, लेकिन मुझे यकीन है कि कोई भी किसी अन्य भाषा में समान स्तर की परियोजनाएं पा सकता है।

वहाँ काम करने के लिए खुला स्रोत निर्भरता इंजेक्शन चौखटे हैं, जिस पर सिर्फ Expressionट्रिक्स ज्ञान के लिए पूछें , एफ # है और एक अद्भुत श्रेणी के कार्य जो इसके लिए प्रयास करना चाहते हैं।

यदि आप गणित में हैं (और यह भाषा अज्ञेयवादी है ), तो आपके लिए प्रोजेक्ट यूलर है।

अंतिम, लेकिन कम से कम नहीं। .NET दुनिया में मोनो परियोजना है जिसमें बहुत सारे क्षेत्र हैं जिन्हें डेवलपर ध्यान देने की आवश्यकता है , उनमें से कुछ बहुत जटिल हैं। कैसे एक खुला स्रोत स्थैतिक .NET कोड विश्लेषक उपकरण में योगदान के बारे में ? इसमें कुछ IL विश्लेषण शामिल हैं, साथ ही उच्च-स्तरीय सामान भी हैं। Jb Evain हमेशा कुछ दिलचस्प पर काम करता है, चाहे वह सेसिल रिफ्लेक्शन लाइब्रेरी हो, Expressionसपोर्ट या .NET डेस्पॉइलर।

अगर कुछ भी फिट नहीं है, तो बस अपना खुद का ढांचा शुरू करें :-)


2

क्या आप उस भावना को जानते हैं, जब आपको बस अभिव्यक्ति के साथ उस नई चाल को दिखाने या तीन अलग-अलग प्रक्रियाओं को सामान्य करने की आवश्यकता होती है?

नहीं

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


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

2

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

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

ठीक दानेदार अनिवार्य कोड मोटे अनाज योजनाओं को लागू करने के लिए कार्य करता है - जिन्हें दस्तावेज करने की आवश्यकता होती है। मैं विधि के सभी 50 लाइनों के माध्यम से पढ़ने के लिए नहीं करना चाहता जब एक त्वरित 3-लाइन रोडमैप टिप्पणी करेंगे।

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

और टिप्पणियां किसी पुस्तक में भी सिद्दत की तरह काम कर सकती हैं, जब हमें मुख्य पाठ में एक दावे के पीछे तर्क की प्रक्रिया को समझाना होगा।

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

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

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


1

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

-1 के प्रकाश में संपादित करें:

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

मैंने सीखा क्योंकि मैंने पूछा कि क्यों और उन्होंने समझाने की परेशानी उठाई क्योंकि उन्हें लगा कि मैं कुछ कर सकता हूं - LOL ...।


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

1

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

यह भी महसूस करें कि कार्यात्मक सॉफ्टवेयर पर ध्यान केंद्रित करने से, जो समय पर होता है और आसानी से बनाए रखा जाता है, आपको वह पहचान मिलेगी जो आप चाहते हैं। अनुभवी डेवलपर्स आपके पास आएंगे और कहेंगे "मैन जो मॉड्यूल आपने लिखा था वह अच्छी तरह से डिज़ाइन किया गया था। मुझे केवल एक घटक को अपनी परियोजना में प्लग करने के लिए लागू करना था।" के रूप में "मुझे लगता है कि पूरे मॉड्यूल तुम सिर्फ एक और घटक में इसका इस्तेमाल करने के लिए लिखा था rework था? क्या आप भी बॉब मार्टिन या वार्ड कनिंघम के बारे में सुना?"

TLDR: आप अकेले नहीं हैं। स्मार्ट तरीके से समस्याओं को हल करने के कौशल के रूप में कौशल की मान्यता सबसे अच्छी तरह से प्राप्त की जाती है।


0

मेरे लिए, अत्यधिक-चतुर कोड अक्सर आज की आवश्यकताओं पर ध्यान केंद्रित करने के बजाय काल्पनिक भविष्य की आवश्यकताओं को हल करने का प्रयास करता है। बड़ा जाल!

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

कोड समीक्षाएँ मदद। अन्य लोगों के "चतुर" कोड को ठीक करने में वर्षों में मदद मिलती है। इस बात पर ध्यान केंद्रित करते हुए कि आज ग्राहक को वास्तव में क्या चाहिए।

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


-2

अब तक दी गई अच्छी सलाह के अलावा (कोड समीक्षा, डीबगिंग, टीडीडी दृष्टिकोण) आपको समय-समय पर (अच्छी किताबें imho) अच्छी कोडिंग प्रथाओं पर पढ़ना चाहिए।

  • व्यावहारिक प्रोग्रामर
  • कोड पूरा करें
  • साफ कोड

और अन्य, आपके द्वारा उपयोग की जाने वाली तकनीक पर निर्भर करता है।


-2

बस याद रखें YAGNI - आपको इसकी आवश्यकता नहीं है

आवश्यक समझे जाने तक प्रोग्रामर को कार्यक्षमता नहीं जोड़ना चाहिए ...

YAGNI XP सिद्धांत के पीछे एक सिद्धांत है "सबसे सरल काम करें जो संभवतः काम कर सके" (DTSTTCPW)। इसका उपयोग कई अन्य प्रथाओं के संयोजन में किया जाता है, जैसे कि निरंतर रीफैक्टरिंग, निरंतर स्वचालित इकाई परीक्षण और निरंतर एकीकरण। निरंतर रीफैक्टरिंग के बिना उपयोग किया जाता है, यह गन्दा कोड और बड़े पैमाने पर काम कर सकता है ...

जो लोग YAGNI दृष्टिकोण की वकालत करते हैं, उनके अनुसार कोड लिखने का प्रलोभन जो इस समय आवश्यक नहीं है, लेकिन भविष्य में हो सकता है, निम्नलिखित नुकसान हैं:

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

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