La scelta della tecnologia nei progetti software

La scelta della tecnologia nei progetti software

Quando si inizia un nuovo progetto software la valutazione delle tecnologie da utilizzare, ed in particolare, la scelta del framework, è una fase fondamentale e particolarmente critica che richiede grande attenzione e uno studio preliminare approfondito. Al giorno d'oggi gli strumenti che supportano lo sviluppo software sono numerosi, con caratteristiche, vantaggi, svantaggi e costi differenti. La fase precedente a questa scelta, dovrebbe prevedere un'accurata raccolta di requisiti funzionali, non funzionali e relativi all'aspetto grafico che il prodotto finale dovrà avere.

Una volta completata questa prima analisi, si procede con quella delle tecnologie disponibili. Trovare la tecnologia che supporti completamente ed esaustivamente lo sviluppo delle funzionalità richieste è impossibile, ma si può restringere il campo selezionando quella che facilita maggiormente il lavoro.

Lo sviluppo delle funzionalità non è però l'unico fattore da considerare. Altri, altrettanto importanti, sono:

- Il supporto da parte degli sviluppatori della tecnologia, ma anche quello di una community che attraverso forum e blog proponga soluzioni a problemi più o meno comuni che si possono presentare;

- La stabilità degli aggiornamenti nel tempo: utilizzando componenti che non vengono aggiornati da molto tempo, si rischiano problemi di compatibilità che in futuro potrebbero costringere a dover rimuovere quel componente o addirittura a dover riprogettare tutto utilizzando tecnologie diverse;

- La compatibilità tra le tecnologie e la facilità con cui interagiscono dovrà essere comprovata, se si dovesse aver bisogno di utilizzarne più di una;

- La scelta tra linguaggi nativi e ibridi: si tratta di un problema molto comune quando si parla di sviluppo di App. Utilizzare linguaggi nativi, ovvero linguaggi scritti appositamente per un determinato sistema (ad esempio iOS o android), permette di sfruttare al massimo le potenzialità del dispositivo migliorando nettamente le prestazioni. Lo svantaggio che ne consegue è che la stessa App dovrà essere sviluppata più volte nei vari linguaggi. D’altro canto, l’utilizzo di linguaggi ibridi permette di sviluppare una singola App che funziona su vari sistemi, a discapito però delle prestazioni;

- L’esperienza nelle tecnologie, fattore va valutato insieme al tempo a disposizione. Se il tempo per la realizzazione del prodotto finale è limitato, probabilmente è meglio optare per tecnologie che già si padroneggiamo in modo da poter entrare subito nel vivo dello sviluppo. In caso contrario si possono anche scegliere tecnologie che prevedano una prima fase di formazione.

Per lo sviluppatore, quindi, la valutazione della giusta tecnologia da utilizzare è un passo fondamentale. Se questo aspetto viene affrontato con la giusta attenzione, porta indubbi vantaggi al progetto che si intende realizzare.

Pubblicato il 29 mar 2019

Potrebbero interessarti

Il Sistema Operativo a 64-bit per RaspberryPi 3

RaspberryPi 3 Modello B è la prima versione con architettura a 64 bit del più popolare “mini-computer”, ma nonostante l’upgrade del processore, che è diventato un ARMv8 nella versione Pi 3, non esiste una distribuzione ufficiale di un sistema operativo a 64-bit. I motivi sono legati al fatto che l’azienda fondatrice del “lampone embedded” si è concentrata sul rendere il suo sistema operativo, Raspbian, che è una distribuzione Debian, compatibile per tutte le generazioni di Pi. Il sistema operativo SUSE, che è una distribuzione di Linux, supporta le più svariate architetture e con la sempre più forte presenza di processori ARM all’interno dei data center, l’azienda tedesca (che ha iniziato stampando manuali UNIX e offrendo assistenza tecnica circa 3 decenni addietro) si è concentrata sulla possibilità di operare su questi tipi di calcolatori in modo da poter aggiungere ulteriori piattaforme al calderone di quelle supportate. In occasione dell’evento SUSECon 2016, SUSE ha annunciato il supporto di SLES (SUSE Linux Enterprise Server) per RaspberryPi 3. In realtà esiste anche una release di openSUSE, la versione open di SUSE, che è in grado di girare sul dispositivo embedded. Pertanto i possessori di una boardPi 3 possono sfruttare le funzionalità del proprio dispositivo grazie all’unico sistema operativo a 64 bit compatibile ad oggi disponibile. I vantaggi vengono tradotti in termini di performance di computazione e anche circa la compatibilità di programmi le cui release a 32 bit sono di fatti in via di estinzione. Come spiega EbenUpton, fondatore di Raspberry, si tratta del primo rilascio ufficiale per l’architettura a 64-bit da parte di un importante fornitore e soprattutto SLES prevede il supporto per il protocollo wireless e bluetooth (BLE), che sono delle novità presenti proprio a partire dalla versione Pi 3. SLES è disponibile con una versione evalution con un limite di durata pari a 60 giorni, ma la patch per Raspberry, prevede un abbonamento gratuito di un anno con possibilità di scaricare gli aggiornamenti. In alternativa, si può tenere in considerazione il prodotto free di SUSE, openSUSE, la quale ha reso disponibile due immagini per Raspberry Pi3, ormai ben note alla community di SUSE, Leap e Tumbleweed. Di fatti SLES è l’unica distribuzione enterprise, che sicuramente porta notevoli vantaggi rispetto alle versioni open o community, quali ad esempio aggiornamenti tempestivi e sicuri, longevità, supporto per 10 anni, certificazioni di sicurezza. Sarà interessante capire se sarà mai rilasciato il sistema Raspbian a 64-bit oppure se SUSE possa diventare il prossimo sistama operativo ufficiale di Raspberry.

Isomorphic rendering e le tecnologie client side

Al giorno d’oggi esistono numerose tecnologie per la produzione di contenuti web che si differenziano in base a diversi fattori quali: semplicità di sviluppo, interattività con l’utente, potenza di calcolo, etc. Le tecnologie si differenziano in server side, se eseguite dal server, o client side se eseguite da un client, ad esempio il browser. Il vantaggio nell’utilizzo di tecnologie server side consiste nella semplicità di sviluppo e nella robustezza, le interazioni con il browser sono ridotte e di conseguenza anche la possibilità di errori si riduce. Le tecnologie client side, a differenza delle precedenti, richiedono una maggiore interazione tra server e client, oltre ad una forte interazione tra client e utente. Le tecnologie client side si sono sempre più diffuse e tra i framework più interessanti abbiamo: ReactJS, Angular, Vue.js. Tutte le tecnologie descritte offrono un’elevata reattività, tempi di caricamento ridotti per i contenuti, un ridotto carico sul server ed un’esperienza utente paragonabile ad un'app nativa sui sistemi mobile. Un’azienda che punti su tali tecnologie per fornire tutti i vantaggi descritti deve necessariamente risolvere le problematiche introdotte da tale approccio, grazie ad un forte know-how relativo alle tecnologie usate, una forte sensibilità sulle tematiche della sicurezza e di indicizzazione di web application. Una soluzione a quest'ultima problematica è rappresentata dall’isomorphic rendering, tecnica che consiste nell’eseguire un prerendering della pagina lato server prelevando ed inserendo le informazioni necessarie prima della fase dell’invio della web application. L’isomorphic rendering, tuttavia, apre una serie di nuove problematiche relative in particolare alla velocità di caricamento della web app sul client alla prima esecuzione a causa di un notevole aumento della quantità di informazioni prelevate dal server. Un’azienda che punta su tali tecnologie deve pertanto condurre una continua fase di ricerca e implementazione di nuovi strumenti in grado di mitigare le problematiche introdotte da questa tecnica. Tutto ciò affinchè si possa realizzare un prodotto avente una ottima user experience, un carico computazionale distribuito fra i client e tempi di caricamento accettabili.

MILK: IL NUOVO LINGUAGGIO DI PROGRAMMAZIONE

Nei microprocessori moderni, la gestione della memoria è basata sul principio di località, ovvero: se un programma ha bisogno di alcuni dati in un particolare punto della memoria, probabilmente avrà bisogno successivamente anche dei dati vicini. Ma questo principio viene meno nell’era dei Big Data: ogni processo infatti è solito ad elaborare pochi dati presi arbitrariamente tra i tantissimi presenti. In genere l’accesso alla memoria RAM è di per sé la parte più dispendiosa dell’elaborazione (escluso l’accesso alle memorie fisiche) e quindi accedervi ripetutamente rallenta di molto l’elaborazione di grosse quantità di dati. Questa settimana, un gruppo di ricercatori del MIT (Massachusetts Institute of Technology), alla conferenza internazionale sulle architetture parallele e tecniche di compilazione, ha presentato un nuovo linguaggio di programmazione, chiamato Milk, che permette di gestire la memoria più efficacemente in programmi che hanno bisogno di accedere a dati particolari in dataset di grosse quantità. Nei test di molti algoritmi, i programmi scritti in Milk si sono mostrati molto più veloci di quelli scritti nei linguaggi di programmazione fino ad oggi esistenti. Il linguaggio in questione aggiunge alcuni comandi a OpenMP (Open Multiprocessing), un estensione di linguaggi come C e Fortran che rende facile lo sviluppo per processori multicores. Con Milk, un programmatore dovrà scrivere solo alcune righe di codice in più per gestire alcune operazioni che richiedono iterazione in una grande quantità di dati, e il compilatore Milk deciderà come gestire la memoria efficacemente. In un programma Milk, quando un core deve richiedere un dato dalla memoria, non lo richiede (insieme ai dati adiacenti) ma aggiunge l’indirizzo di memoria da richiedere ad una lista. Quando le liste di ogni core sono lunghe abbastanza, vengono messe insieme e vengono raggruppati gli indirizzi di memoria vicini e ridistribuiti ai vari cores con questi raggruppamenti. In questo modo, ogni core riceverà più dati di cui ha bisogno con un solo accesso. Questo, è ciò che succede ad alto livello, ma nel dettaglio, le cose si fanno complicate. Nei processori moderni, ci sono più livelli di cache, ognuno più grande e lento dell’altro. Il compilatore Milk deve dunque tener conto non solo degli indirizzi di memoria, ma anche di quelli in cache in tutti i livelli. Deciderà anche quali indirizzi tenere e quali scartare dalla cache. Ecco cosa ha detto a riguardo Matei Zaharia, un professore alla Standfor University: “Molte applicazioni importanti al giorno d’oggi richiedono una grande quantità di dati, ma sfortunatamente, la costante crescita del gap di performance tra CPU e memoria porta a non utilizzare al massimo le prestazioni della CPU. Milk aiuta a ridurre questa differenza di prestazioni ottimizzando l’accesso alla memoria in alcuni dei costrutti di programmazione più frequenti.”