Was bedeutete Alan Perlis hinsichtlich der Möglichkeiten, fehlerfreie Programme zu schreiben? [abgeschlossen

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/9605

  •  16-10-2019
  •  | 
  •  

Frage

Es gibt ein Zitat von Alan J. Perlis das sagt:

Es gibt zwei Möglichkeiten, fehlerfreie Programme zu schreiben. Nur der dritte funktioniert.

Ich habe kürzlich dieses Zitat von meinem Freund gehört und konnte die tiefere Bedeutung dahinter nicht verstehen.

Worüber spricht Perlis hier?

War es hilfreich?

Lösung

Es bedeutet, dass es wirklich gibt nein Fehlerfreie Programme. Ein tiefes Zitat über Möglichkeiten, Fehler mit einem Fehler selbst zu vermeiden, ist die Parodie.

Andere Tipps

Es gibt keinen dritten Weg.

Es gibt keine Möglichkeit, fehlerfreie Programme zu schreiben

Ich werde mit einem anderen Zitat antworten ...

Ein seltsames Spiel. Der einzige Gewinnschritt ist nicht zu spielen.

;-)

Wie viele andere Antworten bereits darauf hingewiesen haben, Es gibt keine Möglichkeit, ein fehlerfreies Programm zu schreiben.

Aber ich möchte darauf hinweisen, dass die potenzielle Meta -Natur des Zitats. Es ist im Wesentlichen ein unübertroffener Fehler. In der ersten Erklärung definiert er das Universum oder die "Liste" mit nur zwei Möglichkeiten oder Elementen. In der zweiten Erklärung bezieht er sich jedoch auf ein Drittel. Was ist absurd! Sogar illegal! Ein drittes Element, das eine Zwei -Elemente -Grenze mit zwei Elementen gibt, ist selbst ein Fehler.

Wirklich tiefgreifend, da das Zitat in der Lage ist, genau das Wesen zu demonstrieren, auf das es sich bezieht.

Dies bedeutet, dass alle nicht trivialen Programme Fehler haben. Es ist nur eine lustige Art zu sagen, dass es keine Möglichkeit gibt, ein fehlerfreies Programm zu schreiben.

Es ist möglich, fehlerfreie Programme zu schreiben, sogar nicht triviale, und sogar zu beweisen. Betrachten Sie beispielsweise Sprachen wie CoQ, Epigramm oder AgDA, wo dies erfolgt.

Das Problem stoppen gibt an, dass es nicht möglich ist, dies für die zu tun Allgemeines Programm.

Dies erinnert mich an ein Nerd -Shirt, das ich gesehen habe: Es gibt 10 Arten von Menschen auf der Welt. Diejenigen, die binär kennen und diejenigen, die es nicht tun.

Es könnte auch ein Stück sein, das manchmal Listen mit 0 indiziert sind. $ var = array ('First', 'zweiter', 'dritter'); Und Sie können auf diese Liste zugreifen als solche: $ var [0] = 'First' $ var [1] = 'zweit' $ var [2] = 'dritter'

Der buchstäbliche Array -Index 2 zeigt also auf den "dritten" Index.

Dies wird bereits mit anderen Worten erklärt, aber nicht so klar, wie ich denke, dass es sein sollte. Es bedeutet einfach, dass Sie in beide Richtungen versuchen, sie haben Fehler und schließlich werden Sie Ihre Fehler beheben und ein fehlerfreies Programm haben. Vergleichen Sie mit einem anderen Zitat:

Die einzige Möglichkeit für Fehler in einem Programm besteht darin, vom Autor dorthin zu werden. Keine anderen Mechanismen sind bekannt. Programme können Fehler nicht erwerben, indem sie mit anderen Buggy -Programmen herumsitzen. -Harlan Mills

(Alternativ könnten Sie dies lesen, wie Pierre sagte (was meiner Meinung nach eine Strecke ist).

Dies ist das gleiche Zitat, das mein Vater mir verwendet, um mir zu sagen, wann ich Ausreden mache. Das Sprichwort verläuft in der Regel: "Es gibt 3 Seiten zu einer Geschichte. Ihre Seite, Ihre Seite und die rechte/wahre/korrekte Seite."

Ich würde sagen, da es so viele Möglichkeiten gibt, etwas zu codieren, dass es sinnvoll ist, mit "3 Seiten zu codieren. der refaktorierte Code. "

Ich denke, dies liegt daran, dass Programmierer/Entwickler dazu neigen, nach dem Refaktor zu refaktoren, sobald das Produkt stabil wird, was meistens zu spät ist, aber die meiste Zeit wird der Refaktor getan, um etwas zu verbessern, das Sie und Buddy überhaupt nicht so gut abschneiden.

Hoffe das hilft.

Ich denke, technisch gesehen, dass Sie ein fehlerfreies, nicht triviales Programm schreiben könnten, aber aufgrund des stillenden Problems ist es unmöglich, dass es fehlerfrei ist. Man muss also unter der Annahme arbeiten, dass alle Programme Fehler haben, da es unmöglich ist, etwas anderes zu beweisen.

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

UPDATE: Sie können beweisen, dass ein bestimmter Algorithmus die richtigen Antworten zurückgibt, aber das ist nicht dasselbe wie zu beweisen, dass es völlig richtig ist.http://en.wikipedia.org/wiki/correctness_(Computer_Science)

Mein Punkt war jedoch, dass sich das Zitat auf die Tatsache bezieht, dass man annehmen muss, dass ein Programm immer Fehler hat und versucht zu erklären, warum dies der Fall ist.http://en.wikipedia.org/wiki/software_bug#bug_management

Als zusätzliche Einsicht könnten die "zwei Wege" ein Hinweis auf dieses Zitat von sein Tony Hoare:

Es gibt zwei Möglichkeiten, ein Softwaredesign zu konstruieren: Eine Möglichkeit besteht darin, es so einfach zu machen, dass es offensichtlich keine Mängel gibt, und die andere Möglichkeit besteht darin, es so kompliziert zu machen, dass es keine offensichtlichen Mängel gibt. Die erste Methode ist weitaus schwieriger. Es erfordert die gleiche Fähigkeit, Hingabe, Einsicht und sogar die gleiche Inspiration wie die Entdeckung der einfachen physischen Gesetze, die den komplexen Phänomenen der Natur zugrunde liegen.

Meditieren Sie ein wenig darüber und Sie werden sehen, dass er dasselbe sagt: Wenn Ihre Software nicht trivial ist, hat es Fehler (aber es kompliziert es genug und es wird nicht sein offensichtlich Fehler).

Lizenziert unter: CC-BY-SA mit Zuschreibung
scroll top