La figura del programmatore sta diventando sempre più popolare. Sia a livello iconografico, basti pensare al cliché del giovane ragazzo che lavora come programmatore in smart working e vive da nomade digitale, sia a livello lavorativo, la figura professionale del programmatore sta diventando sempre più ricercata e ambita, vista l’esponente crescita dell’offerta di app e software.
Ma in che cosa consiste concretamente la programmazione?
Programmazione: significato
La programmazione è l’insieme delle azioni e attività che il programmatore, o un gruppo di programmatori, compie per creare un programma o un’applicazione, più in generale un software, che venga poi letto da un computer. Per chi non sapesse il significato di software, rimandiamo ad un nostro articolo, dove affrontiamo nello specifico l’argomento.
Spesso, i programmatori devono fare un lavoro “sartoriale”, ossia strutturano il proprio operato tenendo ben presente le specifiche e le esigenze richieste dai committenti.
L’analisi prima della programmazione
La programmazione è l’ultimo step nel processo di creazione del software. Prima di procedere, infatti, si effettua una fase di analisi, in cui si studia il problema e si cerca di individuare la soluzione più logica.
In questo punto del percorso è utile, anche, porre a confronto diverse ipotesi. Si possono utilizzare due tipologie di strumenti:
- Il diagramma di flusso: un diagramma che rappresenta tutte le fasi di un processo, collegate tramite linee di flusso, che indicano la direzione interna del programma.
- lo pseudocodice: lo pseudocodice lo abbiamo già incontrato e analizzato in un altro articolo. In breve, viene utilizzato il linguaggio umano, al posto del linguaggio di programmazione, per stilare una scaletta di tutte le azioni necessarie da compiere e i comandi da implementare.
Questi due strumenti aiutano a definire con più chiarezza l’algoritmo (o l’insieme di algoritmi) da utilizzare durante la successiva fase di sviluppo. Abbiamo parlato approfonditamente di cosa sono gli algoritmi e perché sono così importanti nella programmazione nella pagina a loro dedicata
I vari linguaggi di programmazione
Quando ci si approccia al mondo della programmazione è di fondamentale importanza comprendere che esistono differenti linguaggi. Essi sono vari, e si distinguono in due macro-gruppi: interpretati e compilati.
Una prima distinzione in due gruppi può essere fatta fra linguaggi interpretati e linguaggi compilati:
Compilati
Questi richiedono che il codice, una volta finito il ciclo di sviluppo, venga trasformato in un linguaggio macchina per essere eseguito dalla CPU attraverso una procedura chiamata compilazione.
Tra i più usati:
- C: Appartiene alla categoria dei linguaggi di programmazione procedurali. È, quindi, composto da espressioni matematiche ed istruzioni operative. Viene utilizzato per sistemi operativi, giochi e applicazioni. La sua completezza lo rende uno dei linguaggi migliori, anche per chi sta muovendo i primi passi. Imparare a programmare utilizzando C, semplificherà l’utilizzo di altri linguaggi, come JavaScript, C++ e PHP.
- C++: si può considerare l’evoluzione di C. A differenza di quest’ultimo, C++ è un linguaggio ad oggetti.
Altri linguaggi compilati sono Pascal e Cobol.
Interpretati
Il codice sorgente di un programma interpretato viene salvato così com’è, viene letto da un interprete che si occupa di tradurlo nella forma più appropriata per l’esecuzione da parte del processore. È necessario quindi installare un apposito software interprete per l’esecuzione.
Il più grande vantaggio di questo tipo di programmi è la facilità di creazione e la compatibilità su più dispositivi. Lo svantaggio più importante è che solitamente l’ esecuzione è leggermente più lenta rispetto ad un linguaggio compilato.
Tra i più noti linguaggi interpretati troviamo:
- JavaScript: è un linguaggio ad oggetti ed è tra i più utilizzati grazie alla sua struttura elementare. È principalmente usato per programmare siti web, software e applicazioni. Adatto anche per chi è alle prime armi.
- PHP: è consigliato per chi si interessa solamente di programmazione di siti web. Infatti, circa l’80% dei siti. PHP dà la possibilità di creare un sito da zero, ma anche di effettuare modifiche al codice di siti già online.
Altri esempi di linguaggi interpretati famosi sono Ruby e BASIC.
Pseudo-compilati
Ci sono poi una categoria di linguaggi che si trovano un po’ nel mezzo e che quindi vengono spesso chiamati pseudo-compilati. Uno degli esempi più comuni di questo approccio è Java (da non confondere con il già citato JavaScript.
In Java, il codice sorgente viene compilato in una forma intermedia (chiamata bytecode), che poi viene interpretata dalla Java Virtual Machine (JVM). Questo è il motivo per cui per eseguire un programma scritto in java abbiamo bisogno di installare la Java Virtual Machine sul nostro computer, ma se proviamo ad aprire i file java del programma non ci capiremo nulla (il bytecode non è facilmente leggibile dall’uomo come il codice sorgente da cui deriva).
In questo caso avremo un incremento di prestazioni dato dal fatto che il bytecode è più vicino al codice macchina e quindi il lavoro di interpretazione è meno oneroso. Al contempo il fatto di non compilare il codice per uno specifico ambiente di esecuzione permette una vasta portabilità su ambienti di esecuzione diversi, assolvendo allo slogan “write once, run anywhere” (scrivi una volta, esegui ovunque) che Java si prefigge di portare avanti.
Il linguaggio di programmazione può essere classificato secondo un altro parametro, il livello. Esso può essere:
Linguaggio di basso livello
I linguaggi di basso livello sono dei linguaggi solitamente più vicini al linguaggio macchina, il cui livello di astrazione è quindi più ridotto. La sintassi e le strutture di controllo sono quindi più simili a quelle del processore. È più efficiente in termini di memoria ed è più veloce, rispetto ad un linguaggio ad alto livello. Per contro, un programma scritto utilizzando un linguaggio di basso livello può essere più difficile da leggere manutenere.
Linguaggio di alto livello
I linguaggi di livello sono generalmente più astratti rispetto al linguaggio delle macchine, fornendo quindi una sintassi e delle strutture di controllo più vicine al modo di interpretare e ragionare dell’uomo.
Un programma scritto utilizzando un linguaggio ad alto livello è generalmente più facile da leggere e manutenere, al prezzo di una minore efficienza e velocità in fase di esecuzione.
Differenti tipi di programmazione
In aggiunta alla varietà di linguaggi, esistono svariati metodi di programmazione. I due metodi maggiormente in uso sono:
- Procedurale: vengono elencate in sequenza una serie di istruzioni, che il computer andrà ad eseguire in ordine. Ogni operazione va integrata con una specifica istruzione a creare una “procedura”.
- Ad oggetti: vengono creati degli oggetti, o classi, ognuno dei quali possiede specifiche funzioni. Possono funzionare tra loro o autonomamente. A parità di operazioni, la programmazione ad oggetti richiede meno istruzioni rispetto a quella procedurale.
Altri tipi di programmazione sono:
- Strutturata: composta da strutture condizionali e strutture cicliche di controllo.
- Modulare: suddivide il codice sorgente in più moduli e li esegue in ordine.
- Funzionale: pone la sua base sui concetti di espressione e funzione logico matematica.
La differenza tra programmazione procedurale, ad oggetti, funzionale ecc… non è sempre necessariamente netta, possiamo ad esempio utilizzare elementi di programmazione funzionale in linguaggi di programmazione considerati tipicamente ad oggetti.
La codifica del programma
Ora che abbiamo introdotto le diverse variabile di linguaggio e di tipologia di programmazione, e abbiamo sottolineato l’importanza dell’analisi come punto di partenza, potrebbe sorgere spontanea una domanda: qual è la fase successiva?
Bene, una volta individuato il miglior percorso logico, bisogna scegliere il paradigma di progettazione più adatto alle nostre esigenze, e successivamente scegliere quale linguaggio utilizzare per sviluppare il progetto. Scelte queste variabili, si passa dall’analisi alla programmazione del codice sorgente del software.
La fase di codifica è quella finale, in teoria. Una volta finita, il programma dovrebbe esser pronto e funzionante. In realtà, questa parte è quella maggiormente soggetta ad errori, che comportano bug e malfunzionamenti. Diventa, quindi, obbligatorio effettuare un controllo del corretto funzionamento del software. Un primo controllo preliminare viene svolto dal programmatore stesso, al termine della codifica.
La fase di verifica e debugging
I bug e i malfunzionamenti, spesso, possono essere causati da: errori di sintassi, errori di logica ed errori di runtime.
Occorre dedicare molto tempo e risorse alla fase di debugging, nel caso in cui non si eliminino più malfunzionamenti possibile, il programma potrebbe andare in contro ad interruzioni improvvise, potrebbe non essere utilizzabile, o fornire un output non coerente con l’input ricevuto.
Nessun codice (con un certo livello di complessità) è esente da errori, indipendentemente dai linguaggi di programmazione usati. Per quanto vogliamo sforzarci, è quasi impossibile creare un programma molto complesso senza che non ci siano uno o più blocchi di istruzioni che abbiano qualche errore, a meno di non eseguire grandi quantità di test.
Per velocizzare questa fase, solitamente, si lavora su un prototipo del software, che non dispone di tutte le funzionalità, velocizzando il lavoro e il processo di controllo e risoluzione dei problemi. La fase di testing dovrebbe andare passo passo con la fase di sviluppo.
Ambiti di programmazione
Il termine programmazione è molto generico, funge da cappello ad una serie di settori dell’informatica in cui si compie una specifica programmazione.
I settori più importanti sono:
- Applicazioni per dispostivi fissi: quindi programmi pensati per computer, workstation, mainframe…
- Applicazioni per dispositivi mobili: per smartphone, tablet…
- Videogiochi
- Applicazioni per dispositivi server
- Web
Imparare a programmare: come e perché?
Come in tutti i settori, anche la programmazione richiede anni e anni di esperienza sul campo per essere padroneggiata.
Ma il mercato del lavoro è ampio, e richiede diversi livelli di competenza. Potrebbe, quindi, essere utile far proprie le conoscenze base della programmazione.
Essere in grado di districarsi e risolvere in autonomia piccoli problemi; saper porre le giuste domande ed essere consapevoli dell’argomento; possibilità di aprire nuove frontiere per la propria carriera; questi sono solo alcuni dei vantaggi derivanti dalla competenza base nella programmazione.
Tutte queste capacità sono importanti anche al di la del conoscere uno specifico linguaggio di programmazione. Questo è uno dei motivi per cui l’informatica di base ma sopratutto coding e pensiero computazionale, di cui abbiamo già parlato, sono stati recentemente introdotti nell’ambito scolastico come competenze trasversali.
Arrivati a questo punto vi starete chiedendo: come faccio ad imparare in autonomia?
Beh, la risposta è piuttosto semplice. I linguaggi di programmazione sono molti, ma il Web è ricco di tutorial, corsi e materiale informativo che può aiutarci a scegliere su quale orientarci, come imparare i primi fondamenti di programmazione, e magari a scrivere i nostri primi semplici programmi. La scelta diventa ancora più ampia se si conosce l’inglese.
Si può decidere di iniziare con il materiale gratuito, per poi spostarsi su qualche corso a pagamento, nel caso si voglia approfondire il discorso. Esiste poi, per chi è veramente interessato, la possibilità di iscriversi a corsi in presenza ed essere seguiti da professionisti.
Conclusioni
Siamo giunti alla fine di questo articolo, dove vi abbiamo accompagnato all’interno del mondo della programmazione informatica e dei linguaggi di programmazione. Come avete avuto modo di osservare, questo mondo è estremamente ampio e variegato, colorato da mille sfumature.
Oggi giorno, da un punto di vista lavorativo, formarsi e specializzarsi nella programmazione potrebbe essere una buona idea. Il mondo spinge verso una digitalizzazione sempre più totalizzante, e figure come quella del programmatore potrebbero continuare ad essere richieste, sempre di più.
Speriamo che il nostro articolo abbia risposto alle vostre curiosità, e che magari, vi abbia stimolato ad approfondire ulteriormente il tema.