A Longitudinal Study of Dependency Reclassifications in JavaScript Projects
यह शोध पत्र 33,087 जावास्क्रिप्ट परियोजनाओं के एक अनुदैर्ध्य अध्ययन को प्रस्तुत करता है जो यह प्रकट करता है कि निर्भरता पुनर्वर्गीकरण, जिसमें हटाना और भूमिका का पुनर्रचना शामिल है, एक प्रचलित और अक्सर पुनरावृत्ति वाली रखरखाव गतिविधि है जो लंबी अवधि में चलती है, जो सही निर्भरता घोषणाओं का समर्थन करने के लिए बेहतर टूलिंग और अनुसंधान की आवश्यकता को रेखांकित करती है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक विशाल, निरंतर बदलता हुआ लेगो (Lego) किला बना रहे हैं। अपने किले को शानदार बनाने के लिए, आपको दूसरे लोगों के सेट्स से कुछ टुकड़े उधार लेने होंगे। सॉफ्टवेयर की दुनिया में (विशेष रूप से जावास्क्रिप्ट में), ये उधार लिए गए टुकड़े डिपेंडेंसीज़ (dependencies) कहलाते हैं।
हर बार जब आप एक टुकड़ा जोड़ते हैं, तो आपको उसे एक "खरीद सूची" (जिसे package.json कहा जाता है) में लिखना होता है। लेकिन पेचीदा बात यह है कि आपको यह तय करना होगा कि वह किस तरह का टुकड़ा है।
- कोर (Core): एक ऐसा टुकड़ा जो किले के खड़े होने और सही ढंग से काम करने के लिए अनिवार्य है (जैसे कि नींव)।
- डेव (Dev): एक ऐसा टुकड़ा जिसकी आपको केवल किला बनाते समय आवश्यकता होती है (जैसे कि हथौड़ा या पैमाना), लेकिन किला बनकर तैयार होने के बाद आपको इसकी ज़रूरत नहीं होती।
- पियर (Peer): एक ऐसा टुकड़ा जिसे आप सोचते हैं कि किले के मालिक को खुद ही लाना चाहिए, ताकि आपको उसे ढोना न पड़े।
समस्या: "ओह, मैंने गलत बैग पैक कर दिया" वाला क्षण
लंबे समय तक, शोधकर्ताओं ने सोचा कि डेवलपर्स बस नए टुकड़े जोड़ रहे हैं या पुराने टुकड़ों को नए वर्ज़न में अपडेट कर रहे हैं। उन्होंने माना कि एक बार जब आपने "नींव" वाले बैग में एक टुकड़ा डाल दिया, तो वह हमेशा के लिए वहीं रहेगा।
लेकिन यह पेपर कहता है: नहीं! डेवलपर्स लगातार अपने बैगों को फिर से पैक कर रहे हैं।
लेखकों ने 33,000 से अधिक सॉफ्टवेयर प्रोजेक्ट्स (जैसे लेगो किलों की एक विशाल लाइब्रेरी) को देखा और देखा कि कैसे डेवलपर्स समय के साथ अपनी खरीदारी सूचियों को बदलते हैं। उन्होंने पाया कि डेवलपर्स लगातार यह महसूस कर रहे हैं, "रुको, मुझे इस किले के लिए इस हथौड़े की ज़रूरत नहीं है," या "ओह नहीं, मैं एक ज़रूरी ईंट लाना भूल गया!"
डेवलपर्स द्वारा "रीपैकिंग" करने के तीन मुख्य तरीके
अध्ययन में पाया गया कि डेवलपर्स अपनी सूचियों को ठीक करने के लिए तीन मुख्य चीजें करते हैं:
1. "पर्ज" (हटाना/Removal)
कभी-कभी, एक टुकड़ा बस बेकार होता है।
- उपमा: आपको एहसास होता है कि आपने समुद्र तट की छुट्टी के लिए बर्फ हटाने वाला फावड़ा (snow shovel) पैक कर लिया है। आप उसे निकाल देते हैं।
- निष्कर्ष: यह 97% प्रोजेक्ट्स में होता है। लेकिन यहाँ एक ट्विस्ट है: 33% बार वे इसे निकालते हैं, फिर महसूस करते हैं कि उन्हें वास्तव में इसकी ज़रूरत है, और बाद में इसे वापस रख देते हैं! यह वैसा ही है जैसे फावड़ा पैक करना, फिर महसूस करना कि बर्फ वाले दिन इसकी ज़रूरत पड़ेगी, और फिर से उसे पैक करना।
2. "रोल स्वैप" (भूमिका बदलना/Reassignment)
कभी-कभी, एक टुकड़ा गलत बैग में होता है।
- उपमा: आपने अपना "निर्माण वाला हथौड़ा" "अंतिम किले" वाले बैग में रख दिया। आपको एहसास होता है, "हे, यह केवल निर्माण के लिए है, रहने के लिए नहीं!" इसलिए, आप उसे फाउंडेशन (नींव) वाले बैग से निकालकर कंस्ट्रक्शन टूल्स (निर्माण उपकरण) वाले बैग में डाल देते हैं।
- निष्कर्ष: यह 38% प्रोजेक्ट्स में होता है। यह "म्यूजिकल चेयर्स" का एक निरंतर खेल है जहाँ उपकरण "प्रोडक्शन" (असली चीज़) और "डेवलपमेंट" (वर्कशॉप) के बीच घूमते रहते हैं।
3. "फेंस जंपर" (पियर से कोर बनना/Peer to Core)
कभी-कभी, आप मेहमान को कहते हैं, "अपनी कुर्सी खुद लाएं," लेकिन फिर आप महसूस करते हैं, "दरअसल, मैं तुम्हारे लिए एक कुर्सी खरीद लेता हूँ ताकि तुम्हें इसे ढोना न पड़े।"
- उपमा: आप मेहमान को अपनी चीज़ें लाने के लिए कहने के बजाय, खुद एक कुर्सी खरीदने का फैसला करते हैं (Core)।
- निष्कर्ष: यह अक्सर होता है क्योंकि मेहमानों को अपनी चीज़ें खुद लाने के लिए कहना भ्रमित करने वाला और त्रुटिपूर्ण हो सकता है।
"ऑसिलेशन" (झूला/The Rollercoaster)
सबसे दिलचस्प निष्कर्ष यह है कि यह एक बार में होने वाला सुधार नहीं है।
- उपमा: कल्पना कीजिए कि आप एक टूल को "वर्कशॉप" से "लिविंग रूम" में ले जाते हैं। फिर, दो सप्ताह बाद, आप उसे वापस ले आते हैं। फिर, एक महीने बाद, आप उसे "गैरेज" में ले जाते हैं।
- निष्कर्ष: लगभग 11% मामलों में, डेवलपर्स एक डिपेंडेंसी को भूमिकाओं के बीच बार-बार इधर-उधर घुमाते रहते हैं। यह एक पेंडुलम की तरह झूलता रहता है जब तक कि वे अंततः यह तय नहीं कर लेते कि यह कहाँ belongs करता है।
बड़ी हैरानी: इसमें बहुत समय लगता है!
आप सोच सकते हैं, "अगर मैंने गलती की, तो मैं उसे तुरंत ठीक कर दूँगा।"
- वास्तविकता: नहीं। अध्ययन में पाया गया कि भूमिका की गलती को ठीक करने का मीडियन समय (median time) 408 दिन (एक साल से भी अधिक!) है।
- उपमा: यह वैसा ही है जैसे आपको एहसास हो कि आपने यात्रा के लिए गलत जूते पैक किए हैं, लेकिन आप एक पूरे साल तक उन्हें पहनकर चलने के बाद ही उन्हें बदलते हैं। डेवलपर्स अक्सर इन गलतियों को लंबे समय तक ऐसे ही रहने देते हैं।
आपको इससे क्यों फर्क पड़ना चाहिए?
यह महत्वपूर्ण है क्योंकि:
- ब्लोट (Bloat/भारीपन): यदि आप अपने "अंतिम किले" के बैग में "निर्माण के हथौड़े" रखते रहते हैं, तो आपका किला ज़रूरत से ज़्यादा भारी और धीमा हो जाएगा।
- सुरक्षा (Security): यदि आप किसी टूल को गलत बैग में छोड़ देते हैं, तो हैकर्स उस टूल के ज़रिए अंदर आने का रास्ता खोज सकते हैं।
- भ्रम (Confusion): यदि आप मेहमान को कुर्सी लाने के लिए कहते हैं, लेकिन फिर आप एक कुर्सी खरीद लेते हैं, तो मेहमान भ्रमित हो सकता है—या तो वह दो कुर्सियाँ लेकर आएगा, या एक भी नहीं।
मुख्य सीख (The Takeaway)
सॉफ्टवेयर कोई स्थिर इमारत नहीं है; यह एक जीवित, सांस लेता हुआ जीव है जो लगातार अपनी याददाश्त को एडिट करता है। डेवलपर्स लगातार अपनी सूचियों को देख रहे होते हैं और कह रहे होते हैं, "रुको, यह यहाँ नहीं होना चाहिए," या "दरअसल, हमें इसकी ज़रूरत वापस है।"
लेखक सुझाव देते हैं कि हमारे टूल्स (वह सॉफ्टवेयर जो हमें बनाने में मदद करता है) बहुत कम बुद्धिमान हैं। वे केवल वर्तमान सूची को देखते हैं। उन्हें स्मार्ट बनने की ज़रूरत है और कहना चाहिए, "हे, आपने पिछले एक साल में इस टूल को तीन बार बदला है। क्या आप सुनिश्चित हैं कि यह यहाँ होना चाहिए?"
संक्षेप में: सॉफ्टवेयर डिपेंडेंसीज़ को मैनेज करना घर बनाने जैसा कम और अपने बिखरे हुए गैरेज को लगातार व्यवस्थित करने जैसा अधिक है—यह महसूस करना कि आपने सर्दियों के कोट गर्मियों के शेड में रख दिए हैं, और अंततः उन्हें सही जगह पर ले जाना।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।