मैंने इस विषय पर पिछले दिनों SoftwareEngineering.SE पर बहुत कुछ लिखा है, और खुद भी ऐसी ही स्थितियों में था। इसलिए, मैं आपके प्रश्न को पढ़ते समय कुछ संकेत देने और उन कुछ मुद्दों पर प्रकाश डालने का प्रयास करूँगा जिन्हें मैंने नोट किया था।
लेकिन पहले, चलो एक महत्वपूर्ण पहलू के बारे में बात करते हैं: कंपनी में आपकी भूमिका।
आपकी भूमिका
आपके पास अपने बॉस से चीजों को बढ़ाने के लिए एक स्पष्ट जनादेश हो सकता है, और पदानुक्रम में एक जगह भी हो सकती है जहां अन्य डेवलपर्स को आपके आदेशों को सुनना होगा । या आप सहकर्मियों के बीच हो सकते हैं, एक ही भूमिका और एक ही प्राधिकरण, आपका विकल्प केवल ... अच्छी तरह से ... एक राय हो ।
दोनों ही मामलों में, पदानुक्रम में आपकी जगह क्या मायने रखती है, और अधिक:
अन्य डेवलपर्स आपके बारे में क्या सोचते हैं। यदि वे आपको एक कष्टप्रद व्यक्ति मानते हैं जो उनसे बेवकूफ बातें करता है, तो आप दूर नहीं जाएंगे। मैंने ऐसे कई मामले देखे हैं, जहां तकनीकी नेताओं और परियोजना प्रबंधकों का टीम पर बिल्कुल कोई प्रभाव नहीं था, क्योंकि टीम को पता था (या विचार) कि उन "नेताओं" के पास कोई तकनीकी पृष्ठभूमि नहीं थी जो उन्हें लेने के फैसले की आवश्यकता थी। दूसरी ओर, मैंने कई डेवलपर्स देखे हैं जो वास्तव में अपने साथियों द्वारा सुने गए थे, क्योंकि वे जानते थे कि वे डेवलपर्स कुशल और अनुभवी हैं।
आपकी टीम कितनी ठोस है और इससे उन्हें क्या प्रेरणा मिलती है। एक ऐसी कंपनी की कल्पना करें जहां हर डेवलपर को KLOC / महीने का भुगतान किया जाता है। क्या आप अपने सहयोगियों से शैली के बारे में कुछ कहेंगे? शायद नहीं, क्योंकि दुर्लभ ऐसे व्यक्ति हैं जो कम भुगतान करना चाहते हैं। सामान्य तौर पर, यदि यह एक टीम नहीं है, लेकिन एक ही परियोजना पर काम करने वाले व्यक्तियों का एक समूह है, तो आप कुछ भी सुधार नहीं कर पाएंगे।
इसके आधार पर, आप यह तय कर सकते हैं कि क्या यह किसी बदलाव के प्रयास के लायक है। यदि आपके पास कोई आवाज नहीं है और कोई टीम सामंजस्य नहीं है, तो बस एक और नौकरी की तलाश करें। यदि आपको एक प्रतिभाशाली, सम्मानित डेवलपर के रूप में जाना जाता है और एक मजबूत टीम भावना है, तो आप अपने बॉस या अन्य टीमों से शत्रुता का सामना करने पर भी चीजों को अपेक्षाकृत आसान बना पाएंगे।
सभी मामलों में, अपनी टीम पर दबाव न बनाना आवश्यक है। उनके साथ काम करें, उनके खिलाफ नहीं । उन्हें आदेश न दें, लेकिन उन्हें लक्ष्य की ओर ले जाएं।
अब, संकेत।
अंदाज
मैंने एक बार अच्छी तरह से कोडिंग शैली और मौजूदा कोड के बहुमत के प्रारूपण का पालन करने के लिए कहा (दुख की बात है कि हमारे पास औपचारिक कोडिंग दस्तावेज़ दस्तावेज़ नहीं है)। लेकिन यह काम नहीं किया ...
बेशक यह नहीं था, क्योंकि यह ऐसा नहीं होना चाहिए।
शैली उबाऊ है ।
निम्नलिखित शैली उबाऊ है ।
कोडिंग स्टाइल डॉक्यूमेंट लिखना उबाऊ है ( और लानत मुश्किल है ; इसे तब तक करने की कोशिश भी न करें, जब तक कि आपने भाषा के साथ दस साल से ज्यादा काम न कर लिया हो)।
पठन शैली दस्तावेज़ उबाऊ है ।
स्टाइल गलतियों के लिए कोड की समीक्षा करना उबाऊ है ।
Trolling कि मेरी शैली बेहतर है की तुलना में तुम्हारा है रोमांचक है, खासकर जब वहाँ दूसरे पर एक शैली के बिल्कुल कोई उद्देश्य लाभ। गंभीरता से, हर समझदार व्यक्ति जानता है कि लिखने if (x)
का सही तरीका वह है जिसे मैंने लिखा था, if(x)
या नहीं if ( x )
!
इसलिए:
शैली की समीक्षा न करें। यह स्टाइल चेकर्स का काम है। उन प्यारे एप्लिकेशन का आपके मस्तिष्क पर कुछ लाभ होता है: वे पूरे प्रोजेक्ट को मिलीसेकेंड के मामले में जांचते हैं, घंटों या दिनों में नहीं, और वे गलतियां नहीं करते हैं और शैली की त्रुटियों को याद नहीं करते हैं।
अपनी खुद की शैली मानक न लिखें। आप इसे वैसे भी गलत करेंगे, और आपके सहकर्मी आपको ट्रोल करेंगे कि आपने बुरा विकल्प बनाया है।
डेवलपर्स को 2 000 स्टाइल त्रुटियों को ठीक करने के लिए मजबूर न करें।
शैली को स्वचालित रूप से लागू करें। कोड जिसमें शैली की गलतियाँ हैं, संस्करण नियंत्रण में कोई स्थान नहीं है।
प्रोजेक्ट की शुरुआत से ही करें। एक अस्तित्व परियोजना में शैली नियंत्रण स्थापित करना असंभव से कठिन है।
उस पर अधिक के लिए, SE.SE पर इस अन्य उत्तर के पहले भाग को पढ़ें ।
इसके अलावा:
- बहुत सख्त मत बनो। मिसाल के तौर पर, लेखन-योग्य
jslint
कोड काफी कष्टप्रद है, इसलिए इसे विशेष रूप से तब किया जाना चाहिए जब बिल्कुल (या यदि आपकी टीम के सभी सदस्य इसका उपयोग करके खुश हैं)। वही स्थैतिक जाँच उपकरणों के लिए जाता है; उदाहरण के लिए, अधिकतम स्तर पर .NET का कोड विश्लेषण बहुत दमनकारी और निराशाजनक हो सकता है, जबकि थोड़ा लाभ ला सकता है; मध्यम स्तर पर स्थापित एक ही उपकरण, दूसरी ओर, बहुत मददगार साबित होता है।
कोड समीक्षा
अब जब आपको कोड समीक्षाओं के दौरान शैली के बारे में परेशान करने की आवश्यकता नहीं है, तो आप अधिक दिलचस्प सामग्री पर ध्यान केंद्रित कर सकते हैं: स्रोत कोड को बढ़ाना (बनाम फिक्स करना)।
अलग-अलग व्यक्ति कोड समीक्षाओं के लिए अलग-अलग प्रतिक्रिया करते हैं। कुछ इसे एक अवसर मानते हैं। दूसरों को इससे नफरत है। कुछ आपके द्वारा बताई गई हर बात को सुनते हैं, नोट्स लेते हैं और चर्चा नहीं करते हैं, भले ही वे सही हों। दूसरे लोग हर बात पर बहस करने की कोशिश करते हैं। यह उसके व्यक्तित्व के अनुसार हर डेवलपर से निपटने का तरीका खोजने के लिए आप पर निर्भर है। यह आमतौर पर मददगार होता है:
निजी में कोड की समीक्षा करें, खासकर जब डेवलपर कनिष्ठ है और वास्तव में बुरा कोड लिखता है।
यह दिखाएं कि कुछ भी व्यक्तिगत नहीं है: आप कोड की समीक्षा कर रहे हैं, व्यक्ति के कौशल की नहीं।
कोड समीक्षा का वास्तविक लक्ष्य दिखाएं। लक्ष्य यह दिखाना नहीं है कि एक डेवलपर कितना बुरा है। लक्ष्य सुधार के अवसर प्रदान करना है।
कभी बहस नहीं करते। आप यहाँ समझाने के लिए नहीं, बल्कि अपनी विशेषज्ञता प्रदान करने के लिए हैं।
कभी न मानें कि समीक्षक केवल वही है जो समीक्षा से कुछ सीख सकता है। आप यहाँ भी हैं, कोड को पढ़कर और उन हिस्सों के बारे में स्पष्टीकरण पूछकर, जिन्हें आप नहीं समझते हैं।
एक बार कोड की समीक्षा हो जाने के बाद, सुनिश्चित करें कि व्यक्ति वास्तव में अपने कोड में सुधार करता है। मेरे पास कुछ मामले थे जहां डेवलपर्स ने सोचा कि वास्तविक बैठक समाप्त होने पर कोड समीक्षा समाप्त हो जाती है। वे अपनी नई सुविधाओं को छोड़ते हैं और वापस जाते हैं, जो आपने उनके साथ साझा किया था उसे केवल नए कोड के लिए लागू करने की कोशिश कर रहे हैं। कोड समीक्षा के लिए एक सभ्य ट्रैकिंग टूल रखने से मदद मिलती है।
ध्यान दें कि स्वतंत्र रूप से कंपनी में आपकी विशेष भूमिका और दूसरों की तुलना में आपकी विशेषज्ञता, आपके कोड के साथ-साथ समीक्षा के अधीन भी होनी चाहिए। आपको दूसरों के कोड की समीक्षा करने वाला केवल एक ही नहीं होना चाहिए।
एक हालिया परियोजना में जहां मैंने एक तकनीकी नेता के रूप में काम किया था, मेरे पास अपने सहकर्मियों को यह समझाने में कठिन समय था कि एक दूसरे के कोड की समीक्षाओं को करने के लिए मेरी भूमिका है। एक इंटर्न का डर जो अपने तकनीकी नेता के कोड की समीक्षा करने वाला है, जैसे ही वह कोड में पहले मुद्दे पाता है - और हमारे बीच कौन निर्दोष कोड लिखता है?
प्रशिक्षण
प्रोग्रामिंग और सॉफ़्टवेयर डिज़ाइन के कुछ पहलुओं को सिखाने और सीखने के लिए कोड समीक्षा एक शानदार अवसर है, लेकिन दूसरों को प्रशिक्षण की आवश्यकता होती है।
यदि आप अपने सहकर्मियों को प्रशिक्षित करने में सक्षम हैं, तो ऐसा करें। यदि प्रशिक्षण के विचार में आपका प्रबंधन शत्रुतापूर्ण है, तो इसे अनौपचारिक रूप से करें। मैंने इस तरह के प्रशिक्षण सत्र अनौपचारिक बैठकों के रूप में, या कभी-कभी एक साधारण चर्चा के रूप में भी किए हैं, कभी-कभी प्रबंधन द्वारा बाधित किया जाता है और बाद में पीछा किया जाता है।
प्रत्यक्ष प्रशिक्षण के अलावा, सुनिश्चित करें कि आप मैककोनेल कोड कम्प्लीट जैसी पुस्तकों को अच्छी तरह से जानते हैं , और अपने सहकर्मियों से उन पुस्तकों के बारे में बात करते हैं। ओपन सोर्स प्रोजेक्ट्स के सोर्स कोड को पढ़ने के लिए उन्हें सुझाव दें, उन्हें उच्च गुणवत्ता कोड के विशिष्ट उदाहरण दें। और, जाहिर है, उच्च गुणवत्ता कोड खुद लिखें।
संदर्भ पर ध्यान दें, व्यक्तियों पर नहीं
मैं इस स्थिति को केवल 'खराब कंपनी संस्कृति', 'अनुभवहीन स्नातक' आदि पर ध्यान दिए बिना कैसे संबोधित कर सकता हूं।
उन स्नातकों के पास एक लक्ष्य है: अनुभव प्राप्त करना, सामान सीखना, अधिक कुशल बनना। यदि, साल-दर-साल, वे भद्दा कोड लिखते हैं और प्रोग्रामिंग के बारे में कुछ भी नहीं जानते हैं, तो यह शायद इसलिए है क्योंकि आपकी टीम या आपकी कंपनी उन्हें यह अवसर नहीं दे रही है।
यदि आप इस तथ्य पर ध्यान केंद्रित कर रहे हैं कि आपकी टीम में अनुभवहीन स्नातक हैं, तो यह मदद नहीं करेगा। इसके बजाय, इस बात पर ध्यान केंद्रित करें कि आप उनके लिए और उनके साथ क्या कर सकते हैं। स्थिति की स्थिति को सुधारने के लिए कोड समीक्षाएं और प्रशिक्षण दो तकनीकें हैं।
बुरी कंपनी की संस्कृति एक अलग जानवर है। कभी-कभी, इसे बदला जा सकता है। कभी-कभी, यह नहीं हो सकता। सभी मामलों में, याद रखें कि आप कर रहे हैं इस कंपनी का हिस्सा है, तो आप कंपनी संस्कृति का हिस्सा हैं। यदि आप इसे बदल नहीं सकते हैं और इसे स्वाभाविक रूप से बुरा पाते हैं, तो जल्दी या बाद में, आपको छोड़ना होगा।
अपने मेट्रिक्स को सही करें
आप अभी कोड कैसे मापेंगे? क्या आप प्रति डेवलपर प्रति दिन कमिट की संख्या मापते हैं? या प्रोग्रामर प्रति माह KLOC? या शायद कोड कवरेज? या पाया और तय की कीड़े की संख्या? या प्रतिगमन परीक्षणों द्वारा पकड़े गए संभावित बगों की संख्या? या निरंतर तैनाती सर्वर द्वारा की गई श्रद्धा की संख्या?
आपके द्वारा मापी जाने वाली चीजें, क्योंकि टीम के सदस्य अपने काम को उन कारकों के साथ जोड़ रहे हैं, जिन्हें मापा जाता है। उदाहरण के लिए, एक कंपनी में जहां मुझे कुछ साल पहले काम करना था, केवल एक चीज जिसे मापा गया था वह वह थी जब कार्यालय में समय व्यतीत होता है। यह कहने की आवश्यकता नहीं है कि यह बेहतर कोड देने के लिए, या होशियार, या ... अच्छी तरह से काम करने के लिए प्रोत्साहित करने के लिए प्रोत्साहित नहीं कर रहा था।
सकारात्मक और नकारात्मक सुदृढीकरण का पता लगाना और समय के साथ मापा कारकों को समायोजित करना अनिवार्य रूप से आपके द्वारा टीम के सदस्यों पर किया गया लाभ है। जब ठीक से किया जाता है, तो परिणाम प्राप्त करना संभव बनाता है जो सरल पदानुक्रम द्वारा प्राप्त नहीं किया जाएगा।
जो चीजें आपको परेशान करती हैं, उन्हें मापने योग्य बनाते हैं। उन्हें मापें, और परिणाम सार्वजनिक करें। फिर परिणामों को बेहतर बनाने के लिए टीम के अन्य सदस्यों के साथ मिलकर काम करें।
उदाहरण के लिए, आइए विचार करें कि टीम के सदस्य कक्षाओं, कक्षा के सदस्यों और चर के नामों में बहुत अधिक वर्तनी की गलतियाँ करते हैं। यह कष्टप्रद है। आप इसे कैसे माप सकते हैं? एक पार्सर के साथ, आप कोड से सभी शब्दों को निकाल सकते हैं, और एक वर्तनी परीक्षक का उपयोग करके, गलतियों और टाइपो वाले शब्दों का अनुपात निर्धारित करते हैं, 16.7% कहते हैं।
आपका अगला कदम लक्ष्य अनुपात पर अपनी टीम से सहमत होना है। यह अगले स्प्रिंट के लिए 15%, अगले एक के लिए 10%, छह सप्ताह में 5% और दो महीनों में 0% हो सकता है। उन मैट्रिक्स को हर प्रतिबद्ध पर स्वचालित रूप से फिर से जोड़ा जाता है, और कार्यालय में एक बड़ी स्क्रीन पर प्रदर्शित किया जाता है।
यदि आप लक्ष्य अनुपात प्राप्त नहीं करते हैं, तो आपकी टीम वर्तनी की गलतियों को ठीक करने के लिए कुछ और समय बिताने का निर्णय ले सकती है। या आपकी टीम प्रति डेवलपर अनुपात की गणना करना बेहतर समझ सकती है, और इस जानकारी को बड़ी स्क्रीन पर भी प्रदर्शित कर सकती है। या आपकी टीम यह जान सकती है कि लक्ष्य बहुत आशावादी था, और आपको इसकी समीक्षा करनी चाहिए।
यदि आप लक्ष्य अनुपात प्राप्त करते हैं, तो अगला कदम यह सुनिश्चित करना है कि गलतियों और टाइपो की संख्या समय के साथ नहीं बढ़ेगी। उसके लिए, आप अपनी बिल्ड में एक अतिरिक्त कार्य बना सकते हैं जो वर्तनी की गलतियों की जाँच करता है, और कम से कम एक गलती पाए जाने पर बिल्ड को विफल कर देता है। अब जब आपको इस समस्या से छुटकारा मिल गया है, तो नए प्रासंगिक आँकड़ों को दिखाने के लिए आपकी बड़ी स्क्रीन का पुन: उपयोग किया जा सकता है।
निष्कर्ष
मेरा मानना है कि आपके प्रश्न में वर्णित प्रत्येक पहलू को उन तकनीकों के माध्यम से हल किया जा सकता है जिन्हें मैंने अपने उत्तर में शामिल किया है:
जब अन्य डेवलपर्स परियोजना में शामिल हुए, मैंने देखा कि वे एक अलग कोडिंग शैली का उपयोग करते हैं (कभी-कभी एक पूरी तरह से अलग शैली)
आपको स्टाइल को स्वत: लागू करना था ।
और अक्सर संपत्ति अभिगमकर्ताओं की तरह आधुनिक भाषा सुविधाओं का उपयोग नहीं करते हैं (यह उद्देश्य-सी में अपेक्षाकृत नया है)।
दोनों कोड समीक्षाएं और प्रशिक्षण भाषा के आपके ज्ञान को स्थानांतरित करने के लिए यहां हैं।
कभी-कभी वे फ्रेमवर्क की समान विशेषताओं का उपयोग करने के बजाय अपनी साइकिल का आविष्कार करेंगे
दोनों कोड समीक्षाएं और प्रशिक्षण यहां आपके ढांचे के ज्ञान को स्थानांतरित करने के लिए हैं।
या अन्य प्रोग्रामिंग भाषाओं या पेटेंट से अवधारणाओं को स्थानांतरित करना जो उन्होंने हमारे कोड बेस में सीखे।
यह एक उत्कृष्ट बात है। आपके लिए उनसे सीखने का अवसर जैसा लगता है।
खराब अंग्रेजी के कारण अक्सर वे तरीकों या चर का नाम ठीक से नहीं ले पाते हैं
कोड समीक्षाओं को उचित नामकरण पर भी ध्यान देना चाहिए। कुछ IDE में वर्तनी परीक्षक भी होते हैं।
कभी-कभी मुझे लगता है कि अगर यह आईडीई के लिए नहीं था, तो मुझे लगता है कि वे सभी कोड को बिना किसी इंडेंटेशन या फॉर्मेटिंग के लिखेंगे।
बेशक वे करेंगे। शैली उबाऊ है और इसे स्वचालित होना चाहिए।
असल में, मुझे उनके लिखे कोड से नफरत है।
कोड समीक्षा भाग से याद रखें: “लक्ष्य यह दिखाना नहीं है कि एक डेवलपर कितना बुरा है। लक्ष्य सुधार के अवसर प्रदान करना है। ”
यह बुरी तरह से स्वरूपित / संगठित है, और कभी-कभी परियोजना के बाकी हिस्सों से मौलिक रूप से भिन्न होता है।
स्वचालित शैली की जाँच।
मुझे बहुत तकलीफ होती है जब वे अपनी स्पेगेटी को मेरी कला के टुकड़े में शामिल करते हैं
रुको क्या?! कला का नमुना?! अंदाज़ा लगाओ? कुछ व्यक्ति (छह महीने में आप सहित) को कला का एक टुकड़ा होने से आपका कोड मिल सकता है। इस बीच, यह समझें कि आपके काम को कला का एक टुकड़ा और बकवास के रूप में उनके काम पर विचार करना किसी की मदद नहीं करेगा। आपको शामिल करके।
यह अधिक से अधिक महसूस करता है कि उन्हें सीखने या परवाह नहीं करने के लिए परेशान नहीं किया जा सकता है: वे बस वही करते हैं जो उनसे आवश्यक है और घर जाते हैं।
बेशक वे वही करेंगे जो उनसे अपेक्षित है। याद रखें: संदर्भ, न कि व्यक्ति और अपने मीट्रिक सही प्राप्त करें । यदि संदर्भ को उनके लिए आवश्यक है कि वे जो भी करते हैं, उसमें सर्वश्रेष्ठ बने, तो वे ऐसा करेंगे। यदि संदर्भ को प्रति माह अधिक से अधिक KLOC का उत्पादन करने की आवश्यकता है और इससे अधिक कुछ नहीं है, तो वे इसे भी करेंगे।