LinuxDay2021/tools.org

15 KiB

Gli "strumenti di sviluppo" e la loro evoluzione

Cosa è uno strumento di sviluppo?

Fanno parte della categoria strumenti di sviluppo tutti quegli strumenti utili allo svolgimento del processo di creazione di un programma.

Gli strumenti di base

Semplicemente carta e penna!. Carta e penna sono stati usati anche con i calcolatori meccanici. Ada Lovelace è riconosciuta come la prima programmatrice perché ha lasciato un programma "scritto su di un foglio di carta". I primi programmatori FORTRAN e COBOL usavano dei moduli prestampati su cui scrivere il codice dei prorammi. Immuni al trascorrere del tempo e alla fortissima evoluzione degli altri strumenti usati dai programmatori, carta e penna sono tuttora attuali e usatissimi.

Gli strumenti classici

Il componenti del gruppo degli "sturmenti classici" variano a seconda del fatto che si stia utilizzando un compilatore o un interprete. Secondo le definizioni di Wikipedia "Un compilatore è un programma informatico che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto)…", mentre "Un interprete, in informatica e nella programmazione, è un programma in grado di eseguire altri programmi a partire direttamente dal relativo codice sorgente scritto in un linguaggio di alto livello, senza la previa compilazione dello stesso (codice oggetto), eseguendo cioè le istruzioni nel linguaggio usato traducendole di volta in volta in istruzioni in linguaggio macchina del processore."

E' già stata spiegata la differenza che c'è tra un interprete e un compilatore?

Gli elementi che costituiscono il gruppo degli strumenti utilizzati in caso di impiego di interprete sono:

Gli elementi che costituiscono il gruppo degli strumenti utilizzati in caso di impiego di compilatore sono;

L'editor di testo

L'editor è lo strumento che viene usato per scrivere materialmente il codice sorgente che andrà poi a costituire il programma. Se non si prendono in considerazione carta e penna, l'editor e il debugger, nelle loro varie forme ed evoluzioni, sono probabilmente gli strumenti usando i quali uno sviluppatore passa più tempo. L'editor di testo è uno strumento fondamentale non solo per il programmatore, ma in generale per tutti quelli che usano un computer. Un editor di testo, per quanto dotato di minime funzionalità, è peresente in qualsiasi sistema operativo per computer. Tutti gli strumenti di sviluppo hanno avuto una fortissima evoluzione nel tempo, ma tra essi l'editor è quello che ha avuto quella maggiormente visibile e probabilmente apprezzata degli altri.

L'evoluzione dell'editor
Gli editor di riga

Un editor di riga è un editor che consente di operare su di una riga per volta. E' facile pensare che le macchine perforatrici usate per le preparare le schede perforate rappresentino la prima forma di editor dir riga: consentivano la scrittura di una riga (una scheda) per volta; non esisteva la possibilità "semplice" di modificare la riga, la scheda andava buttata e riscritta; infine era relativamente semplice eliminare una riga, bastava buttare la scheda (non consideriamo eventuali problemi di "numerazione"). I primi editor di riga veri e propri prendono piede con l'avvento delle TTY (telescriventi). Le telescriventi erano le interfacce di comunicazione tra l'operatore e il sistema: i dati venivano inseriti con la tastiera della telescrivente e i risultati venivano stampati dal sistema sulla telescrivente stessa. Si parla di editor di riga perché la trasmissione avveniva alla pressione dell'apposito tasto <RETURN> dopo aver scritto l'intera riga. Vi siete mai chiesti quale sia l'origine del tasto RETURN che si trovava (e forse si trova ancora) su alcune tastiere? Vi siete mai chiesti perché i vecchi computer con interfaccia a caratteri avessero un'ampiezza di 80 colonne? Già, ma stiamo parlando di cose "vecchie" a persone "molto giovani"… Con questi editor si operava tramite comandi e "modalità", un paradigma di funzionamento ancora in uso in almeno una "famiglia" molto diffusa e apprezzata di editor. Esistono ancora degli editor di riga usabili_

Da far vedere su ed

E' certamente da fare una "demo" di come funziona ed mostrando come si evoluta la famiglia degli editors. Più avanti fare confronto in demo tra i vari editor e gli IDE mostrando gli editor "terminale" e quelli "grafici"

Gli editor visuali

Con l'evoluzione della tecnologia e il conseguente abbassamento dei costi le telescrive sono state sostituite dai "terminali stupidi". I terminali stupdi altro non sono che "dispositivi" composti da uno schermo (CRT), una tastiera e quel minimo di elettronica necessaria a far funzionare la cosa e a comunicare con il sistema: non avevano nessun tipo di capacità elaborativa. In buona sostanza erano poco più che telescriventi dove la carta stampata era stata sostituita da un monitor. Su questi dispositivi si continuò inizialmente ad usare gli editor di riga, ma questi ultimi furono presto sostituiti dai primi editor "visuali". La novità principale di questi editor consisteva nel poter "navigare" all'interno del testo in modo "naturale" oltre al fatto di poter "vedere" l'esito delle operazioni sul testo in "tempo reale". Veramente un altro mondo per chi scriveva programmi per mestiere! In quel "periodo storico" non esistevano standard consolidati per la "user interface"; questo ha portato alla creazione di molti editor aventi ciascuno un modo diverso di eseguire una stessa operazione, ma anche a definire con nomi diversi la stessa cosa. Ma il mondo del software si muove velocemente e, con il passare del tempo, alcuni prodotti sono caduti in disuso in favore di nuovi che si sono sempre più allineati ad una interfaccia utente comune, almeno per le cose principali e più comuni. Occorre però precisare che esistono ancora alcuni "vecchi" editor che, pur avendo una interfaccia utente "fuori standard" sono utilizzati da un numero elevato di programmatori. Il motivo di questa apparente incongurenza sta sia nell'estrema potenza che vecchi programmi hanno accumulato nella loro storia, sia nel fatto che proprio l'interfaccia utente difficoltosa e astrusa per un principiante si rivela poi molto efficiente una volta presa dimestichezza.

Editor moderni (si, ma moderni rispetto a cosa?)

Come si diceva, gli editor sono strumenti in continua evoluzione che, per "restare sul mercato", oltre a dover soddisfare le mutevoli esigenze dei programmatori, offrono spesso molte funzionalità accessorie. Per quanto esistano veramente tanti prodotti e ci sia una "guerra" continua per guadagnare consensi, la maggior parte della torta è suddivisa tra un numero relativamente piccolo di player. Capita infine che se qualcuno propone una novità interessante, gli altri la replichino abbastanza velocemente. Questo porta ad un grossolano allineamento delle funzionalità che rendono la scelta di un editor rispetto ad un altro principalmente una questione di gusto/preferenza personale. Alcune delle funzionalità più apprezzate degli editor attuali sono:

Il compilatore/interprete del linguaggio

Assumendo che si sappia la differenza che c'è tra un compilatore ed un interprete si può affermare cha anche questi strumenti hanno avuto una grande evoluzione nel tempo; evoluzione magari non così evidente, ma che c'è stata nell'ambito di una migliore analisi dei sorgenti, nella produzione di codice maggiormente ottimizzato (più veloce e/o compatto), nella stessa velocità di compilazione (per gli interpreti in una maggiore ottimizzazione e velocità di esecuzione).

Il linker

Il linker è quello strumento che assolve al compito di "riunire" in unico oggetto tutti i "moduli" (ad esempio sottoprogrammi) creando quindi una singola untià eseguibile. Questo strumento ha sicuramente avuto una certa evoluzione nel tempo, ma come per i compilatori l'evoluzione non è certamente particolarmente evidente: non mi sono mai preoccupato di sapere le novità dei linker (APPROFONDIRE!). Alcuni compilatori possono assolvere anche le funzionalità del linker (NECESSITA CONFERMA!) senza avere la necessità di uno strumento separato.

Il "make"

In caso di programmi articolati e composti da più moduli e/o librerie il lavoro necessario per gestire tutte le operazioni che portano alla produzione dell'eseguibile diventa velocemente tedioso e soggetto a errori. Lo strumento usato per risolvere questa fastidiosa problematica è il make: uno strumento che serve per automatizzare la creazione dell'eseguibile. Come per il linker anche il make avrà certamente avuto una evoluzione, ma come il linker non ne sono a consocenza (APPROFONDIRE!)

Il debugger

E' insieme all'editor lo strumento probabilmente usato per più tempo da ogni programmatore. La pratica ci insegna che anche i programmatori più bravi commettono errori. Mentre gli errori "formali" vengono solitamente intercettati dal compilatore, quelli relativi alla logica di funzionamento hanno spesso bisogno di una analisi accurata di quello che succede durante l'esecuzione del programma. Il debugger è lo strumento potentissimo e assolutamente fondamentale che ci consente di "vedere" l'esatto flusso di esecuzione del programma, verificare il reale contenuto delle variabili in un dato istante e molto altro.

Gli IDE

Quelli che abbiamo visto fino ad ora sono gli strumenti principali della "cassetta degli attrezzi" del programmatore.

Il ciclo di lavoro del programmatore è sempre lo stesso:

  1. Analisi del problema
  2. Editing del sorgente
  3. Compilazione/link, magari automatizzato con make
  4. Se si presentano errori correggerli ripartendo dal punto 2
  5. Verifica del corretto funzionamento del programma
  6. Se si presentano malfunzionamenti: debug per l'individuazione dei problemi e correzione ripartendo dal punto 2
  7. Consegna del programma (inizio del ciclo di manutenzione: ulteriori correzioni se presentano problemi inattesi e/o implementazione nuove funzionalità)

Questo ciclo di lavoro può essere tranqillamente svolto con gli "strumenti classici", anzi, effettivamente molte persone usano i metodi classici.

Un po' di tempo fa, però, qualcuno ha pensato che trovava scomodo il dover continuamente "saltare" da uno strumento all'altro e che, magari, l'aiuto dato dai singoli strumenti presi uno alla volta non era sufficiente.

La risposta a questo genere di richieste sono stati gli IDE.

Un "Integrated Development Environment" non è altro che un programma che riunisce e "integra" in unico "luogo" tutti gli strumenti utili per la programmazione. Svolge quindi contemporaneamente le funzioni di Editor, Compilatore e molto altro mantenendo un ambiente di lavoro coerente per tutti i linguaggi di programmazione supportati. Uno dei maggiori vantaggi degli IDE è quello di consentire una gestione centralizzata di progetti anche complessi dove l'aggiunta, l'eliminazione, lo spostamento, il refactoring di un modulo, di una funzione, di una singola variabile vengono gestiti in modo automatico, sollevando il programmatore dall'onere di dover gestire tutti i "dettagli produttivi".

Come spesso capita non sono però tutte rose e fiori. Le continue nuove necessità dei programmatori, unite alle direttive dei reparti marketing delle case produttrici hanno talvolta reso gli IDE pesanti strumenti che necessitano di molte risorse.

Tendenze per il futuro

I moderni strumenti di sviluppo ci hanno abituati ad una serie di comodità che fino a non molti anni fa erano impensabili. Gli IDE hanno integrato tutte queste funzionalità offrendo anche servizi accessori come, ad esempio, la creazione di nuovi progretti con un certo numero di elementi già preimpostati; il download da internet di librerie ecc.

Cosa ci riserva quindi il futuro?

Come per i linguaggi di programmazione, anche l'evoluzione e la creazione di nuovi strumenti di lavoro per il programmatore sta andando avanti. Sono recentemente usciti "servizi" che sfruttano l'intelligenza artificiale come strumento di supporto al programmatore. L'intelligenza artificiale analizza quello che sta facendo il programmatore e propone del codice già pronto per quel contesto. Lo stato di evoluzione di questi strumenti è ancora iniziale, ma le potenzialità sono già perfettamente evidenti e, vista la velocità con cui queste tecnologie fanno passi da gigante, è lecito attendersi risultati "quasi perfetti" in un tempo relativamente breve.

Un progetto recente in questo ambito che sta facendo molto parlare di sé è Copilot.