Fabrizio Viscardi Logo
Progettare algoritmi

Appunti di Informatica Generale

Cosa fa il Programmatore? - Dalla Realtà all'Algoritmo

Il Programmatore Informatico, utilizzando 'linguaggi di programmazione' sviluppa applicazioni software che soddisfano specifiche esigenze. Dunque in questa definizione più ampia (che però è anche quella utilizzata in forma implicita nelle Linee Guida dettate dal MIUR), il programmatore, se da una parte dovrebbe essere molto bravo nell'utilizzo di più linguaggi di programmazione dall'altra dovrebbe avere anche profonde capacità logiche che gli consentano di sviluppare applicazioni secondo le esigenze del cliente.

Il Programmatore Informatico, nel senso ampio del termine, dovrebbe essere in grado di comprendere i problemi posti dal cliente e di conseguenza 'tradurre' la realtà che il cliente gli ha proposto in un progetto software che risolva il problema.

E' vero che in molte software houses i Programmatori compiono solo il lavoro di conversione di un progetto sviluppato dall'Analista (dalle Specifiche Dettagliate di Progetto) in un linguaggio di programmazione e che spesso le Specifiche sono così puntuali tanto che al Programmatore basta conoscere bene la Programmazione !
Ma questo non deve essere assolutamente il principio che i docenti di Informatica Generale devono seguire per molte ragioni:
- non si formano solo Programmatori ma 'esperti di informatica' in grado di ricoprire, con l'esperienza, anche il ruolo di Analisti;
- lo sviluppo delle capacità logiche e quindi l'abilità di progettazione di Algoritmi resta un elemento fondamentale;
- le applicazioni che si possono sviluppare sono solo una minima parte di tipo "lineare" come le pagine web semplici, ad esempio, mentre molte di più sono quelle che richiedono una progettazione. partendo dal problema ed arrivando a definire tutti i passi da svolgere in modo da garantire il risultato richiesto.
Il MIUR, nelle sue Linee Guida, fa capire molto chiaramente che il Programmatore ovvero lo studente del corso di Informatica Generale di 3°, 4° e 5° classe, deve saper progettare.

E 'saper progettare' significa saper definire l'algoritmo risolutore per ciascun problema posto.

Ed ecco, per contro la definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero determinato di passi.

In altre parole è un 'procedimento che, mediante un numero determinato di passi, riesce a soddisfare la richiesta reale fornendo una certa soluzione.

Una bella definizione che ho trovato (con la quale concordo pienamente) è :
<< L'algoritmo è un concetto fondamentale dell'informatica, anzitutto perché è alla base della nozione teorica di calcolabilità (un problema è calcolabile quando è risolvibile mediante un algoritmo) ed inoltre l'algoritmo è un concetto cardine anche della fase di programmazione di un software (preso un problema da risolvere, la programmazione costituisce essenzialmente la traduzione di un 'algoritmo per tale problema' in un programma, scritto in un certo linguaggio. Il programma può essere effettivamente poi eseguito da un calcolatore.>>

Quindi i corretti (ed assolutamente indispensabili) passi che costituiscono una chiara metodologia risolutiva sono:

Realtà --> Definizione del Problema --> Progetto dell'Algoritmo --> Rappresentazione dell'Algoritmo (su carta) --> Traduzione in Linguaggio di Programmazione --> Esecuzione


Ora io Vi chiedo questo:
E' possibile eliminare un passo da una metodologia risolutiva ?
E' possibile passare dalla Realtà e quindi dal Problema alla Traduzione in Linguaggio di Programmazione ?
E' possibile definire i passi da svolgere mentre si scrive il programma stesso ?
L'unica risposta a tutte queste domande è

No


E' per queste ovvie motivazioni che un buon programmatore (di quelli che le aziende vogliono assumere...) deve sviluppare capacità logiche quanto più elevate possibile insegnando al proprio cervello a 'cercare' tutti i possibili passi (logici) necessari ed opportuni per risolvere un dato problema.

Il buon programmatore imparerà presto a separare completamente la fase di 'Progetto dell'Algoritmo' dalla successiva fase di 'Traduzione dell'algoritmo in Linguaggio di P.'; si tratta infatti di due fasi consecutive, certo, ma assolutamente indipendenti poiché partono da input diversi e producono output diversi !

Sono molto contento che le Linee Guida del MIUR della disciplina 'Informatica' spingano molto e più volte il concetto di 'Progetto di Algoritmi' poiché è proprio attraverso lo sviluppo di Algoritmi che si forma un buon programmatore.

Per i dubbiosi propongo il seguente quesito: se in un corso dopo la somministrazione per qualche settimana di alcuni semplici algoritmi si procedesse con l'insegnamento di tre diversi linguaggi di programmazione allo stesso tempo, ad esempio C++ Java e Fortran-2003 stabilendo che ciascun esercizio proposto da svolgere in laboratorio dovesse essere eseguito dagli allievi in tutti e tre i linguaggi di programmazione... come potrebbero procedere gli allievi senza prima aver progettato l'algoritmo? Dovrebbero studiare i passi necessari ogni volta per tre volte al momento della scrittura delle istruzioni al computer?