पेअर प्रोग्रामिंग

पेअर प्रोग्रामिंग एक सॉफ्टवेयर डेवलपमेंट तकनीक है जिसमें दो कंप्यूटर प्रोग्रामर एक वर्कस्टेशन पर एक साथ काम करते हैं। एक, ड्राइवर, कोड लिखता है जबकि दूसरा, पर्यवेक्षक या नेविगेटर, कोड टाइप करते समय कोड की प्रत्येक पंक्ति की समीक्षा करता है। दोनों प्रोग्रामर बार-बार भूमिकाएँ बदलते हैं।

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

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

ग़लतियाँ होने पर उन्हें रोकने के अलावा, अन्य अमूर्त लाभ भी निहित हो सकते हैं। उदाहरण के लिए, एक साथ काम करते समय फोन कॉल या अन्य विकर्षणों को अस्वीकार करने का शिष्टाचार, सहमत अंतराल पर कम विराम लेना, या फोन कॉल का जवाब देने के लिए साझा विराम लेना (लेकिन चूंकि कोई इंतजार कर रहा है तो जल्दी से काम पर लौटना)। टीम के एक सदस्य का ध्यान अधिक हो सकता है और यदि उनका ध्यान भटक जाता है तो वे दूसरे को प्रेरित करने या जगाने में मदद कर सकते हैं और वह भूमिका समय-समय पर बदल सकती है। एक सदस्य को किसी विषय या तकनीक का ज्ञान हो सकता है जो दूसरे को नहीं है, जो समाधान खोजने या परीक्षण करने में होने वाली देरी को खत्म कर सकता है, या बेहतर समाधान की अनुमति दे सकता है, इस प्रकार अकेले काम करने की तुलना में पेअर प्रोग्रामिंग प्रोग्रामर के कौशल सेट, ज्ञान और अनुभव को प्रभावी ढंग से बढ़ा सकता है। इनमें से प्रत्येक अमूर्त लाभ, और कई अन्य, को सटीक रूप से मापना चुनौतीपूर्ण हो सकता है लेकिन अधिक कुशल कार्य घंटों में योगदान दे सकता है।

डिज़ाइन गुणवत्ता
दो प्रोग्रामर वाले सिस्टम में तीन कारणों से समस्याओं के अधिक विविध समाधान उत्पन्न करने की अधिक क्षमता होती है:


 * 1) प्रोग्रामर कार्य में विभिन्न पूर्व अनुभव लाते हैं;
 * 2) वे कार्य से संबंधित जानकारी का अलग-अलग तरीकों से आकलन कर सकते हैं;
 * 3) वे अपनी कार्यात्मक भूमिकाओं के आधार पर समस्या के प्रति भिन्न-भिन्न संबंधों में खड़े होते हैं।

लक्ष्यों और योजनाओं को साझा करने के प्रयास में, जब प्रोग्रामर के बीच कोई टकराव उत्पन्न होता है, तो उन्हें खुलकर साझा कार्रवाई पर बातचीत करनी चाहिए। ऐसा करने में, वे अकेले प्रोग्रामर की तुलना में समस्या को हल करने के कई तरीकों पर विचार करते हैं। यह प्रोग्राम की डिज़ाइन गुणवत्ता में उल्लेखनीय रूप से सुधार करता है क्योंकि इससे खराब विधि का चयन करने की संभावना कम हो जाती है।

संतुष्टि
2000 के पेअर प्रोग्रामर के एक ऑनलाइन सर्वेक्षण में, 96% प्रोग्रामर ने कहा कि उन्हें अकेले प्रोग्रामिंग की तुलना में पेअर प्रोग्रामिंग में काम करने में अधिक आनंद आया। इसके अलावा, 95% ने कहा कि जब उन्होंने जोड़ी प्रोग्राम किया तो वे अपने काम में अधिक आश्वस्त थे। हालाँकि, चूंकि सर्वेक्षण स्व-चयनित पेअर प्रोग्रामर के बीच था, इसमें उन प्रोग्रामर को सम्मिलित नहीं किया गया था जिन्हें पेअर प्रोग्राम के लिए मजबूर किया गया था।

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

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

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

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

हालाँकि पेअर प्रोग्रामर किसी कार्य को एकल प्रोग्रामर की तुलना में तेजी से पूरा कर सकते हैं, लेकिन मानव-घंटे की कुल संख्या बढ़ जाती है। एक प्रबंधक को काम को तेजी से पूरा करने और कोडिंग की उच्च लागत के मुकाबले परीक्षण और डिबगिंग समय को कम करने के बीच संतुलन बनाना होगा। इन कारकों का सापेक्षिक महत्व प्रोजेक्ट और कार्य के अनुसार भिन्न-भिन्न हो सकता है।

युग्मन का लाभ उन कार्यों पर सबसे अधिक होता है जिन्हें प्रोग्रामर शुरू करने से पहले पूरी तरह से नहीं समझते हैं: यानी, विशेषज्ञों की तुलना में नौसिखियों के लिए चुनौतीपूर्ण कार्य जिनमें रचनात्मकता और व्यवहार कुशल की आवश्यकता होती है। पेअर प्रोग्रामिंग जटिल प्रोग्रामिंग कार्यों पर उच्च गुणवत्ता और शुद्धता प्राप्त करने में सहायक हो सकती है, लेकिन इससे विकास प्रयास (लागत) में भी काफी वृद्धि होगी।

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

गिटहब  कोपायलट जैसे AI सहायता टूल का उपयोग करने वाले प्रोग्रामर के एक अध्ययन में पाया गया कि जबकि कुछ प्रोग्रामर ने AI सहायता को पेअर प्रोग्रामिंग के समान माना है, व्यवहार में ऐसे टूल का उपयोग प्रोग्रामर अनुभव के संदर्भ में बहुत अलग है, जिसमें मानव प्रोग्रामर ड्राइवर और नेविगेटर भूमिकाओं के बीच बार-बार परिवर्तन को ऐसा करना पड़ता है।

गैर-निष्पादन के संकेतक
ऐसे संकेतक हैं कि कोई जोड़ी अच्छा प्रदर्शन नहीं कर रही है:
 * विघटन तब हो सकता है जब सदस्यों में से एक शारीरिक रूप से कीबोर्ड से दूर चला जाता है, ईमेल तक पहुंच जाता है, या यहां तक ​​​​कि सो जाता है।
 * यदि एक सदस्य दूसरे की तुलना में अधिक अनुभवी है तो "वॉच द मास्टर" घटना उत्पन्न हो सकती है। इस स्थिति में, कनिष्ठ सदस्य अधिकांश कोडिंग गतिविधि के लिए जोड़ी के वरिष्ठ सदस्य को सौंपते हुए पर्यवेक्षक की भूमिका निभा सकता है। इससे आसानी से विघटन हो सकता है।

युग्मन विविधताएँ

 * विशेषज्ञ-विशेषज्ञ
 * विशेषज्ञ-विशेषज्ञ जोड़ी उच्चतम रचनात्मकता के लिए स्पष्ट विकल्प प्रतीत हो सकती है और अच्छे परिणाम दे सकती है, लेकिन यह प्रायः समस्याओं को हल करने के नए तरीकों में बहुत कम अंतर्दृष्टि प्रदान करती है, क्योंकि दोनों पक्षों द्वारा स्थापित प्रथाओं पर सवाल उठाने की संभावना नहीं है।
 * विशेषज्ञ-नौसिखिया
 * विशेषज्ञ-नौसिखिया जोड़ी विशेषज्ञ के लिए नौसिखिए को सलाह देने के कई अवसर पैदा करती है। यह जोड़ी नए विचारों को भी प्रस्तुत कर सकती है, क्योंकि नौसिखिए द्वारा स्थापित कार्यप्रणाली पर सवाल उठाने की अधिक संभावना है। विशेषज्ञ, जिसे अब स्थापित कार्यप्रणाली की व्याख्या करने की आवश्यकता है, उन पर सवाल उठाने की भी अधिक संभावना है। हालाँकि, इस जोड़ी में, एक डरा हुआ नौसिखिया निष्क्रिय रूप से "मास्टर को देख सकता है" और सार्थक रूप से भाग लेने में संकोच कर सकता है। साथ ही, कुछ विशेषज्ञों के पास रचनात्मक नौसिखिया भागीदारी की अनुमति देने के लिए आवश्यक धैर्य नहीं हो सकता है।


 * नौसिखिया–नौसिखिया
 * नौसिखिया-नौसिखिया जोड़ी स्वतंत्र रूप से काम करने वाले दो नौसिखियों की तुलना में काफी बेहतर परिणाम दे सकती है, हालांकि इस अभ्यास को प्रायः हतोत्साहित किया जाता है क्योंकि नौसिखियों के लिए उचित रोल मॉडल के बिना अच्छी आदतें विकसित करना कठिन होता है।

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

टूल समर्थन इसके द्वारा प्रदान किया जा सकता है:
 * संपूर्ण-स्क्रीन साझाकरण सॉफ़्टवेयर
 * टर्मिनल मल्टीप्लेक्सर्स
 * विशिष्ट वितरित एडिटिंग टूल्स
 * ऑडियो चैट प्रोग्राम या वीओआईपी सॉफ्टवेयर तब सहायक हो सकते हैं जब स्क्रीन शेयरिंग सॉफ्टवेयर दो-तरफा ऑडियो क्षमता प्रदान नहीं करता है। हेडसेट का उपयोग प्रोग्रामर के हाथों को मुक्त रखता है
 * क्लाउड विकास वातावरण
 * सहयोगात्मक पेअर प्रोग्रामिंग सेवाएँ

यह भी देखें

 * एक्सट्रीम प्रोग्रामिंग
 * संयुक्त ध्यान
 * मोब प्रोग्रामिंग
 * टीम प्रोग्रामिंग

बाहरी संबंध

 * wikiHow: How to Pair Program How-to guide; contains common wisdom on how to make pair programming work.
 * Tuple:Pair Programming Guide Pair programming guide that covers paring styles, antipatterns, and more. Includes example paring videos.
 * PairProgramming
 * PairProgrammingPattern
 * PairRotationFrequency