2008-10-18 15 views
24

मुझे समय-समय पर एक वास्तविक रॉकेट सर्जन द्वारा बनाई गई प्रणाली पर रखरखाव कार्य करने के लिए कहा जाता है। इसके साथ बहुत गड़बड़ है कि यह जानना मुश्किल है कि कहां से शुरू करना है।आपको बनाए रखने के लिए सबसे कठिन कार्यक्रम क्या है?

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

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

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

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

ठीक है, कम से कम वह जो जानता था उसके साथ चला गया, है ना? उम। जाहिर है, वह क्या जानता था एक्सेस था। और वह वास्तव में समझ में नहीं आया एक्सेस। या डेटाबेस।

यहाँ इस कोड में एक आम पैटर्न है:

 
SELECT @TestCodeID FROM TestCode WHERE TestCode = @TestCode 

SELECT @CountryID FROM Country WHERE CountryAbbr = @CountryAbbr 

SELECT Invoice.*, TestCode.*, Country.* 
    FROM Invoice 
    JOIN TestCode ON Invoice.TestCodeID = TestCode.ID 
    JOIN Country ON Invoice.CountryID = Country.ID 
    WHERE Invoice.TestCodeID = @TestCodeID AND Invoice.CountryID = @CountryID 

ठीक है, ठीक। आप क्वेरी ऑप्टिमाइज़र पर भरोसा नहीं करते हैं। लेकिन इसके बारे में कैसे? (मूल रूप से, मैं इसे What's the best comment in source code you have ever encountered? में पोस्ट करने जा रहा था, लेकिन मुझे एहसास हुआ कि केवल एक टिप्पणी के मुकाबले लिखने के लिए बहुत कुछ था, और चीजें अभी हाथ से बाहर हो गईं।) उपयोगिता की कई प्रक्रियाओं के अंत में, आप

 
-- Fix NULLs 
SET @TargetValue = ISNULL(@TargetValue, -9999) 

हाँ, कि कोड केवल एक कर रहा है आप अपने आप को ऐसा न हो कि तुम पागल हो प्रेरित किया यह क्या कर रहा है पर विश्वास करने की अनुमति नहीं कर सकते हैं क्या: 'कोड है कि ऐसा दिखाई देता देखेंगे। यदि परिवर्तक में एक पूर्ण होता है, तो वह कॉलर को अपना मान बदलकर -99 99 तक अलर्ट कर रहा है। यहां बताया गया है कि यह संख्या आमतौर पर कैसे उपयोग की जाती है:

 
-- Get target value 
EXEC ap_GetTargetValue @Param1, @Param2, OUTPUT @TargetValue 
-- Check target value for NULL value 
IF @TargetValue = -9999 
    ... 

वास्तव में।

इस प्रणाली के एक और आयाम के लिए, thedailywtf.com पर आलेख देखें I Think I'll Call Them "Transactions"। मैं इनमें से कोई भी नहीं बना रहा हूं। में कसम खाता हूँ।

मुझे अक्सर याद दिलाया जाता है, जब मैं इस प्रणाली पर काम करता हूं, वुल्फगैंग पॉली के छात्र के लिए प्रसिद्ध प्रतिक्रिया: "यह सही नहीं है। यह भी गलत नहीं है।"

यह वास्तव में कभी भी सबसे खराब कार्यक्रम नहीं हो सकता है। यह निश्चित रूप से सबसे खराब है जिसने मैंने अपने पूरे 30-वर्ष (यिक्स) करियर में काम किया है। लेकिन मैंने सब कुछ नहीं देखा है। आपने क्या देखा है ?

+2

इतना पर .... यह वास्तव में एक सवाल के रूप में इतना सवाल नहीं है! मुझे लगता है कि आप अशिष्टता से पूछ रहे हैं: क्या आप इसे ऊपर ले सकते हैं! ... हमम ... –

+0

यह आपके ब्लॉग या साइट [चर्चा के लिए समर्पित] (http://meta.stackexchange.com/questions/13198/) के लिए बेहतर अनुकूल लगता है। –

+0

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

उत्तर

40

मैं एक बार एक MP3 विकोडक लिखने का प्रयास किया। यह काम नहीं किया।

+1

मान लीजिए कि पन का इरादा था, आप मेरा अपवित्र महोदय, अच्छा एक प्राप्त करते हैं, और ऐसा नहीं है कि उन व्यक्तिपरक प्रश्नों को किसी भी गंभीर उत्तर के लायक है। – Seldaek

+0

मुझे पन नहीं दिख रहा है ... –

+13

"अस्वस्थ", मुझे लगता है। मैंने कभी भी सबसे अच्छा पन नहीं सुना है: पी – Blorgbeard

6

एक मैं बस पर शुरू कर दिया है।

  1. कोई स्रोत नियंत्रण।
  2. सभी स्रोत को लाइव संपादित किया जाता है गलतियों को रोकने के लिए, वहाँ हैं स्रोत पेड़ को कूड़े हुए db-access.php.070821 जैसी बैकअप फ़ाइलें।
  3. कोड असाधारण रूप से भंगुर है - त्रुटि जांच के रास्ते में बहुत कम है और अगर ऐसा होता है तो बिल्कुल कोई फॉल नहीं पड़ता है।
+2

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

+1

यह एक वितरित इंटरनेट प्रोजेक्ट है लेकिन वास्तविक नकदी के साथ। मैं लगभग svn पर हमला कर रहा हूं और अब तक कुछ भी नहीं हुआ है। –

+0

बस निर्माण तोड़ो। तो इसे एक सप्ताह के लिए तोड़ दिया जाना चाहिए। फिर शायद वे संस्करण नियंत्रण = डी –

19

मैंने ExtUtils::MakeMaker बनाए रखा। मेकमेकर निश्चित रूप से सबसे खराब कोड नहीं है जिसे मुझे बनाए रखना है; यह वास्तव में एक इंजीनियरिंग चमत्कार है। हालांकि, यह डरावनी कोडिंग के उस अद्वितीय वर्ग में है जिसमें सबसे मिशन-महत्वपूर्ण कोड भी सबसे डरावना है।

मेकमेकर अधिकांश पर्ल मॉड्यूल के लिए इंस्टॉलर है। जब आप "मेकफ़ाइल.पीएल" चलाते हैं तो आप मेकमेकर का आह्वान कर रहे हैं। यदि मेकमेकर टूट जाता है, तो पर्ल टूट जाता है। पर्ल सबकुछ पर चलता है, इसलिए मेकमेकर को सब कुछ चलाना पड़ता है। जब मैं सबकुछ कहता हूं तो मेरा मतलब है सब कुछ। प्रत्येक विचित्र यूनिक्स संस्करण। विंडोज 95 ऊपर। और VMS। हाँ, वीएमएस।

मेकमेकर क्या करता है? Makefile.PL एक पर्ल प्रोग्राम है जो एक मेकफ़ाइल लिखता है जिसमें शेल कमांड होते हैं, जो पर्ल मॉड्यूल बनाने और स्थापित करने के लिए अक्सर पर्ल चलाते हैं। मुझे दोहराने दो: यह पर्ल चलाने के लिए खोल कमांड लिखता है। पर्ल, वह भाषा जो शैल स्क्रिप्ट को प्रतिस्थापित करती है।

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

और इसे पोर्टेबल, पीछे संगत फैशन में यह सब करना है। यह

  • पर्ल
  • में ...

    • मेकअप के वेरिएंट और कीड़े (जीएनयू बनाने, बीएसडी बनाने, nmake, dmake, एमएमएस, एमएमके कुछ नाम हैं)
    • खोल से निपटने के लिए है फाइल सिस्टम (यदि आपको लगता है कि एक बड़ी बात है नहीं लगता है, वीएमएस कोशिश)
    • सी compilers & linkers

    यह पूरी तरह, सकारात्मक असफल नहीं हो सकता और 100% backw रहना चाहिए ards संगत।

    ओह, और यह वास्तविक एक्सटेंशन एपीआई के रास्ते में बहुत कम है, इसलिए इसे मेकफ़ाइल हैकरी लोगों को विस्तारित करने के लिए लोगों के साथ संगत रहना होगा।

    यह सब क्यों करता है? 15 साल पहले जब पर्ल केवल यूनिक्स पर भाग गया था तो यह एक अच्छा विचार था। जब आप केवल उपयोग कर सकते हैं तो एक संपूर्ण बिल्ड सिस्टम क्यों लिखें? पर्ल एक पाठ प्रसंस्करण भाषा है; हम मेकफ़ाइल लिखने के लिए इसका इस्तेमाल करेंगे!

    सौभाग्य से एक प्रतिस्थापन है, Module::Build, और मैंने अपनी उम्मीदों को पिन किया कि यह तेजी से मेकमेकर को मार देगा। लेकिन इसका उत्थान धीमा रहा है और समुदाय परिवर्तन के लिए बहुत प्रतिरोधी है, इसलिए मैं मेकमेकर को बनाए रख रहा हूं।

  • 1

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

    एक दिन मैंने अनुमान लगाया कि इन विभिन्न फाइलों में कोड की कितनी लाइनें हैं और मैंने अनुमान लगाया है कि 300,000. एक बार हस्तलिखित कोड की तीन सौ हजार लाइनें और फिर कॉपी और पेस्ट कोड।

    लेकिन इस नंबर ने मेरे प्रबंधक को बहुत जल्दी विश्वास दिलाया कि हमें एक नया शेड्यूलिंग ऐप बहुत जल्दी चाहिए।

    12

    आपको बनाए रखने के लिए सबसे कठिन प्रोग्राम क्या है?

    सब कुछ मैंने कभी लिखा है!

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

    +3

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

    2

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

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

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

    0

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

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

    5

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

    फिर मैंने Roedy Green's essay पढ़ा और बहुत हँसे, जब तक मुझे एहसास हुआ कि कारण मुझे यह मजाकिया लगता था कि मैंने बनाए गए कोड से अधिकांश उदाहरणों को पहचाना। (यह निबंध जोड़ के वर्षों में एक सा फूला हुआ बन गया है, लेकिन यह अभी भी एक नज़र लायक है।)

    0

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

    तो याद है, हर बार के लिए आप प्रतीक्षा Yacc अपने व्याकरण प्रक्रियाओं जबकि, वहाँ उत्पन्न पार्सर के साथ रन के हजारों किया जाएगा। सफेद जगह के साथ सस्ता मत बनो!

    0

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

    1

    एक PHP/MySQL संचालित ऑनलाइन संपर्क प्रबंधन प्रणाली, जहां संपर्क तालिका एक प्राकृतिक कुंजी नहीं था। डेटाबेस फ़ील्ड के कई उदाहरण थे जो एक सीमित स्ट्रिंग के रूप में समग्र डेटा रखते थे जिसे बाद में एप्लिकेशन कोड द्वारा पार्स करने की आवश्यकता होती थी।

    HTML और तर्क सम्बंधित मानते थे, लगभग कोई कार्यों में इस्तेमाल किया गया है, बल्कि कोड में कटौती करने और स्रोत कोड फ़ाइलों के दर्जनों में चिपकाया गया था। डेटा को संचरित नहीं किया गया था और इसलिए फ़ील्ड (उदाहरण के लिए) एम्बेडेड वर्टिकल टैब के कारण एक्जैक्स द्वारा एक्सएमएल को लौटा दिया गया था, और इसे बंद करने के लिए, सभी दर्जनों के साथ फाइलें, अगर सैकड़ों रिक्त बयान शामिल नहीं होते हैं तो तुरंत अर्ध-कॉलन : "};"

    0

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

    काफी मजेदार है, यह वास्तव में काम किया, और मैं इसे करने के लिए कुछ कार्यक्षमता जोड़ने के लिए सक्षम था, लेकिन यह शौकिया दंत चिकित्सा की तरह था - दर्दनाक, और निश्चित रूप से अनुशंसित नहीं ...

    2

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

    कोड एक झटका था। "नॉर्थ 40" नामक शाखा के लिए एक लेबल था। मैंने मूल डेवलपर से पूछा कि इसका क्या अर्थ है।

    "यही वह जगह है जहां सीमा जांच की जाती है, आप जानते हैं कि चेक सुनिश्चित करने के लिए कि प्रत्येक फ़ील्ड का सही मूल्य है।"

    "लेकिन क्यों 'नॉर्थ 40'?"

    "तुम्हें पता है, 'घर, सीमा पर घर।'"

    "हुह?"

    'नॉर्थ 40' का अर्थ बदलकर एक खेत के उत्तर 40 एकड़ का मतलब था, जो कि उसके शहर में पैदा हुए दिमाग में एक मवेशी खेत के लिए एक अस्पष्ट कनेक्शन था।

    एक और मॉड्यूल में दो समानांतर सरणी थे जिन्हें टोरी और डीआईआरईसी कहा जाता था, जिन्हें समानांतर में अद्यतन किया गया था और इसलिए डेटा के जोड़े वाले एक सरणी को मॉडल करने के लिए एक स्पष्ट रूप से गुमराह प्रयास थे। मैं नामों को समझ नहीं पाया और डेवलपर से पूछा। बाहर निकला वे एक साथ पढ़ने के लिए थे: "direc-tory"। महान।

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

    इससे भी बदतर आना था। जैसे ही मैं दुभाषिया के आंतों में पहुंचा, मैंने पाया कि यह एक विशाल प्रकार की प्रक्रिया के आसपास बनाया गया था। सॉर्ट एक इनपुट प्रक्रिया थी जो कच्चे डेटा और अखंडता बाधाओं से सॉर्ट इनपुट डेटा उत्पन्न करती थी। तो यदि आपके पास 5,000 ट्रंक परिभाषाओं वाली एक तालिका थी, और प्रत्येक ट्रंक रिकॉर्ड में तीन फ़ील्ड मान होते थे जो पूरे इनपुट डेटा सेट में अनूठे होते थे, तो इनपुट प्रक्रिया 3 * 5,000 = 15,000 सॉर्ट इनपुट रिकॉर्ड बनाएगी, प्रत्येक कच्चा डेटा रिकॉर्ड अखंडता बाधा संख्या और क्षेत्र मूल्य की एक प्रति क्रमबद्ध करने के लिए prefixed। तीन 5,000 रिकॉर्ड प्रकार करने के बजाय, यह एक 15,000 रिकॉर्ड प्रकार था। जब तक आप सैकड़ों अंतराल में अंतर रखते थे- और अंतर-तालिका अखंडता बाधाएं, और कुछ बहुत बड़ी टेबलें, तो आपके साथ एक संयोजक दुःस्वप्न था।

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

    1

    मैं एक बार एक सीएडी आवेदन BASIC में लिखे जहां कंपनी की नीति यह थी कि हर कार्यक्रम बयान के साथ शुरू होगा पर काम किया:

    त्रुटि फिर से शुरू

    झामुमो

    +0

    बिंदु क्या है ??? : पी –

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