Perché è importante una laurea in informatica

(tradotto da Why a Computer Science Degree Matters)

La corona d'alloro e la tesi di laurea
del nostro Alessio Tedeschi,
100 al diploma
e 110 e lode alla laurea in Informatica.
Avevamo visto bene!
Sarò il primo ad ammettere che io assolutamente disprezzo la stato in cui versa l'istruzione universitaria. È l'idea in sé ad essere fondamentalmente difettata e non sono entusiasta di aver speso 3 anni (e per fortuna soltanto 3) per conquistarmi un pezzo di carta che "provi le mie competenze". Secondo me, nella maggior parte dei casi, invece non prova nulla. Facendolo per conto mio, posso imparare una quantità maggiore di materiale, materiale più utile ed impararlo più in fretta. Servizi online come Treehouse, Codecademy, persino usare la ricerca di Google e di stack overflow ci consentono di fare grandi cose. Tutto ciò che utilizzo quotidianamente è stato imparato essenzialmente per conto mio; soltanto eccezionalmente le mie conoscenze sono aumentate grazie ad un corso universitario.

Nelle ultime due settimane, mentre programmavo un sistema embedded per una competizione, mi sono dovuto sbattere con il mio collaboratore utilizzando svariati hardware e metodi per la progettazione del software. Siamo stati capaci di codificare velocemente il nostro bot che doveva eseguire le attività richieste senza errori, ma il bello è arrivato quando abbiamo iniziato a fare sperimentazioni, cercando di costruire robustezza all'interno del sistema. Saremmo riusciti soltanto fortunosamente a rendere il nostro bot affidabile? Sarebbe stato capace di tirarsi fuori da situazioni difficili? Sarebbe stato in grado di scontrarsi affidabilmente con il bot di qualche concorrente, riuscendo comunque a concentrarsi sul raggiungimento dei propri obiettivi? Come la nostra lista dei casi problematici cresceva, così cresceva la base del codice. La manutenzione diventava più pesante e crescevano le interdipendenze.

La scorsa notte, sul tardi, mi venne in mente: questo è il caso perfetto per applicare il concetto di Macchina a Stati Finiti (FSM). Esiste un numero finito di stati in cui il nostro bot si può trovare durante la sua esecuzione, e soltanto alcuni stati posso portarlo in alcuni altri stati. Il nostro codice si trasformò da un organizzato piatto di spaghetti che lavorava affidabile (potevamo ottenere un'esecuzione perfetta tutte le volte, escludendo casi limite estremi, rilevazioni errate dei sensori e schifose collisioni con gli oppositori), in un sistema pulito, succinto ed incredibilmente robusto (Github for Code) che gestisce in bellezza quasi tutti i casi limite, anche quelli che non avremmo mai immaginato. Così abbiamo facilmente vinto sugli avversari, perdendo soltanto una partita per caso, tutte le altre competizioni sono state una vera scorpacciata.

Non avrei mai pensato di utilizzare gli stati di un'architettura FSM come struttura del programma sottostante se ciò non fosse stato contenuto nella teoria computazionale, nell'intelligenza artificiale e negli aspetti pratici dei corsi di linguaggi di programmazione che ho seguito nella mia carriera universitaria. Avrei potuto imparare certe cose per conto mio? Certamente no. Avrei dovuto? Probabilmente no. Quanto spesso quel concetto affiorerebbe mentre stai realizzando un'applicazione web? Quasi mai.

Sono arrivato a comprendere che la mia laurea, ai fini della valutazione delle competenze, è soltanto un inconsistente pezzo di carta per conseguire il quale ho speso un esorbitante quantità di denaro. Avrei potuto mostrare i progetti per cui ho lavorato che dimostravano molto meglio ciò che sono capace di fare. Comunque, in termini di comprensione profonda e teoretica, si tratta di un'esperienza impagabile; quel pezzo di carta mi rappresenta che l'informatica non è soltanto codificare (benché bisognerebbe essere capaci di farlo), ma è codificare più elegantemente con una consapevolezza più profonda del modo di affrontare un problema alla sua radice. Per la prima volta in 3 anni ho pensato che ne era valsa la pena.

Commenti

Post più popolari