Aggiunto file per i tools

This commit is contained in:
me 2021-10-05 22:02:30 +02:00
parent 262d7c9da8
commit 8196092eb8
1 changed files with 233 additions and 0 deletions

233
tools.org Normal file
View File

@ -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 <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_
- 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]].