Lezione 1 – Il primo caso

 

Difficoltà tecnica:
1-su-5

 

Prima di dare la definizione di algoritmo cerchiamo di capire in cosa potrebbe esserci utile. Partiamo da questo esempio:

Sono in autostrada e voglio che l’automobile su cui sono si fermi.

La risposta che viene spontaneo dare è ovviamente quella di usare il pedale del freno. Ma è davvero sempre la risposta corretta? No, non lo è sempre, infatti, anche parlando in generale, usare il pedale del freno non sempre ci permette di fermare l’automobile. Quando questo non avviene? Quando, per esempio, l’automobile che stiamo guidando è già ferma!

Nel caso in esame potrei essere semplicemente fermo in sosta nella piazzola di un autogrill e, in questo caso, per fermare l’automobile semplicemente non devo fare niente in quanto è già ferma. Può sembrare che si sta volutamente cercando il “pelo nell’uovo” ma non è assolutamente così. Il problema che ci è stato posto non specificava l’attuale velocità dell’automobile e di conseguenza se la risposta che abbiamo dato è quella di usare il pedale del freno abbiamo inconsciamente supposto che la macchina si stesse muovendo.

Questa supposizione, va chiarito, è ragionevole, di fatto normalmente non viene chiesto cosa bisogna fare per fermare un’automobile già ferma. Ma la supposizione che sia in movimento rende la soluzione fornita meno completa poichè restringe il campo delle possibilità introducendo un’ipotesi iniziale particolare.

A fronte della consapevolezza che non è fornita la velocità dell’automobile, la risposta potrebbe diventare: se l’automobile si sta muovendo allora utilizzo il pedale del freno, altrimenti non faccio niente in quanto sono già fermo. Abbiamo raggiunto quindi una risposta corretta? No, in generale non abbiamo ancora raggiunto una risposta corretta perché di fatto il quesito ci sta informando che noi siamo sull’automobile, ma non sta informando su quante persone sono a bordo dell’automobile e tanto meno ci sta informando sul fatto che stiamo guidando.

Nulla vieta che siamo seduti sul sedile del passeggero e che quindi se vogliamo fermare l’automobile dobbiamo chiedere al pilota di farlo. Anche la seconda soluzione è basata su una supposizione, ovvero quella che si sta guidando, ma come per quanto detto sopra è solo una supposizione dato che il testo della domanda non lo specifica chiaramente.

La nuova risposta che possiamo dare diventa ora: se la macchina è ferma non faccio niente, se invece si sta muovendo e sto guidando allora devo usare il pedale del freno, mentre, se non sto guidando, devo chiedere al pilota di utilizzare il pedale del freno.

Sono sicuro che il concetto a questo punto sia passato! La risposta è corretta e definitiva? In generale non lo è… le variabili che possiamo associare all’arresto di un automobile sono molteplici e di certo non le abbiamo ancora valutate tutte.

Dobbiamo valutarle tutte al fine di dare una risposta? Ovviamente no, se così fosse decidere come fermare la propria automobile richiederebbe parecchio tempo, forse troppo (dipende dal motivo per cui abbiamo deciso di fermarci). Ma se non dobbiamo valutarle tutte, allora quante dobbiamo valutarne? Questa è realmente la risposta più difficile da dare in questo corso e, a parte casi particolari che vedremo già dalla prossima lezione, dipende da quanto dobbiamo essere precisi nel dare la risposta stessa.

Come esercizio è utile in questa prima fase porsi dei problemi e trovarne la soluzione prestando attenzione ai passaggi. Un buon esercizio è quello di porsi un problema per cui riusciamo a trovare una soluzione che non necessita di nessuna supposizione per essere valida. Ne esistono davvero tanti e la prossima volta ne analizzeremo uno.

 

 

introduzione agli algoritmi

Introduzione agli algoritmi

Difficoltà tecnica:
1-su-5

 

A chi è rivolto il corso?

Questo corso è rivolto principalmente a chi vuole avvicinarsi per la prima volta al mondo della programmazione.

Servono prerequisiti?

Di fatto no, se state leggendo questa pagina avete a disposizione tutto quello che serve per iniziare, ovvero un computer o comunque un dispositivo in grado di visualizzare una pagina web.

Cosa si apprenderà?

Alla fine del corso, probabilmente già prima della fine del corso, si avrà una visione chiara del concetto di algoritmo e di come questo si applica alla programmazione. Il corso, pur volendo mantenere volutamente un’impronta teorica, sarà supportato da esempi pratici e fin dalle prime lezioni sarà possibile applicare nella pratica quello che si è appreso.

Struttura del corso

Il corso verrà proposto tramite una serie di post all’interno di questo blog. Si cercherà di dare una cadenza settimanale ai post ma purtroppo non si può garantire, ad ora, puntualità nelle pubblicazioni.

Le lezioni saranno quanto più brevi possibile. La volontà è quella, di volta in volta, di concentrarsi sui concetti essenziali mirate a descrivere il concetto in questione, fornirne la logica, gli esempi pratici ed eventuali ‘compiti a casa’.

Campo pratica

Nonostante la consapevolezza che chi si avvina a questo corso lo sta facendo per avvicinarsi al mondo della programmazione, si è deciso di non fare riferimento a nessun linguaggio specifico.

Il corso può essere portato a termine semplicemente con carta, penna e il terminale che state utilizzando per leggere questa pagina.

La scelta di non utilizzare nessun linguaggio di programmazione è dettata principalmente dal fatto che l’algoritmica è una materia indipendente dalla programmazione e, sotto molti aspetti, un prerequisito della programmazione stessa. Pertanto, rispettando un naturale flusso di apprendimento, è importante conoscerla prima di cimentarsi nella programmazione vera  propria.

Tempi di apprendimento

I tempi di apprendimento del corso dipendono ovviamente da svarianti fattori, ma possono considerarsi brevi in quanto non richiederanno tanto più pratica di quella che verrà fatta seguendo completamente il corso.