Il compito fondamentale in ICT: lo sviluppo del codice sorgente.

Giulio Destri

Giulio Destri

Digital Transformation Advisor & Innovation Manager ● Business Coach & Trainer ● Business Analyst & ICT Project Manager.


Lo sviluppatore, o developer

 

In alcuni articoli precedenti, dopo il riconoscimento del ruolo fondamentale dell’IT nel XXI secolo, abbiamo trattato le figure professionali e la competenza che dovrebbe essere fornita dalla formazione accademica

In questo articolo ci concentriamo su una delle fasi più importanti dell’IT, lo sviluppo o scrittura del codice, e sulla figura professionale deputata a tale compito, lo sviluppatore o developer.
Per realizzare una soluzione o un servizio ICT è infatti sempre necessaria una fase di scrittura di codice, che si può suddividere tra la personalizzazione di software esistente e la scrittura vera e propria di nuovo software. Anche alcuni compiti di amministrazione di sistema richiedono la scrittura di codice (ad esempio i cosiddetti programmi batch del settore bancario, o gli shell script tipici del mondo UNIX).

Nel dettaglio, la fase di sviluppo consta materialmente nella scrittura di un insieme di file di testo contenenti istruzioni, organizzate secondo regole sintattiche molto precise e rispondenti alla grammatica del particolare linguaggio di programmazione scelto. L’insieme di tali file di testo che forma un’applicazione viene definito codice sorgente dell’applicazione stessa.

Nella maggior parte dei casi un apposito programma chiamato compilatore traduce poi tali moduli in una forma direttamente eseguibile dal computer. In altri casi il codice viene direttamente “interpretato” ed eseguito senza bisogno di compilazione ad opera di un altro tipo di programma chiamato appunto interprete.

 

Codice e linguaggio? Andiamo alla sorgente…

Il codice sorgente viene scritto entro un programma apposito, chiamato editor, molto spesso facente parte di un ambiente integrato di programmazione (chiamato anche IDE, dalle iniziali delle parole inglesi Integrated Development Environment) che contiene tutte le funzioni per compilare il codice sorgente e trasformarlo in un programma eseguibile direttamente dal computer.

I linguaggi di programmazione in uso sul mercato oggi sono tanti, dall’antico e sempreverde COBOL, ai più moderni Java e C#, al Phyton, ai linguaggi PHP e JavaScript specifici per il Web, a linguaggi dedicati come l’ABAP di SAP, a linguaggi tipici per le App ecc… Molti di questi linguaggi hanno anche il proprio IDE di riferimento, come VisualStudio per il C#, oppure esistono IDE che possono consentire di scrivere in diversi linguaggi, come Eclipse con Java, C/C++, PHP ecc…

Il developer o sviluppatore è la figura professionale cui è demandato il compito di scrivere materialmente tutto il codice sorgente e/o le personalizzazioni. Questa figura professionale rientra fra quelle della normativa UNI11506-11621 ed esistono molte certificazioni proprietarie per developer, legate a linguaggi e tecnologie. Taluni paragonano ingiustamente il developer al muratore che costruisce i pilastri ed i muri che sono stati progettati da qualcun altro o all’operaio sulla linea di montaggio.

In realtà, la scrittura del codice è un’attività non evitabile. Dietro ad ogni software, dai sistemi operativi (ossia i software di base che consentono ai computer, agli smartphone ed ai tablet di operare), ai programmi come Office, ai programmi gestionali, alle applicazioni Web, alle App, ai programmi che controllano robot e macchine industriali… c’è sempre questa fase di scrittura del codice sorgente che forma il software stesso.

La scrittura del codice è anche un’attività critica, in quanto errori commessi in questa fase si traducono in malfunzionamenti e/o costi maggiori durante le fasi successive di manutenzione ed evoluzione dei componenti software delle soluzioni. Molte delle problematiche di sicurezza informatica riscontrate negli ultimi anni sono proprio dovute ad errori commessi durante la fase di scrittura del codice. Il costo del software e del suo sviluppo in molti casi supera oggi di molto il costo dell’hardware che lo fa funzionare.

L’evoluzione quasi incredibile che c’è stata nell’hardware e nelle sue potenzialità non è stata purtroppo accompagnata da una contemporanea evoluzione del software. Nonostante fin dal 1968 siano state evidenziate le varie problematiche legate alla produzione del software e al fatto che la scrittura di codice è un’attività compiuta a mano da operatori umani ancora oggi alcune problematiche permangono.

La fase di sviluppo…

 

Per capire meglio occorre analizzare i dettagli. Anzitutto quali sono le tipologie di errori commessi durante la fase di sviluppo? Essenzialmente sono le seguenti:

Errori di interpretazione delle richieste del committente, che di solito sono risolti dall’esperienza del Business Analyst (o del Product Owner in un contesto di organizzazione Agile);

Errori di strutturazione del software, ad esempio di suddivisione dei compiti fra i vari moduli che formano un applicativo, che dovrebbero essere ridotti od evitati a priori con un buon disegno tecnico del software stesso, demandato all’esperienza dei System Analyst e System Architect;

Errori veri e propri di scrittura del codice che possono essere dovuti a:

  • Problemi di trasmissione delle informazioni fra i membri del gruppo di lavoro (ad esempio ricadere nei casi precedenti, con analisi superficiali e/o incomplete).
  • Problemi di poca conoscenza del linguaggio e/o di sue librerie di funzioni.
  • Problemi di tempo, ossia di dimensioni del lavoro e quindi della quantità di codice da scrivere non adeguata ai tempi concessi per lo sviluppo.
  • Problemi di test e verifiche inadeguate.
  • Problemi di competenze di base degli sviluppatori.
  • Problemi di errori presenti entro strumenti utilizzati per lo sviluppo (in primis librerie di funzioni preconfezionate).

Alcune problematiche sorgono dal fatto che sino a pochi anni fa si pensava al software come un edificio, ossia come qualcosa che deve essere completato e poi rimane costante o quasi, mentre oggi è chiaro (o dovrebbe esserlo) che il software è un servizio, che evolve in continuazione per seguire le esigenze del business per cui esso è nato. Il software deve quindi essere sin dall’inizio progettato per poter evolversi nel tempo con la massima efficienza possibile.

Diversi rimedi sono stati applicati nel tempo:

Costruzione di software semi-lavorati con conseguente ridotta necessità di scrittura di codice, che si riduce a parametrizzazioni (ossia impostazioni di parametri di configurazione) per adattare software medio-piccoli alle esigenze dei clienti finali. Nel caso di software più grandi, le operazioni di adattamento richiedono comunque una parte di programmazione, detta personalizzazione.

Costruzione di librerie di funzioni molto ricche e molto testate, per ridurre la quantità di codice che gli sviluppatori devono scrivere (e quindi, statisticamente, anche gli errori che possono commettere), vendute commercialmente sul mercato.

Costruzione di strumenti grafici o semi-grafici (ad esempio i cosiddetti RAD) che consentono di generare il codice sorgente a partire da diagrammi e rappresentazioni grafiche di compiti, evitando di scrivere a mano il codice stesso.

Ma quasi tutti questi rimedi hanno portato anche svantaggi, principalmente inefficienza e vincoli di rigidità sui prodotti software ottenuti. Negli ultimi anni la rivoluzione agile, attraverso l’adozione di nuovi metodi di lavoro, ha portato finalmente un miglioramento deciso. In particolare l’adozione del DevOps , una metodologia che si concentra sia sullo sviluppo sia sulla fase di esercizio operativo del software, sta portando un miglioramento deciso nella qualità del software stesso.

Per poter essere veramente efficace tuttavia questa nuova organizzazione prevede che i singoli sviluppatori abbiano una notevole abilità ed esperienza o siano coadiuvati da un abile system architect, per costruire un software ben strutturato e ben scritto. E che i team di lavoro siano bene organizzati.

E questo è purtroppo in alcuni casi un punto dolente. Molti grandi progetti software italiani sono ancora basati su metodologie antiquate (anche per la non conoscenza delle nuove da parte dei capi progetto) e/o soggetti ad un rapido turn-over degli sviluppatori, oltre che a tempi compressi per sviluppo e test. Il risultato è software di cattiva qualità, che poco può competere sui mercati esteri.

Quindi, per poter raggiungere l’obiettivo di fornire produzione di software sul mercato internazionale, dato che la maggior parte dei paesi dell’est Europa e delle software house indiane ha già adottato le metodologie moderne, occorre migliorare la qualità dei processi interni, introducendo le nuove competenze necessarie.

E’ una questione strategica, necessaria se non si vuole perdere questa grande opportunità per il nostro sistema paese. E occorre anche che i nuovi programmatori siano adeguatamente preparati e che quelli esistenti siano adeguatamente aggiornati.


Bibliografia

1. G. Destri e C. Lombardi “I processi di Sviluppo Software: la storia” http://www.giuliodestri.it/documenti/D06_StoriaSviluppoSoftware.pdf

2. C. Lombardi e G. Destri “I processi di Sviluppo Software: l’evoluzione agile e il DevOps” https://www.slideshare.net/giuliodestri/i-processi-di-sviluppo-software-levoluzione-agile-ed-il-devops

codice sorgente