L’algorimo per comprare i biscotti. (Repost)

In un altro articolo abbiamo detto che l’algoritmo generico che risolve il problema di comprare una scatola di biscotti è, a grandi linee, il seguente.

  • Andare al supermercato
  • trovare lo scaffale dei biscotti
  • prendere la scatola dei biscotti che ci interessa
  • andare alla cassa
  • fare la fila
  • pagare
  • tornare a casa.

Da un certo punto di vista è corretto, da un altro no.Vediamo perché.

Nessuno riesce a vedere le ipotesi che ho fatto e che non ho dichiarato ?

Cominciamo da quella più evidente: questa ipotesi é che INIZIALMENTE mi trovi a casa.

Nel caso non mi trovassi a casa e fossi in un altro luogo, formalmente dovrei modificare queste istruzioni più o meno così:

  • Individuare il posto dove mi trovo e scriverlo su un fogliettino o metterlo a memoria (per poterci tornare dopo)
  • Andare al supermercato
  • tornare nel posto dove ero all’inizio.

Ma anche così manca qualcosa. “Ho preso il portafoglio con me ? C’è del denaro ? Basta per acquistare quello che voglio ?”, ovvero devo aggiungere degli uteriori controlli prima di avviare la procedura.

E magari controllare di avere preso le chiavi. Le istruzioni che ho appena descritto si modificano cosi’:

  • Controllare di avere con sé il portafoglio e che ci sia denaro a sufficienza.
  • Controllare di aver preso le chiavi di casa.
  • Individuare il posto dove mi trovo e scriverlo su un fogliettino o metterlo a memoria (per poterci tornare dopo)
  • Uscire di casa Andare al supermercato
  • tornare nel posto dove ero all’inizio.

Cosa significa in un algoritmo “controllare” ? Significa fare dei test ed in base a questi compiere delle azioni oppure altre.

Le ipotesi che devo testare sono molteplici, qui le omettiamo per semplicità, ma non perche’ non ce ne sia bisogno:

il nostro cervello certi controlli li fa (o li dovrebbe fare) automaticamente, un calcolatore [gli inglesi lo chiamano computer, gli spagnoli lo chiamano ordenador, gli “esperti” lo chiamano PC ] non è in grado di farlo se non viene istruito.

Nota MOLTO bene: fino ad ora abbiamo scritto un algoritmo in modo tale che sia comprensibile per noi esseri umani, e sono sicuro che ad alcuni questo appaia già abbastanza pedante. Ma queste istruzioni per un calcolatore sono fin troppo generiche e risultano impossibili da eseguire. Per chiarire bene il concetto vi faccio un esempio apparentemente molto semplice. L’istruzione: Uscire di casa può essere scomposta in una serie istruzioni molto più elementari del tipo ( immaginando di essere di fronte alla porta di casa ed all’interno della stessa ) Controlla che la porta sia aperta se no aprila altrimenti esci girati, afferra la maniglia e chiudi la porta ricordati in quale tasca hai il mazzo di chiavi prendilo dalla tasca trova nel mazzo la chiave di casa quando l’hai trovata infilala nella toppa e chiudi la serratura scegli una tasca ove riporre la chiave e memorizza questa scelta togli la chiave dalla toppa e riponila nella tasca scelta ….. Vi pare sufficientemente dettagliato ? Ebbene, questo ancora non sarebbe un algoritmo eseguibile per un calcolatore, il quale ha bisogno di molte istruzioni in un suo linguaggio, solo per eseguire una sola di queste. Se vi trovate di fronte ad un PC e pensate che sia semplice da usare, sappiate che a voi pare facile usare un pc, perché qualcuno è impazzito a scrivere codici comprensibili da un calcolatore per fare in modo che ad un singolo vostro comando, vengano eseguite le giuste istruizioni ( svariate decine, se non centinaia a volte migliaia ) a vostra insaputa, giusto per farvi sentire a vostro agio. Vedremo in un altro articolo di approfondire questo argomento. ( Mica pensavate che fosse finita qui ?? )

Una ultima nota: come cominciate a capire, le “condizioni iniziali” di un problema sono elementi critici per la soluzione dello stesso. Se qualche volta in programma si blocca o non da risultati dovuti spesso è perché lo sviluppatore ha fatto degli assunti che poi in certe occasioni non sono vere. Un altro motivo può essere che il calcolatore dove il programma è stato sviluppato non ha la stessa identica configurazione di quello dove il programma viene eseguito. Accade spesso, infatti, che il programma funzioni egregiamente sul computer di sviluppo ma poi su quello di “produzione” ( dell’utente finale ) abbia comportamenti a dir poco bizzarri.

Advertisements

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...