240 lines
14 KiB
Org Mode
240 lines
14 KiB
Org Mode
* 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]]
|
|
****** Da far vedere su ed
|
|
- La pagina di man per ed
|
|
#+CAPTION: Man page di ed
|
|
#+ATTR_HTML: :alt Man page di ed :title Man page di ed
|
|
[[./immagini/ed_man_page.png]]
|
|
|
|
***** 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]].
|
|
|