2009-06-06 7 views
6

G'day,किसी को यह बताने के लिए कि उनके कार्यक्रम में उनके मोड अच्छे नहीं हैं?

यह my question on star developers करने और this question regarding telling someone that they're writing bad code से संबंधित है, लेकिन मैं एक स्थिति है कि अधिक विशिष्ट है पर देख रहा हूँ।

यही है, मैं एक "स्टार" कैसे कहूं कि मैंने जो प्रोग्राम लिखा है, उसमें उनके बदलाव खराब तरीके से किए गए हैं और बिना किसी आवाज के असंगत रूप से लागू किए गए हैं जैसे कि मैं किसी को "मेरी सामग्री के साथ खेलना" से नाराज हूं?

नई कार्यक्षमता को इस शेल स्क्रिप्ट के मूल संस्करण से जानबूझकर छोड़ दिया गया ताकि इसे यथासंभव सरल रखा जा सके, जब तक कि हमें त्रुटियों के बारे में कोई जानकारी न हो, जिसे हम लोड के तहत सिस्टम के साथ देखने जा रहे थे।

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

क्या जोड़े जाने की आवश्यकता देखने के बाद, किसी में डुबकी लगाई और परिवर्धन लेकिन दुर्भाग्य से बनाया:

  1. तर्क है नहीं संगत
  2. चर नाम नहीं रह गया डेटा वे
  3. वहाँ
  4. शामिल वर्णन लगभग सभी
  5. जिस तरह चर उपयोग किया जाता है पर कोई टिप्पणी नहीं पालन करने के लिए आसान नहीं है और बड़े पैमाने पर पठनीयता और इसलिए रख-रखाव की कम हो जाती है।

मैं हमेशा डेमियन कॉन्वे के दृष्टिकोण से कोडिंग का प्रयास करता हूं और दृष्टिकोण करता हूं "हमेशा कोड करें जैसे कि आपका सिस्टम एक मनोचिकित्सा द्वारा बनाए रखा जा रहा है जो जानता है कि आप कहां रहते हैं।" यही है, मैं अपने स्वयं के प्रतिभा के लिए एक विज्ञापन के रूप में पालन करने के लिए आसान बनाने की कोशिश करता हूं। "कोड का यह टुकड़ा क्या करता है?" व्यायाम मजेदार हैं और आईएमएचओ obfuscation प्रतियोगिताओं के लिए सबसे अच्छा छोड़ दिया जाता है।

कोई सुझाव बहुत प्राप्त किया।

चियर्स,

+2

अच्छे कोडिंग प्रथाओं पर एक पुस्तक के साथ उसे मारने के बारे में कैसे? ;-) –

उत्तर

10

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

यह सुनिश्चित करने का प्रयास करें कि प्रतिक्रिया पूरी तरह से कोड व्यक्ति के बजाय है। उदाहरण के लिए:

अच्छा: foo() में तर्क सत्यापन bar() में इसके साथ असंगत प्रतीत होता है। foo() में, NullPointerException को कॉल किया जाता है यदि कॉलर null में गुजरता है, जबकि bar()IllegalArgumentException फेंकता है।

खराब: आपकी तर्क सत्यापन पूरी जगह पर है। foo() में NullPointerException फेंक दें लेकिन bar() में IllegalArgumentException। कृपया सुसंगत होने का प्रयास करें।

यहां तक ​​कि "कृपया" के साथ, दूसरा फॉर्म कोड के बजाए डेवलपर के बारे में बात कर रहा है।

बेशक कई मामलों में आपको इतनी सावधान रहने की चिंता करने की आवश्यकता नहीं है, लेकिन अगर आपको लगता है कि वे इसके बारे में बहुत संवेदनशील हैं, तो यह प्रयास करने लायक है। (यदि आपने लिखित प्रतिक्रिया लिखा है, तो आपने ध्यान से लिखा है: मैंने गलती से पहले संस्करण में "आप" को शामिल किया है :)

मुझे पता चला है कि अधिकांश डेवलपर्स (सुपरस्टार या नहीं) के बारे में काफी उचित हैं स्वीकार करते हुए, "नहीं, मैंने उस सुविधा को लागू नहीं किया क्योंकि इसमें समस्या X है।" यह संभव है कि मैं भाग्यशाली रहा हूं।

+0

मैं आगे जाऊंगा और कहूंगा कि फीडबैक पूरी तरह से किया जाना चाहिए, क्या गलत है। मत कहो, "मैं इस कोड को स्वीकार नहीं कर सकता क्योंकि परिवर्तनीय नाम खराब हैं।" कहें, "मुझे लगता है कि आपने क्या किया है, लेकिन इससे पहले कि मैं आपके संपादन शामिल कर सकूं, वैरिएबल नामों को बेहतर बनाने की आवश्यकता है।" या यदि आप बिल्कुल सुविधा नहीं चाहते हैं, तो सुझाव दें कि वे आपकी परियोजना को फोर्क करें। –

1

आप स्पष्ट रूप से इस परियोजना के लिए मानकों कोडिंग परिभाषित किया है, का कहना है कि कोड उन मानकों को पूरा करने के लिए बदलने की आवश्यकता। आपके पास मौजूद सूची में काफी उचित प्रतिक्रिया दिखाई देती है (हालांकि # 3 बहुत अधिक तर्क दिया गया है; मैं केवल अन्य तीन बिंदुओं को ठीक करने के रूप में वास्तव में भ्रमित करने वाले हिस्सों को दस्तावेज करने के लिए दबाव डालूंगा, उम्मीद है कि कोड कम भ्रमित कर देगा)।

1

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

6

अन्य परिप्रेक्ष्य से आ रहा है, मैं आपको अपने जूते में इसके बारे में सोचने के लिए प्रोत्साहित करता हूं। मैं एक "काल्पनिक" अनुभव का वर्णन करूंगा।

कुछ बातें ध्यान में रखना:

  • पुरुष कुछ अच्छा करने के लिए कोशिश कर रहा था।
  • प्रोग्रामर दिमाग पढ़ने पर भयानक हैं। वे केवल को पढ़ते हैं जो वे पढ़ते हैं।
  • उसे पूरा मार्गदर्शन नहीं दिया जा सकता है (या क्या करने की आवश्यकता नहीं है)
  • वह शायद वह सबसे अच्छा कर रहा है जिसे वह जानता है।

बस इसे ध्यान में रखें और उनसे बात करें। उनको सिखाओ। चिल्लाने या पिसिंग प्रतियोगिताओं की कोई ज़रूरत नहीं है। बस याद रखें कि वे जानबूझकर अपने जीवन को कठिन बनाने की कोशिश नहीं कर रहे हैं।

3

मुझे लगता है कि आपने कुछ प्रकार के डेवलपर्स से निपटने के तरीके के बारे में बहुत सारे प्रश्न पूछे हैं। यह आपके लिए एक आम धागा प्रतीत होता है। आप अपने आस-पास के लोगों को बदलने के बारे में पूछते रहते हैं। यदि यह आपके लिए एक सतत समस्या है, तो शायद आप समस्या है।

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

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

+0

@ रिचर्ड, प्रतिक्रिया के लिए धन्यवाद। मैं इस मुद्दे पर कुछ आत्मा खोज रहा हूं। वास्तव में मजाकिया बात यह है कि मैंने उन सभी प्रश्नों के बारे में पूछा है जो एक ही व्यक्ति के बारे में हैं! (-: –

1

सचमुच, मुझे लगता है कि यह एक राजनीतिक समस्या है, कोडिंग समस्या नहीं।विशेष रूप से ...

  1. डब्ल्यूएचओ ने कहा कि यह व्यक्ति एक "स्टार" था? यदि यह वही व्यक्ति है जिसे आपने अपने अन्य प्रश्न में वर्णित किया है, तो आपके पास पहले से ही आपका उत्तर है: यह व्यक्ति नहीं "स्टार" है।

तो फिर आप राजनीति के अन्य प्रभावों में मिल ...

  1. कौन इस व्यक्ति दावा कर रहा है एक स्टार होने के लिए? आप सिर्फ उस व्यक्ति को क्यों नहीं बता सकते "यह बकवास कोड है"? उनकी रक्षा कौन कर रहा है/उनका बचाव करना क्या आप ऐसा करने के लिए थे? क्या आप ऐसा कर सकते हैं या आप "ढीला" ढेर पर विस्फोट/डिमोट/डाल देंगे?

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

चीयर्स,

आर

1

एक कार्यक्रम बनाया जा रहा है और उसके बाद जारी यह अन्य डेवलपर्स द्वारा पर काम किया जा करने के लिए कठिन है। आप दूसरों के विकास शैलियों, कोडिंग सम्मेलनों, आदि की दया के लिए अपना कोड फेंक रहे हैं

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

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

हमेशा अपने कोड में अच्छी चीजों को इंगित करें, और सुनिश्चित करें कि कमजोरियों पर चर्चा करते समय आप उन्हें बताते हैं कि इससे सभी को लाभ होगा (डेवलपर शामिल), कभी आलोचना नहीं करते।

शुभकामनाएं।

1

मैं क्या करना होगा निम्नलिखित:

  • यकीन है कि वह जानता है कि उसकी कड़ी मेहनत की सराहना की गई है (अधिमानतः, इस सच्चाई को होना चाहिए)
  • उसे आप से पूछें कि वह कुछ परिवर्तन कर मन होता है, जिससे यह
  • को हल करने में आसान कोई समस्या नहीं है, मुद्दों को समझाएं, जिसमें वे समस्याएं हैं, और सही रास्ते पर सेट करने के लिए विशिष्ट परिवर्तनों का सुझाव दें।

उम्मीद है कि इस अभ्यास से उन्हें संस्कृति परियोजना में बेहतर तरीके से एकीकृत करने में मदद मिलेगी।

1

हम हल करने का प्रयास इन संभावित 'मुद्दों' सक्रियता से:

  • हर 'बड़ा' परियोजना जहां लोगों को एक साथ काम करने के लिए एक परियोजना 'codelead' (डेवलपर्स में से एक) सौंप दिया जाता है। यह प्रत्येक परियोजना को घुमाता है (वरीयताओं के आधार पर, विशेष कार्य के साथ अनुभव ...) ताकि प्रत्येक व्यक्ति थोड़ी देर में 'योगदान' और 'कोड-प्रोजेक्ट-लीड' भूमिकाओं में हो।
  • हम स्पष्ट रूप एक समझौता किया है कि इन परियोजना 'सुराग' तय कर सकते हैं जो कुछ भी वे दूसरों की योगदान ( एक अस्थायी तानाशाही की तरह की तरह कोड के साथ करना चाहते हैं: परिवर्तन यह सुझाव बनाने, करने के लिए कह फिर से सामान आदि)। प्रोजेक्ट कोड 'लीड' काम करने के लिए समेकित कोड के लिए पूर्ण ज़िम्मेदारी धारण करता है।

इन औपचारिक 'लीड' (और बदलती भूमिकाओं) के साथ मुझे लगता है कि लोगों को उनके द्वारा योगदान किए गए हिस्सों की आलोचना (रचनात्मक) आलोचना के साथ कम समस्याएं हैं।

1

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

इसके अलावा, इस सुविधाओं/कोड है कि बहुत विशिष्ट हैं और अधिकांश उपयोगकर्ताओं के लिए किसी काम के नहीं हैं, कोड/उपयोग अनुपात के बारे में अपनी चिंताओं को व्यक्त के बारे में है - वृद्धि हुई कोड बेस जटिलता आदि

के बारे में चिंताओं का संकेत आदर्श रूप में, अपनी चिंताओं को ओपन-एंडेड प्रश्नों के रूप में प्रस्तुत करें - इस अर्थ में: "हालांकि, मैं सोच रहा हूं कि ऐसा करने का यह तरीका लंबी अवधि में काम कर सकता है ..."। ताकि आप वास्तव में योगदानकर्ताओं के बीच एक सक्रिय संवाद को प्रोत्साहित कर सकें।

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

आप मूल रूप से एक अनौपचारिक समीक्षा को प्रोत्साहित कर रहे हैं, जिससे आप अपने समुदाय से प्रस्तावित परिवर्धनों को भी देख सकें, ताकि फायदे और नुकसान पर चर्चा की जा सके।

तो, जो कुछ भी निर्णय होगा, वह एक समुदाय समर्थित है, न केवल आपके द्वारा बनाया गया है।

आप मूल डिजाइन के आर्किटेक्ट हैं, वास्तुकला के कारणों को प्रदान करने के लिए उत्कृष्ट स्थिति में भी हैं, क्यों कुछ शामिल नहीं है (अभी तक) शामिल/तैनाती के लिए उपयुक्त है।

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

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

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

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

आदर्श रूप से, इस योगदान को वास्तव में स्वीकार करने के लिए अपनी आवश्यकताओं को प्रस्तुत करें और अपनी आवश्यकताओं के लिए पृष्ठभूमि का जिक्र करें, आप वास्तव में कह सकते हैं कि आप इन आवश्यकताओं में से कुछ से नफरत करते हैं।

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

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

हमेशा सुविधाओं और कार्यक्षमता के संदर्भ में सोचें (और अपने योगदानकर्ता को ऐसा करने के लिए याद दिलाएं), कोड नहीं - इसे पूरी तरह से कोड समीक्षा प्रक्रिया की तरह कल्पना करें, जहां अंतिम कोड जो प्रतिबद्ध/स्वीकृत होने पर समाप्त होता है, शायद ही कभी हो मूल कार्यान्वयन के साथ कुछ भी सामान्य है।

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

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

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

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

संबंधित मुद्दे