"अच्छा कोड" लिखने का क्या मतलब है? [बन्द है]


41

में इस सवाल मैंने पूछा कि क्या अच्छा कोड लिखने से एक बुरा लेखक hinders जा रहा है आप। कई उत्तरों की शुरुआत "यह इस बात पर निर्भर करती है कि आप अच्छे कोड से क्या मतलब रखते हैं"।

ऐसा प्रतीत होता है कि "अच्छा कोड" और "बुरा कोड" शब्द बहुत व्यक्तिपरक हैं। चूंकि मेरा एक दृष्टिकोण है, यह उनके बारे में दूसरों के दृष्टिकोण से बहुत भिन्न हो सकता है।

तो "अच्छा कोड" लिखने का क्या मतलब है? "अच्छा कोड" क्या है?


15
अच्छा कोड है अगर आप इसे दो साल बाद देखते हैं और आपका पहला विचार "यार, wtf" नहीं है।
बॉबी

जवाबों:


91

एक अच्छा कोडर एक अच्छे पूल खिलाड़ी की तरह होता है।

जब आप एक पेशेवर पूल खिलाड़ी देखते हैं, तो आप पहले प्रभावित नहीं हो सकते हैं: "निश्चित रूप से, उन्होंने सभी गेंदों को अंदर कर लिया, लेकिन उनके पास केवल आसान शॉट थे!" ऐसा इसलिए है क्योंकि जब एक पूल खिलाड़ी अपना शॉट लगा रहा होता है, तो वह यह नहीं सोचता है कि कौन सी गेंद किस पॉकेट में जाएगी, वह यह भी सोच रहा है कि क्यू बॉल कहां खत्म होगी । अगले शॉट के लिए सेट करना जबरदस्त कौशल और अभ्यास है, लेकिन इसका मतलब यह भी है कि यह आसान दिखता है।

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

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


10
"एक अच्छा कोडर ऐसा कोड लिखता है जो दिखता है कि यह करना आसान और सरल था।" << बिल्कुल! मुझे लगता है कि यह इसलिए है क्योंकि लोग आमतौर पर सोचते हैं कि एक अच्छा कोडर वह है जो बहुत "चतुर" हैक लिख सकता है। यदि कोड साफ है और अधिक "चतुर" नहीं है, तो यह आसान होना चाहिए, है ना?
hasen

3
मेरे 2 सेंट: जब आपको ईएएसवाई स्वचालित रीफैक्टरिंग के साथ एक भाषा मिली है - जावा और सी # दो उदाहरण हैं जिन्हें मैं सबसे अच्छी तरह से जानता हूं - अच्छे कोड में चलना आसान है। अन्यथा आपको पहली बार में अच्छी तरह से अवधारणा बनानी होगी, लेकिन वहां चिकन-अंडे की समस्या है।
23:30 पर दान रोसेनस्टार्क

3
कुछ एल्गोरिदम आंतरिक रूप से जटिल हैं। एक अच्छे कोडर को उन्हें लिखने में कोई समस्या नहीं होनी चाहिए जब वे वास्तव में आवश्यक हों - और उन्हें यथासंभव पठनीय रखें।
J-16 SDiZ

2
@ सहजें: हाँ, यह इस लेम्मा के कारण है: बेवकूफ लोग कोड लिखते हैं जो कंपाइलर समझता है। चतुर लोग कोड लिखते हैं बेवकूफ लोग समझते हैं।
v.oddou

49

डब्ल्यूटीएफ प्रति मिनट

( मूल )


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


1
हम काम पर हमारे व्हाइटबोर्ड पर अटक गए हैं :-)
कोई नहीं

1
@ काप कॉड गनी एक अंकल बॉब की किताब में भी था
mlvljr

2
एक महान कार्टून होने के अलावा मुझे लगता है कि यह वास्तव में इस बिंदु पर पहुंच जाता है - अच्छा कोड वह कोड है जो अन्य लोगों को पढ़ने और बनाए रखने के लिए सुखद लगता है।
फिनकेक

1
तो सच है, अच्छा कोड कोई भी कोड है जो बुरा नहीं है। उदाहरण के लिए अच्छे कोड को परिभाषित करना कठिन है, खराब कोड को परिभाषित करना आसान है।
अर्नेल्ली

5
आमतौर पर मुझे लगता है कि "डब्ल्यूटीएफ?" अच्छे कोड की बैठक में है, इसके तुरंत बाद "ओओओओह ठीक है ... मैं देखता हूं कि आपने क्या किया।"
एंड्रयूके

7

आप कोड को कितनी तेजी से समझ सकते हैं इसके अलावा वास्तव में कोई अच्छा मापदंड नहीं है। आप सक्सेस और पठनीयता के बीच सही समझौता पाकर अपने कोड को अच्छा बनाते हैं ।

"डब्ल्यूटीएफ का प्रति मिनट" (ऊपर) सच है लेकिन यह अधिक सामान्य नियम का सिर्फ एक सहसंयोजक है। अधिक डब्ल्यूटीएफ समझ को धीमा कर देता है।


1
@rmx: "काम को अच्छी तरह से करना" परिभाषित करना
mojuba

2
ठीक है, कि RemoveCustomerविधि वास्तव में पेंच के बिना कटर को हटा देती है। आप इसे सुंदर दिखने के लिए घंटों बिता सकते हैं, लेकिन इसका मतलब यह नहीं है कि यह वास्तव में काम करता है। 'आप कितनी जल्दी समझ सकते हैं' कोड 'अच्छे कोड' के लिए एकमात्र मापदंड नहीं है जो मैं कह रहा हूं।
कोई भी

2
@rmx: लेकिन बग मुक्त होना निहित है, है ना? यदि आपका कोड ठीक से काम नहीं करता है, तो यह कोड (अभी तक) नहीं है।
मोजुबा

4
@rmx: वास्तव में, नहीं। यदि आपका कोड समझना आसान है, तो निष्कर्ष में यह समझना आसान है कि क्या यह बुरी तरह से काम करता है। OTOH, यदि इसे समझना कठिन है, तो यह समझना कठिन है कि क्या यह बिल्कुल काम करता है।
पिलमंचर

2
@rmx: PS सीधे शब्दों में कहें, तो आपकी गिरावट () ​​एक शास्त्रीय WTF है और इस प्रकार यह कोड के कुछ हिस्सों की समझ को धीमा कर देता है जहां इस फ़ंक्शन का उपयोग किया जाता है
मोजुबा

5

आपको पता है कि आप कब अच्छा कोड लिखते हैं ...

  1. ग्राहक खुश है
  2. साथी सहकर्मी आपके कोड को शुरुआती बिंदु के रूप में उधार लेते हैं
  3. एकदम नया लड़का / लड़की को सिर्फ 6 महीने पहले आपके द्वारा बनाए गए सिस्टम में संशोधन करने के लिए कहा गया था और उसने कभी आपसे एक सवाल नहीं पूछा
  4. आपका बॉस आपसे टीम के उपयोग के लिए नए विजेट विकसित करने के लिए कहता है
  5. आप अपने द्वारा लिखे गए कोड को देखते हैं और अपने आप से कहते हैं "काश मैंने दो साल पहले जैसा कोड लिखा होता"

आप कैसे उपाय करते हैं कि क्या कोड अच्छा है ...

  • प्रतिक्रिया समय क्या है?
  • सर्वर पर कितने राउंड ट्रिप करता है?
  • क्या आप व्यक्तिगत रूप से एप्लिकेशन का उपयोग करेंगे या क्या आपको लगता है कि यह क्लंकी है?
  • क्या आप इसे अगली बार उसी तरह से बनाएंगे?

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


2
"ग्राहक खुश है" इस के लिए रूढ़िवादी है।

1
@ टीआरए - यदि ग्राहक खुश है, जिसका अर्थ है कि आपने आवश्यकताएं समझी हैं और एक समाधान प्रदान किया है जिसकी उन्हें उम्मीद थी।
माइकल रिले - AKA Gunny

6
यकीन है लेकिन बुरा कोड ही कर सकते हैं।

4

एक कोड जो है

  1. बग मुक्त

  2. पुन: प्रयोज्य

  3. स्वतंत्र

  4. कम जटिल

  5. अच्छी तरह से प्रलेखित

  6. पीछा करना आसान है

अच्छा कोड कहा जाता है।

एक अच्छा कार्यक्रम निर्दोष रूप से काम करता है और इसमें कोई बग नहीं होता है। लेकिन क्या आंतरिक गुण ऐसी पूर्णता का उत्पादन करते हैं? यह कोई रहस्य नहीं है, हमें बस कुछ सामयिक याद दिलाने की आवश्यकता है। चाहे आप C / C ++, C #, Java, बेसिक, पर्ल, COBOL, या ASM में कोड करें, सभी अच्छी प्रोग्रामिंग एक ही समय में सम्मानित गुण प्रदर्शित करते हैं: सादगी, पठनीयता, प्रतिरूपता, परत, डिजाइन, दक्षता, लालित्य और स्पष्टता, लालित्य , और स्पष्टता

स्रोत: MSDN


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

इसे देखें: goo.gl/hdQt8
चन्नी पाठक

2
कोड बग मुक्त हो सकता है?
केसी पैटन

नहीं, यह नहीं हो सकता। (व्यावहारिक रूप से)
चन्नी पाठक

कुशल को आपकी सूची में जोड़ा जाना चाहिए। जरूरी नहीं कि स्पीड अच्छे कोड का प्राथमिक संकेतक हो, लेकिन अच्छा कोड अनावश्यक रूप से धीमा या बेकार नहीं होना चाहिए।
कालेब

3

क्या यह परिचित लगता है?

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

कृपया यहाँ बाकी देखें ।


1
चूँकि @ mlvljr की पोस्ट का लिंक टूटा हुआ है, यहाँ Google पुस्तकें पृष्ठ का लिंक है: books.google.co.in/…
balajeerc

@balajeerc धन्यवाद (मैंने भी लिंक को ठीक किया, इसलिए यह उसी पीडीएफ के स्प्रिंगर-होस्ट किए गए संस्करण की ओर
इशारा करता है

1

प्राकृतिक कोड गुणवत्ता मानदंड (न्यूनतम कॉपी / पेस्ट, कोई स्पेगेटी, आदि) के अलावा एक अच्छा औद्योगिक कोड हमेशा थोड़ा सा भोला, थोड़ा बहुत वर्बोज़, जैसे दिखना चाहिए

int key = i;
const bool do_not_create = false;
Record r = cache.get(key, do_not_create);
++i;

विरोध के रूप में

Record r = cache.get(i++, false);

लेकिन क्या do_not_create = falseइसका मतलब है कि " तर्क के falseरूप में पारित करें do_not_createताकि इसे बनाया जाए" या " तर्क के falseरूप में पारित करें do_createताकि इसे नहीं बनाया जाएगा"? ऐसी भाषा में जहां आप तर्क नामों का उपयोग कर सकते हैं, जिन्हें मैं पसंद करूंगा cache.get (key:i, create: false); i += 1;
PJTraill

1

शायद इसके विपरीत चित्रण से एक उत्तर मदद करेगा (साथ ही यह यहां एक्सकेसीडी प्राप्त करने का एक बहाना है)।

वैकल्पिक शब्द

अच्छा कोड है

  • समझने में सरल,
  • संभालने में आसान,
  • केवल एक ही हाथ में सभी समस्याओं को हल करने की कोशिश नहीं करता है
  • डेवलपर्स के विकल्पों की तलाश किए बिना लंबे समय तक रहता है

उदाहरणों में शामिल

  • अपाचे कॉमन्स
  • वसंत की रूपरेखा
  • सीतनिद्रा में होना

1

मैं बस "बनाए रखने योग्य" के साथ जाऊँगा

सभी कोड को बनाए रखना होगा: उस कार्य को आवश्यक से अधिक कठिन बनाने की आवश्यकता नहीं है

यदि कोई भी पाठक इस साधारण आवश्यकता को नहीं समझता है या इसे वर्तनी की आवश्यकता है, तो उस पाठक को कोड नहीं लिखना चाहिए ...


1

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

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

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


1

कृपया मुझे पठनीयता पर असहमत होने दें। नहीं, पूरी तरह से नहीं: अच्छा कोड पठनीय होना चाहिए, और यह आसानी से पर्याप्त टिप्पणियों के साथ हासिल किया जा सकता है।

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

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

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

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


बिना किसी नियम / नियम के
user2664856

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

@BlueTrin दोनों उन हाई-परफ़ॉर्म सोर्स कोडज़ को ब्रेन-कंपाइल क्यों नहीं करते हैं, और वहाँ जो चल रहा है, उसके नर्क का भी दस्तावेजीकरण करते हैं (वहीं टिप्पणियों में)?
17

1

जहां तक ​​यह मेरे लिए जाता है ... मुझे पता है कि मैं अच्छा कोड लिख रहा हूं जब एक सहकर्मी जो किसी अन्य परियोजना पर काम करता है वह साथ आता है और अंदर कूदने और समझने में सक्षम है कि मेरे बिना क्या कर रहा है कोड के प्रत्येक ब्लॉक पर जा रहा हूं और दिखा रहा है कि यह क्या कर रहा है।
इसके बजाय उन्होंने कहा, "एक मिनट रुको, क्या ?!" वह कह रहा है, "ओह, ठीक है, मैं देखता हूं कि आपने वहां क्या किया।"

अच्छा कोड भी बहुत डरपोक workarounds या 'हैक्स' नहीं है। जब आप इसे लिख रहे हों तो लाइन्स, आप खुद से यह भी कह रहे हैं, "मुझे पता है कि यह इसे करने का एक अच्छा तरीका नहीं है, लेकिन मैं अभी इसे करने जा रहा हूं। बाद में इसे सुधारने के लिए खुद ... "


1

'अच्छा' कोड की बहुत सारी विशेषताएं हैं, लेकिन सबसे महत्वपूर्ण, IMHO, पठनीयता और स्थिरता है।

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

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

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