गलत abstraction की बजाय duplication को प्राथमिकता दें (2016)
बहस का दायरा: Duplication बनाम Abstraction
- कई लोग मूल विचार से सहमत हैं: समय से पहले की गई, या “गलत” abstractions, छोटी-सी स्थानीय duplication से भी ज़्यादा नुकसानदेह हो सकती हैं।
- कुछ लोग यह आपत्ति उठाते हैं कि बड़े पैमाने की duplication catastrophic बन सकती है, खासकर लंबे समय तक चलने वाले, multi-customer या multi-team systems में।
- कई लोगों का तर्क है कि यह slogan अक्सर गलत समझा जाता है; इसका मतलब time से पहले या संयोगवश abstractions से बचना है, न कि हमेशा के लिए copy-paste करने का लाइसेंस।
Duplication कब उपयोगी है
- दोहराई गई implementations सही abstraction खोजने का एक tool हो सकती हैं: “इसे दो या तीन बार लिखो, फिर refactor करो” (rule of three / WET)।
- शुरुआती चरण में duplication को सस्ता और सुरक्षित माना जाता है, खासकर जब business requirements और domain boundaries अभी स्पष्ट नहीं हैं।
- कुछ लोग कई flags और conditionals वाली brittle “god abstraction” की बजाय isolated, थोड़ी duplicated flows पसंद करते हैं।
Abstractions कब गलत हो जाती हैं
- उदाहरण: over-generic frameworks, forced polymorphism, microservice “distributed monoliths,” Redux-heavy frontends, और DRY को चरम तक ले जाना।
- गलत abstractions आम तौर पर:
- वास्तविक साझा concepts की बजाय accidental similarities को encode करती हैं।
- छिपी हुई coupling फैलाती हैं, जिससे हर बदलाव जोखिम भरा और global हो जाता है।
- boolean/config parameters और complex call chains जमा करती हैं।
- कुछ लोग मानते हैं कि “de minimis” scale से आगे फैली व्यापक duplication से बेहतर कोई भी maintainable abstraction है; जबकि कुछ इससे strongly असहमत हैं।
Heuristics और Thumb Rules
- आम heuristics:
- एक occurrence के बाद abstract न करें; दो के बाद विचार करें; तीन के बाद कार्रवाई करें, अगर वे वास्तव में एक ही concept का प्रतिनिधित्व करते हों और उन्हीं कारणों से बदलते हों।
- ऐसी abstractions को प्राथमिकता दें जो अपनी interface से ही स्पष्ट और self-justifying हों, केवल callers के ज्ञान पर निर्भर न हों।
- गहरे, centralized “clever” frameworks की बजाय loose coupling और simple support libraries को तरजीह दें।
- भविष्य में replacement को आसान बनाने के लिए abstract करें, speculative reuse के लिए नहीं।
LLMs और Cost Curve
- कुछ लोग कहते हैं कि LLMs duplication को बनाना और refactor करना सस्ता कर देते हैं, जिससे tradeoff सरल, अधिक duplicated code की ओर झुक सकता है।
- कुछ अन्य लोगों का अनुभव है कि LLMs और अधिक duplication लाते हैं और refactoring के दौरान सभी instances को मिस कर सकते हैं, इसलिए abstractions फिर भी महत्वपूर्ण हैं।
- सामान्य दृष्टिकोण: AI economics बदलता है, लेकिन abstraction बनाम duplication के बारे में सोचने की ज़रूरत खत्म नहीं करता।