it-swarm-es.com

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

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í?

29
ykombinator

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

41
Jesse C. Slicer

No hay una tercera vía

No hay forma de escribir programas sin errores

60
user2567

Contestaré con otra cita ...

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

;-)

37
Austin Salonen

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 el sentido de que la cita puede demostrar la esencia misma a la que se refiere.

14
Mark Canlas

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 .

5
Tony Morris

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.

5
dsimcha

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".

3
jsjoy

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 sin 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 cual creo que es un estiramiento). (La tercera forma, que no existe en el dominio, funciona). Como dije, es un estiramiento, pero cierto.

2
Mark C

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 en 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

1
Booji Boy

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 3 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 estabiliza, lo que 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.

1
NJK