जब आप विरासत कोड सौंपते हैं तो आप अपने स्वयं के कोडिंग पूर्वाग्रहों को कैसे दूर करते हैं? [बन्द है]


22

प्रोग्रामर के रूप में, हम अक्सर अपने कौशल पर अविश्वसनीय गर्व करते हैं और 'अच्छा' कोड और 'बुरा' कोड के बारे में बहुत मजबूत राय रखते हैं।

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

जब आप किसी अन्य प्रोग्रामर के काम के आसपास अपना सिर पाने की कोशिश कर रहे हों तो आप खुद को मानसिक रूप से कैसे तैयार करते हैं?


2
वाह ... यह प्रश्न वास्तव में मेरे लिए अभी प्रासंगिक है।
वाल्टरजॉ।

1
यदि यह टूटा नहीं है, तो इसे ठीक न करें। :-)
रिचार्ड

चीजें जो आपको कभी नहीं करनी चाहिए और बिग बॉल ऑफ मड सभी प्रोग्रामर के लिए इस विषय पर पढ़ना अनिवार्य होना चाहिए।
Jan Hudec

जवाबों:


31

किसी भी विरासत कोड आधार के लिए, इसके लिए खुद को मानसिक रूप से तैयार करने का सही तरीका इसके लिए इकाई परीक्षण लिखकर शुरू करना है

चाहे वह बेकार हो या न हो, आपको पहले सामान को तोड़ने के बिना इसे बदलने में सक्षम होने के लिए आत्मविश्वास की आवश्यकता है!


6
+1। अन्य कार्यक्रम अक्सर मौजूदा कोड में बग पर निर्भर करते हैं , चीजों को करने के अपने अजीब तरीकों पर कभी ध्यान नहीं देते हैं। इससे पहले कि आप इसके साथ मिलिंग करें, इसे समझें!
बजे एलेक्स फेइमैन

मुझे एक बार यह समस्या हुई थी। मैंने हमारे आंतरिक पुस्तकालयों में एक बग तय किया, लेकिन यह पता चला कि बहुत से महत्वपूर्ण कोड उस गलत व्यवहार पर निर्भर थे। ओह।
जोनाथन स्टर्लिंग

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

5
यह मानता है कि आपकी कंपनी उपयोग करती है, या यहां तक ​​कि समझती है, इकाई परीक्षण। अधिकांश समय कोड के लिए कोई परीक्षण नहीं होता है, कोई प्रलेखन और इसे एकीकृत / ठीक करने / संशोधित करने के लिए एक तंग समय सीमा नहीं होती है, इसलिए आप इसके लिए सिर्फ "इकाई परीक्षण लिखना शुरू" नहीं कर सकते हैं।
वेन मोलिना

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

30

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


3
कुछ समय के लिए मेरे साथ हुआ। कभी-कभी इसका बेहतर सिर्फ इसे छोड़ना
TheLQ

4
और अगर आपको पता चले, तो अगले आदमी की तरह रहिए और टिप्पणी लिखिए!
फ्रैंक शीयर

11

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

मुझे लगता है कि फोस्को के पास संभावित समय और कार्यक्षमता प्रतिबंधों के संदर्भ में इसे लागू करने में सक्षम होने के लिए एक महान बिंदु था। कभी-कभी आपको काम करने के लिए मजबूर किया जाता है।

और अंत में, समझ में आया कि यही कारण है कि आपके पास नौकरी है।


4
मेरे लिए हर समय होता है। मैं लगातार पुराने कोड को देख रहा हूं और अपने आप को सोच रहा हूं: "यह बकवास किसने लिखी? ओह हां .. मैंने किया।" मुझे लगता है कि यह दिखाता है कि आप एक प्रोग्रामर के रूप में बढ़ रहे हैं यदि आप स्वीकार कर सकते हैं कि आपके द्वारा अतीत में लिखा गया कुछ कोड खराब है। यदि आप इसे पीछे देखते हैं और कहते हैं "हां, मुझे अच्छा लग रहा है", या तो यह बहुत अच्छा कोड है, या आप प्रगति नहीं कर रहे हैं। : पी
१६:४० पर १६:१० से जसारीन

7

इस पर हंसें, कोशिश करें कि इसे बहुत अधिक न आंकें, और बस इसके माध्यम से प्राप्त करें। एक वास्तविक कोड-नाज़ी होना अच्छा नहीं है ... निश्चित रूप से 'अच्छा पर्याप्त' या यहाँ तक कि 'उस समय अच्छा है' जैसी कोई चीज नहीं है। कई बार ऐसा होता है, जहां किसी संकट को ठीक करने के लिए कुछ विकसित या बंद किया जाता है, फिर कभी उसका पुनरीक्षण नहीं किया जाता है।

यदि यह वास्तव में खराब है, तो देखें कि क्या आप इसे फिर से लिखने के लिए एक मामला बना सकते हैं .. यदि यह महत्वपूर्ण नहीं है, तो बस अंदर जाओ और बाहर निकलो।


7

अपनी लड़ाई उठाओ। "मैं इसे इस तरह नहीं लिखूंगा" और "यह एक गंभीर रखरखाव या समर्थन चुनौती बनाता है" के बीच का अंतर पता है


मैं इस जवाब को चुरा लूंगा। :-)
बैसाखी

4

अक्सर मुझे यह महसूस करने के लिए उपयोगी लगता है कि मूल देवों ने जो सोचा था वह अच्छा था।

पैटर्न और थीम के लिए देखें कि उन्होंने क्या किया और बहुत बार आप पाते हैं कि पहली बार में कुछ अजीब फैसलों के कारण थे।

कभी-कभी आप पाते हैं कि मूल देव वास्तव में बुरा था, लेकिन आपको इस बात का अंदाजा है कि तब वे किस तरह के बुरे बेच रहे थे।

किसी भी तरह से, ऐसा करने के बाद आपके पास एक बेहतर तस्वीर होनी चाहिए जहां आप फिर से लिखना शुरू कर सकते हैं या सब कुछ ठीक करने के बिना एक त्वरित-फिक्स क्या लगेगा।

सबसे महत्वपूर्ण बात, तुरंत यह मत समझो कि यह बदसूरत है क्योंकि यह बुरा है। कुछ भी नहीं है आप और अधिक मूर्ख लग रहे हो कि समय बिताने के लिए कुछ का आधुनिकीकरण केवल यह पता लगाने के लिए कि यह मूल से कम सक्षम है।


3

अगर मेरे पास समय है तो मैं इस पर हमला करूं और खराब लिखे कोड को मार दूं।

यह युद्ध है।


3

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

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


3

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


आह, WHY के पुराने सवाल ...

1

अतीत में जब मेरे पास किसी और के कोड पर पेशाब करने का समय नहीं था और इसे "मेरी" शैली में हरा दिया, तो मुझे बहुत टास्क-संचालित होने का सहारा लेना पड़ा:

मैं इस कोड को जोड़ने / बनाने / काम करने की कोशिश कर रहा हूं?

क्या मैं उस लक्ष्य की ओर काम कर रहा हूं? यदि नहीं, तो इसे करना बंद करें, और पिछली बार जब मैं कार्य-उन्मुख परिवर्तन कर रहा था, तब वापस लौटा।

क्या मैं इस कार्य के साथ हूँ? यदि हां, तो कोड के साथ छेड़छाड़ करना बंद कर दें, भले ही ऐसा लगता है कि यह गैर-संवेदी मार्टियन मोल्ड द्वारा लिखा गया था।


1

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

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


1

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


0

मैं इन दिनों विरासत कोड पर विशेष रूप से काम कर रहा हूं और मैं हमेशा सोचता हूं "ओह श% टी, वे क्या सोच रहे थे?" फिर मैं कोड के लिए इकाई परीक्षण लिखना शुरू करता हूं और यही वह बिंदु है जहां मुझे वास्तव में नियंत्रण प्रवाह और निर्भरता का विश्लेषण करना है।

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

मेरे लिए यह सोचने में मदद करता है कि जब मैं 12 महीने में वापस आऊंगा तो मेरा कोड खुद को वही दिखेगा


0

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

यहाँ कुछ बुरे कोड के मार्कर हैं:

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

स्वचालित परीक्षणों की कमी का मतलब यह नहीं है कि कोड खराब है, लेकिन इसका मतलब है कि परियोजना खराब है।

ये स्वाद का मामला नहीं हैं; ये अभ्यास कार्यक्रम के रखरखाव को बहुत अधिक महंगा बनाते हैं।

आप खुद को कैसे तैयार करते हैं?

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.