[Soci SLIP] Da grande farò il programmatore

Lucio Crusca lucio a sulweb.org
Mer 20 Mar 2013 16:49:28 CET


> Bisogna immaginarsi nei panni dell'imprenditore universale e poi si
> comincia a capire. I conti, come li facciamo abitualmente, sono tutti
> falsati da un'astrazione: soldi. Ci si accorge che non puo' funzionare
> quando crolla un sistema di una certa dimensione. 

Sì capisco a cosa ti riferisci. Io facevo un discorso un po' più spicciolo, 
del tipo "ricette preconfezionate della cameo", a patto che si sappia, 
all'occorrenza, cucinare a partire dagli ingredienti e coltivarsi la canna da 
zucchero se necessario. Davo per scontata questa seconda parte. Quando dico 
"usate un intero invece di un bit", non intedo dire "fatelo e basta", intendo 
dire, "posto che do per scontato che sappiate tutti i perché alla base e se 
non li sapete andate a studiarveli, non state a perder tempo a chiedervi cosa 
convenga fare, ottimizzare oppure no, perché l'evoluzione umana ha già la 
risposta: conviene usare un intero e non ottimizzare a meno che non abbiate 
limitazioni tali per cui non ottimizzare comprometterebbe la riuscita del 
progetto".

> Se si va a vedere, si
> capisce che proprio non potrebbe funzionare. I soldi vengono stampati da
> enti privati (la Fed e' privata, ed e' diventata tale con un emendamento
> fatto passare al congresso americano il 23 dicembre 1913, anche allora
> si usava fare le cose alla vigilia di Natale). I soldi non corrispondono
> a nulla di reale. La quantita' in circolazione viene decisa al di sopra
> delle nostre teste e nelle crisi genera inflazione fino al crollo
> dell'intero sistema.

Concordo, anche se mi sfugge in che modo si arrivi a parlare di questo 
partendo dalle ottimizzazioni del codice...

> Pero' se si capisce quello, si capisce dove stia lo spreco. Con un
> esempio pratico.
> 
> Te ne faccio un altro: i sacchetti di plastica. Invece di insegnare alle
> persone che gliene basta uno per tutta la vita e poi riciclare quell'uno
> a testa quando la persona muore, si decide che non vanno piu' bene i
> sacchetti di plastica e si costringe tutti a comprare invece i sacchetti
> "ecologici" (molto piu' cari e quasi uso e getta).
> 
> Bel risparmio... Forse c'era un altro modo?

Anche qui concordo e anche qui non vedo molto il nesso. Il mio intervento era 
orientato a suggerimenti pratici per farsi un po' meno male durante la 
gavetta, non intendevo smuovere i massimi sistemi, anche perché, ripeto, su 
quelli concordiamo e credo che concordino tutti.

> L'importante non e' usare o meno un bit su una macchina a 64 bit,
> l'importante e' continuare a sapere che basta un bit per una scelta
> binaria: 0/1, on/off, che ce ne vogliono due per quattro scelte
> possibili, che ce ne vogliono tre per otto scelte possibili, che ce ne
> vogliono n per 2^n scelte possibili). E' importante perche' e' un
> concetto generale, che si applica a tutto, insieme al concetto che i bit
> assumono il significato che gli diamo (codifica). E' importantissimo per
> capire come comandiamo la ferraglia: solo grazie al fatto che ai valori
> 0 e 1 corrisponde un qualcosa di fisico, in questo caso due valori di
> tensione. Diventa percio' chiaro perche' si usa il codice binario: e'
> "difficile" (non certo impossibile) distinguere piu' di due valori di
> tensione, etc. Si capisce che macchina a 8 bit significa che
> l'operazione minima di trasferimento da memoria a cpu e viceversa porta
> 8 bit per volta. Si capisce la differenza tra RAM e registri, tra RAM e
> dischi etc etc etc.
> 
> Con questo, ti ho "regalato" la prima lezione che propinavo io :)

Grazie, non vorrei sembrare spocchioso, ma è una lezione che fa sempre parte 
anche del mio repertorio, se non altro per coprire quei quarti d'ora troppo 
corti per un nuovo argomento ma troppo lunghi per stare a far niente. Non era 
però quello che intendevo trasmettere, qui in lista SLiP sono concetti che do 
per scontati.

> Come si fa a far stare un programma e i suoi dati su arduino (per
> esempio) senza sapere come osare la memoria in modo efficiente (cioe',
> senza sapere?)
> 
> La tendenza e' quella di spostare i limiti, in nome di chissa' quale
> efficenza, senza rendersi conto che con i limiti si butta via quello che
> serve piu' di tutto, sapere.
> 
> Ora, bisogna esser ciechi (accecati) per non rendersi conto delle
> conseguenze di questo atteggiamento psicologico di massa.
> 

In qualche modo tu identifichi il sapere con il saper ottimizzare. Io credo che 
chiunque si avvicini alla programmazione sappia ottimizzare. Non ci vuole 
particolare esperienza, sono le prime cose che si imparano, se non altro per 
intuizione se proprio nessuno ce le spiega. Ed è appunto per quello che volevo 
mettere in guardia gli apprendisti: l'ottimizzazione è una pratica che si 
impara subito, è una tentazione forte perché promette miglioramenti con poca 
fatica, ma nasconde insidie che risultato evidenti solo con l'esperienza. Poi 
ovviamente è giusto saperlo fare e conoscere i dettagli di come funziona un 
calcolatore, ma io ponevo l'attenzione sul sapere quando farlo e quando no.

La parte difficile invece è imparare a scrivere codice efficiente, non grazie ad 
ottimizzazioni ma grazie ad algoritmi efficienti ed uso di librerie ben fatte.

> Anche se ci si mette a capire si va molto piu' adagio di quel che il
> vortice richiede ai suoi granellini di sabbia che trascina. Bisogna
> organizzarsi per poterselo permettere. E' una scelta cosciente. Uno lo
> fa, come sempre, se si rende conto dell'importanza che ha e se lo puo'
> fare.
> 
> E poi chi va piano va sano e va lontano  e da sempre la fretta fa
> nascere i gattini ciechi :)

Sì. Torno a dire che la parte di apprendimento del perché delle cose la davo 
per scontata. Se non la si sa, la si studia prima. Quando io ho iniziato, a 12 
anni, a voler scoprire come si programmava il computer, mi son fatto regalare 
un libro ed ho iniziato a studiarlo. Quando quel libro (che spiegava il 
linguaggio BASIC) non andava nei dettagli a sufficienza per farmi capire il 
perché delle cose, ho voluto un altro libro più dettagliato (linguaggio 
macchina, al tempo era del processore Z80), perché la mia curiosità non era 
soddisfatta fino a quando non riuscivo ad avere in testa un'idea precisa di 
come la corrente elettrica si trasformasse magicamente nel videogioco. E 
quando neppure il libro sul linguaggio macchina mi spiegava come diamine 
facesse il computer a tenere in memoria dei dati, sono adanto a leggermelo 
sull'enciclopedia e ci ho trovato le memorie a nuclei di ferrite. Era già una 
tecnologia obsoleta, ma mi bastava a capire come poteva funzionare. Questa 
però è la voglia di capire, la curiosità, il punto 1 tra quelli che ho 
elencato. I punti dopo danno per scontato che si sia già letto il punto 1 e le 
ottimizzazioni sono il punto 4...




Maggiori informazioni sulla lista Soci