Claudio Brotto

ERRATA CORRIGE e 1 piccola riflessione

Buongiorno e buona domenica a tutti !

Innanzitutto, una nota importante. Un' ERRATA CORRIGE.

Nel mio precedente post mi sono lanciato in voli pindarici commentando la differenza tra l'uso di for e while per le iterazioni.

Interessante .... peccato fosse sbagliato !!!!

Marco Russo, che ringrazio ancora una volta per la prontezza della segnalazione e, già che sono qui, anche per i commenti ad alcuni dei miei post precedenti, mi ha fatto notare che (cito testualmente dalla sua mail):

Se hai questo for:

for (i = 0; i < 1000000000; i++);
 
il valore di i all'interno del ciclo sarà quello precedente all'incremento.
 
Il ciclo while con cui lo devi confrontare è qundi diverso dal tuo, dovresti fare:
        Int32 i = 0;
        while (i < 1000000000) {
            // qua metti il corpo del ciclo...
            i++;
        }
 
Se osservi il codice IL di while e for a questo punto, le istruzioni sono identiche.
Dunque, da un punto di vista puramente teorico, una delle due istruzioni è di troppo :-)
 

Gasp sigh sob sgrunt gulp ahiooooo ! C'ha proprio ragione !

Indi per cui tutte le chilometriche considerazioni che ho fatto magari saranno anche scritte in italiano corretto, ma dal punto di vista ... semantico, sono un pochetto sbagliatucce !

Per prima cosa, ovviamente, una scusa ai lettori che, dopo aver avuto il tempo e il coraggio di dedicarmi mezz'ora per leggere tutto, non si sono accorti, come è capitato a me, dell' errore e magari hanno pure condiviso le mie conclusioni.

Giusto per mantenere la tradizione, però, non la finisco mica qui.

Già, perchè nel frattempo il tutto mi ha fatto riflettere su una cosa.

E' un fatto che riguarda me in prima persona, anche se il nostro buon Pino ha un paio di aneddoti carucci carucci sul tema (ma questa è materia per un altro post).

Premetto, giusto per non farci proprio la figura dell'ultimo degli ultimi, che l'errore che Marco mi ha segnalato è, in effetti, abbastanza banale, nel senso che è grossolano e che, sono sincero, non ho dovuto andarmi a sfogliare libri di C per capirlo. Insomma, non era una di quelle cose nascoste e infide, era grosso come una casa: solo che sono stato preso dall'enfasi di andarmi a guardare l'IL generato, capire le differenze e così via, tanto da non accorgermi del misfatto.

Questo mio modo di procedere è lo spunto per la riflessione della domenica mattina.

Eccola qui.

A parte un po' di VB (versione 3, ve la ricordate ?) alla tenera età di 15 anni, la mia esperienza di programmatore è molto ... fresca. E molto caotica, anche. 3 anni fa, in 6 mesi circa, sono passato dall'ignoranza più assoluta a conoscere (questo conoscere è il tema della riflessione) il C , il C++, VB 6, Java e C++/MFC/VisualStudio6.

Tutto questo perchè ho seguito un corso che dava uno sbocco lavorativo.

Da allora, per 2 anni circa, ciò che imparavo veniva, in un modo o nell'altro, dall'esperienza di lavoro: mi chiedevano di fare un'interfaccia grafica che utilizzasse 2 oggetti COM, non conoscevo COM (ma zero assoluto !), e quindi mi mettevo a studiare COM. E così per SQL versione Oracle. Mi è capitato di dover sviluppare un'applicazione multi-threaded (ma semplice semplice, giusto un thread che scandisce una coda di lavoro), conoscevo a malapena cos'era un thread, e me lo sono studiato.

Questo andamento dei fatti ha i suoi pregi e si suoi difetti.

Il pregio è che, anche grazie alla discreta varietà delle cose che mi sono trovato a fare con il lavoro, ho avuto modo di imparare molto e molte cose differenti.

Il difetto è che, dato anche il poco tempo a disposizione, la mi preparazione è stata in molti casi frammentaria è, in effetti, un po' raffazzonata. Che so, dovevo fare un semplicissimo oggetto COM che andasse a leggersi dati da Oracle: mi davo un'occhiata a qualche articolo su COM, mi compravo un libro ed iniziavo a leggerlo, trovavo con grande soddisfazione i wizard di VisualStudio e via che l'oggetto COM è pronto.

"Che problema c'è ?", mi direte voi.

C'è che non è così che si imparano le cose, innanzitutto.

E poi c'è il rischio di credere di conoscere, ma di non conoscere per niente ! Giusto per sfoggiare la mia cultura filosofica, mi viene in mente quello che diceva Socrate: "L'uomo sapiente è quello che sa di non sapere". Però sto Socrate, mica scemo, no ?

Tutto questo per dire che gli errori banali, in qualsiasi campo, non si fanno più quando le proprie conoscenze sono abbastanza avanzate: per dire, io ho iniziato a non fare più errori algebrici quando studiavo le derivate, eppure l'algebra ho finito di studiarla anni prima.

Questo perchè l'esperienza aiuta a cementificare.

Mangiarsi libri per colazione può anche essere divertente (per chi ama questo tipo di cose), ma bisogna dare il tempo alle nozioni di penetrare nella testa, di diventare parte stabile del nostro bagaglio culturale.

Leggere una cosa, capirla e darla subito per scontata è pericoloso. A volte funziona, a volte no. E quando non funziona lascia un buco ... rischioso:  perchè pensiamo che il buco non ci sia, non guardiamo più per terra e alla prima occasione ci mettiamo il piede dentro e prendiamo delle facciate sul pavimento.

Iniziando a studiarmi .NET e dintorni, ho cercato di seguire un approccio più razionale e sistematico. E sono abbastanza soddisfatto di quello che sono riuscito a immagazzinare in meno di un anno di studio. Ma i problemi sono sempre in agguato, perchè puoi anche essere così bravo da conoscere tutte le istruzioni IL a menadito, ma se poi cadi su un errore stupido e non te ne accorgi, non è che tu faccia molta strada !

E qui chiudo. Con un consiglio per chi si avvicina al mondo della programmazione, anche se in effetti credo che sia valido un po' per tutti.

Se avete modo e tempo di farlo, cercate di assimilare bene le cose che studiate prima di buttare altra carne sul fuoco. Alla fine magari nello stesso lasso di tempo leggete la metà delle cose che avreste potuto, però alla fine quelle le avete imparate !