dunque una buona meritata vacanza nick!
Solo ora che ormai anche il secondo semestre è finito posso aggiungere un nuovo elemento alla serie di articoli relativi al mio studio.
Da diverso tempo speravo in uno spiraglio di tempo libero, un momento ispirato dove poter aggiornare il sito con tutte le informazioni interessanti, ma tra una serie e l'altra, tra una lezione e l'altra la primavera è trascorsa. Ora che sono fuori dal tunnel devo approfittarne per guardarmi indietro prima di lanciarmi nella prossima determinante corsa: la preparazione agli esami d'agosto - la famigerata "Basisprüfung".
Qualcosa è cambiato dal primo semestre. Forse a causa del ritardo accumulato a febbraio e trascinatomi dietro a peso e recuperato con grande fatica, forse per il carattere stesso di questo semestre, lo stacco quasi totale dai temi trattati al liceo, oltre alla quantità aumentata di materie, ore, materiale e lavoro da fare. Non è stata una passeggiata, abituarsi a vivere con la pressione della imminente selezione è difficile, e la crisi d'identità data dal fatto di trovarsi in mezzo a tanta gente dotata, impegnata e competente si è fatta sentire. Non si può dire che sia stato sempre bene. Ora a tirata finita sto meglio anche grazie ai risultati di un esame di prova di fisica, una delle materie che mi preoccupavano di più.
Ma bando ai sintomi da stress, questi mesi sono stati l'opportunità per molta sperimentazione. Chi mi conosce sa che sono un amante della forma, delle tecniche - di lavoro, di studio, di organizzazione (rischiando a volte, come ho realizzato negli ultimi mesi, di dare più peso al metodo che ai risultati...). Con tutte le cose da fare si è trattato soprattutto di trovare un modo di lavorare meno perfezionistico che mi permettesse di procedere un po' in tutte le cose. Insomma ho dovuto imparare a non impuntarmi, a rinunciare alla soluzione ottimale e a passare al prossimo esercizio, alla prossima materia quando il tempo lo dettava. Ciò mi ha aiutato molto, ero meno stressato e la sera finivo di lavorare con l'impressione di aver fatto qualcosa. Il mio tempo di lavoro si è stabilizzato a dieci ore al giorno, e tutto sommato avevo il weekend abbastanza libero.
Anche altre cose sono cambiate: ho praticamente smesso di mangiare a casa durante la settimana, rimanendo sempre ai tavoli del poli fino all'ora di cena. Se durante il primo semestre ho portato con me il portatile una o due volte, quest'anno era parte del bagaglio giornaliero (anche se non per usarlo durante le lezioni - attività che ho visto raramente essere sensata). Programmare è diventato all'ordine del giorno, e devo dire che mi riesce molto facile. Lavoro in modo intuitivo. La pratica fatta programmando il mio sito e con tutti gli esperimenti precedenti mi viene molto utile. Google (che bisogna pure saper usare in modo intuitivo) fa il resto.
Il sistema dei testats (le condizioni con cui si è ammessi agli esami, solitamente una percentuale delle serie di esercizi da fare) si è rivelato un po' uno scherzo - un trucco pedagogico in stile liceo per spingerti a lavorare, in parte efficace (certe notti altrimenti le avrei passate a dormire) ma in generale da prendere poco sul serio. Ogni professore (e anche i singoli assistenti) infatti interpreta e definisce le sue regole a modo suo, applicandole poi in modo più o meno severo. Alla fine con o senza testats non cambia nulla, perché è comunque altamente consigliabile fare almeno quello che al momento è pseudoobbligatorio. Io sono partito con la filosofia del "tutti i compiti sono obbligatori", ma non sono riuscito a mantenerla (essenzialmente per problemi di tempo), e ci sono alcune cose che ormai dovrò recuperare nel mese che viene.
Io più che altri ho messo la mia energia nello scrivere e mantenere riassunti. La tecnica a quattro colonne che sto sperimentando da settembre si è resa molto utile. Uso fogli A4 bianchi che suddivido in quattro colonne usando come misura un foglio piegato. La prima colonna è per i titoli dei capitoli, per i nomi di concetti e teoremi, eventualmente per la data. La seconda è per la formulazione di definizioni, teoremi e regole, insomma per i contenuti in sé. La terza e la quarta colonna sono "di riserva" (ma non meno importanti) e le uso per commenti, esempi (marchiati con una "B" cerchiata), brevi spiegazioni, domande ("?" cerchiato), tecniche ("T") per la soluzione di esercizi tipici, osservazioni importanti ("!"), completamenti. Questa struttura è comunque flessibile ed in effetti è venuta a crearsi man mano che scrivevo. I fogli poi li metto in buste di pvc e li raccolgo in cartelline. Ho quasi raggiunto il mio obiettivo di finire tutti i riassunti prima della fine del semestre. Per gli esami poi bisognerà riscrivere dei riassunti più brevi con solo l'essenziale, visto che ogni professore detta delle condizioni diverse per quanto riguarda il materiale che si può portare con sé (gli estremi: a fisica si può portare tutto il materiale che si vuole, e per algoritmica neanche un foglio).
Il mio obiettivo principale mentre scrivo riassunti è capire i temi: mettere ciò che leggo in una struttura chiara, gerarchica, lo faccio più per il mio cervello che per il foglio di carta. Il fatto che poi ci sia una "copia fisica" di questa struttura è un comodo effetto collaterale che mi aiuterà (spero) poi quando più che di comprensione si tratterà di memoria. In ogni caso questa tecnica mi permette di non dover (quasi) più riguardare i chili di materiale che ci hanno dato, e mi ha convinto talmente che ho cominciato a prendere nota allo stesso modo delle mie idee e dei risultati interessanti delle mie "ricerche".
Un altro punto a cui sto lavorando è quello della "pratica", cioè degli esercizi che bisogna saper fare. Soprattutto ad analisi alla fine non bisogna aver capito tutto, ma bisogna essere in grado di fare gli esercizi. Perciò visto che di riassunti di teoria ce n'è a bizzeffe (e visto che comunque come detto per capirla i riassunti bisogna scriverseli da soli) ho fatto un "indice" dei tipi di esercizi che possono capitare, aggiunto al wiki del vis, l'associazione degli studenti di informatica al poli.
Passo ora alle singole materie. Ad Analisi, la materia che forse più mi preoccupa al momento, si è trattato essenzialmente di estendere gli ultimi temi del primo semestre (derivate ed integrali) al multidimensionale: abbiamo visto la differenziazione in $$\mathbf{R}^n$$ (derivata parziale, differenziale, matrice di Jacobi, di Hesse, tutte le regole del caso e problemi particolari come equazioni differenziali, estremi con condizioni laterali), l'integrazione in $$\mathbf{R}^n$$ (teoremi di Fubini, Green, regole di sostituzione, integrali di flusso, Stokes e infine Gauss).
Questa materia, presentata dal geniale prof. Struwe, è quella dal peso maggiore nel primo anno: si tratta della base matematica che concerne praticamente tutti gli studi ingegneristici: i fenomeni del mondo per essere compresi scientificamente vengono astratti e inscatolati in modelli descritti tramite funzioni. E se l'analisi è la scienza della descrizione delle funzioni e del loro "comportamento", si rende chiara la sua importanza fondamentale per tutta la scienza e la tecnica.
Fisica, che al liceo avevo scelto solo come opzione complementare e, se devo dire la verità, allora avevo alquanto trascurato, mi ha messo un po' in difficoltà, mentre per altri si trattava soltanto di una ripetizione un po' più approfondita. In questi mesi abbiamo visto la meccanica (moto in tre dimensioni, massa, forza e leggi di Newton, lavoro, energia ed impulso e i loro equivalenti nel moto rotatorio, onde e oscillazioni), la relatività semplice con le sue varie trasformazioni, un tema che sarebbe interessante non dico approfondire, ma già solo cercare di capire meglio, e infine elettromagnetismo (campo elettrico e magnetico, induzione, le equazioni di Maxwell e onde elettromagnetiche). Lo stile del prof. Van der Veen con tanto di accento olandese è stato gradito da molti, ho apprezzato che si sia preso la briga di spiegare come la forza magnetica derivi dalle regole della relatività semplice. E mi è piaciuto il suo riassunto finale, dove ha mostrato un po' i collegamenti più ampi tra i campi trattati in una prospettiva dall'alto - adoro queste cose, mi aiutano ad orientarmi e a trovare un senso "più grande" in quello che studio (è anche questo il motivo per cui mi prendo l'impegno di scrivere tutte queste retrospettive).
I compiti sono stati di livello alto, più alto di quello d'esame, perché come detto da lui stesso, il prof. integrava negli esercizi le parti di teoria che non faceva in tempo a trattare. Inoltre le sue lezioni hanno seguito passo per passo la struttura del suo script, cosa di cui non mi ero accorto all'inizio, per cui mi ero messo a leggere il mastodontico e meno formale Tipler, procurandomi alla fine più lavoro. Se avessi capito subito queste cose mi sarei risparmiato una certa quantità di preoccupazioni.
Ho un po' lasciato in disparte la lettura di Programmazione Parallela del prof. Gross, mentre mi sono limitato a fare gli esercizi (sono stati in tanti a smettere di fare anche quelli, apparentemente perché erano stati dichiarati espressamente non obbligatori), e a riassumere la materia a partire dagli "slides" delle lezioni, per cui dovrò rivedere alcune cose durante l'estate.
Più che un approfondimento e una pratica della programmazione parallela, mi è sembrata una panoramica delle tecniche disponibili (in java), a partire dalla creazione di threads, alla sicronizzazione tramite l'uso di monitors, locks, oggetti volatile, AtomicObjects, semaphores, passando poi a tecniche più sofisticate come CSP, open MP, e il funzionamento in parallelo di eventi e interfaccie grafiche con swing. Aggiungerò qui anche la parte che non ho ancora fatto in tempo a leggere.
La lezione di Tecnica Digitale, seguendo soprattutto la struttura del libro molto buono "Digital Design and Computer Architecture", ci ha portati attraverso tutti gli strati ed i livelli di astrazione che portano dal transistor al microprocessore. Abbiamo visto il funzionamento di porte logiche e circuiti combinatoriali per poi passare a circuiti sequenziali (quelli che hanno uno "stato", cioè una memoria) anche lì a partire dai componenti più semplici come latches, flip-flops (registri) per arrivare al design sincronico delle FSM ("finite state machines"). Sempre secondo il principio della modularità abbiamo fatto passare blocchi con le più svariate funzioni binarie come sommatori, multiplexers, ALU, shifter e rotatori, contatori e array di memoria, e infine abbiamo visto come tutto ciò si compone per formare un microprocessore, l'unità più semplice in grado di interpretare ed eseguire un programma salvato in memoria in forma binaria, il cosiddetto linguaggio macchina.
Si è trattata anche di una materia pratica: oltre ai compiti teorici avevamo i cosiddetti "Labs", esercizi "di laboratorio" dove dovevamo creare dei circuiti con un software professionale (della marca xilinx), prima tramite il tool per il design di schemi (dove bisognava trascinare, posizionare e connettere ogni singola porta logica col mouse), poi utilizzando un linguaggio di descrizione hardware simile a quelli di programmazione, che poi veniva sintetizzato in schemi hardware dal programma stesso. Il tutto poi veniva caricato in un chip (il mitico "diligent spartan FPGA") e fatto funzionare con tanto di leds, pulsanti ecc. Il "lab" più impegnativo è stato completare delle parti mancanti un processore MRC e scrivere un programma in assembly per testarlo facendogli calcolare l'ennesimo numero di Fibonacci.
Per ogni materia ci sono stati dei periodi dove ritenevo più sensato non andare alla lezione e piuttosto leggere la teoria o lavorare ai riassunti. Non per Algoritmi e Strutture Dati, la materia per me più interessante di questo semestre. Sebbene la didattica del professore P. Widmayer mi vada molto a genio, all'inizio ho avuto delle difficoltà per la velocità con cui i temi venivano presentati. Non sapevo come prendere appunti: se scrivevo solo quello che compariva alla lavagna (normalmente un ammasso di schizzi, indici, frecce, algoritmi e parole chiave), in seguito non capivo più di che si era trattato. Se cercavo di mantenere un ordine non facevo in tempo a seguire. Ho poi capito che dovevo semplicemente (e solo in quella lezione) diventare una macchinetta da appunti, fregarmene dell'ordine e scrivere semplicemente in modo più veloce possibile tutto quello che veniva detto, e aggiungere ancora più frecce, e lì dove il prof. scriveva delle parole chiave, scrivere delle frasi intere. Grazie a questa "tecnica" (riempivo con ogni lezione 6-8 pagine di appunti) riuscivo poi in seguito a far passare tutto il ragionamento, e ci mettevo anche molto meno a implementare gli algoritmi presentati. Di aiuto è stato sicuramente il libro "Datenstrukturen und Algorithmen" coautorato dal professore stesso (anch'esso con uno stile cui ci si deve abituare), ma non tutto il materiale trattato era nel libro e quindi sono contento di essere quasi sempre andato a lezione.
Quando la soluzione di un problema richiede l'esecuzione sequenziale di istruzioni, si parla di algoritmo. Se l'algoritmo esegue delle operazioni con degli oggetti con delle proprietà particolari si parla di strutture dati, il cui funzionamento è fondamentale per determinare la durata, dunque l'efficienza dell'algoritmo che ne fa uso. Algoritmi e strutture dati vanno quindi a braccetto, e mutano a seconda dei problemi che si vogliono risolvere. Noi abbiamo visto problemi come la ricerca di un elemento in un insieme oggetti, l'ordinazione un insieme di oggetti, problemi di ottimizzazione, branch & bound, algoritmi geometrici, algoritmi sui grafi. E abbiamo analizzato strutture dati come liste, array, heaps, "dizionari", hash tables e "alberi" di svariato genere. Questa è proprio una di quelle materie dove null'altro che l'intelligenza porta a dei risultati. Non c'è niente che si può forzare: per quanto un algoritmo possa essere corretto e funzionare, se non è efficiente non lo si potrà usare nella pratica, perché con grandi numeri la sua durata aumenterà esponenzialmente. Lo studio dell'efficienza di algoritmi e correlate strutture dati è perciò una vera e propria scienza, e infatti ci sono molti problemi irrisolti e domande aperte. Senza la ricerca in questo campo l'avanzamento enorme dell'informatica di questi ultimi decenni non sarebbe stato possibile.
E così finisce il mio riassunto dei tanti ed interessanti temi trattati. Questo semestre è stato duro. E non è finita: gli esami mi aspettano ad agosto, e prima di lì tante ore di studio e tante tecniche da sperimentare. Spero che vada tutto bene, perché non voglio proprio perdermi la continuazione di questo interessantissimo studio. Ma prima di tutto adesso ho bisogno una pausa. Ed è infatti questa la mia prossima "decisione strategica": mollare tutto, non pensare più a niente e fare una vera settimana di vacanza. Mare, relax e kitesurf, arrivo!
Come al solito grazie per il vostro tempo, per la lettura e per i commenti. Sono molto affezionato ai miei 3-4 fedeli lettori :) E poi questo probabilmente è l'articolo più lungo che ho scritto finora.
Mairghus: hai proprio ragione che abbiamo dei programmi simili. Le basi sono simili per tutti. In qualche modo sembra che tutto giri attorno a 'ste equazioni differenziali - menzionate in analisi, algebra lineare, matematica discreta, fisica. Complimenti per i risultati degli esami!
Piace: La vacanza è stata rilassante, anche se non ho potuto usare il kite (ho avuto problemi a contattare la scuola... argh!). Ora ho cominciato con lo studio e in fin dei conti mi diverto (e ci mancherebbe altro).
Sinceramente, che figata :-D
leggendo quest'articolo mi son ritrovato a ripensare a tutto quello che io ho trattato durante l'anno: l'analisi (analisi infinitesimale, calcolo differenziale e integrale - a una e più variabili -, analisi classica), l'algebra (dal sempre buono algoritmo di Gauss fino al teorema spettrale), la meccanica (tutto quello che ti può venire in mente), l'elettrodinamica (elettrodinamica classica, ovvero equazioni di maxwell, circuiti e luce), i metodi matematici (uso dei metodi di calcolo), i metodi informatici (c++), i laboratori di fisica e infine il laboratorio di programmazione matematica (in poche parole, maple e matlab). I nostri programmi non cambiano molto tra di loro, se non per il grado di approfondimento dato alle diverse materie.
Mi fa piacere sapere che non sono l'unico a dover scegliere su cosa concentrarsi e in un certo senso a dover "salvare il salvabile": la lista di cose da fare è molto lunga ed è praticamente impossibile stare dietro a tutto. Ogni tanto va sacrificato qualcosa: dal canto mio sono contento che le materie a "controllo continuo" sono finite verso metà maggio, così da lasciarmi tutti i pomeriggi liberi e da permettermi di studiare. Mercoledì comincio gli esami, e ancora adesso non mi sento pronto. Da quel punto di vista voi al Poly avete molte più possibilità di studiare come si deve, non avendo corsi da seguire allo stesso tempo.
Ci sentiamo presto!