रियल प्रोग्रामर फोरट्रान में लिखते हैं।
शायद वे अब लाइट बियर, हाथ कैलकुलेटर और "उपयोगकर्ता के अनुकूल" सॉफ्टवेयर लेकिन गुड ओल्ड दिनों में वापस की इस अवनति युग में करते हैं, जब अवधि "सॉफ्टवेयर" लग रहा था हास्यास्पद और रियल कंप्यूटर ड्रम से बाहर किए गए थे और वैक्यूम ट्यूब, रियल प्रोग्रामर ने मशीन कोड में लिखा था। फोरट्रान नहीं RATFOR नहीं। असेंबली भाषा भी नहीं। मशीन कोड। कच्चे, unadorned, inscrutable हेक्साडेसिमल संख्याओं। सीधे ।
कहीं ऐसा न हो प्रोग्रामर की एक पूरी नई पीढ़ी इस गौरवशाली अतीत की अज्ञानता में बड़े होते हैं, मुझे लगता है कर्तव्य बाध्य वर्णन करने के लिए, सबसे अच्छा पीढ़ी का अंतर, कैसे एक रियल प्रोग्रामर कोड लिखा के माध्यम से मैं कर सकते हैं। मैं उसे मेल कहूंगा, क्योंकि उसका नाम था।
जब मैं रॉयल McBee में कम्प्यूटर कार्पोरेशन, टाइपराइटर कंपनी के एक अब मृत हो चुके सहायक के लिए काम पर चला गया मैं पहली बार मेल से मुलाकात की। फर्म ने एलजीपी -30, एक छोटा, सस्ता (दिन के मानकों द्वारा) ड्रम-मेमोरी कंप्यूटर बनाया, और केवल आरपीसी -4000, का निर्माण करना शुरू किया, बहुत बेहतर, बड़ा, बेहतर, तेज़ - ड्रम-मेमोरी कंप्यूटर। कोरों की कीमत बहुत अधिक थी, और रहने के लिए यहां नहीं थे, वैसे भी।(यही कारण है कि आप कंपनी, या कंप्यूटर की नहीं सुना है है।)
मैं इस नए चमत्कार के लिए एक फोरट्रान संकलक लिखने के लिए काम पर रखा गया था और मेल अपने चमत्कार के लिए मेरे मार्गदर्शक थे। मेल ने कंपाइलर्स को स्वीकार नहीं किया था।
"यदि कोई प्रोग्राम अपने कोड को फिर से लिख नहीं सकता है, तो उसने पूछा," यह कितना अच्छा है? "
मेल ने हेक्साडेसिमल में लिखा था, सबसे लोकप्रिय कंप्यूटर प्रोग्राम कंपनी के स्वामित्व में था। यह एलजीपी -30 पर चला और कंप्यूटर शो में संभावित ग्राहकों के साथ ब्लैकजैक खेला। इसका प्रभाव हमेशा नाटकीय था। एलजीपी -30 बूथ प्रत्येक शो में पैक किया गया था, और आईबीएम विक्रेता एक दूसरे के लिए बात कर रहे थे। चाहे यह वास्तव में बेचा गया कंप्यूटर एक प्रश्न था जिस पर हमने कभी चर्चा नहीं की थी।
मेल का काम आरपीसी -4000 के लिए ब्लैकजैक प्रोग्राम को फिर से लिखना था। (पोर्ट? इसका क्या मतलब है?) नई कंप्यूटर एक एक से अधिक एक योजना को संबोधित कर रहे है, जिसमें प्रत्येक मशीन अनुदेश, आपरेशन कोड और जरूरत संकार्य के पते के अलावा, एक था दूसरा पता जो इंगित करता है कि, ड्रम पर घूमने पर, अगला निर्देश स्थित था। आधुनिक प्रवृत्ति में, प्रत्येक एकल निर्देश के बाद गया था! पास्कल की पाइप में और इसे धुएं दें।
मेल RPC-4000 प्यार करता था, क्योंकि वह अपने कोड का अनुकूलन कर सकते हैं: जो है, ड्रम पर दिए गए निर्देशों का पता लगाने इसलिए कि बस के रूप में एक अपना काम समाप्त होने पर, अगले बस पर पहुंचने से होगा "सिर पढ़ा "और तत्काल निष्पादन के लिए उपलब्ध है। उस नौकरी को करने के लिए प्रोग्राम था, "ऑप्टिमाइज़िंग असेंबलर", लेकिन मेल ने इसका उपयोग करने से इनकार कर दिया।
"आप कभी नहीं जानते कि यह कहां जा रहा है चीजें डालते हैं", उन्होंने समझाया, "तो आप को अलग स्थिरांक का उपयोग करना होगा"।
उस टिप्पणी को समझने से पहले यह काफी समय था। चूंकि मेल प्रत्येक ऑपरेशन कोड के संख्यात्मक मूल्य को जानता था, और अपने स्वयं के ड्रम पते को सौंपा गया था, पर लिखे गए प्रत्येक निर्देश को संख्यात्मक निरंतर माना जा सकता है। वह पहले "एड" निर्देश उठा सकता है, कह सकता है, और गुणा करें, यदि उसके पास सही संख्यात्मक मान था। उनका कोड किसी और को संशोधित करने के लिए आसान नहीं था।
मैं मेल के हाथ-अनुकूलित एक ही कोड के साथ कार्यक्रमों अनुकूलन कोडांतरक कार्यक्रम, द्वारा मालिश और मेल हमेशा तेजी से भाग गया तुलना में। वह था क्योंकि प्रोग्राम डिज़ाइन की "टॉप-डाउन" विधि का अभी तक का आविष्कार नहीं किया गया था, और मेल ने इसे का उपयोग नहीं किया होगा।उन्होंने अपने प्रोग्राम लूप्स के सबसे पहले भाग लिखा, इसलिए ड्रम पर इष्टतम पता स्थानों की पहली पसंद प्राप्त करेंगे। अनुकूलक को अनुकूलित करने वाला स्मार्ट इस तरह से करने के लिए पर्याप्त नहीं था।
मेल कभी नहीं लिखा था समय देरी छोरों, या तो, तब भी जब भद्दा Flexowriter सही काम करने के लिए उत्पादन पात्रों के बीच एक देरी की आवश्यकता है। वह ड्रम पर केवल निर्देशों को निर्देशित करता है, इसलिए प्रत्येक क्रमिक व्यक्ति पिछले पढ़ने की आवश्यकता होने पर पढ़ने वाले सिर थे; ड्रम को अगले क्रांति को अगले निर्देश खोजने के लिए एक और पूर्णनिष्पादित करना पड़ा। उन्होंने इस प्रक्रिया के लिए अविस्मरणीय शब्द बनाया। हालांकि "इष्टतम" एक पूर्ण शब्द है, जैसे कि "अद्वितीय", यह मौखिक अभ्यास बन गया है, इसे सापेक्ष बनाने के लिए: "काफी इष्टतम नहीं" या "कम इष्टतम" या "बहुत इष्टतम नहीं"। मेल अधिकतम समय-देरी स्थानों को "सबसे अधिक अधिकतम" कहा जाता है।
के बाद वह डांडा कार्यक्रम समाप्त हो गया और चलाने के लिए, यह मिल गया ("यहाँ तक कि प्रारंभकर्ता अनुकूलित है", उन्होंने कहा गर्व से) वह बिक्री विभाग से एक अनुरोध बदलें मिला है। कार्यक्रम एक सुरुचिपूर्ण (अनुकूलित) यादृच्छिक संख्या जनरेटर "कार्ड" और "डेक" से निपटने के लिए जेनरेटर, और में से कुछ विक्रेता ने महसूस किया कि यह बहुत उचित था, क्योंकि कभी-कभी ग्राहक खो गए थे। वे चाहते थे कि मेल को प्रोग्राम को संशोधित करने के लिए कंसोल पर एक भावना स्विच की सेटिंग में, वे बाधाओं को बदल सकते हैं और ग्राहक को जीत सकते हैं।
मेल बाल्क। उन्होंने महसूस किया कि यह बेईमानी था, जो यह था, और यह के रूप में अपनी व्यक्तिगत अखंडता पर प्रभाव डालकर एक प्रोग्रामर था, जिसने ऐसा किया, इसलिए ने ऐसा करने से इंकार कर दिया। हेड सेल्समैन ने मेल से बात की, जैसा कि बिग बॉस और बॉस के आग्रह पर, कुछ फेलो प्रोग्रामर। मेल ने आखिरकार को कोड लिखा और लिखा, लेकिन उसे परीक्षण पीछे की ओर मिला, और, जब स्विच चालू हो गया, तो प्रोग्राम धोखा देगा, हर बार जीत जाएगा। मेल इस से प्रसन्न था, अपने अवचेतन का दावा अनियंत्रित नैतिक था, और को ठीक करने से इनकार कर दिया।
के बाद मेल के लिए हरित पा $ संरचना $ कंपनी छोड़ दिया था, बिग बॉस मुझसे पूछा कोड को देखो और अगर मैं परीक्षण पाते हैं और यह रिवर्स आ सकती हैं। कुछ हद तक अनिच्छा से, मैं देखने पर सहमत हुआ। ट्रैकिंग मेल का कोड वास्तविक साहसिक था।
मैं अक्सर महसूस किया है कि प्रोग्रामिंग है एक कला के रूप, जिसका असली मूल्य केवल एक और ही रहस्यमय कला में निपुण द्वारा सराहना की जा सकता है; वहाँ सुंदर जवाहरात और शानदार तख्तापलट हमेशा के लिए मानव देख सकते हैं और प्रशंसा, कभी कभी से छिपा हुआ, प्रक्रिया के स्वभाव से कर रहे हैं। तुम भी हेक्साडेसिमल में, बस उसकी कोड को पढ़कर एक व्यक्ति के बारे में बहुत कुछ सीख सकते हैं। मेल था, मैं सोचता हूं, एक असंगत प्रतिभा।
शायद मेरा सबसे बड़ा सदमे आया जब मैं में एक निर्दोष पाश पाया जिसमें परीक्षण नहीं था। कोई परीक्षण नहीं कोई नहीं। आम भावना ने कहा कि यह एक बंद लूप, जहां कार्यक्रम चक्र होता है, हमेशा के लिए , अंतहीन होना ही था। कार्यक्रम नियंत्रण बाहर दूसरे पक्ष को सुरक्षित रूप से इसके माध्यम से सही पारित कर दिया, हालांकि, और । यह मुझे इसे समझने के लिए दो सप्ताह ले गया।
आरपीसी -4000 कंप्यूटर में वास्तव में आधुनिक सुविधा थी जो इंडेक्स रजिस्टर नामक आधुनिक सुविधा थी। यह लिए प्रोग्रामर एक कार्यक्रम पाश है कि एक अनुक्रमित अनुदेश के अंदर इस्तेमाल लिखने की अनुमति दी; प्रत्येक बार के माध्यम से, सूचकांक रजिस्टर में संख्या के पते पर निर्देश दिया गया था, तो यह एक श्रृंखला में अगले डेटाम का संदर्भ देगा। उनके पास था, प्रत्येक बार इंडेक्स रजिस्टर प्रत्येक बार के माध्यम से बढ़ाना था। मेल ने कभी इसका इस्तेमाल नहीं किया।
इसके बजाय, वह को एक मशीन रजिस्टर में निर्देश खींच देगा, को अपना पता जोड़ें, और उसे वापस स्टोर करें। वह फिर रजिस्टर से संशोधित निर्देश निष्पादित करेगा। पाश इतना लिखा गया था इस अतिरिक्त निष्पादन समय को ध्यान में लिया गया था - बस के रूप में इस अनुदेश समाप्त हो गया है, अगले एक सही ड्रम के पढ़ने के सिर के नीचे , था जाने के लिए तैयार। लेकिन लूप में इसमें कोई परीक्षण नहीं था।
महत्वपूर्ण सुराग आया जब मैं सूचकांक रजिस्टर सा, सा है कि पता और अनुदेश शब्द में ऑपरेशन कोड के बीच रखना देखा, on-- बदल गया अभी तक मेल सूचकांक रजिस्टर इस्तेमाल कभी नहीं किया था, इसे शून्य से शून्य छोड़ दें। जब प्रकाश पर चला गया तो मुझे लगभग अंधा कर दिया।
वह डेटा वह स्मृति के शीर्ष के निकट पर काम कर रहा था स्थित था - सबसे बड़ा स्थानों निर्देश को संबोधित कर सकते हैं - हां, तो बाद पिछले गृहीत संभाला था, अनुदेश पता incrementing यह होगा अतिप्रवाह। वाहक एक सेट ऑपरेशन कोड में जोड़ देगा, इसे पर निर्देश सेट में अगले में बदल देगा: कूद निर्देश। सुनिश्चित करें कि पर्याप्त, अगले कार्यक्रम अनुदेश पता स्थान शून्य, और कार्यक्रम की राह पर खुशी से चला गया में था।
मैं मेल के साथ संपर्क में नहीं रखा है, इसलिए यदि वह कभी परिवर्तन की बाढ़ है कि उन लंबे समय से चला गया दिनों के बाद से से अधिक प्रोग्रामिंग तकनीकों धोया गया है करने के लिए दे दी है मैं नहीं जानता कि । मुझे लगता है कि वह नहीं था। किसी भी घटना में, मैं को प्रभावित करता था कि मैंने अपमानजनक परीक्षण की तलाश छोड़ दी, बिग बॉस I को यह नहीं मिला। वह आश्चर्यचकित नहीं लग रहा था।
जब मैं कंपनी को छोड़ दिया, डांडा कार्यक्रम अभी भी अगर आप सही भावना स्विच चालू धोखा होता है, और मुझे लगता है कि यह कैसे किया जाना चाहिए है। मैं एक वास्तविक प्रोग्रामर के कोड को आरामदायक हैकिंग महसूस नहीं कर रहा था।
समानता अच्छी नहीं है। डिजस्ट्रा ने कभी भी आपके सिर को केवल _ में नहीं ढूंढने की वकालत की। उन्होंने औपचारिक तरीकों का उपयोग करके कार्यक्रमों का निर्माण करने की वकालत की (जो भरोसेमंद हैं, क्योंकि तर्क पहले से ही अच्छी तरह से समझा जाता है और हमेशा ऐसा ही होगा) "कार्यक्रम पहले, बाद में परीक्षण करें" विधि की बजाय हम आम तौर पर उद्योग में देखते हैं। एक कार्यक्रम के बाद औपचारिक रूप से एक आवश्यकता को पूरा करने के लिए साबित किया गया है, तो इसे प्रोग्राम किया जाना चाहिए। इस तरह, गलतियों और "पुनरावृत्तियों" कागज पर ही सीमित हैं, वास्तव में कभी लागू नहीं किया गया। – pyon
@Eduardo: धन्यवाद और अपडेट किया गया। – hlfcoding