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

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

  •  16-10-2019
  •  | 
  •  

Pregunta

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

¿Fue útil?

Solución

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

Otros consejos

No hay tercer camino.

No hay forma de escribir programas sin errores

Responderé con otra cita ...

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

;-)

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 meta naturaleza potencial de la cita. Es esencialmente un error fuera de los límites. En la primera declaración, define el universo o "lista" que solo tiene dos posibilidades o elementos. Sin embargo, en la segunda declaración, hace referencia a un tercero. ¡Lo cual es absurdo! ¡Ilegal incluso! 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.

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

Es posible escribir programas sin errores, incluso los no triviales e incluso demostrarlos correctos. Considere, por ejemplo, idiomas como COQ, Epigram o AGDA donde se hace esto.

los problema de detención afirma que no es posible hacer esto por el programa general.

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

También podría ser un juego sobre el hecho de que a veces las listas están indexadas. $ 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 "Tercer".

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 siendo el autor. No se conocen otros mecanismos. Los programas no pueden adquirir errores sentados con otros programas de buggy. -Harlan Mills

(Alternativamente, podría leer esto como dijo Pierre (que creo que es un tramo) (la tercera forma, que no existe en el dominio, funciona). Como dije, es un tramo, pero cierto.

Esta es la misma cita que mi papá usa para decirme cuándo pongo excusas. El dicho tiende a ir como: "Hay 3 lados en una historia. Su lado, su lado y el lado derecho/verdadero/correcto".

Poner esto en contexto con el desarrollo (y ser un probador de software por parte del profesor), diría que ya que hay muchas maneras de codificar algo, tendría sentido ir con "Hay 3 lados para codificar. Su código, su código y su código el código refactorizado ".

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

Espero que esto ayude.

Creo que, técnicamente hablando, podría escribir un programa no trivial libre de errores, pero debido al problema de detención, es imposible probar que es 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 era que la cita se refiere al hecho de que uno debe asumir que un programa siempre tiene errores e intentando explicar por qué ese es el caso.http://en.wikipedia.org/wiki/software_bug#bug_management

As additional insight, the "two ways" might be a reference to this quote by Tony Hoare:

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature.

Meditate on that a little and you'll see he's saying the same thing: if your piece of software is non-trivial, it has bugs (but complicate it enough and they won't be obvious bugs).

Licenciado bajo: CC-BY-SA con atribución
scroll top