मैं एक कार किराए पर लेने की कंपनी के लिए एक किराये के एजेंट / प्रबंधक के रूप में काम करता हूं जो कि एक किराये की प्रणाली पर चल रहा है जो 1972 में लिखा गया था। मैंने फैसला किया कि शायद यह एक अद्यतन के लिए समय था। पृष्ठभूमि के एक बिट के लिए, यहां पागलपन का एक छोटा उदाहरण है जिसे हमें इस कार्यक्रम से दैनिक रूप से निपटना है:
एक किराये के एजेंट को यह याद रखना चाहिए कि एसी स्क्रीन का मुद्रण कार्य क्षेत्र में "एमएक्ससी" का उपयोग करता है (सब कुछ शॉर्ट कोड पर आधारित है), जो "अनुबंध पर MaXimum प्रदर्शन" के लिए पूरी तरह से खड़ा है, जबकि दूसरे पर इसे पीआर (PRint के लिए) की आवश्यकता होती है कार्य क्षेत्र, लेकिन कई स्क्रीन पीटी (प्रिंसटी के लिए) फ़ील्ड में वाई का उपयोग करते हैं, फिर भी पीआरटी (पीआरआईएनटी के लिए) फ़ील्ड में दूसरी स्क्रीन वाई का उपयोग करती है, फिर भी एक और स्क्रीन के लिए उपयोगकर्ता को हिट करने की आवश्यकता होती है (लेकिन अगले में प्रवेश नहीं होता है) अक्षर, जैसा कि एक नई पंक्ति वर्ण है, यह नंबर पैड पर दर्ज होना चाहिए) और फिर F8, एक अलग लेकिन संबंधित स्क्रीन के लिए बस F8 की आवश्यकता होती है, कुछ स्क्रीन में PRT लेबल वाला एक फ़ील्ड होता है, जो PRINT के लिए होना चाहिए, लेकिन वास्तव में फ़ील्ड कई संकेतों के माध्यम से जाने के बाद कुछ भी नहीं होता है और प्रिंटिंग स्वचालित रूप से होती है, और अभी भी अधिक स्क्रीन पर PRINT Y / N का लेबल लगा होता है।जो संचालन के लिए वाई के लिए पूरी तरह से चूक करता है जिसमें एक अन्य स्थान पहले से ही कागजी कार्रवाई कर रहा है, और एन के संचालन के लिए जिसमें एक अन्य डीलर को कागजी कार्रवाई की आवश्यकता होगी।
मैंने फैसला किया कि मैं इससे बेहतर काम कर सकता हूं, इसलिए मैंने कंपनी के उस व्यक्ति से संपर्क करने का फैसला किया जो इसे अपडेट करने का निर्णय करेगा। मैं अंततः आईटी के वीपी के माध्यम से मिलता हूं, जो इस कार्यक्रम के प्रभारी हैं। मुझे उसके बारे में थोड़ी सी जानकारी मिलती है, और यह पता चलता है कि मेरी कार रेंटल कंपनी का आईबीएम मेनफ्रेम असेंबलर में किराये पर लिया गया प्रोग्राम है, जिसमें थोड़ा सा कॉबोल मिला हुआ है। वह कहता है कि अभी कोई पोजिशन नहीं है, लेकिन मुझे चाहिए वैसे भी उसे फिर से शुरू करने के लिए मुझे ई-मेल करें (यदि कुछ खुलता है)।
यह मुझे मेरे सवालों की ओर ले जाता है।
पहला तकनीकी है। भविष्य में रखरखाव में सुधार के विचार के साथ, मेरा विचार इसे विधानसभा भाषा की तुलना में उच्च-स्तरीय भाषा में फिर से लिखना है। मेरे अनुभव का क्षेत्र C ++ में है, इसलिए यह मेरे लिए स्पष्ट विकल्प है। कंपनी को कार्यक्रम को अपडेट करने के लिए एक आसान तरीके की सख्त आवश्यकता है, क्योंकि मैंने हाल ही में एक लेख पढ़ा है जिसमें मैंने जिस आदमी के साथ बात की थी, ने कहा कि टीम ने कड़ी मेहनत की है, और उन्हें यह घोषणा करते हुए गर्व है कि अब इस कार्यक्रम में 5 के लिए समर्थन है -digit स्थान कोड (4 के बजाय) और 8 अंकों की कार संख्या (7 के बजाय)। अद्यतनों पर मेरा दर्शन, यहां तक कि इस गंभीर स्थिति में, जोएल के साथ है: http://www.joelonsoftware.com/articles/fog0000000069.html संक्षेप में, फिर से लिखना वृद्धिशील होना चाहिए, बजाय सब कुछ बाहर फेंकने से पहले। और नए सिरे से शुरू।
क्या आईबीएम असेंबली को सी ++ के साथ एकीकृत करने का एक आसान तरीका है, और यदि हां, तो मुझे यह कैसे करना चाहिए? मैं asm कीवर्ड के बारे में पूरी तरह से वाकिफ हूं, लेकिन मुझे नहीं पता कि इसका उपयोग करना सबसे अच्छा है या कुछ और। क्या इस तरह की योजना की सलाह है? मैं g ++ और GNU मेक का उपयोग करते हुए लिनक्स पर अपना ज्यादातर काम करता हूं, इसलिए उस के लिए विशिष्ट उत्तर का स्वागत किया जाता है, लेकिन निश्चित रूप से आवश्यक नहीं है (क्योंकि मुझे नहीं पता है कि उनके पास किस प्रकार की बिल्ड सिस्टम है, लेकिन मुझे लगभग कोई संदेह नहीं है)।
दूसरा प्रश्न अधिक राजनीतिक है। मुझे इस कंपनी को राजी करने के बारे में कैसे जाना चाहिए कि उन्हें स्विच बनाने की आवश्यकता है? सैद्धांतिक लागत बचत बहुत बड़ी है (मेरे अनुमानों के आधार पर, कंपनी प्रति वर्ष अतिरिक्त मिलियन या इतने डॉलर बर्बाद कर रही है, बस प्रशिक्षण लागत में वृद्धि के साथ कार्यक्रम के साथ बातचीत करने का तरीका जानने के लिए), लेकिन मेरे प्रस्तावित बदलाव शायद सभी को डाल देंगे। वर्तमान प्रोग्रामर काम से बाहर हैं, क्या उन्हें अधिनियमित किया जाना चाहिए, इसलिए परिवर्तन के लिए महान संरचनात्मक प्रतिरोध है।
संपादित करें: मुझे समझाना चाहिए कि मुझे क्यों संशोधित करना है कि कंपनी पहले से ही मेरे लिए सबसे अच्छा समाधान है। मैं अभी भी अन्य सुझावों के लिए खुला हूं, क्योंकि यह एक कार्यक्रम का एक राक्षस है, हालांकि। मैंने पहले कभी भी प्रोग्रामिंग काम नहीं किया है, इसलिए कृपया मुझे किसी भी गलत विश्लेषण पर सही करें जो मैं दे सकता हूं।
सबसे पहले, ऑफ-द-शेल्फ समाधान है।
इस तरह की बात के बारे में कुछ मध्य स्तर के प्रबंधकों के साथ मेरी बातचीत से, एक नई प्रणाली पर स्विच करने के साथ मुख्य चिंताओं में से एक बड़ी संख्या में निष्ठावान कर्मचारी हैं जो दशकों से कंपनी के साथ हैं और अब तक सिस्टम के साथ सहज हैं । यदि मेरे पास जो कुछ भी है उसे संशोधित करने की क्षमता है, तो मैं वर्तमान इंटरफ़ेस को 'संगतता मोड' में रख सकता हूं। उपयोगकर्ताओं को पहले से ही वर्तमान प्रणाली का उपयोग करने के लिए लॉग इन करना पड़ता है, इसलिए मैं एक सेटिंग को सक्रिय करने की क्षमता जोड़ सकता हूं जब उपयोगकर्ता 'पहली बार' (जब मैं यह परिवर्तन करता हूं) के लिए लॉग इन करता हूं, जहां उन्हें या तो उपयोग करने का विकल्प दिया जाता है। 'क्लासिक' इंटरफ़ेस या 'नया' इंटरफ़ेस। ऐसा कोई तरीका नहीं है जिससे मुझे एक ऑफ-द-शेल्फ समाधान मिल सके जो अनुमति देता है,
मेरी कंपनी हमारे द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर का भी मालिक है; हम इसे लाइसेंस नहीं देते हैं। इसका मतलब यह है कि वर्तमान में मैं जिस प्रबंधन की बात कर रहा हूं वे वही लोग हैं जो वास्तव में मुझे बदलाव लाने के लिए अधिकृत कर सकते हैं। एक तृतीय-पक्ष समाधान के साथ, मुझे उस कंपनी से अनुमोदन प्राप्त करना होगा जो हमारे द्वारा उपयोग किए जाने वाले उत्पाद को विकसित करने वाली कंपनी से जो भी अधिकार आवश्यक होगा, उसे सुरक्षित करने के अलावा एक अतिरिक्त बाधा भी जोड़ता है। इसके लिए कंपनी को "अपने" उत्पाद को छोड़ने और कुछ अन्य उत्पाद लेने के लिए भी आश्वस्त करना होगा, जो कि हमारे पास जो कुछ भी है उसे अपडेट करने के प्रयास की तुलना में अधिक बाधा की तरह लगता है, लेकिन मैं इस मुद्दे पर बहुत अच्छी तरह से गलत हो सकता हूं।
अंत में, भविष्य को देखते हुए, मैं सिर्फ यूजर इंटरफेस में सुधार और कुछ बग को ठीक नहीं करना चाहता। मैं उन 'जरूरी' मुद्दों को अपडेट करने के बाद, कंपनी से प्रौद्योगिकी से संबंधित मूलभूत तरीके से अपडेट करने की उम्मीद कर रहा था। इस तरह के मुद्दों पर 1-2 साल बिताने के बाद, मेरी योजना प्रबंधन में वापस जाने और अधिक नाटकीय परिवर्तनों का प्रस्ताव करने की थी। कंपनी द्वारा चलाए जा रहे ऐसे कई तरीके हैं जो तकनीकी रूप से बेहतर हो सकते हैं कि वे अभी उपयोग नहीं कर रहे हैं। उदाहरण के लिए, प्रत्येक क्षेत्र बहुत अधिक उसी तरह संचालित होता है। कारों को वितरित करने के लिए स्थानीय प्रमुख हवाई अड्डा केंद्रीय केंद्र है। वे मुख्य रूप से एक आवश्यक आधार पर भेजे जाते हैं। हालांकि, हवाई अड्डे का उपयोग सभी कार्यों के लिए घर के आधार के रूप में किया जाता है। वे एक कार में दो लोगों को मेरे स्थान पर भेजेंगे, जिससे हमें एक कार लेने की जरूरत न हो, फिर वे जिस कार में आए थे, उसके साथ हवाई अड्डे पर वापस जाएं, साथ ही वे जो वापस ले रहे हैं (हम हवाई अड्डे से 32 मील दूर हैं)। फिर वे दो कारों में हमसे 5 मील दूर स्थान पर आएंगे और उनमें से एक को छोड़ देंगे, फिर अपनी दूसरी कार से हवाई अड्डे पर लौटेंगे। वे ऐसा करते हैं, भले ही जिस कार को हमने वापस भेजा हो, वह उसी तरह की कार हो, जिसकी हमें जरूरत है। मैं अब लगभग दो साल के लिए कंपनी के साथ रहा हूं, और मैंने केवल उन्हें कार की कमी (इसलिए लगभग तीन बार) की सबसे चरम आपात स्थिति में इस से विचलित कर दिया है। मैं हर क्षेत्र में काम करने वाले 4 लोगों को एक स्वचालित समय-निर्धारण प्रणाली के साथ बदलूंगा जो यह निर्धारित करता है कि कारें कहाँ जाती हैं और कोशिश करें और उस मार्ग को खोजें जिसमें सभी कारों को वितरित करने के लिए कम से कम समय + मील + ड्राइवरों की आवश्यकता होती है जहाँ उन्हें होने की आवश्यकता है, एक के रूप में उच्च स्तर के सुधारों का उदाहरण मुझे कुछ दिन जोड़ने की उम्मीद है।
हालाँकि, इससे पहले कि मैं इस सब का प्रस्ताव करने में सहज महसूस करूँ, मुझे लगता है कि इंटरफ़ेस को अपडेट करने की तरह, छोटे कार्यों को करके कंपनी और कोड बेस में टोल प्राप्त करना सहायक होगा। आउटसोर्सिंग जैसे समाधान या अन्यथा इस संभावना को दूर करेंगे।
if (m_newInterface)
स्पेगेटी कोड कोड आधार पर दिखाई देने लगा। Decoupling और Refactoring ने काफी लंबा समय लिया, जब यह किया गया था, अधिकांश उपयोगकर्ता पहले से ही नए इंटरफ़ेस पर चले गए हैं (कई वर्षों तक सोचें)।