उम्मीद है कि मैं आपकी थोड़ी मदद कर सकता हूं, या कम से कम आपको सही दिशा में इंगित कर सकता हूं!
हालांकि एक अस्वीकरण के एक बिट के रूप में, यह एक बहुत बड़ा विषय है - और मुझे लगता है कि एक गहरी समझ पाने के लिए "मुझे वास्तव में फेंक दिया जाता है" लगता है । मैंने कहा, मैं दो प्रमुख मुद्दों का त्वरित रूप से जवाब दूंगा:
- कोड और स्रोत नियंत्रण
- संचार और कुछ सुझाव।
ओओपी परियोजनाओं के बारे में विशेष रूप से - मैं ईमानदारी से ओओपी के लिए बहुत सारे मुद्दों को नहीं देख सकता हूं जो कहीं और मौजूद नहीं हैं।
वास्तव में, मुझे लगता है कि ओओपी-शैली प्रोग्रामिंग टीम के विकास के लिए अविश्वसनीय रूप से अनुकूल है। OOP का एक प्रमुख लोकाचार यह है कि मुझे हर उस वस्तु के बारे में पूरी जानकारी नहीं होनी चाहिए जिसके साथ मैं बातचीत करता हूं: मुझे बस यह जानना चाहिए कि यह क्या कर सकता है, और मैं इसे करने के लिए कैसे प्राप्त कर सकता हूं।
OOP प्रदान करने वाले सार एक टीम में कमाल कर सकते हैं।
स्रोत नियंत्रण
प्रोजेक्ट को संग्रहीत करने के लिए एक केंद्रीय स्थान होना चाहिए, और जो कई डेवलपर्स को किसी भी समय कोडबेस तक पहुंचने की अनुमति देता है। यह वह जगह है जहाँ Git (या SVN) जैसे सिस्टम खेलने के लिए आते हैं।
मैं केवल गिट के बारे में विशेष रूप से बोल सकता हूं, क्योंकि मैंने एसवीएन का उपयोग कभी नहीं किया है - हालांकि मैं इकट्ठा करता हूं कि वे समान हैं लेकिन विभिन्न शब्दावली के साथ।
Git का उपयोग करके मैं किसी दिए गए प्रोजेक्ट के लिए सभी स्रोत कोड के साथ एक रिपॉजिटरी बना सकता हूं, और फिर मेरी टीम को रिपॉजिटरी तक पहुंचने की अनुमति दे सकता हूं। हर सुविधा या बग फिक्स के लिए जो तब बनाया गया है, व्यक्तिगत डेवलपर्स अपनी खुद की "शाखा" बना सकते हैं जिसका मतलब है कि विकास समानांतर पटरियों पर हो सकता है।
एक बार एक फीचर या फिक्स पूरा हो जाने के बाद, इसे फिर से मुख्य प्रोजेक्ट के कोडबेस में " मर्ज " किया जा सकता है । किसी भी " संघर्ष " को गिट द्वारा पता लगाया जा सकता है और डेवलपर द्वारा जिम्मेदार स्रोत स्तर पर हल किया जा सकता है।
मुझे यकीन नहीं है कि आपने पहले Git का उपयोग किया होगा, लेकिन यह पहली बार में काफी जटिल लग सकता है - लेकिन इसकी हालिया लोकप्रियता ( Github के हिस्से में ) के लिए धन्यवाद वहाँ ट्यूटोरियल और संसाधनों का एक पूरा धन है।
यदि आपने पहले इसका उपयोग नहीं किया है, तो मैं GitHub तक साइन अप करने और इसके लिए इसे महसूस करने की सलाह देता हूं! (वैकल्पिक रूप से, Bitbucket एक समान विकल्प है, लेकिन यह आपको मुफ्त में निजी रिपोजिटरी रखने की अनुमति देता है।)
Git Flow एक उत्कृष्ट Git आधारित कार्य प्रवाह है जो टीमों के लिए अविश्वसनीय रूप से उपयोगी है। सामान्य रूप से गिट की तरह, एक बार जब आप इसके साथ काम करते हैं तो कुछ समय के लिए इसके बिना एक टीम में काम करने की कल्पना करना मुश्किल हो जाता है!
संचार
एक बार जब आप सभी तकनीकी बाधाओं को पार कर लेते हैं, तो आप वास्तव में उस मूल मुद्दे पर उतर आते हैं, जो अधिकांश परियोजनाओं (तकनीकी या नहीं) - और संचार से ग्रस्त है।
पूरी टीम को यह जानने की जरूरत है कि कौन क्या कर रहा है, कब क्या कर रहा है और क्या प्रभावित करता है।
जिम्मेदारी को स्पष्ट रूप से परिभाषित करने की आवश्यकता है
यह स्पष्ट है, लेकिन अधिकांश परियोजनाएं टिकट प्रणाली के कुछ प्रकार का उपयोग करेंगी - जहां किसी भी सुविधा अनुरोध या बग को लॉग किया जाता है, और फिर बाद में कर्मचारियों के एक विशिष्ट सदस्य को सौंपा जाता है। ( JIRA , Unfuddle आदि) अक्सर ये स्रोत नियंत्रण प्रणाली के लिए बनाए जाते हैं जो जीवन को थोड़ा सरल बनाता है। (BitBucket और GitHub दोनों उनके साथ होस्ट किए गए Git रिपॉजिटरी के लिए समस्या ट्रैकिंग प्रदान करते हैं।)
यह रोकता है, या कम से कम रोकने में मदद करता है, डेवलपर्स गलती से एक ही मुद्दों पर काम कर रहे हैं।
हालांकि यह एक पूर्ण फिक्स नहीं है; आपको अभी भी यह सुनिश्चित करने की आवश्यकता है कि डेवलपर्स अन्य डेवलपर्स जिम्मेदारियों के बारे में जानते हैं। मैं अतीत में जानता हूं कि मैंने अन्य मुद्दों को तय किया है जो मैंने एक विशिष्ट बग को ठीक करने के दौरान ठोकर खाई हैं, विशुद्ध रूप से क्योंकि यह समझ में आता है। (" ठीक है, मैं पहले से ही यहां हूं। यह एक रिफ्लेक्टर के साथ कर सकता है और शायद मैं किसी भी अन्य मुद्दों के लिए जांच कर सकता हूं। ") फिर मुझे अन्य डेवलपर्स से माफी मांगनी होगी क्योंकि वे उन अन्य मुद्दों पर काम कर रहे थे जो मैंने किए हैं। निश्चित - हमारा समय बर्बाद करना।
सामान्य तौर पर, इन मुद्दों को तय किया जा सकता है ...
नियमित बैठकें
कुछ परियोजना प्रबंधन / विकास के तरीके विशिष्ट संचार विधियों या मीटिंग अंतराल को निर्धारित करते हैं। सामान्य तौर पर, मैंने जो सबसे अधिक उत्पादक प्रणाली देखी है, वह सुबह की स्टैंड-अप मीटिंग्स हैं, जहां एक टीम में हर कोई एक त्वरित रन देगा जो वे कर रहे हैं - यदि आप इसे केवल विकास टीम के सदस्यों तक सीमित रखते हैं और इसके बारे में स्पष्ट दिशानिर्देश हैं फिर संवाद करने के लिए ये अविश्वसनीय रूप से प्रभावी हो सकते हैं। मैंने हमेशा इस से चिपके रहने की कोशिश की है:
मैं एक्स पर काम कर रहा हूं,
वाई को प्राप्त करने / तय करने के लिए,
जिसमें Z को संशोधित / संशोधित करना शामिल है।
अन्य टीम के सदस्य तुरंत उस में ले जा सकते हैं " फर्गस उस बग को ठीक करने पर काम कर रहा है जिसे दूसरे दिन लॉग किया गया था, हालांकि इसका मतलब है कि वह कुछ कोड पर काम कर रहा है जिसे मुझे देखने की आवश्यकता है - कोई भी बदलाव करने से पहले मैं उसके साथ जांच करूंगा। "।
वास्तुकला की बैठकें
मैंने हाल ही में एक महान टीम के साथ काम किया जिसमें एक पाक्षिक " टेक चैट " थी, जहां बड़े / वास्तु मुद्दों पर चर्चा की जाएगी। टीम के प्रत्येक सदस्य के पास परियोजना का सामना करने वाले बड़े मुद्दों को समझने का समय था और संभावित सुधारों पर चर्चा कर सकते थे।
मैं व्यक्तिगत रूप से इसे प्यार करता था, मैंने परियोजना में काफी नया योगदान नहीं दिया था - लेकिन चर्चाओं को सुनने में सक्षम होने के कारण मुझे बहुत अंतर्दृष्टि मिली; बहुत जल्द मैं इस परियोजना के साथ-साथ व्यक्तिगत सोच शैलियों को समझ सकता था।
संचार एक ऐसा मुद्दा है जो किसी भी टीम को नीचे ला सकता है । तकनीकी या नहीं, अगर लोगों को बड़ी तस्वीर के बारे में पता नहीं है, तो अधिक संभावना है कि वे विफल हो जाएंगे।
अन्य मामले
यह सुनिश्चित करना अच्छा है कि किसी टीम में काम करते समय सभी के पास समान कॉन्फ़िगरेशन या शैली हो। मेरा क्या मतलब है?
विन्यास
यदि आप एक जावा परियोजना पर काम कर रहे हैं - तो शायद यह सुनिश्चित करना (विकास के वातावरण के लिए कम से कम, निश्चित रूप से परीक्षण के लिए नहीं।) टीम के बीच जेवीएम संस्करण आम हैं एक अच्छा विचार हो सकता है? फिर आई.डी.ई. यह पूरी तरह से मदद करता है अगर पूरी टीम ग्रहण या नेटबिन या आपकी पसंद के आईडीई का उपयोग कर रही है ।
एक वेब परियोजना पर यह हो सकता है कि सभी डेवलपर्स को एक विशिष्ट स्टैक की आवश्यकता हो; विशिष्ट Apache या PHP संस्करणों के साथ।
इस तरह के कारकों के बारे में सोचकर ही मेरे दिमाग में टीम को "जल्दी" करने की अनुमति मिलती है।
अंदाज
टैब्स बनाम रिक्त स्थान? CamelCase या spacing_with_underscores? जब तक आप अकेले काम कर रहे होते हैं, तब ये छोटे हो सकते हैं, जब आप एक बड़ी टीम के साथ काम कर रहे होते हैं, तो आप वास्तव में एक सामान्य शैली की ओर प्रयास करना चाहते हैं।
वास्तव में, आपको वास्तव में यह बताने में सक्षम नहीं होना चाहिए कि किसने कोड का एक विशिष्ट अनुभाग लिखा है - आपको बस यह जानना चाहिए कि यह संबंधित है ।
यही कारण है कि कई ओपन सोर्स प्रोजेक्ट खुले तौर पर स्रोत कोड प्रारूप दिशानिर्देश / स्टाइलगाइड प्रकाशित करते हैं - ये क्या होते हैं, इस विचार के लिए, अपने स्वयं के ओपन सोर्स प्रोजेक्ट्स के लिए Google StyleGuides पर एक नज़र डालें ।
कार्य और इकाई परीक्षण
यह टीमों तक सीमित नहीं है, लेकिन मैं विशेष रूप से एक कारण के लिए जल्दी से इसे छूने जा रहा हूं: यह टीम के जीवन को बहुत आसान बनाता है।
यदि आपके पास बहुत सारी निर्भरता के साथ एक जटिल वर्कफ़्लो है, या एक लंबी निर्माण प्रक्रिया है - तो अक्सर यह एक कार्य धावक का उपयोग करके इसे स्वचालित करने के लिए उपयोगी होता है। वेब परियोजनाओं के लिए, GruntJS बहुत बढ़िया है, हालांकि जावा से आ रहा है मुझे लगता है कि अपाचे चींटी काफी समान हो सकती है।
एक व्यक्ति मैं उपयोग के रूप में GruntJS मेरी साइट का निर्माण करने से पहले मैं इसे अपने FTP सर्वर पर तैनात - एक ग्रंट आदेश मेरे सीएसएस के लिए सब मैं की जरूरत है / सास संकलित करने के लिए किया जा और न्यूनतम किया गया , मेरी संपत्ति संकुचित करने और फिर अपलोड करने के लिए अपनी फ़ाइलें।
हालांकि, एक टीम के सदस्य के रूप में, मैं यह जांचने के लिए ग्रंटज का उपयोग कर सकता हूं कि मैंने कोई परीक्षण नहीं तोड़ा है - और मैंने परियोजना के अन्य हिस्सों के बारे में पूरी तरह से जानकारी नहीं होने के कारण किसी भी कीड़े का परिचय नहीं दिया है। यह निश्चित रूप से, उन लाभों के लिए अतिरिक्त है जो मुझे व्यक्तिगत डेवलपर के रूप में पेश करते हैं।
मैं इसका उपयोग भी कर सकता हूं ताकि मैं अपने फैंसी सोर्स कंट्रोल पैकेज (Git) का उपयोग करके किसी प्रोजेक्ट को क्लोन कर सकूं - और अपने सभी आश्रितों को स्थापित करने के लिए एक कमांड चला सकता हूं। यह एक बड़ा प्लस है, क्योंकि एक नया डेवलपर प्राप्त करने में बिताया गया समय उस स्थिति में जहां वे वास्तव में विकसित करना शुरू कर सकते हैं - काफी बड़ा हो सकता है - यहां तक कि बिना किसी अपरिचित कोडबेस के उपयोग के समय पर विचार किए बिना।
प्रलेखन
सबसे अच्छी परियोजनाएं जो मैंने देखी हैं, वे डेवलपर्स के उद्देश्य से प्रलेखन (और अक्सर काफी अधिक) हैं। इस तरह के दस्तावेज़ों की तरह बातें समझा सकते हैं:
1. विकास का माहौल:
"वर्तमान में हम एक LAMP स्टैक चलाने वाले सर्वर पर तैनात हैं , क्योंकि ऐसे डेवलपर्स को उल्लिखित संस्करणों को लक्षित करना चाहिए .."
2. काम का प्रवाह
"सभी सुविधाओं को एक 'फ़ीचर / *' शाखा पर विकसित किया जाना है और रिलीज से पहले तैयार होने के लिए 'परीक्षण' शाखा में विलय कर दिया गया है।"
3. टीम में जिम्मेदारियां:
"डेटाबेस के मुद्दों के लिए, स्टीव से बात करें। मंच के मुद्दों के लिए, डेविड से बात करें।"
4. भविष्य के लिए एक " पाइपलाइन "
"नया कोड विकसित करते समय याद रखें कि जून 2014 तक हम x- विरासत कोड को लागू करना चाहते हैं, ऐसा होने से पहले समीक्षा करने की आवश्यकता हो सकती है।"
उदाहरण
एक ओपन सोर्स प्रोजेक्ट के काम के प्रवाह को देखने के लिए यह देखने लायक हो सकता है कि यह कैसे काम करता है - चाहे वह अपने स्वयं के वर्कफ़्लो के साथ एक स्थापित हो (अक्सर भारी दस्तावेज), या गीथहब पर कई उदाहरणों में से एक।
चेतावनी का एक अंतिम शब्द
यदि आप अपने आप को एक ऐसी टीम में काम करते हुए पाते हैं जो यह सब करने का प्रबंधन करती है .. तो आपको कहीं और से नफरत हो जाएगी ..! इसे मुझसे ले लो, एक बार जब आप एक अच्छी टीम का अनुभव करते हैं तो अचानक कहीं और मुद्दे वास्तव में आपको नीचे खींच सकते हैं। (हालांकि एक और पोस्ट के लिए एक कहानी है!)