アラン・ペルリスは、エラーのないプログラムを書く方法に関して何を意味しましたか? [閉まっている
https://softwareengineering.stackexchange.com/questions/9605
-
16-10-2019 - |
質問
の引用があります アラン・J・ペルリス それは言う:
エラーのないプログラムを書くには2つの方法があります。 3番目のものだけが機能します。
私は最近、友人からこの引用を聞いて、その背後にあるより深い意味を理解することができませんでした。
ペルリスはここで何について話しているのですか?
解決
それは本当にあることを意味します いいえ エラーのないプログラム。エラー自体でエラーを回避する方法についての深い引用は、パロディです。
他のヒント
3番目の方法はありません。
エラーのないプログラムを書く方法はありません
別の引用で答えます...
奇妙なゲーム。唯一の勝利の動きはプレーしないことです。
;-)
他の多くの答えがすでに指摘しているように、 エラーのないプログラムを書く方法はありません.
しかし、私が指摘したいのは、引用の潜在的なメタの性質です。それは本質的に範囲外エラーです。最初の声明では、彼は宇宙または「リスト」を2つの可能性または要素しか持っていないことを定義しています。しかし、2番目の声明では、彼は3番目の声明に言及しています。それはばかげています!違法! 2つの要素境界を与えられた3番目の要素自体はエラーです。
引用がそれが言及している本質を示すことができるという点で本当に深い。
これは、すべての非自明プログラムにバグがあることを意味します。エラーのないプログラムを書く方法がないと言うのは面白い方法です。
エラーのないプログラムを書くことも、自明ではないプログラムを書くことも、それらが正しいことを証明することさえ可能です。たとえば、これが行われているCoq、Epigram、AGDAなどの言語を検討してください。
停止の問題 これを行うことはできないと述べています 一般的なプログラム.
これは、私が見たオタクのシャツを思い出させます:世界には10種類の人々がいます。バイナリを知っている人とそうでない人。
また、リストが0のインデックスが付けられている場合があるという事実についての遊びでもあります。 $ var = array( 'first'、 'second'、 'third');そして、このリストにアクセスできます:$ var [0] = 'first' $ var [1] = 'second' $ var [2] = 'third'
したがって、リテラルアレイインデックスは「3番目の」インデックスを指します。
これはすでに説明されていますが、私が思うほど明確ではありません。それは単にあなたが両方の方法を試し、彼らはエラーを持っていることを意味し、最後にあなたはあなたのバグを修正し、エラーのないプログラムを持っています。別の引用と比較してください:
プログラムでエラーが発生する唯一の方法は、著者によってそこに置かれることです。他のメカニズムは知られていません。プログラムは、他のバギープログラムと一緒に座ってバグを獲得することはできません。 - ハーランミルズ
(あるいは、これをピエールが言ったように読むことができます(これはストレッチだと思います)。(ドメインには存在しない3番目の方法は機能します。)
これは、私の父が言い訳をするときに私に言うために使用するのと同じ引用です。ことわざは、「物語には3つの側面があります。彼らの側、あなたの側、そして正しい/真/正しい側面」のようになります。
これを開発とのコンテキストに(および教授によるソフトウェアテスターである)、「コーディングには3つの側面があります。コード、コード、およびコード、およびコード、およびコード、およびコードがあります。リファクタリングされたコード。」
これは、プログラマー/開発者が製品が安定しているとリファクタリングする傾向があるためだと思います。
お役に立てれば。
技術的に言えば、エラーのない非自明なプログラムを書くことができると思いますが、停止の問題のために、エラーがないことを証明することは不可能です。したがって、そうでないことを証明することは不可能であるため、すべてのプログラムにバグがあるという仮定の下で働く必要があります。
http://en.wikipedia.org/wiki/halting_problem
更新:特定のアルゴリズムが正しい答えを返すことを証明できますが、それが完全に正しいことを証明するのと同じことではありません。http://en.wikipedia.org/wiki/correctness_(computer_science)
しかし、私のポイントは、この引用は、プログラムには常にバグがあると仮定しなければならないという事実に言及しており、なぜそうなのかを説明しようとしているということでした。http://en.wikipedia.org/wiki/software_bug#bug_management
追加の洞察として、「2つの方法」は、 トニー・ホアー:
ソフトウェア設計を構築するには2つの方法があります。1つの方法は、明らかに欠陥がないほど単純にすることです。もう1つの方法は、明らかな欠陥がないほど複雑にすることです。最初の方法ははるかに困難です。それは、自然の複雑な現象の根底にある単純な物理的法則の発見と同じスキル、献身、洞察、さらにはインスピレーションさえ要求します。
それについて少し瞑想すると、彼は同じことを言っているのがわかります。あなたのソフトウェアがわずかなものである場合、バグがあります(しかし、それを十分に複雑にし、彼らはそうではありません 明らか バグ)。