Ritengo che il corso di studio già provveda bene ad allineare le conoscenze dello stu-dente alle richieste di mercato.
Riterrei molto utile che il corso di studi si prendesse carico di modellare la cultura infor-matica dello studente. A livello pratico, si potrebbero destinare alcuni crediti del corso di laurea a progetti che mirino a “staccare” lo studente dal codice. Motivo questo suggeri-mento perchè durante la maggior parte delle mie esperienze professionali ho constatato che i più grandi limiti alla produttività siano legati a questioni culturali più che alle tecno-logie. Come esempio, vorrei portare il fatto che è molto difficile apprendere la reale mo-tivazione della divisione dei ruoli insegnati a Ingegneria del Software senza essere af-fiancati in modo più granulare (anche se mi rendo conto che sarebbe difficile da mettere in pratica).
Sarebbe inoltre interessante approfondire quanto cominciato al corso di Gestione di Im-prese informatiche analizzando con maggior dettaglio l’offerta aziendale Im-presente nel nostro paese dando risalto soprattutto ai difetti e alle loro soluzioni. Motivo questo sug-gerimento in quanto ritengo che lo studente medio si renda realmente conto della situa-zione del mercato soltanto durante l’evento stage-it organizzato alla fine del terzo anno.
Per quanto riguarda argomenti di studio, ritengo che i design pattern meritino un corso dedicato dopo Programmazione ad Oggetti. Motivo questo suggerimento in quanto ri-tengo che il maggior limite del laureato medio sia la propensione alla creazione di solu-zioni personali ai problemi, che nella maggior parte delle situasolu-zioni generano inutile complessità.
Glossario
Agile
Metodologia di sviluppo che, adattata al contesto Miriade, prevede:
• Un alto grado di lavoro di squadra.
• Bassa produzione documentale.
• Reazione immediata a modifiche progettuali in corso d’opera.
• Piccole e ricorrenti release del prodotto.
Amazon Web Services
Primo fornitore di servizi di infrastruttura tramite cloud computing. Le tecnologie mag-giormente utilizzate per questo stage sono state EC2, VPC e CloudFormation.
Antipattern
Termine gergale informatico, che identifica una pratica riconosciuta come non ottimale o addirittura dannosa.
Ant contrib
Libreria su Apache Ant che rende disponibili strutture di programmazione procedurale ed espressioni regolari.
Apache Ant
Build tool basato su Java ed XML che offre strumenti per la scrittura di procedure e ope-razioni multipiattaforma.
Apache Ivy
Libreria su Apache Ant per l’automazione della dichiarazione, risoluzione e download di librerie per il linguaggio Java.
Artefatto
Entità software pronta all’uso (di norma archiviata e riconducibile ad un singolo file) che dichiara dipendenze rispetto ad altri artefatti (normalmente librerie)
Bottom-up (progettazione)
Dall’inglese, “dal basso verso l’alto”, il termine riguarda la generica progettazione o de-finizione di un sistema complesso, partendo da piccole componenti ad alto grado di riu-tilizzo e usandole per definire quelle più grandi.
Branching (controllo di versione)
Operazione tramite la quale vengono mantenuti multipli rami separati della base di co-dice tramite il software di controllo di versione.
Build
Operazione tramite la quale viene generata un’entità software pronta per essere utiliz-zata dall’operazione di deploy. Essa è di solito identificata da un numero.
Checkout
Operazione offerta dal software di controllo di versione che permette l’estrazione del filesystem riconducibile ad un certo commit o branch sulla working directory
CloudFormation
Strumento offerto dal fornitore Amazon per aiutare l’automazione della creazione di in-tere infrastrutture sulla piattaforma.
Clustering
Tecnica tramite la quale si rende un’infrastruttura hardware facilmente estendibile verti-calmente su una particolare funzionalità. Per facilmente estendibile si intende che l’ope-razione di estensione è automatica, ripetibile e simulabile altrove
Commit
Entità astratta rappresentate una modifica su un repository. Un commit è composto da:
• Un insieme di file modificati, aggiunti o rimossi dalla situazione precedente
• Una descrizione delle modifiche rapida identificativa e una più dettagliata opzionale È di fondamentale importanza la correttezza tra semantica e logica implementativa; la responsabilità è totalmente a carico dello sviluppatore che è in questo caso anche auto-re dei messaggi descrittivi.
Datacenter
Luogo fisico che viene scelto per ospitare elaboratori usati per scopi professionali. Il da-tacenter richiede, oltre alla manutenzione delle macchine, un ambiente controllato ter-micamente, personale qualificato per la sicurezza e l’accesso 24/365 agli ambienti (mol-to cos(mol-toso).
Debug
Attività di risoluzione dei malfunzionamenti del software.
Deploy
Operazione tramite la quale si rende funzionale un ambiente usando una build Developement and operations
Ruolo nato dalle esigenze richieste per lo sviluppo di applicazioni sul cloud computing. Il DevOps deve avere conoscenze ad ampio spettro su sviluppo, sistemi, integrazione di software e automazione.
Dump
Il termine si riferisce ad un’entità che racchiude la struttura ed i dati contenuti in un da-tabase in un particolare momento. Spesso è rappresentato tramite un insieme di opera-zioni SQL.
Eclipse
IDE maggiormente utilizzato dagli sviluppatori Java. Tra le altre cose, offre un’integra-zione nativa con il build tool Apache Ant.
Fork (di codice sorgente)
Operazione di fare proprio il codice sorgente di un progetto esterno per continuare lo sviluppo in una direzione diversa o migliorarne le funzionalità esistenti.
Git
Software per il controllo di versione del codice sorgente. La sua peculiarità è la natura distribuita e l’immediatezza delle operazioni di merging e branching.
Github
Applicazione web di gestione e visualizzazione di repository git.
Google Apps
Ecosistema di applicazioni web dedicate al lavoro condiviso. Tra le più usate si ricodano Mail, Docs, Calendar.
Java
Linguaggio di programmazione multipiattaforma di grande diffusione.
Javadoc
Strumento di generazione documentale tecnica automatica proprio del linguaggio Java.
Jenkins
Software che permette di automatizzare le attività necessarie alla continuous integration Linguaggio di dominio
Pseudolinguaggio adattato specificamente ad una classe di problemi detta dominio.
Load balancing
Letteralmente “bilanciamento del carico”, questa tecnica permette assieme al clustering di ottenere un’infrastruttura ad alta affidabilità che permette l’ottimizzazione dei costi.
Nella pratica, viene assegnato ad un balancer il compito di redirezionare il carico en-trante verso un cluster di esecutori.
Milestone
Letteralmente “pietra miliare”, è un termine proveniente dalla gestione di progetto che indica una precisa data con un significato particolare: ad esempio un termine di conse-gna, la fine di una particolare fase, la necessità di mostrare un prototipo, eccetera.
Automazione delle operazioni su piattaforma software as a service
Andrea Zironda ! ! ! ! ! ! ! ! ! ! ! ! ! 67 di 71
Object-oriented design
Struttura di progetto dove le entità sono modellate con classi, istanze e interfacce con obiettivo la definizione di operazioni polimorfe.
Pipeline di deploy
Insieme di attività correlate dall’obiettivo comune, la messa in funzione di un software a partire dal codice sorgente.
Repository (controllo di versione)
Letteralmente magazzino, identifica un entità software che ha la responsabilità di me-morizzare quanto necessario all’esecuzione delle operazioni permesse dal software di controllo di versione.
Repository (Apache Ivy)
Letteralmente magazzino, identifica un software che espone un’interfaccia per l’accesso ad una memoria dedicata all’archivio di artefatti.
Resolver (Apache Ivy)
Entità che identifica un punto di uscita verso il quale risolvere le dipendenze dichiarate.
Risoluzione (di dipendenze)
Operazione che, date una serie di repository e i parametri di ricerca di un artefatto, defi-nisce se e dove questo è disponibile per il download.
Tag (XML)
Marcatori sintattici che permettono la definzione ed il controllo del significato degli ele-menti inclusi in un documento di testo.
Tomcat
Web server scritto in Java e dedicato al servire progetti web (sempre Java) archiviati in file specifici con estensione “war”.
Virtualizzazione infrastruttura
Astrazione software con obiettivo il disaccoppiamento tra sistema operativo ed hardwa-re sottostante. Tramite la virtualizzazione viene chardwa-reata un’interfaccia che permette la creazione virtuale di dispositivi hardware. Questo approccio garantisce maggiore flessi-bilità e portaflessi-bilità delle piattaforme oltre ad abbattere i costi di gestione.
Working copy (controllo di versione)
Copia locale di un repository sul quale lo sviluppatore lavora con obiettivo la composi-zione di un commit (vedere la voce dedicata).
Riferimenti
Maven standard directory layout
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
The Twelve-Factor App
http://www.12factor.net
Continuous Delivery by Martin Fowler
http://martinfowler.com/snips/201006021426.html
Sonatype Nexus
http://www.sonatype.org/nexus/
Apache Archiva
http://archiva.apache.org/index.cgi
AWSTasks
https://github.com/palominoz/aws-tasks/
Maven Repository
http://mvnrepository.com