Sono sia stanley che livingston, e dottore. Non di quelli che curano la gente, ma sono laureato in ingegneria informatica, almeno sembra.

E s’è laureato pure Stefano con me, e con voti migliori :)

Come si conviene alla fine di un ciclo, è giusto faccia delle riflessioni. Attenzione, sono riflessioni di uno che non sa tutto dell’università, solo la mia esperienza diretta. E poi, magari ora è diverso.

Occhio, che mi dilungo.

De passione
Io ho studiato in un’università che si chiamava “La Sapienza”, ma che per ignoti motivi ora si chiama “Sapienza - Università di Roma”. Immagino che il “La” sembrasse obsoleto dopo settecento anni.

All’università ci ho studiato parecchio. O quantomeno, ci sono stato iscritto per un bel po’.
Quando ho iniziato non sapevo praticamente nulla di computer, e nonostante “fondamenti di informatica” (aka liste concatenate, alberi, ricorsione e PASCAL, che si scriveva in maiuscole) ho continuato a non capirne nulla fino al secondo anno. Perché ancora non avevo la passione.

Per quella non sono stati utili i corsi, professori e libri.
Ci sono voluti, per primi, antonio, federico e luca.

Che d’altronde, mi hanno forse rovinato un po’ la vita, visto che quasi dieci anni dopo continuo a stare su IRC a perder tempo.

Ma forse è questo il punto dell’università, come degli user group, dei blog collettivi, di IRC e di USENET. Non importa imparare, ma conoscere persone che ti facciano venire voglia di farlo.

De educatione
Anche perché, in my very humble opinion, quello che uno impara nel mio corso di laurea è del tutto inutile. Io capisco che un ingegnere informatico non debba essere un programmatore, ma a due mesi dalla (loro) laurea c’erano persone che ancora mi dicevano che la complessità di un algoritmo non è un problema importante “tanto nella vita non capita mai“.

D’altronde, so come funziona un transistor perché elettronica è un corso obbligatorio, anche se non disegnerò mai un circuito integrato, ma magari alcuni dei miei colleghi lo faranno, quindi a loro sarà stato utile. Non so quanto, visto che abbiamo studiato su un testo del 1982, ma forse si.

Quantomeno, uno dovrebbe aver acquisito la forma mentis.

Che, detto fra noi, non so neanche quanto sia vero. Certo, l’esame di Analisi II è propedeutico allo studio della fisica che è propedeutico allo studio di.. mh.. ok niente nel mio caso, ma forse a qualcuno serve. Però dovrebbe dare una forma mentis.

La da davvero? Non lo so. Forse serve comunque per apprezzare xkcd.

La mia impressione è che la mia università sia impastoiata in un mix tra nostalgia per quando informatica era ancora elettronica, l’ossimoro “software engineering” e l’altro “computer science”.

E in tutto questo finisce per fallire in vari modi:

  • “Industry-focus” mal-mirato tipo java al primo corso sulla programmazione, come imparare a leggere con la Divina Commedia. Dal paradiso. Credo sia possibile imparare a programmare usando java, ma non usando lo stesso programma che si usava col PASCAL (sempre maiuscolo).
  • “Science-focus” disconnesso. Nel corso di Informatica Teorica (von neumann, turing, church, automi etc) c’è una parte dell’esame in lisp. Nessuno ti dice perché. Nessuno torna mai più sul lambda calcolo. In Sistemi Distribuiti si studiano una marea di algoritmi e di problemi teorici. Nessun esempio di software reale, o di piattaforme esistenti.
  • Scomparsa di argomenti fondamentali. Provate a chiedere al 90% dei laureandi come funzioni l’allocazione di memoria in java. Intendo cose banali, tipo “dove stanno gli oggetti”. Credo di aver sentito il termine “heap” tre volte in nove anni. Tail call elimination? Sospetto che il concetto stesso di tail call sia ignoto ai più. Type system? Cazzarola, paolo, che ha fatto matematica, ha implementato un linguaggio in haskell come compito per casa, da noi credo che nemmeno venga mai nominato. Penso che alla domanda “dai una definizione di polimorfismo” la maggior parte dei miei colleghi non saprebbe rispondere
  • Rimanenze di esami ingegneristici senza senso. Chimica. Io ho amato chimica. Un esame bellissimo. E giuro su $DEITY che niente visto in tale esame mi è mai servito a niente nei 40 esami successivi.

Ovviamente, ci sono un sacco di persone che escono preparatissime. Gente che per quel che mi riguarda può vincere il turing award, disegnare CPU avanzatissime e sviluppare il prossimo BigTable o Dynamo . Solo che il 90% di chi si laurea non farà quello, scriverà codice java senza aver mai visto junit, porco giuda.

Però la mia università sta migliorando, credo. Adesso abbiamo corsi in inglese, una nuova sede ed internet wireless. Dopo la terza riorganizzazione da quando mi sono iscritto, forse i corsi sembrano riorganizzati in maniera da non studiare l’algoritmo di dijkstra 6 volte e magari imparare qualcos’altro. Io sono speranzoso.

De magistris
Io ho avuto dei buoni insegnanti, e ne ho avuti di pessimi.
Credo che il problema permanga sempre lo stesso, e sia comune ad altre realtà: professori che non amano (più?) l’insegnamento, o che soffrono ad insegnare a gente che se ne frega del loro argomento (e.g. fisica a un informatico, interesse prossimo a zero), o che hanno scritto slide dieci anni fa e non hanno voglia di aggiornarle (e.g. “MD5 is currently considered secure” nel 2009) o che, semplicemente, non sanno insegnare pur essendo ottimi ricercatori.

Ho diligentemente compilato il modulo per esprimere giudizi sul corso appena finito, ogni volta che ho potuto. Non ho mai notato differenze.

De Economie Sapientiae (questa l’ho inventata)
Forse la cosa che più mi è mancata è stato capire perché una cosa mi servisse. Qualche professore eroico ha messo a fine corso delle lezioncine da parte di persone esterne all’università che operano in campi contigui all’insegnamento. Avrei voluto averne sempre.

Se non mi viene fatto capire a che serve, come posso imparare qualcosa?
Non è poi troppo difficile cavolo:

  • turing completezza: “a volte ha senso avere un linguaggio non turing completo perché così puoi sapere da analisi statica che la cosa che spegne una centrale nucleare impazzita non entrerà in un loop infinito
  • NFA/DFA ed espressioni regolari: “per esempio le espressioni regolari in java Pattern.compile(”a+b?c*”)
  • natural language processing: “la società X produce questo tool che classifica notizie automaticamente, potremmo farne uno semplice usando questa tecnica…
  • teorema di bayes: “ad esempio, uno spam filter si può fare così (20 righe di codice)…

Quello che mi è mancato, e credo manchi a molti, è capire quale sia il valore di quello che studio. Gli studenti, io almeno, amano gli esami di progetto. Perché, vedi a cosa serve quello che studi. Io ho dato “Metodi Matematici per l’Ingegneria”, immagino sia utilissimo per qualcosa, ma non ho idea di cosa.

Conclusions and future work
Io penso che l’università sia bella, e utile. Forse non nel senso di imparare davvero, ma forse serve ad essere esposti a bacilli che poi potranno svilupparsi, oppure no.

Serve a conoscere qualche persona che può cambiarti la vita e a scoprire l’esistenza di qualcosa che potrà diventare una passione. Serve ad andare in erasmus, se possibile, e ad essere costretti a studiare cose che resterebbero sul limite del disinteresse ma che ex post si apprezzeranno.

Dopo quasi dieci anni, mi piacerebbe ricominciare.
E poi, adesso mi trovo come mi trovavo una mattina ad agosto nel ‘99, quando un amico mi ha svegliato, mi ha portato all’università e mi ha fatto iscrivere ad ingegneria.
E penso le stesse cose: mi iscrivo a lingue, scienze della comunicazione o economia?