La programmazione informatica può essere definita come quella branca dell’informatica che si occupa di rendere automatici i processi risolutivi dei problemi. Ossia, l’obiettivo della programmazione informatica è automatizzare la soluzione di problemi, in modo che possa essere affidata ad un sistema di elaborazione elettronico con l’utilizzo di software opportunamente predisposti.
Come scrivere un semplice programma
(P.S. Per chi non conosce la definizione di algoritmo, si consiglia prima la lettura del seguente post: Problema e algoritmo).
Senza avere la pretesa di parlare delle diverse metodologie che possono essere utilizzate per lo sviluppo di sistemi software complessi e che sono oggetto di studio di una branca specifica dell’Ingegneria denominata Ingegneria del software, quindi facendo riferimento solo ai principi di base della teoria della programmazione procedurale, per scrivere un semplice programma si deve innanzitutto progettare l’algoritmo risolutivo del problema. Ciò può essere fatto così come viene illustrato nel seguente post: Progettazione di un algoritmo e coding.
Poi, se si vuole che l’algoritmo progettato possa essere eseguito in maniera automatica da un computer, è necessario che esso venga tradotto opportunamente in codice binario in modo da renderlo comprensibile e, quindi, utilizzabile dal computer. Ciò viene ottenuto attraverso diversi step.
1) Il primo step è denominato coding e consiste nel tradurre l’algoritmo utilizzando un linguaggio di programmazione per produrre speciali file di testo denominati file sorgenti. Attenzione, questi file non sono ancora i file del programma software che il computer è in grado di eseguire.
2) Gli step successivi, invece, possono essere diversi a seconda del tipo di linguaggio di programmazione che si è utilizzato. Più precisamente:
a) Nel caso di un linguaggio compilato, i file sorgenti vengono tradotti in un file eseguibile di programma che il computer è in grado di utilizzare direttamente ogni qualvolta quel programma deve essere eseguito. Ciò avviene attraverso i seguenti passi:
- Innanzitutto le istruzioni presenti nei file sorgenti, che si ricorda sono scritte in linguaggio di programmazione, vengono tradotte in istruzioni scritte in linguaggio macchina, quindi in codici binari direttamente eseguibili dal computer, all’interno di speciali file di programma detti file oggetto. Questa traduzione viene realizzata con la fase di compilazione da un software chiamato per l’appunto compilatore che preventivamente effettua anche un controllo sintattico del file sorgente e segnala l’eventuale presenza di errori lessicali o di sintassi, producendo i file oggetto solo in loro assenza.
- Successivamente i diversi file oggetto prodotti con la compilazione vengono collegati fra loro e con i file oggetto delle eventuali librerie utilizzate nei moduli di programma, per ottenere finalmente il file eseguibile finale. Questa fase è detta di linking e viene realizzata da un software chiamato per l’appunto linker (“collegatore”). Tra i linguaggi compilati più diffusi troviamo il C e C++.
b) Nel caso di un linguaggio interpretato i file sorgenti vengono utilizzati direttamente da un software interprete, che in tempo reale contemporaneamente interpreta ed esegue le istruzioni una per una ogni volta che il programma deve essere eseguito. Tra i linguaggi interpretati più diffusi troviamo la maggior parte dei linguaggi di scritping ed orientati al Web come PHP, ASP e Javascript.
c) Nel caso di un linguaggio semi-interpretato si può avere una situazione intermedia fra le due precedenti. In questo caso i file sorgenti vengono compilati per ottenere dei file che, però, non sono direttamente eseguibili dal computer. Essi, infatti, non contengono codici operativi direttamente eseguibili dalla CPU ma altri codici, detti bytecode, che invece possono essere interpretati ed eseguiti da un software interprete che, per questo motivo, insieme alla macchina fisica si dice forma una macchina virtuale. Uno dei linguaggi semi-interpretati più diffusi è Java, il cui software interprete si chiama JVM (Java Virtual Machine). In questa categoria di linguaggi possono essere collocati anche gli ultimissimi linguaggi della famiglia Microsoft che si fondano sul Framework .NET, quali: C#, VB.NET e C++.NET.
d) Un caso particolare, infine, è quello del linguaggio Phyton che può essere considerato un linguaggio sia interpretato sia semi-interpretato. Con Pyhton, infatti, a differenza di Java, è possibile anche richiedere direttamente l’esecuzione dei file sorgenti (normalmente con estensione .py) senza la necessità di un esplicito passaggio di compilazione (ovvero, il bytecode viene preparato “al volo”) e come per Java, inoltre, il bytecode viene anche salvato su disco (con estensione .pyc), così che in esecuzioni successive non occorrerà compilarlo nuovamente. La compilazione, inoltre, viene automaticamente rieseguita se il file sorgente è più aggiornato di quello contenente il bytecode.