Clean Code जैसी कोई चीज़ नहीं होती
(steveonstuff.com)- लोग 'clean' code के लिए कोशिश करते हैं, लेकिन 'clean' कोई उपयोगी मापदंड नहीं है
- code बस 'clean' नहीं हो सकता, क्योंकि 'clean' code के बारे में वास्तव में कुछ भी नहीं बताता
- जब लोग किसी code को clean कहते हैं, तो आमतौर पर उसका मतलब यह होता है कि वह किसी न किसी रूप में उत्कृष्ट है
क्या clean code वास्तव में good code है?
-
code कई कारणों से उत्कृष्ट हो सकता है
→ पढ़ने में आसान, समझने में आसान, सरल, high-performance, सुरक्षित, elegant, testable, encapsulated, extensible, maintainable, reusable.. -
लेकिन ये गुण कुछ मामलों में एक-दूसरे से टकराते हैं
→ सबसे सरल code शायद सबसे आसान testable नहीं होगा
→ interfaces और injected dependencies testing को आसान बनाते हैं, लेकिन वे simplicity से दूर ले जाते हैं
→ singleton का ज़्यादा उपयोग समझना आसान बना सकता है, लेकिन application maintainable हो यह ज़रूरी नहीं -
इनमें से कुछ चीज़ें मूल रूप से एक-दूसरे के विपरीत होती हैं, इसलिए सबको एक साथ पूरा करना मुश्किल हो सकता है
→ engineering trade-off (समझौते) के बारे में है, इसलिए यहां जिन trade-off की बात हो रही है उन पर टीम में चर्चा की जा सकती है
अगर code उत्कृष्ट है, तो हमें "क्यों" बताना चाहिए
- जब कोई कहता है कि कोई solution 'clean' है, तो अक्सर वह उसके कारण को तर्कसंगत रूप से समझा नहीं पाता और बस उसे बेहतर विकल्प कह देता है
- technical solutions पर रचनात्मक चर्चा करने के लिए यह साफ़-साफ़ समझा पाना ज़रूरी है कि एक solution दूसरे से बेहतर क्यों है
→ सिर्फ 'clean' कहने के बजाय 'decoupled है, समझने में आसान है, test करना आसान है..'
सटीक शब्दावली का उपयोग करना चाहिए
- coding आमतौर पर एक team sport है। अकेले hacking करते समय आप जैसा चाहें कर सकते हैं, लेकिन टीम के साथ काम करते समय ideas पर चर्चा करनी पड़ती है
- किसी technical solution पर चर्चा करने के लिए एक खास भाषा का उपयोग करना, और पूरी टीम का साझा समझ तक पहुँचना, एक-दूसरे को समझने के लिए बहुत महत्वपूर्ण है
- 'clean code' का मतलब हर व्यक्ति के लिए अलग होता है
→ किसी के लिए architecture अच्छी तरह defined है, तो किसी के लिए code consistent formatting style के साथ सरलता से लिखा गया है.. - 'encapsulated', 'testable', 'reusable' जैसे शब्दों के अर्थ ऐसे हैं जिन पर हम सब सहमत होते हैं
- जब हम code की विशेषताओं का वर्णन करने के लिए अधिक विशिष्ट शब्दों का उपयोग करते हैं, तो हमें यक़ीन होता है कि हम सभी same page पर हैं
- 'clean' की सटीकता लगभग 'अच्छा' जितनी ही है
तो फिर 'clean code' क्या है?
-
जब मैं किसी code को 'clean' कहकर वर्णित करता हूँ, तो अक्सर मैं इस निष्कर्ष पर पहुँचता हूँ कि 'code अच्छा तो है, लेकिन अक्सर मैं पूरी तरह आश्वस्त नहीं होता कि क्यों'
→ या फिर मुझे पता होता है कि code अच्छा क्यों है, लेकिन उसे साफ़ तौर पर समझाने वाला उपयुक्त शब्द नहीं मिल रहा होता -
ऐसी intuition विकसित करना अच्छी बात है, लेकिन वहीं रुकना नहीं चाहिए। हमें और गहराई में जाकर यह समझने की कोशिश करनी चाहिए कि 'यह code अच्छा क्यों है'
→ क्या इस code में कोई ऐसी विशेषता है जो दूसरों में नहीं है? और क्या वही विशेषता हमारे project के लिए सबसे उपयुक्त है? संभव है कि वही सही solution न हो -
उम्मीद है कि हमें यह विश्वास हो सके कि हमें clean code नहीं, बल्कि ______ code चाहिए
6 टिप्पणियां
अच्छे लेख के लिए धन्यवाद ~~
legacy code को यूँ ही लात मत मारो
क्या तुमने कभी किसी के लिए पहली requirement भी पूरी की है?
सहमत हूँ।
मुझे लगता है कि 'उस किताब' में लेखक जिस clean code की बात करता है, उसका फोकस इनमें से 'समझने में आसान' और 'testable' पर था। बेशक, मुझे लगता है कि दोनों ही बहुत महत्वपूर्ण मापदंड हैं। लेकिन अभी तक मानकीकृत न हुए specs या अधूरी libraries की वजह से कई बार तथाकथित 'hack' इस्तेमाल करना पड़ता है, और इस तरह प्रोग्राम की quality के लिए code की quality से समझौता करना कुछ हद तक अनिवार्य लगता है.
मैं सहमत हूँ। जब हम “clean” को “उच्च गुणवत्ता” के रूप में देखते हैं, तो (जैसा कि Weinberg ने कहा) गुणवत्ता किसी के लिए मूल्यवान किसी चीज़ को दर्शाती है, इसलिए मुझे लगता है कि गुणवत्ता के मानक और उसकी परिभाषा टीम के भीतर होना ज़रूरी है।
यह लेख तर्क देता है कि अस्पष्ट रूप से 'Clean Code' कहने के बजाय बात को स्पष्ट और सटीक तरीके से कहना चाहिए।
इस बारे में Hacker News पर भी 'Clean Code' की व्याख्या को लेकर तरह-तरह की बातें हैं। टिप्पणियाँ भी साथ में देखें
There’s No Such Thing as Clean Code https://news.ycombinator.com/item?id=30111516
विषय थोड़ा अलग है, लेकिन पहले पोस्ट किया गया नीचे का लेख भी देखें