Nel mio articolo precedente ho descritto la soluzione teorica al problema del debito tecnico: la “programmazione relazionale”. Essa consiste in un nuovo modo di scrivere il codice che memorizza anche le relazioni fra gli elementi del codice e le gestisce automaticamente durante le operazioni di modifica.

Per passare dalla teoria alla pratica, è necessario trovare un sistema di sviluppo di software che funzioni in questo modo. Questo è il vero motivo dell’esistenza dei prodotti Instant Developer, nati appunto per sfruttare appieno le potenzialità della programmazione relazionale.

Il cuore dei sistemi Instant Developer è un nuovo tipo di IDE, in cui l’intero progetto software - dal modello del database fino all’ultima riga di codice e all’ultimo report - viene gestito e memorizzato in modo relazionale.

In pratica, le operazioni di sviluppo consistono nella definizione degli elementi strutturali del software all’interno di una visualizzazione ad albero, che conterrà quindi i modelli dati, le API, la struttura delle classi, le definizioni dei metodi, le videate, le risorse e così via.

Si prosegue quindi alla scrittura del codice dei metodi tramite editor dedicati che memorizzano i token di ogni riga di codice già in formato relazionato, inferendo le relazioni in tempo reale.

L’esperienza di utilizzo è piuttosto simile ad un IDE tradizionale, ma è sufficiente qualche ora di lavoro per iniziare a notare i primi cambiamenti. Alcuni esempi:

  • Modificando il nome o le proprietà di un campo del database, la modifica viene propagata a tutte le query che accedono a quell’informazione e, in cascata, a tutti gli oggetti in memoria che contengono i risultati delle query e alle righe di codice che li utilizzano, ed infine alle videate e ai report.
  • Durante la programmazione è disponibile una sorta di “intellisense” globale sull’intero progetto, sia quando viene scritto il codice che quando si prepara una query. Questo vale anche quando si programma in JavaScript che, essendo un linguaggio a tipizzazione dinamica, rende difficile l’analisi dei tipi a design time.
  • È disponibile una funzione “trova dove usato globalmente” che permette di conoscere in tempo reale tutte le dipendenze di un determinato oggetto del progetto, a tutti i livelli. Ad esempio, partendo da un campo del database, possiamo vedere tutte le pagine, i report, le query e i metodi che trattano quel dato.
  • Ad ogni modifica l’intero progetto rimane coerente con se stesso, quindi il numero di errori dovuti a dimenticanze o non consapevolezza delle conseguenze di una modifica è assente o ridotto al minimo.

In sintesi, l’esperienza di programmazione con i prodotti Instant Developer risulta nella possibilità di “tenere in mano” un progetto, anche di classe enterprise, con un utilizzo minimo di risorse. Questo vale nella fase iniziale di sviluppo, e vale ancora di più nella fase di manutenzione nel tempo, quando è più facile perdere conoscenza delle relazioni fra i vari elementi del software.

Dopo venti anni di sviluppo, i sistemi Instant Developer hanno ormai dimostrato le enormi potenzialità della programmazione relazionale. Non rimane altro da fare che approfittarne.