एलन पेरलिस ने त्रुटि-मुक्त कार्यक्रम लिखने के तरीकों के बारे में क्या कहा? [बन्द है]


29

एलन जे। पर्लिस का एक उद्धरण है जो कहता है:

त्रुटि मुक्त कार्यक्रम लिखने के दो तरीके हैं; केवल तीसरा काम करता है।

मैंने हाल ही में अपने दोस्त से यह उद्धरण सुना है, और इसके पीछे के गहरे अर्थ को समझने में असमर्थ था।

Perlis यहाँ के बारे में क्या बात कर रहा है?


1
आप इस पैरोडी में गिरावट का एहसास करते हैं, साथ ही गैर-तुच्छ कार्यक्रमों को लिखना संभव है जो त्रुटि मुक्त हैं, यह सिर्फ अनुशासन लेता है।

1
इस प्रकार के प्रश्न पर अब हमारी मेटा-चर्चा साइट पर चर्चा की जा रही है ।

1
पढ़ने की सिफारिश की: इस $ {ब्लॉग} पर चर्चा करें
gnat

जवाबों:


41

इसका मतलब है कि वास्तव में कोई त्रुटि मुक्त कार्यक्रम नहीं हैं। एक त्रुटि के साथ त्रुटियों से बचने के तरीकों के बारे में एक गहन उद्धरण स्वयं पैरोडी है।


3
एलन पर्लिस के पास निश्चित रूप से शब्दों के साथ एक रास्ता था।
फ्रैंक शियर

2
यह "पैरोडी" है जो इस उद्धरण अर्थ में महत्वपूर्ण है।
एडम हार्ट

60

कोई तीसरा रास्ता नहीं है।

त्रुटि-मुक्त प्रोग्राम लिखने का कोई तरीका नहीं है



14

जैसा कि कई अन्य जवाब पहले ही इंगित कर चुके हैं, त्रुटि-मुक्त कार्यक्रम लिखने का कोई तरीका नहीं है

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

सच में गहरा उद्धरण उस सार को प्रदर्शित करने में सक्षम है, जिसका वह जिक्र कर रहा है।


यह साबित करने का एक तरीका है कि एक कार्यक्रम निर्दिष्ट रूप में व्यवहार करता है। इसका उपयोग परमाणु सुविधाओं के लिए किया जाता है ...

1
@ Thorbjørn रावन एंडरसन, जैसा कि निर्दिष्ट नहीं है, यह त्रुटि-मुक्त नहीं है।
कैफ़ीक्यूक

5

इसका मतलब है कि सभी गैर-तुच्छ कार्यक्रमों में बग होंगे। यह कहने का एक मज़ेदार तरीका है कि त्रुटि-रहित कार्यक्रम लिखने का कोई तरीका नहीं है।


5

त्रुटि-रहित कार्यक्रम, यहां तक ​​कि गैर-तुच्छ लोगों को लिखना और यहां तक ​​कि उन्हें सही साबित करना संभव है। उदाहरण के लिए, Coq, Epigram या Agda जैसी भाषाएं जहाँ ऐसा किया जाता है।

हॉल्टिंग समस्या कहा गया है कि इसके लिए यह करने के लिए संभव नहीं है सामान्य कार्यक्रम


यूटी ऑस्टिन में डॉन गुड की टीम के लिए, और 1970 और 1980 के दशक की शुरुआत में जिप्सी वेरिएंट एनवायरनमेंट के साथ उनके काम पर वापस जाएं। उन्होंने प्रदर्शित किया कि नौसेना के लिए एक सिद्ध त्रुटि-मुक्त संदेश प्रवाह न्यूनाधिक वितरित करके त्रुटि-मुक्त कोड संभव था। स्वीकृति परीक्षण सूट एक पूरी तरह से अलग समूह द्वारा विकसित किया गया था। जब एमएफएम ने स्वीकार्यता परीक्षण सूट को देखा, पहली बार, स्वीकार्यता परीक्षण में, यह कोई विचलन, छूट, या "हाँ, लेकिन" के साथ पारित हुआ।
जॉन आर। स्ट्रोम

3

यह मुझे याद दिलाता है एक नीरद शर्ट मैंने देखा: दुनिया में 10 प्रकार के लोग हैं। जो लोग बाइनरी जानते हैं और जो नहीं करते हैं।

यह इस तथ्य पर एक नाटक भी हो सकता है कि कभी-कभी सूचियाँ 0 अनुक्रमित होती हैं। $ var = सरणी ('प्रथम', 'दूसरा', 'तीसरा'); और आप इस सूची को इस प्रकार एक्सेस कर सकते हैं: $ var [0] = 'पहला' $ var [1] = 'दूसरा' $ var [2] = 'तीसरा'

तो शाब्दिक सरणी इंडेक्स 2 "थर्ड" इंडेक्स को इंगित करता है।


... और जो शून्य पर अनुक्रमण शुरू करते हैं

2

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

किसी प्रोग्राम में होने वाली त्रुटियों का एकमात्र तरीका लेखक द्वारा वहां रखा गया है। कोई अन्य तंत्र ज्ञात नहीं है। अन्य बगिया कार्यक्रमों के साथ बैठकर कार्यक्रम बग को प्राप्त नहीं कर सकते हैं। - हरलन मिल्स

(वैकल्पिक रूप से, आप इसे पढ़ सकते हैं जैसा कि पियरे ने कहा था (जो मुझे लगता है कि एक खिंचाव है)। (तीसरा तरीका, जो डोमेन में मौजूद नहीं है, काम करता है।) जैसे मैंने कहा, यह एक खिंचाव है, लेकिन सच है।


1

यह वही उद्धरण है जब मेरे पिता मुझे बताने के लिए उपयोग करते हैं जब मैं बहाना बनाता हूं। कहावत कुछ इस तरह है: "एक कहानी के 3 पक्ष होते हैं। उनका पक्ष, आपका पक्ष, और सही / सही / सही पक्ष"।

इसे विकास के संदर्भ में रखना (और प्रोफेसर द्वारा एक सॉफ्टवेयर टेस्टर होने के नाते।), मैं कहूंगा कि कुछ कोड करने के बहुत सारे तरीके हैं क्योंकि यह "कोडिंग के 3 पक्ष हैं। कोड, आपका कोड, और।" रिफैक्टेड कोड। "

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

उम्मीद है की यह मदद करेगा।


1

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

http://en.wikipedia.org/wiki/Halting_problem

अद्यतन: आप साबित कर सकते हैं कि एक विशेष एल्गोरिथ्म सही उत्तर लौटाएगा, लेकिन यह पूरी तरह से सही साबित होने जैसा नहीं है। http://en.wikipedia.org/wiki/Correctness_(computer_science )

हालांकि, मेरा कहना यह था कि उद्धरण इस तथ्य का उल्लेख कर रहा है कि किसी को यह मान लेना चाहिए कि कार्यक्रम में हमेशा कीड़े हैं और यह समझाने की कोशिश कर रहा है कि ऐसा क्यों है। http://en.wikipedia.org/wiki/Software_bug#Bug_management


1
जैसा कि टोनी मॉरिस ने कहा, यह साबित करना संभव है कि एक विशेष कार्यक्रम सही है। एक कार्यक्रम लिखना संभव नहीं है जो सामान्य रूप से साबित कर सकता है कि कोई भी कार्यक्रम जो सही है, सही है।
मैक्स स्ट्रिनी

-1

अतिरिक्त जानकारी के रूप में, "दो तरीके" टोनी होरे के इस उद्धरण का संदर्भ हो सकते हैं :

एक सॉफ्टवेयर डिज़ाइन के निर्माण के दो तरीके हैं: एक तरीका यह है कि इसे इतना सरल बनाया जाए कि स्पष्ट रूप से कोई कमी न हो, और दूसरा तरीका यह है कि इसे इतना जटिल बना दिया जाए कि कोई स्पष्ट कमी न रहे। पहली विधि कहीं अधिक कठिन है। यह समान कौशल, भक्ति, अंतर्दृष्टि, और यहां तक ​​कि सरल भौतिक कानूनों की खोज के रूप में प्रेरणा की मांग करता है जो प्रकृति की जटिल घटनाओं से गुजरते हैं।

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


यह पूछे गए प्रश्न का उत्तर नहीं देता है
gnat

@gnat मैं नहीं देखता कि यह कैसे नहीं है - यह दूसरे पैराग्राफ में वहीं है। शायद शब्दांकन स्पष्ट नहीं था, लेकिन जब मैंने कहा "एक ही बात कह रहा है", मेरा मतलब था "एलन पर्लीस के समान बात"। यही कारण है कि, पेर्लिस की बोली होरे के हास्य की पैरोडी है।
डोभाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.