Aggiunto file per i tools
This commit is contained in:
parent
262d7c9da8
commit
8196092eb8
|
@ -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]].
|
||||
|
Loading…
Reference in New Issue