¿Qué quiso decir Alan Perlis con respecto a las formas de escribir programas sin errores? [cerrado]

29

Hay una cita de Alan J. Perlis que dice:

Hay dos formas de escribir programas sin errores; solo el tercero funciona.

Recientemente escuché esta cita de mi amigo, y no pude entender el significado más profundo detrás de ella.

¿De qué está hablando Perlis aquí?

ykombinator
fuente
1
también te das cuenta de la falacia de esta parodia, ya que es posible escribir programas no triviales que están libres de errores, solo requiere disciplina.
1
Este tipo de pregunta ahora se está discutiendo en nuestro sitio de meta-discusión .
1
lectura recomendada: Discuta esto $ {blog}
mosquito

Respuestas:

41

Significa que realmente no hay programas libres de errores. Una cita profunda sobre formas de evitar errores con un error en sí mismo es parodia.

Jesse C. Slicer
fuente
3
Alan Perlis ciertamente tenía una manera con las palabras.
Frank Shearar
2
Es la "parodia" lo que es importante en este significado de citas.
Adam Harte
60

No hay tercer camino.

No hay forma de escribir programas sin errores


fuente
37

Contestaré con otra cita ...

Un juego extraño El único movimiento ganador es no jugar.

;-)

Austin Salonen
fuente
55
¡+1 para referencia de juegos de guerra!
Jason
Enlace obligatorio de xkcd siguiente: xkcd.com/601
Baelnorn
14

Como muchas otras respuestas ya han señalado, no hay forma de escribir un programa sin errores .

Pero lo que me gustaría señalar es la potencial meta naturaleza de la cita. Es esencialmente un error fuera de límites. En la primera declaración, define el universo o "lista" que tiene solo dos posibilidades o elementos. Sin embargo, en la segunda declaración, hace referencia a una tercera. Lo cual es absurdo! ¡Incluso ilegal! Un tercer elemento dado un límite de dos elementos es en sí mismo un error.

Verdaderamente profundo en que la cita puede demostrar la esencia misma a la que se refiere.

Mark Canlas
fuente
Hay una manera de demostrar que un programa se comporta como se especifica. Que se utiliza por ejemplo para las instalaciones nucleares ...
1
@ Thorbjørn Ravn Andersen, como se especifica no significa que esté libre de errores.
CaffGeek
5

Esto significa que todos los programas no triviales tendrán errores. Es solo una forma divertida de decir que no hay forma de escribir un programa sin errores.

dsimcha
fuente
5

Es posible escribir programas libres de errores, incluso programas no triviales e incluso probar que son correctos. Considere, por ejemplo, idiomas como Coq, Epigram o Agda donde se hace esto.

El problema de detención indica que no es posible hacer esto para el programa general .

Tony Morris
fuente
Regrese más lejos, al equipo de Don Good en UT Austin, y su trabajo en la década de 1970 y principios de 1980 con el Gypsy Verification Environment. Demostraron que era posible un código libre de errores al entregar un Modulador de flujo de mensajes sin errores probado a la Armada. El conjunto de pruebas de aceptación fue desarrollado por un grupo completamente diferente. Cuando el MFM vio el conjunto de pruebas de aceptación, por primera vez, en la Prueba de aceptación, pasó, SIN desviaciones, exenciones o "sí pero".
John R. Strohm
3

Esto me recuerda a una camisa nerd que vi: hay 10 tipos de personas en el mundo. Los que saben binario y los que no.

También podría ser un juego el hecho de que a veces las listas están indexadas en 0. $ var = array ('Primero', 'Segundo', 'Tercero'); Y puede acceder a esta lista como tal: $ var [0] = 'Primero' $ var [1] = 'Segundo' $ var [2] = 'Tercero'

Entonces, el índice de matriz literal 2 apunta al índice "Tercero".


fuente
... y aquellos que comienzan a indexar a cero
2

Esto ya se explica en otras palabras, pero no tan claramente como creo que debería ser. Simplemente significa que intentará en ambos sentidos, tendrán errores, y finalmente solucionará sus errores y tendrá un programa libre de errores. Compare con otra cita:

La única forma de que ocurran errores en un programa es colocando allí el autor. No se conocen otros mecanismos. Los programas no pueden adquirir errores al sentarse con otros programas con errores. --Harlan Mills

(Alternativamente, podría leer esto como dijo Pierre (lo que creo que es una exageración). (La tercera forma, que no existe en el dominio, funciona). Como dije, es una exageración, pero es cierto.

Mark C
fuente
1

Esta es la misma cita que mi papá usa para decirme cuando pongo excusas. El dicho tiende a decir: "Hay 3 lados en una historia. Su lado, Tu lado y el lado correcto / verdadero / correcto".

Poniendo esto en contexto con el desarrollo (y siendo un probador de software por el profesor), diría que dado que hay tantas maneras de codificar algo, tendría sentido ir con "Hay tres lados en la codificación. Su código, su código y el código refactorizado ".

Creo que esto se debe a que los programadores / desarrolladores tienden a refactorizar una vez que el producto se está estabilizando, lo que en su mayoría es demasiado tarde, pero la mayoría de las veces el refactorizador se hace para mejorar algo que usted y su amigo no hicieron tan bien en primer lugar.

Espero que esto ayude.


fuente
1

Creo que, técnicamente hablando, podría escribir un programa no trivial sin errores, pero debido al problema de detención, es imposible demostrar que está libre de errores. Por lo tanto, uno debe trabajar bajo el supuesto de que todos los programas tienen errores, ya que es imposible demostrar lo contrario.

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

Actualización: puede probar que un algoritmo particular devolverá las respuestas correctas, pero eso no es lo mismo que demostrar que es totalmente correcto. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Sin embargo, mi punto fue que la cita se refiere al hecho de que uno debe asumir que un programa siempre tiene errores e intenta explicar por qué ese es el caso. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Booji Boy
fuente
1
Como dijo Tony Morris, es posible demostrar que un programa en particular es correcto. No es posible escribir un programa que, en general, pueda probar que cualquier programa que sea correcto, es correcto.
Max Strini
-1

Como información adicional, las "dos formas" podrían ser una referencia a esta cita de Tony Hoare :

Hay dos formas de construir un diseño de software: una es hacerla tan simple que obviamente no haya deficiencias, y la otra es hacerla tan complicada que no haya deficiencias obvias. El primer método es mucho más difícil. Exige la misma habilidad, devoción, perspicacia e incluso inspiración que el descubrimiento de las simples leyes físicas que subyacen a los complejos fenómenos de la naturaleza.

Medita un poco en eso y verás que está diciendo lo mismo: si tu software no es trivial, tiene errores (pero complicalo lo suficiente y no serán errores obvios ).

Doval
fuente
esto no responde a la pregunta formulada
mosquito
@gnat No veo cómo no, está justo ahí en el segundo párrafo. Quizás la redacción no estaba clara, pero cuando dije "decir lo mismo", quise decir "decir lo mismo que Alan Perlis". Es decir, la cita de Perlis es probablemente una parodia humorística de Hoare.
Doval