क्या विरासत कोड के साथ काम करने से प्रोग्रामर के रूप में विकसित होने में मदद मिलती है? [बन्द है]


18

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

क्या आप एक शुरुआत के लिए एक अच्छा अभ्यास के लिए एक बड़े और संभवतः नहीं लिखे गए आवेदन से निपटने पर विचार करेंगे?



1
अन्य लोगों की गलतियों से सीखना अनुभव प्राप्त करने का सबसे सुरक्षित तरीका है ...
माइकल बोर्गवर्ड

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

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

जवाबों:


34

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

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

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

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


2
वास्तव में, यदि आपके पास कोड का अध्ययन करने के लिए 4 महीने हैं, तो आपको उस दस्तावेज़ को जोड़ने वाले टिप्पणियों को जोड़ने में बहुत सारे 4 महीने बिताने चाहिए और परीक्षण लिखने से यह साबित होता है कि महत्वपूर्ण घटक सही तरीके से काम करते हैं (जैसा कि वे आशा करते हैं)।
रॉस पैटरसन

1
@RossPatterson, चूंकि यह बैंकिंग है, हाँ, मुझे उम्मीद है कि वे वास्तव में अब सही ढंग से काम करेंगे। किसी भी समय अगर कोई परीक्षण नहीं होता है, तो बैंकिंग में बदलाव करने का जोखिम बहुत बड़ा है और यूनिट टेस्ट लिखने में मदद करने के लिए आपको सिस्टम को एक आसान बेचना चाहिए।
HLGEM

3
प्रोग्रामिंग यह जानना है कि टुकड़ों को कैसे स्थानांतरित किया जाए। एक प्रणाली को समझना खेल खेलना है। आप कौशल निर्माण के दृष्टिकोण से अनुभव पर पछतावा नहीं करेंगे। विधवाओं और अनाथों से चोरी करने वाली कंपनियों के लिए काम करना कुछ ऐसा है जिसे आपका विवेक बर्दाश्त नहीं कर सकता है।
मेरेडिथ पुअर

8

मुझे लगता है कि यह किसी के लिए भी एक उत्कृष्ट अभ्यास है। दूसरों के अनुभव से सीखना बहुत प्रभावी हो सकता है।

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


2
यह आपको उस पद्धति को समझने में भी मदद करता है जो आपको लगता है कि उन्हें उपयोग करना चाहिए था जब कोड लिखा गया था तो उपलब्ध नहीं था।
HLGEM

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

6

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

यदि आप चुनौती के लिए तैयार हैं, तो इस प्रोजेक्ट को आगे बढ़ाएं और इसे बेहतर बनाएं।


2

यह आपकी पूरी मदद करेगा, लेकिन आपको सावधान रहने की जरूरत है।

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

और उस पहली नौकरी में बहुत लंबे समय तक रहना, और आप सीख नहीं सकते हैं या पर्याप्त कौशल का निर्माण कर सकते हैं और अंत में वहीं अटक सकते हैं।


2

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

मुझे नहीं लगता कि इस तरह की नौकरियों और परियोजनाओं के खिलाफ पर्याप्त चेतावनियां हैं जो आपके करियर को मोड़ देती हैं और आपको इस थ्रेड पर आज तक वैल्यूलेस सिंक छेद में फंस जाती हैं।

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

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

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

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

जब तक आपने 'भ्रष्ट' नहीं होने के लिए पर्याप्त अच्छा कोड देखा है, तब तक एक को बुरे कोड से दूर रहना पड़ सकता है। मुझे यह कहना पसंद है कि वरिष्ठ डेवलपर्स जटिल समस्याओं के सरल समाधान बनाते हैं। बुद्धिमानों की तरह, जूनियर मिड लेवल डेवलपर्स सरल और जटिल समस्याओं के लिए जटिल समाधान बनाते हैं।

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

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

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

डिस्क्लेमर: यह पोस्ट मेरी राय से ज्यादा लंबी रहेगी, इसलिए इसे नमक के दाने के साथ लें। कल मैं विरासत कोड प्यार हो सकता है! (मुझे शक है)।


1

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

C ++ स्ट्रीम और स्ट्रिंग्स और कुछ एसटीएल विशिष्टताओं के प्रदर्शन के मुद्दों को छोड़ दें, तो यह सुनिश्चित करना एक बहुत अच्छा अभ्यास है कि आपके इतने प्यारे प्रीप्रोसेसर निर्देश के अंदर क्या है #include <string.h>। यदि आप कार्यान्वयन के लिए पथ का अनुसरण करते हैं और अपने आप को एक यूनिक्स / लिनक्स मशीन पर /usr/include/string.hपाते हैं (और उदाहरण के लिए, gnu.org से libc कार्यान्वयन स्रोत प्राप्त करते हैं ) और पढ़ें strcmp.cया strlen.cया strtok.c, मुझे यकीन है कि आप सुन रहे हैं "क्या एक सुंदर दुनिया है "चरणबद्ध होकर।

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

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