क्या सादगी हमेशा पठनीयता में सुधार करती है?
मैं कहूंगा, शायद थोड़ा विवाद के साथ, बिल्कुल नहीं ।
आप मुझे इसके सार्वजनिक इंटरफ़ेस में 200 सदस्य कार्यों के साथ एक वर्ग सौंप सकते हैं, और यह सबसे मानवीय रूप से पठनीय सार्वजनिक इंटरफ़ेस हो सकता है। यह इस तरह के कोड और इसके प्रलेखन के माध्यम से बस आकस्मिक रूप से पढ़ने के लिए एक खुशी हो सकती है। हालाँकि, मैं इसे "सरल" नहीं कहूंगा, क्योंकि पठनीयता के बावजूद, मुझे इस बात से चिंतित होना होगा कि ये सभी कार्य एक-दूसरे के साथ कैसे तालमेल बिठाते हैं, और संभावित रूप से दुरुपयोग से उत्पन्न होने वाले ट्रिक एज मामलों को देखते हैं।
मैं २० सदस्य कार्यों के साथ एक वर्ग को पसंद करूंगा जो २०० तक पढ़ना आसान नहीं था, क्योंकि मानव त्रुटि को रोकने और कोड की स्थिरता में सुधार करने के मामले में "पठनीयता" मेरे लिए सर्वोच्च प्राथमिकता नहीं है (जिस पर आसानी से हम इसे बदल सकते हैं, अर्थात)।
हालांकि, यह सब "सादगी" की हमारी व्यक्तिगत परिभाषा पर टिका है। "पठनीयता" आम तौर पर हमारे बीच बेतहाशा भिन्न नहीं होती है , जब तक कि किसी ने इतनी विशेषज्ञता और प्रवाह हासिल नहीं किया है कि वे regex को बहुत "पठनीय" मानते हैं, उदाहरण के लिए, हम में से बाकी को भूल जाते हैं।
सादगी
एक समय था, बहुत पहले, जहां मुझे लगा कि "सरलता" का मतलब "जितना संभव हो उतना आसान पढ़ना" है। इसलिए मैं बहुत सी सुविधा कार्यों के साथ सी कोड लिखूंगा, वाक्यविन्यास को बेहतर बनाने और चीजों को पढ़ने और लिखने में आसान बनाने की कोशिश करूंगा।
मैंने बहुत बड़ी, समृद्ध, उच्च-स्तरीय पुस्तकालयों को डिजाइन किया, परिणामस्वरूप, प्रत्येक प्राकृतिक मानव विचार के लिए एक फ़ंक्शन को मॉडल करने की कोशिश कर रहा था: हेल्पर्स पर हेल्पर्स, सभी को क्लाइंट कोड को अधिक पठनीय वाक्यविन्यास को आकार देने के लिए। मैंने जो कोड वापस लिखा था, वह शायद सबसे अधिक "पठनीय" था, फिर भी यह सबसे "अप्राप्य" और "जटिल" था।
तुतलाना
फिर भी मुझे 90 के दशक के मध्य के अंत में LISP के साथ एक संक्षिप्त जुनून था (स्वर्गीय)। इसने मेरे "सादगी" के पूरे विचार को बदल दिया।
लिस्प है नहीं सबसे पठनीय भाषा। उम्मीद है कि कोई भी यह नहीं सोचता कि नेस्टेड कोष्ठक के बोटलोड के साथ एक पुनरावर्ती कार्य को आमंत्रित करते समय सीडीआर और सीएआर को निकालना बहुत "पठनीय" है।
फिर भी, मेरे दिमाग को भाषा के विषम सिंटैक्स के चारों ओर लपेटने के लिए संघर्ष करने और चीजों को करने के पूरी तरह से पुनरावर्ती तरीके के बाद, इसने स्थायी रूप से मेरी सादगी के विचार को बदल दिया।
मुझे LISP में लिखे कोड के साथ जो मिला है वह यह है कि मैं अब सूक्ष्म त्रुटियां नहीं कर रहा था, भले ही इस तरह से सोचने की चालाकी से मुझे और अधिक गंभीर गलतियाँ मिल रही थीं (लेकिन वे हाजिर और सही होने में आसान हैं)। मुझे यह गलतफहमी नहीं थी कि एक फ़ंक्शन क्या कर रहा था और एक सूक्ष्म, अप्रत्याशित साइड इफेक्ट से गायब था। मैं सामान्य बदलाव करने और सही कार्यक्रम लिखने में बस एक आसान समय था।
LISP के बाद, मेरे लिए सादगी अतिसूक्ष्मवाद, समरूपता, लचीलापन, कम दुष्प्रभाव, कम लेकिन अधिक लचीले कार्यों के बारे में बन गई जो एक साथ कई तरह के अनंत तरीके से संयोजित होते हैं।
मैं मानसिकता की सराहना करने के लिए आया था कि सभी का सबसे विश्वसनीय कोड कोड है जो मौजूद नहीं है। हालांकि यह केवल एक कच्चा मीट्रिक है, मैं इसकी मात्रा के आधार पर कोड की अविश्वसनीयता के लिए क्षमता देख सकता हूं। अत्यंत संश्लिष्ट सुविधा और पठनीयता की तलाश एक बड़े कारक द्वारा उस मात्रा को बढ़ाती है।
अतिसूक्ष्मवाद
एलआईएसपी मानसिकता मुझ में अंतर्निहित है, मैं न्यूनतम एपीआई पसंद करना चाहता था। मैं कम लेकिन अधिक विश्वसनीय, लचीले कार्यों के साथ एक पुस्तकालय पसंद करता हूं, जो कि कम सुविधाजनक और संभावित रूप से पढ़ने में कठिन हो, जो "सुविधाजनक" सहायकों की नाव लोड हो और जो कोड को "पढ़ने" के लिए आसान बना सके, लेकिन संभावित यात्रा अविश्वसनीयता और आश्चर्य के साथ अधिक मुद्दे जो गलतफहमी से उत्पन्न होते हैं जो इन हजारों कार्यों में से एक है।
सुरक्षा
LISP के बारे में एक और बात सुरक्षा थी। इसने न्यूनतम साइड इफेक्ट्स और शुद्ध कार्यों को बढ़ावा दिया, और यही वह जगह थी जहाँ मैंने अब खुद को सूक्ष्म गलतियाँ करते हुए नहीं देखा, भले ही भाषा को पढ़ने और लिखने की कठिनाई ने अधिक गंभीर गलतियों को बढ़ाया लेकिन मैं 10 सेकंड बाद हाजिर हो सका।
शुद्ध कार्य और अपरिवर्तनीय स्थिति मेरे लिए बेहतर हो गई जब भी मैं इसे वहन कर सकता था, भले ही इसका सिंटैक्स:
sword = sharpen(sword)
... मानव सोच से थोड़ा कम सीधा और अलग है:
sharpen(sword)
पठनीयता वी.एस. सादगी
फिर भी, LISP सबसे "पठनीय" भाषा नहीं है। यह कोड के एक छोटे खंड में बहुत सारे तर्क पैक कर सकता है (संभवतः प्रति पंक्ति एक से अधिक मानव विचार)। मैं आदर्श रूप से "पठनीयता" के लिए प्रति पंक्ति एक मानव विचार को प्राथमिकता देता हूं, लेकिन "सादगी" के लिए यह जरूरी नहीं है।
"सरल" की इस तरह की परिभाषा के साथ, कभी-कभी "सरल" वास्तव में "पठनीय" के साथ प्रतिस्पर्धा कर सकता है। यह एक इंटरफेस डिजाइन के दृष्टिकोण से अधिक चीजों पर विचार कर रहा है।
एक सरल इंटरफ़ेस का मतलब है कि आपको इसका उपयोग करने के लिए बहुत कम चीजें सीखने की आवश्यकता है, और संभवतः इसकी विश्वसनीयता के परिणामस्वरूप अधिक विश्वसनीयता और कम गोचर्स हैं। विषय पर एक व्यापक प्रलेखन पुस्तकों की एक विशाल मात्रा के बजाय एक पुस्तिका में फिट हो सकता है। फिर भी, इसमें कुछ और ग्रंट-वर्क की आवश्यकता हो सकती है और कम पठनीय कोड प्राप्त हो सकते हैं।
मेरे लिए "सरल" हमारे सिस्टम में व्यापक स्तर पर कार्यक्षमता को समझने की हमारी क्षमता में सुधार करता है। मुझे "पठनीय" कोड की प्रत्येक छोटी लाइन को प्राकृतिक भाषा और विचार से जोड़ने की हमारी क्षमता में सुधार करता है और कोड की एक पंक्ति क्या करती है, इस बारे में हमारी समझ को गति दे सकती है, खासकर अगर हम भाषा में धाराप्रवाह नहीं हैं।
रेगेक्स एक उदाहरण है जिसे मैं "अत्यंत सरल" मानता हूं। यह मेरे व्यक्तिगत स्वाद के लिए "बहुत सरल और बहुत ही अपठनीय" है। इन चरम सीमाओं के बीच मेरे लिए एक संतुलनकारी कार्य है, फिर भी रेगेक्स में सरलता का LISP जैसा गुण है जैसा कि मैं इसे परिभाषित करता हूं: अतिसूक्ष्मवाद, समरूपता, अविश्वसनीय लचीलापन, विश्वसनीयता, आदि। मेरे लिए regex की समस्या इतनी सरल है कि यह उस बिंदु के लिए इतना अपठनीय हो गया है जहाँ मुझे नहीं लगता कि मैं कभी इस पर धाराप्रवाह बनूँगा (मेरा दिमाग इस तरह से काम नहीं करता है और मैं ऐसे लोगों से ईर्ष्या करता हूँ जो धाराप्रवाह कोड लिख सकते हैं)।
तो वैसे भी, यह "सादगी" की मेरी परिभाषा है, और यह "पठनीयता" से पूरी तरह से स्वतंत्र है और कभी-कभी दूसरे के साथ हस्तक्षेप भी कर सकता है, जिसके कारण अधिक "वाक्य-निर्माण के लिए सुविधाजनक" और पठनीय लेकिन बड़े पुस्तकालय या "वाक्य-रचना" के बीच संतुलन बनाने वाला कार्य होता है। असुविधाजनक ", कम पठनीय, फिर भी छोटा पुस्तकालय। मैंने हमेशा "समझने की सुविधा" और सच्ची "स्थिरता" प्राथमिकताओं को उत्तरार्द्ध के साथ संरेखित करने के लिए प्राथमिकता दी है, पठनीयता और अधिक प्राकृतिक मानव वाक्य रचना के लिए कुछ लागत पर भी न्यूनतम वरीयता के लिए मजबूत वरीयता के साथ (लेकिन रेगेक्स के बिंदु तक नहीं) । YMMV।