«[Figlio dell'uomo] Porgi l'orecchio e ascolta le parole di KGB
e applica la tua mente alla SUA istruzione
» Pv. 22,17

Qui si straparla di vari argomenti:
1. Il genere dei pezzi è segnalato da varie immagini, vedi Legenda
2. Per contattarmi e istruzioni per i nuovi lettori (occasionali e non) qui
3. L'ultimo corto è questo
4. Molti articoli di questo blog fanno riferimento a definizioni e concetti che ho enunciato nella mia Epitome gratuitamente scaricabile QUI. Tali riferimenti sono identificati da una “E” fra parentesi quadre e uno o più capitoli. Per esempio: ([E] 5.1 e 5.4)

lunedì 20 agosto 2012

Udacity e CS258

A fine giugno pubblicai il corto Udacity: Wow!. In esso scrivevo di un sito, www.udacity.com, che fa corsi a livello universitario, su varie materie scientifiche, gratuitamente.
Siccome si trattava di un corto non mi dilungavo oltre un generico entusiasmo...
Ora, a distanza di quasi due mesi, e dopo aver testato per bene il sito ne approfitto per farne una recensione più approfondita.

Come scrissi a suo tempo mi ero iscritto a ben 3 corsi: ST101 “Introduzione alla statistica”; CS215 “Alghoritms: crunching social networks” e CS258 “Software Testing”.

I corsi sono divisi in Unit e di solito ne viene pubblicata una per settimana. In pratica ogni Unit corrisponde a una lezione ed è composta da diverse decine di corti filmati in formato YouTube. In media ogni filmato è lungo un paio di minuti e corrisponde a un “paragrafo” della lezione. Spesso, ma dipende sia dalla Unit che dal corso, alla fine del filmato ci sono delle domande a risposta multipla (ma non solo) per verificare la comprensione dell'argomento.
Per ogni Unit ci sono poi delle esercitazioni specifiche, diciamo dei “compiti per casa”, che servono per fare pratica con le nozioni acquisite. Dipende dal corso ma spesso queste esercitazioni richiedono di fare dei programmi in Python che si possono inoltrare a Udacity per verificare se funzionano correttamente: può sembrare macchinoso ma in realtà è molto semplice e facile da usare.
Parallelamente alle Unit e alle esercitazioni c'è un forum, specifico per ogni corso, dove è possibile postare domande sugli argomenti trattati: il forum è molto vivace e frequentato spesso anche dai professori. Se si hanno dei dubbi è un'ottima maniera per ricevere aiuto...
Infine c'è un esame che, almeno nel caso del corso CS258, richiede di fare ben cinque programmi in Python che riepilogano gli argomenti trattati nelle diverse Unit.
Una volta terminato l'esame è possibile scaricare un certificato col voto basato sul numero di esercizi del test finale svolti correttamente. È più facile di quel che sembra perché non c'è il fattore tempo e si può ripetere, sia il corso che l'esame, quante volte si vuole...


Ma qual è la qualità delle lezioni? Si impara veramente qualcosa?
Beh... dipende...
La domanda è mal posta perché, ovviamente, si impara sempre qualcosa: semmai c'è da chiedersi se i corsi raggiungono lo scopo prefissato. Se riescono a dare degli strumenti per lavorare per conto proprio o se si limitano a dare un infarinatura sull'argomento che, per essere proficua, debba poi essere approfondita in separata sede.
Questa seconda domanda è ben posta ma non posso darle una risposta definitiva: infatti, dei tre corsi ai quali mi ero iscritto, ho completato solo il CS258 “Software Testing”!
Per quel che riguarda il CS258 posso rispondere e dire che mi è stato veramente utile e che sicuramente metterò in pratica la nozioni apprese.
Il corso ST101, quello di statistica, era troppo base: la prima Unit si limitava a spiegare come leggere vari tipi di grafico; la seconda accennava a elementi di probabilità e la terza era tutta incentrata sulla formula di Bayes (sempre probabilità). A quel punto mi sono scocciato e ho lasciato perdere: io ero interessato alla statistica e non alle probabilità! È ovvio che per comprendere la statistica è necessario possedere delle nozioni di probabilità ma tali nozioni non possono essere insegnate nel corso di statistica e andavano considerate come dei prerequisiti: cioè circa un terzo dell'intero corso è andato sprecato a parlare di probabilità ovviamente a scapito della statistica vera e propria...
Se mi tornerà la voglia salterò direttamente alle lezioni interessanti.

Discorso analogo per il corso CS215 sugli algoritmi per i social network. Nella prima lezione riassume la teoria dei grafi e nella seconda inizia a spiegare la complessità algoritmica...
Magari in questo caso sono stato poco paziente ma secondo me alcune conoscenze, come la complessità, andavano semplicemente considerate dei prerequisiti senza quindi perderci tempo sopra.

Al contrario il CS258 è andato subito al sodo senza fare tante premesse. Quando mi sono iscritto ero scettico su quanto la materia potesse essere interessante ma invece mi sono subito ricreduto.
Non solo il corso è interessante ma anche molto utile! Certo, da un punto di vista pratico, troneggia sempre il trade off tra costo e tempo dedicato al testing: per la maggior parte delle applicazioni i costi di testing raffinati superano i benefici ma, a livello teorico, è molto interessante. Sicuramente per i miei programmi Java inizierò a usare JUnit insieme a un plugin per verificare lo statement coverage...
Ok, sono stato un po' tecnico: diciamo che semplicemente metterò in pratica le nozioni imparate per mio diletto!
Per dare un'idea più precisa degli argomenti del corso ecco i titoli delle varie Unit e annesse esercitazioni:
1a What is Testing?
1b Problem set - Blackbox Testing
2a Coverage Testing
2b Problem Set - Code Coverage
3a Random Testing
3b Problem Set - Sudoku Testing
4a Random Testing in Practice
4b Problem Set - Fuzzer
5 Testing in Practice
6 Exam

Ah! Ovviamente i corsi sono in inglese e le spiegazioni degli insegnanti non sono sottotitolate...
Il linguaggio usato dai professori è molto semplice ma comunque richiede una buona comprensione dell'inglese parlato. Ovviamente il professore del corso CS258 era rapidissimo nel parlare mentre quello delle esercitazioni di statistica faceva addormentare da quanto era lento!

Come si vede dai titoli delle unit il corso era molto orientato alla pratica e questo l'ho apprezzato enormemente. Magari si è dato troppo risalto al random testing che, a mio modesto parere, è una tecnica troppo costosa e dai risultati incerti per essere adoperata nella maggior parte delle applicazioni reali. Al contrario ho sentito la mancanza di una unit che desse almeno delle indicazioni su come testare le interfacce grafiche...

L'esame poi era tutto in Python: linguaggio che non conoscevo per niente...
Come ho fatto? Beh, un minimo di basi e sintassi le avevo imparate durante il corso e poi, soprattutto, sono abituato a lavorare per conto mio e a cercarmi le soluzioni su internet!
Un esempio: il primo esercizio dell'esame chiedeva di fare un programma di fuzzing per un editor che prendesse un testo (una stringa molto lunga), che ne cambiasse casualmente alcuni bytes e che poi riconvertisse tali bytes in una stringa per passarla infine a un editor di testi per vedere come la digeriva...
Io non avevo idea di come convertire le stringhe in array di bytes e viceversa ma in 5 minuti ho trovato tutte le informazioni necessarie su internet e ho messo insieme i pezzi di codice trovati: ho sorriso leggendo sul forum di persone che ci avevano perso serate!

In conclusione consiglio a tutti di provare almeno uno di questi corsi su Udacity (l'elenco completo è qui): non costa niente e nel caso peggiore perderete solo un po' di tempo ma, se invece vi dovesse piacere, sicuramente ne sarà valsa la pena...

Nessun commento:

Posta un commento