diff --git a/tools.org b/tools.org new file mode 100644 index 0000000..a0c06c9 --- /dev/null +++ b/tools.org @@ -0,0 +1,233 @@ +* 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 [[https://it.wikipedia.org/wiki/Compilatore][compilatore]] + o un [[https://it.wikipedia.org/wiki/Interprete_(informatica)][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: + - [[https://it.wikipedia.org/wiki/Editor_di_testo][Editor di testo]] [[https://it.wikipedia.org/wiki/Testo_puro]["plain text"]] + - Interprete + + Gli elementi che costituiscono il gruppo degli strumenti + utilizzati in caso di impiego di compilatore sono; + - Editor di testo "plain text" + - Compilatore + - [[https://it.wikipedia.org/wiki/Linking][Linker]] + - [[https://it.wikipedia.org/wiki/Make]["Make"]] + - [[https://it.wikipedia.org/wiki/Debugger][Debugger]] +*** 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 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_ + - Per Linux + - [[https://www.gnu.org/software/ed/ed.html][ed]] + - Per Windows + - [[http://gnuwin32.sourceforge.net/packages/ed.htm][ed]] + - [[https://sourceforge.net/projects/freedos-edlin/][edlin]] +***** 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: + - "Riconscimento" automatico del linguaggio che si sta usando + - [[https://it.wikipedia.org/wiki/Syntax_highlighting][Syntax highlighting]] + - Syntax checking + - [[https://it.wikipedia.org/wiki/Autocompletamento][Autocompletamento]] (con visualizzazione della sintassi) + - [[https://en.wikipedia.org/wiki/Static_program_analysis][Analisi statica del codice]] + - [[https://it.wikipedia.org/wiki/Refactoring][Refactoring]] + - e molto altro +*** 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 [[https://it.wikipedia.org/wiki/Linking][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 [[https://it.wikipedia.org/wiki/Make][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 [[https://it.wikipedia.org/wiki/Debugger][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 [[https://it.wikipedia.org/wiki/Integrated_development_environment][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é + è [[https://en.wikipedia.org/wiki/GitHub_Copilot][Copilot]]. +