L'estate è passata. Tempo per un nuovo aggiornamento e una retrospettiva.
Sì, l'estate 2011 ha lasciato il passo al quinto semestre. Un'estate molto tranquilla dal punto di vista accademico: ho avuto la maggior parte degli esami a giugno, e me n'è rimasto uno solo a metà agosto, per cui ho studiato una decina di giorni. Il resto del tempo l'ho passato tranquillamente, andando al lago di Zurigo, facendo avanti e indietro dal Ticino, incontrandomi con amici e lavorando ad alcuni progetti di programmazione, tra cui il mio sito (come spiegato nel mio ultimo aggiornamento), e il primo sito che realizzo per un'altra persona: www.galleriacaradonna.ch, di cui parlerò più approfonditamente in un articolo a sé.
Un'estate quindi vacanziera e molto lunga: sono contento che il mio quinto semestre al politecnico sia infine cominciato! Le materie che ho scelto si prospettano interessanti ed intense. Sono diventato assistente di Matematica Discreta (Diskrete Mathematik, avuta io stesso nel primo semestre, cui ho anche dedicato un articolo), cosa che avevo deciso di fare sin dal primo semestre. Ho già avuto la mia prima ora di lezione coi miei "Erstis" (qualcosa tipo "primini").
Visto che non sono mai arrivato a fare una retrospettiva del quarto semestre descrivo brevemente le letture che ho frequentato.
Operating Systems and Networks, divisa in due parti. Nella prima ho finalmente potuto approfondire il funzionamenteo di internet e delle reti in generale, mentre la seconda è stata un approfondimento della lettura avuta nel terzo semestre Computer Architecture and Systems Programming: abbiamo visto le basi del funzionamento di un sistema operativo.
Data Models and Databases, dove abbiamo trattato il funzionamento delle banche dati. Questa materia si è già resa molto utile nella vita pratica in quasi tutti i miei progetti di programmazione. Come progetto semestrale abbiamo implementato un mini social network con di login, aggiunta di amici, invio di messaggi, in un primo tempo utilizzando un database mysql, e nella seconda parte implementando noi stessi un sistema per salvare i dati ed accedervi da dei file.
Formal Methods and Functional Programming, una lettura anch'essa divisa in due: la prima parte dedicata ai linguaggi di programmazione funzionale, focalizzata su Haskell, mi ha appassionato. Haskell è un linguaggio veramente elegante e richiede una chiarezza di pensiero di solito tipica del permesso matematico. I programmi stessi assomigliano a delle formule matematiche, ed è possibile dimostrare teoremi e proprietà al riguardo molto più facilmente che per programmi scritti con altri paradigmi (procedurale, orientato agli oggetti...). La seconda parte è stata dedicata ai metodi formali: la pratica più in uso per la verifica della correttezza di programmi è il testing: eseguire il programma svariate volte con parametri diversi e vedere se l'esecuzione si svolge correttamente. Il problema è che il testing può solo mostrare la presenza di errori, non la loro assenza[1]. Per cui esiste un altro approccio: i metodi formali, appunto. Per cui abbiamo visto come dimostrare delle proprietà di un programma non funzionale, quali strumenti sono a disposizione del programmatore per costruire programmi dimostrabilmente corretti e dove sono i limiti di questo approccio.
Software Architecture, la prima materia che ho scelto personalmente (tutte le materie presentate finora erano parte integrante obbligatoria del bachelor di informatica) era focalizzata sui metodi di costruzione di un software. Anche questa lettura era divisa in due parti: la prima dedicata alla software architecture vera e propria, dove abbiamo trattato principi della buona programmazione (modularity, reusability, design patterns, architectural patterns...), e metodi per modellare i problemi (abstract data types, object technology, contracts...). Si è poi passati a software engineering, dove abbiamo visto i processi che diverse imprese utilizzano per arrivare dalla richiesta del cliente al prodotto (waterfall model, spiral model, seamless, agile, cmmi...), come scrivere dei "requirements", come organizzare il testing, come valutare la qualità del prodotto.
Come parte di questa lettura abbiamo anche avuto un progetto da fare in gruppi di quattro, seguendo una versione accorciata del modello a cascata: nella prima di quattro fasi abbiamo scritto i requirements per il nostro software, nella seconda abbiamo creato un modello, uno schema delle classi e dei metodi che dovevamo implementare, nella terza siamo passati all'implementazione e infine nella quarta abbiamo fatto il testing per il progetto di un altro gruppo, mentre anche noi venivamo testati e dovevamo correggere i bug che venivano trovati nel nostro progetto. Come progetto è stato impegnativo, ma molto istruttivo, e ho potuto vedere per la prima volta com'è lavorare ad un software in gruppo.
Ed infine ho preso un corso di Russo, la mia prima materia fuori dal dipartimento di informatica. È stato un piacere tornare ad imparare una lingua, di cui non sapevo proprio nulla questa volta, con un alfabeto proprio e una grammatica tutta sua. Sono partito direttamente con Russisch II, perché la prima parte non era disponibile in primavera, per cui mi sono ritrovato a dover recuperare un semestre, cosa che sono riuscito a fare ripassando vocaboli e regole giornalmente per almeno mezz'ora (sono pochissimi giorni che ho saltato). Purtroppo questo semestre all'iscrizione sono finito in lista d'attesa e sembra improbabile che io possa continuare con Russisch III quest'anno.
Insomma anche il semestre IV è stato bello intenso, molto stressante verso la fine a causa degli esami accavallati a giugno, ma tutto sommato è andato bene (molto meglio di quello che temevo), e come al solito ho imparato un'enormità di cose. Sono pronto per ciò che il poly ha da offrirmi per il prossimo semestre!