Cosa voleva dire Alan Perlis per quanto riguarda i modi per programmi privi di errori di scrittura? [chiuso]

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

  •  16-10-2019
  •  | 
  •  

Domanda

C'è una citazione da Alan J. Perlis che dice:

Ci sono due modi per programmi privi di errori di scrittura; Solo il terzo si lavora.

Di recente ho sentito questa citazione dal mio amico, ed era in grado di comprendere il significato più profondo dietro di esso.

Che cosa è Perlis parlando qui?

È stato utile?

Soluzione

Significa che ci sono davvero non programmi senza errori. Una citazione profonda sui modi per evitare gli errori con un errore in sé è la parodia.

Altri suggerimenti

Non c'è una terza via.

Non v'è alcun modo per i programmi privi di errori di scrittura

Le rispondo con un'altra citazione ...

Uno strano gioco. La mossa vincente solo Non è quello di giocare.

; -)

Come molte altre risposte hanno già fatto notare, non c'è modo di scrivere un programma senza errori .

Ma quello che vorrei sottolineare è il potenziale meta natura del preventivo. E 'essenzialmente un errore di limiti. Nella prima dichiarazione, egli definisce l'universo o "lista" che ha solo due possibilità o elementi. Eppure, nella seconda affermazione, egli fa riferimento ad un terzo. Il che è assurdo! anche illegale! Un terzo elemento in due elementi di contorno è di per sé un errore.

In verità profonda che la citazione è in grado di dimostrare l'essenza stessa a cui si riferisce.

Ciò significa che tutti i programmi non banali avranno bug. E 'solo uno strano modo di dire non c'è modo di scrivere un programma privo di errori.

E 's possibile programmi privi di errori di scrittura, anche quelli non banali e anche dimostrare loro corretta. Si consideri ad esempio, linguaggi come Coq, Epigram o Agda in cui questo viene fatto.

Il arresto problema Stati che non è possibile fare questo per il programma generale .

Questo mi ricorda una sega secchione camicia I: Ci sono 10 tipi di persone al mondo. Chi conosce binario e quelli che non lo fanno.

Potrebbe anche essere un gioco sul fatto che a volte le liste sono 0 indicizzati. $ Var = array ( 'First', 'Seconda', 'terzo'); E si può accedere a questa lista in quanto tale: $ Var [0] = 'Prima' $ Var [1] = 'Seconda' $ Var [2] = 'terzo'

Quindi, l'indice di array letterale 2 punti per l'indice di "Third".

Questa è già spiegato in altre parole, ma non così chiaramente come penso che dovrebbe essere. Significa semplicemente si cercherà in entrambi i modi, avranno gli errori, e, infine, si correggere i bug e hanno un programma senza errori. Confronta con un'altra citazione:

L'unico modo per gli errori a verificarsi in un programma è quello di essere messo lì da parte dell'autore. No altri meccanismi sono noti. I programmi non possono acquisire i bug da seduti intorno con altri programmi buggy. --Harlan Mills

(In alternativa, si potrebbe leggere questo come ha detto Pierre (che credo sia un tratto). (La terza via, che non esiste nel dominio, opere.) Come ho detto, è aa tratto, ma vero.

Questa è la stessa citazione mio uso padre di dirmi quando faccio scuse. Il detto tende ad andare come:. "Ci sono 3 lati per una storia dalla loro parte, il vostro lato, e il diritto / vero / lato corretto"

Mettendo questo in un contesto con lo sviluppo (e di essere un software tester dal prof.), Direi che dato che ci sono tanti modi per codice di qualcosa che avrebbe senso andare con "C'è 3 lati di codifica. Il codice, il loro codice e il codice refactoring ".

Credo che questo sia perché i programmatori / sviluppatori tendono a refactoring volta che il prodotto è sempre stabile, che è in gran parte troppo tardi, ma la maggior parte del tempo il refactoring è fatto per migliorare qualcosa che voi e il compagno non l'ha fatto bene nel primo posto.

Spero che questo aiuti.

Credo che, tecnicamente parlando, che si potrebbe scrivere un programma non banale errori, ma a causa della Arrestare problema è impossibile dimostrare che è esente da errori. Così, un lavoro deve in base al presupposto che tutti i programmi hanno dei bug dal momento che è impossibile dimostrare il contrario.

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

Aggiornamento: È possibile dimostrare un particolare algoritmo restituirà le risposte giuste, ma non è la stessa cosa di prova è del tutto corretto. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Tuttavia, il mio punto è che la citazione si riferisce al fatto che si deve assumere un programma ha sempre bug e cercando di spiegare il motivo per cui questo è il caso. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Come ulteriori indizi, le "due vie" potrebbe essere un riferimento a questa citazione da Tony Hoare :

Ci sono due modi di costruire un software di progettazione: Un modo è quello di rendere così semplice che non ci sono, ovviamente, carenze, e l'altro modo è quello di fare in modo complicato che non ci siano carenze evidenti. Il primo metodo è molto più difficile. Esige la stessa abilità, la devozione, l'intuizione, e anche l'ispirazione, come la scoperta delle semplici leggi fisiche che sono alla base dei complessi fenomeni della natura.

Meditate su che un po 'e vedrete che dice la stessa cosa: se il vostro pezzo di software non è banale, non ha bug (ma complicare abbastanza e che non sarà ovvio bug).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top