सुंदर कोड क्या है? [बन्द है]


30

मैं अक्सर पढ़ता हूं कि डेवलपर्स को सुंदर कोड लिखना चाहिए, लेकिन एक शुरुआत के लिए जैसा कि मैं हूं यह अस्पष्ट है कि सुंदर कोड क्या है और आप इसे कैसे पहचानते हैं?

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



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


जवाबों:


55

"सौंदर्य आँख के निर्णय द्वारा खरीदा जाता है"।

मैंने कहा कि मुझे लगता है कि अधिकांश प्रोग्रामर इस बात से सहमत होंगे कि सुंदर कोड स्पष्टता और पारदर्शिता, लालित्य, दक्षता और सौंदर्यशास्त्र के बीच संतुलन प्रदर्शित करता है।

  • स्पष्टता और पारदर्शिता : स्पष्टता यह है कि कोई पाठक कितनी आसानी से कोड क्या कर सकता है। पारदर्शी कोड वही करता है जो उसे लगता है। यदि कोड एक काम करता है, लेकिन वास्तव में कुछ और (या कुछ और) करता है, तो यह पारदर्शी नहीं है - यह भ्रामक है।

  • लालित्य : अधिकांश एल्गोरिदम को लागू करने के कई तरीके हैं, लेकिन कुछ तरीके अनाड़ी हैं जबकि अन्य तरीके साफ और सुंदर हैं। रसीलापन अक्सर लालित्य जोड़ता है, लेकिन अत्यधिक रसीलापन स्पष्टता को कम कर सकता है।

  • दक्षता : संसाधनों के अनावश्यक उपयोग से बचना (जैसे सीपीयू समय, मेमोरी और आई / ओ)।

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


11
एक खूबसूरत व्याख्या, +1
koenmetsu

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

@ जुबत दरअसल - कभी-कभी सबसे कुशल समाधान वास्तव में बहुत बदसूरत कोड की ओर जाता है। (उदा। क्लासिक फास्ट इनवर्स स्क्वायर रूट फंक्शन)
डारेल हॉफमैन

@DarrelHoffman सही, हालाँकि यह समझौता अधिक चर द्वारा भी सही है, जो अच्छे कोड को परिभाषित करता है, न केवल दक्षता और बाकी ("कोड पूरा" में इस का एक अच्छा लंबा विवरण है - दुर्भाग्य से मुझे याद नहीं है कि कौन सा अनुभाग में है पुस्तक, शुरुआत के निकट
शायद-

@ जुबत: मैं मानता हूं कि दक्षता आमतौर पर एक माध्यमिक चिंता है, लेकिन मुझे अभी भी लगता है कि यह सौंदर्य समीकरण में कारक है।
Igby Largeman

20

लोगों को यह सोचने में मूर्ख न करें कि सुंदर कोड निम्नलिखित है:

  • चतुर एल्गोरिदम
  • डरपोक भाषा सुविधाएँ
  • कम से कम कुंजी स्ट्रोक की समस्या को हल करना

क्योंकि यह नहीं है। ऐसा कोड प्यारा है , और यह निश्चित रूप से एक नज़र के लायक है, लेकिन यह उस तरह का कोड नहीं है जिसके साथ आप बसना चाहते हैं।

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

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


तो सुंदर कोड क्या है ?

सुंदर कोड = अनुरक्षण कोड। बस!
यह सूत्र है!

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

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


4
आपके द्वारा उठाए जाने वाले मुद्दों से निपटने के लिए c2.com/cgi/wiki?KillYourDarlings
jk

4

इस पर मेरा कहना है कि "सुंदर कोड" एक उद्देश्य या विशेष रूप से उपयोगी शब्द नहीं है। और हमें इसे परिभाषित करने की कोशिश नहीं करनी चाहिए।


अंग्रेजी शब्द "ब्यूटी" की विशिष्ट शब्दकोष परिभाषाएं इस प्रकार हैं:

  • 1. "किसी व्यक्ति या चीज़ के सभी गुणों का संयोजन जो इंद्रियों को प्रसन्न करता है और मन को प्रसन्न करता है"
  • 1. "किसी व्यक्ति या चीज़ में मौजूद गुण जो गहन सौंदर्य सुख या मन या इंद्रियों को गहरी संतुष्टि देता है।"
  • 1. "वह गुण जो मन या इंद्रियों को आनंद देता है और रूप या रंग के सामंजस्य, कलात्मकता की उत्कृष्टता, सच्चाई और मौलिकता जैसे गुणों से जुड़ा होता है।"

(स्रोत http://dEDIA.com )

सामान्य सूत्र यह है कि "सौंदर्य" इस बारे में है कि सौंदर्यशास्त्र क्या है। यह आवश्यक रूप से व्यक्तिपरक है ... जैसा कि "सौंदर्य देखने वाले की आंखों में है" कहकर सचित्र है।


हम कोड के लिए "सौंदर्य" शब्द लागू कर सकते हैं, और स्पष्ट अर्थ यह है कि कोड "सौंदर्यवादी रूप से मनभावन" है।

लेकिन फिर यह कहना कि "सुंदर कोड" में विशेषताओं का एक निश्चित सेट है (जैसा कि अन्य उत्तरों द्वारा सुझाया गया है) सौंदर्यवादी मनभावन के स्पष्ट अर्थ का विरोधाभास है । सौंदर्यशास्त्र के बारे में है कि कैसे लोग ... व्यक्तिगत लोग ... चीजों को महसूस करते हैं।

या दूसरे शब्दों में कहें करने के लिए, वहाँ कुछ है प्रतिकूल कोई मुझे बता रहा है कि मैं क्या सोचना चाहिए सुंदर है के बारे में, यह लोगों में हो, कला का काम करता है, या ... कोड।

जहां तक ​​मेरा संबंध है सुंदर कोड वह कोड है जो मुझे लगता है कि सुंदर है, और वह यह है। यह व्यक्तिपरक और व्यक्तिगत है, और इसे उस पर छोड़ देता है।


2

यहाँ मेरी सलाह है।

उत्तरों के माध्यम से देखें कि आप गैर-प्रोग्रामर को "सुंदर कोड" कैसे समझा सकते हैं? और देखें कि वे किन विशेषताओं पर ध्यान केंद्रित करने के लिए कहते हैं। फिर कोड कंप्लीट जैसी किताब उठाएं और बेहतर कोड लिखने के बारे में सलाह जानने के लिए इसे पढ़ें।

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


1

सिर्फ इसलिए कि आप अक्सर सुंदर कोड के बारे में पढ़ते हैं इसका मतलब यह नहीं है कि जो लोग इसके बारे में लिखते हैं उनकी परिभाषा समान है। अफसोस की बात है कि आपके सवाल को देखकर ऐसा नहीं लगता कि उन्होंने इसे पहली जगह पर परिभाषित करने की जहमत उठाई थी।

मेरे लिए सुंदर कोड है:

  • अर्थपूर्ण
  • संक्षिप्त

संक्षिप्त कोड जो अभिव्यंजक नहीं है, वह गूढ़ हो सकता है, और अभिव्यंजक कोड जो संक्षिप्त नहीं है पढ़ने के लिए फूला हुआ और थकाऊ होता है, इसलिए आपको दोनों की आवश्यकता है।

मैं कोड को सुंदर बनाने वाले हिस्से के रूप में रखरखाव को शामिल नहीं करूंगा, क्योंकि सुंदरता ऐसी चीज है जिसे आप देखते हैं / पढ़ते हैं, न कि आप जिस पर कार्य करते हैं। लेकिन फिर से यह मेरा निजी विचार है।


0

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

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

पॉइंट सिर्फ इतना है कि संख्या कम होने पर कोड कवरेज वास्तव में सार्थक है। तो इसे कम मत होने दो। जब कवरेज एक निश्चित बिंदु तक बढ़ जाता है, तो कुछ और पर जाएं।

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

लेकिन अगर आपका कोड फ़गली है, अगर इसकी विशाल स्पैगेटी कोड की गड़बड़ है, अगर यह शारीरिक रूप से आपको फ़ाइल खोलने के लिए परेशान करता है, अगर आपके पास कोई टिप्पणी या प्रलेखन आदि आदि नहीं है, तो इसे ठीक करें। और इसे asap करें।

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

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


0

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

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

तो उस दृष्टिकोण से, अपने करियर में एक प्रोग्रामर के रूप में आप सुंदर कोड की खोज कर सकते हैं, दूसरों को न तो समझ में आ सकता है क्योंकि उनके पास ज्ञान की कमी है या वे अब और उल्लेखनीय नहीं पा सकते हैं क्योंकि वे बहुत अधिक सुंदरता से खराब हो गए हैं;)

सुंदर कोड में सभी व्यावहारिक गुण हैं जैसा कि अन्यथा उल्लेख किया गया है, मैं पूरी तरह से सहमत हूं।


0

मेरे पास तीन मापदंड हैं:

  • सरल: कम से कम यह मानव पठनीय होना चाहिए। उदाहरण के लिए, आप टन के साथ समाधान के लिए O (1) पर काम करने वाला कोड लिख सकते हैं, लेकिन मैं ऐसा कोड पसंद करता हूं जो 0 (n) कुछ पंक्तियों के साथ काम करता हो। यह चरम स्थितियों के लिए बदल सकता है लेकिन शुरुआत के लिए सादगी महत्वपूर्ण है।
  • पुन: प्रयोज्य: कोड पुन: प्रयोज्य होना चाहिए, लेकिन अधिलेखित नहीं। यदि आपको एक ऑपरेशन की आवश्यकता है, तो आपको इसे इस तरह परिभाषित करना चाहिए कि आप इसे वर्षों बाद उपयोग कर सकते हैं।
  • संकेत: शायद यह आपके लिए कोई समस्या नहीं है, लेकिन शुरुआती स्तर के लिए, यह पहली बात है जिसे हल किया जाना चाहिए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.