मैं एक कोड आधार को कैसे पुन: सक्रिय कर सकता हूं जबकि अन्य तेजी से इसके लिए प्रतिबद्ध हैं?


18

मैं एक निजी परियोजना पर हूं जो अंततः खुला स्रोत बन जाएगा। हमारे पास कुछ टीम के सदस्य हैं, जो एप्लिकेशन बनाने के लिए प्रौद्योगिकियों के साथ काफी प्रतिभाशाली हैं, लेकिन समर्पित डेवलपर्स नहीं हैं जो स्वच्छ / सुंदर और सबसे महत्वपूर्ण लंबे समय तक बनाए रखने योग्य कोड लिख सकते हैं।

मैंने कोड बेस को रिफलेक्टर करने के लिए सेट किया है, लेकिन यह थोड़ा सा कम है क्योंकि मैं किसी दूसरे देश में टीम से बाहर हूं, मैं इसके नियमित संपर्क में नहीं हूं।

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

जवाबों:


35

एक बात जो अक्सर लोग विचार करने में असफल होते हैं, वह यह है कि एक साफ-सुथरी वास्तुकला न केवल दीर्घकालिक रखरखाव को गति देती है, बल्कि यह अभी विकास को गति देती है । अपने सहकर्मियों से "जब तक वे नहीं हो जाते तब तक अपने परिवर्तनों को अंकित करने का प्रयास न करें।" आपके परिवर्तन उन्हें अधिक उत्पादक और बग के लिए कम प्रवण होने में मदद करेंगे।

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


17
हाँ हाँ हाँ। केवल एक महीने के एकल टूर-डे-फोर्स पर जाने के आग्रह का विरोध करें ताकि यह पता चल सके कि जिस कोडबेस को आप रिफ्लेक्टर करना चाहते हैं वह पूरी तरह से बदल गया है और आपको फिर से शुरू करना है। बेहतर यह है कि एक बार में एक कदम बढ़ाएं।
tdammers

बिल्कुल सही! बड़े
रिफ्लेक्टर

8

आप कभी भी "संवाद करने के लिए पर्याप्त नहीं हैं"। यदि आप उंगलियां टाइपिंग कर सकते हैं, तो आपके होंठ भी बात कर सकते हैं। दिन के अंत में प्रौद्योगिकी सुधार 85% संचार और 15% तकनीकी है। सिर्फ इसलिए कि आप किसी के साथ कठिन वार्तालाप करने के बजाय कोडिंग करेंगे ... इसका मतलब यह नहीं है कि यह एक अच्छा विचार है। संचार वास्तव में आप क्या करने की कोशिश कर रहे हैं का मुश्किल टुकड़ा है, लेकिन इसे टालना नहीं है।


यह वास्तव में संवाद करने में कठिनाई नहीं है, यह है कि मैं वर्तमान डेवलपर को धीमा नहीं करना चाहता। वास्तव में, मुझे भी यकीन नहीं है कि उसे सही तरीके से सीखने की ज़रूरत है जब तक कि इसे फिर से तैयार किया जा सकता है। वह पहले प्रोग्रामर नहीं है, वह दूसरे क्षेत्र में वैज्ञानिक है।
गुप्त

+1। आप बिना संवाद किए किसी के साथ एक कोड आधार साझा नहीं कर सकते
मार्कजे

4

हां, एक शाखा इसके लिए एक अच्छा समाधान है।

मैं आपको एक शाखा पर इस पर काम करना शुरू करने का सुझाव दूंगा और यह सुनिश्चित करूंगा कि यह HEADइस दौरान आपके करंट के ऊपर साफ-साफ लागू हो (यानी टेस्ट रिबास और मर्ज नियमित अंतराल पर करें ताकि आप सुनिश्चित कर सकें कि आप अपने बदलाव आसानी से लागू कर सकें और आपके टेस्ट अभी भी पास हो जाएं - - इसके साथ मदद के लिए भी देखोgit rereregit )। फिर एक बार जब आप रिबास करते हैं और अपने परिवर्तनों को अपने में मिला लेते हैं HEAD

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


1
-1: नहीं। @ कार्ल बेलेफेल्ट का उत्तर देखें।
जिम जी। 3

हाँ? मैं कार्ल से असहमत नहीं हूं, इसीलिए मैंने तेजी से शुरुआत करने के बारे में बात की।
बेंजामिन बैनियर

और मैं कह रहा हूं, "शाखा मत करो और फिर से विलय करो"। सबसे अच्छा, यह व्यर्थ प्रयास है। सबसे कम, आप एक बड़ी गड़बड़ कर देंगे।
जिम जी।

3

क्या आपने विकल्प "अभी तक नहीं करते" पर विचार किया है?

एक अलग शाखा में यह काम करते समय शायद सबसे अच्छा तरीका है, आप अपने आप को लाइन के नीचे बड़े पैमाने पर दर्दनाक मर्ज के लिए स्थापित कर रहे हैं।

अन्य लोग संभवतः नई कार्यक्षमता के बहुत सारे जोड़ रहे हैं, मौजूदा कार्यक्षमता को बदल रहे हैं और संभवतः कुछ कार्यक्षमता को निकाल रहे हैं।

एक बार मुख्यधारा के देव काम ने भविष्य में किसी बिंदु पर थोड़ा धीमा कर दिया है, तो आप प्रतिक्षेपक के लिए बहुत आसान स्थिति में हो सकते हैं।


+1। यदि आपका कोडबेस बड़े पैमाने पर प्रवाह में है, तो संभवत: किसी बड़े पुनर्लेखन की कोशिश करने का सबसे अच्छा समय नहीं है। अपने विकास चक्र में एक समय चुनें जब चीजें शांत हों।
आनन

2

tl; dr - ऐसा लगता है जैसे बड़े लीगों में कदम रखने का समय आ गया है। जब तक आप उस तरह की चीज़ में न हों, तब तक एक सुअर पर लिपस्टिक लगाना किसी भी तरह से प्रीतिकर नहीं है।

लोगों की समस्या

पहला मुद्दा है समकालिकिकरण। यदि आपके पास एक ही कोड पर एक साथ काम करने वाले कई लोग हैं, तो आपको समस्याओं को रोकने के लिए केवल एक नियम की आवश्यकता होगी:

Rule 1: Always pull before you merge/rebase

जब डीवीसीएस की बात आती है, तो दूरस्थ शाखा (यानी मुख्य भंडार) में परिवर्तन करना कठिन होता है और स्थानीय में परिवर्तन करना बहुत आसान होता है। प्रत्येक व्यक्ति अपने स्वयं के कोड परिवर्धन को बिना मुद्दों के अधिक से अधिक पूर्ण बनाने के लिए जिम्मेदार है। जब तक 2 लोग ठीक उसी समय पर प्रतिबद्ध न हों, आपको अनुभव नहीं करना चाहिए। मूल / दूरस्थ मास्टर के लिए प्रतिबद्ध पहुंच केवल कुछ डेवलपर्स तक सीमित होनी चाहिए और उन्हें दूरस्थ ट्रैकिंग शाखाओं के माध्यम से अन्य डेवलपर्स से परिवर्तन खींचना चाहिए।

कोड समस्या

आप कैसे जानते हैं कि आपके द्वारा किए गए परिवर्तन कोड नहीं तोड़ते हैं?

सरल उत्तर ... वे नहीं साबित करने के लिए परीक्षण लिखें। यदि आप विचार के TDD (टेस्ट ड्रिवेन डिज़ाइन) स्कूल को अनदेखा करते हैं, तो परीक्षण का पूरा बिंदु सत्यापन का एक स्तर जोड़ना है जो आपको बिना कोड को बदलने में सक्षम बनाता है।

Rule 2: Don't make assumptions, write proofs (ie tests).

इसके अलावा, मूल / दूरस्थ मास्टर को धकेलने से पहले परीक्षणों का पूरा सरगम ​​चलाया जाना चाहिए।

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

आपको पहले कुछ संगठनात्मक पुन: संरचना की आवश्यकता हो सकती है

यदि उपरोक्त समाधान आसानी से लागू नहीं किए जा सकते हैं, तो संभवतः विकास संरचना के साथ कुछ समस्याएं हैं जिन्हें पहले संबोधित करने की आवश्यकता है।

परियोजना का मालिक द्वारपाल होना चाहिए। यदि कोई समन्‍वय समस्‍याएं हैं, तो संभवत: कम पहुंच वाले बहुत से लोग हैं। लिनक्स कर्नेल जैसी विशाल परियोजनाओं पर भी, केवल मुट्ठी भर डेवलपर्स ने मूल / दूरस्थ मास्टर रिपॉजिटरी तक पहुंच बनाई है। कमिट को प्रबंधित करने के लिए वास्तव में रिपॉजिटरी के कई स्तर हैं। सिंगल लेयर कमिट मॉडल के बजाय जहां हर कोई अपने परिवर्तनों को मूल पर धकेल रहा है, पदानुक्रमित मॉडल में द्वारपाल होते हैं जो बदलाव को खींचते हैं और परियोजना में शामिल करने से पहले उनकी गुणवत्ता को सत्यापित करते हैं। पदानुक्रमित प्रतिबद्ध मॉडल गुणवत्ता का त्याग किए बिना एकल परत मॉडल की तुलना में बहुत बड़ा और अधिक प्रभावी हो सकता है।

Devs है कि पहुंच के लिए प्रतिबद्ध नहीं मिल के लिए, वे अपने स्वयं के रिमोट ट्रैकिंग शाखाओं बनाने के लिए सीखना चाहिए (Git और gitorious इस के लिए अच्छे हैं) तो devs जो कर पहुँच के लिए प्रतिबद्ध है आसानी से खींच सकते हैं / मूल में शाखाओं को एकीकृत। यदि परिवर्तन छोटे हैं, तो पैच भी काम करेंगे।

मर्ज / रिबेस करने से पहले परिवर्तनों को खींचने की क्षमता यह मानती है कि आप अपनी स्थानीय मास्टर शाखा में विकसित नहीं हो रहे हैं। इसे संभालने का आसान तरीका है कि आप कोड शुरू करने से पहले एक प्रारंभिक खींचतान करें, फिर अपना सारा काम उस शाखा पर करें। कठिन तरीका यह है कि विलय करने से पहले इसे शाखा दें और मास्टर को वापस रोल करें।

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

"द मिथिकल मैन मंथ" का मिथक

मानो या न मानो, बड़े / अधिक सफल ओपन सोर्स प्रोजेक्ट लोकतंत्र की तरह नहीं चलते हैं। वे एक पदानुक्रम के रूप में चला रहे हैं। यह कहते हुए कि 8-10 डेवलपर्स से परे एक परियोजना प्रभावी रूप से विकसित नहीं हो सकती है। अगर यह सच होता तो लिनक्स कर्नेल जैसी मेगा-परियोजनाएँ मौजूद नहीं होतीं। गहरा मुद्दा यह है कि हर किसी को पहुंच प्रदान करने के लिए बस कुशल संचार को भी संभालना मुश्किल हो जाता है।

पौराणिक पुरुष महीने की समस्या वास्तव में दूर की जा सकती है। आपको बस अपने प्रोजेक्ट को मिलिट्री की तरह चलाने की जरूरत है। पदानुक्रम के भीतर कई स्तर हैं क्योंकि यह सामान्य ज्ञान है कि व्यक्तिगत लोग केवल कुछ मुट्ठी भर लोगों के साथ संचार का प्रबंधन करने में प्रभावी होते हैं। जब तक 5-7 से अधिक लोगों के काम के प्रबंधन के लिए कोई एकल व्यक्ति जिम्मेदार नहीं होता है, तब तक सिस्टम अनिश्चित काल के लिए स्केल कर सकता है।

यह सबसे अच्छा / अनुभवी डेवलपर्स को अधिक एकीकरण और उच्च-स्तरीय डिज़ाइन / नियोजन करने के लिए सीमित कर सकता है लेकिन यह एक बुरी बात नहीं है। स्केलिंग का एक हिस्सा यह तय करने के लिए कदम बढ़ा रहा है कि परियोजना को दीर्घकालिक योजना की आवश्यकता है। उच्चतम स्तर पर जिन लोगों के पास भविष्य में सबसे बड़ा निवेश (समय भी एक संसाधन है) है उन पर बड़े निर्णय लेने का आरोप लगाया जाना चाहिए।

बढ़ते दर्द के बीच एक ओपन सोर्स प्रोजेक्ट के बारे में सुनना अच्छा है। बधाई और शुभकामनाएँ।


-1

स्वच्छ / सुंदर और सबसे महत्वपूर्ण लंबे समय तक बनाए रखने योग्य कोड।

मेरे अनुभव में स्वच्छ / सुंदर बनाए रखने का दुश्मन है। सुंदर कोड अक्सर:

  • ढांचे पर एक परत है जो अमूर्तता के उच्च स्तर का परिचय देती है
  • कोड पुन: उपयोग के लिए ऑप्टिमाइज़ करता है, जिसके परिणामस्वरूप बहुत अधिक निर्भरता होती है
  • विशिष्ट के बजाय सामान्य समस्या को हल करने की कोशिश करता है

दूसरी ओर, बनाए रखने योग्य कोड:

  • सीधे ढांचे पर लिखा गया है, इसलिए सभी डेवलपर्स इसे पढ़ सकते हैं
  • निर्भरता की कम संख्या के लिए ऑप्टिमाइज़ करता है, इसलिए एक क्षेत्र में बदलाव दूसरे पर प्रभाव नहीं डालता है
  • इससे अधिक समस्याओं को हल करने की कोशिश नहीं करता है

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

सिवाय इसके कि अमूर्तन समय की कसौटी पर खड़ा नहीं होगा। और अमूर्त के साथ कोई भी समस्या एक स्थानीय फिक्स को एक फिक्स में बदल देती है जो संभावित रूप से एप्लिकेशन-वाइड प्रभाव डालती है।
एंडोमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.