Saturday, 25 June 2011

Discussione: metodi efficaci di apprendimento.

Ciao a tutti ragazzi,
sto leggendo il libro “Pragmatic Thinking and Learning” e mi sto soffermando su alcuni punti interessanti legati all’apprendimento.

In particolare io mi riferisco al nostro settore quindi all’apprendimento in ambito IT (tecnologia, design, architettura, metodologie, …).

Come sappiamo esistono differenti modi di apprendere:
  • Leggere libri
  • Realizzare un progetto personale
  • Apprendimento tramite esperienza in azienda
  • Apprendimento tramite corsi offerti dall’azienda
  • Partecipazione a sessioni tecniche e a community
  • Webcast
  • Podcast
  • Lettura di articoli / blog sul web
  • Mentoring
  • Gruppi di studio
Sicuramente tutti dobbiamo lavorare e quindi l’apprendimento tramite esperienza in azienda e’ abbastanza scontato ma a mio parere non e’ sufficiente per costruirsi una brillante carriera. Spesso in azienda sei costretto a compiere decisioni con una conoscenza incompleta mentre a me spesso piace un approccio graduale all’apprendimento che al lavoro non e’ quasi mai praticabile. Inoltre al lavoro non utilizzerai mai tutte le tecnologie ed e’ quindi necessario un lavoro esterno di compensazione e di espansione delle proprie conoscenze. Nonostante la partecipazione a community, il guardare webcast la mia fonte preferita di apprendimento sono i libri. Il motivo principale e’ che dietro al libro c’e’ un lavoro immane di raccolta materiale e riorganizzazione che e’ estremamente utile per il lettore che si ritrova una esposizione dei contenuti in maniera lineare e chiara. Tuttavia e’ noto che leggere richiede tempo e non e’ la forma preferita di apprendimento per l’essere umano che spesso impara piu’ velocemente imitando e osservando invece che leggendo.

Ci sono tantissimi professionisti che stimo e rispetto (e molti sono qui su ugi) con un bagaglio di competenza tecnica immenso che spazia campi di applicazioni diversi e sorge spontanea la domanda:

Qual e’ il vostro modo efficace di apprendere?

Come e’ evoluto nel corso degli anni?


Una classica risposta e’ con la pratica! Si e’ vero, capisco che la pratica e’ la chiave ma qui entra in gioco il fattore tempo.

Quanto tempo extra-lavoro dedichi all’apprendimento?


Io personalmente ne dedico molto in quanto sono estremamente appassionato ma misuro che i progressi non sono rapidi come vorrei.

Il mio manager dice che e’ solo una questione di esperienza ma non condivido la sua affermazione. Voi?

Condividete la vostra esperienza perfavore, penso che possa nascere una discussione interessante.


Per concludere vorrei riportare una frase significativa del libro:

“There's always going to be a new technology or a new version of an existing technology to be learned. The technology itselft isn't as important; it's the constant learning that counts."

Sunday, 27 February 2011

Coding under pressure with TDD/BDD – Fantastica giornata

Ieri ho partecipato ad un originale evento open-space su TDD/BDD a Cambridge organizzato da Alan Hemmings e guidato da Alan Dean, il Chairman di ALT.NET UK nonche’ l’inventore degli Open Spaces Coding Days.

E’ stato davvero un fantastico evento e voglio condividere con voi la giornata.

Luogo
L’evento si e’ tenuto all’interno di una piccola azienda agile chiamate “The Agile Workshop”. Ringrazio Ronnie Barker e Stephen Oakman per l’accogliente ospitalita’ e la condivisione della loro profonda esperienza.

La mattina – Discussioni aperte
Prima di tutto a turno ci siamo presentati e abbiamo espresso le nostre aspettative per l’evento che si stava per svolgere. In questo modo Alan ha creato sulla lavagna un elenco puntato dei temi principali di discussione. Fatto questo abbiamo analizzato i vari punti e li abbiamo raggruppati in sezioni che alla fine erano praticamente due. Abbiamo quindi formato due gruppi di discussione indipendenti cercando di rispondere e condividere le proprie esperienze sui punti individuati. Fatto questo poi abbiamo unito tutti i gruppi e tratto alcune considerazioni finali. A turno ci e’ stato chiesto quale fossero le cose portate a casa da questa discussione.

Pranzo
La discussione ovviamente e’ continuata a pranzo in un pub inglese.

Il pomeriggio – Laboratorio
I temi di discussioni e una votazione preliminare hanno fatto emergere l’interesse di creare due laboratori paralleli:
  • Laboratorio base di TDD
  • Laboratorio avanzato di TDD/BDD
Sono stati nominati due persone per guidare ciascuno dei laboratori.
Io ho partecipato al laboratorio di base su TDD guidato da Alan Dean dove abbiamo svolto in pair programming un kata tratto dalla lista di eserci TDD per principianti: http://sites.google.com/site/tddproblems/

Il giudizio complessivo della giornata e’ veramente ottimo e mi ha permesso di conoscere molti appassionati programmatori inglesi allargando la mia rete di contatti professionali.

Sunday, 6 February 2011

[Books] Coders at Work - Jamie Zawinski

Il libro Coders at Work contiene interessanti interviste a famosi programmatori.

In questo post voglio scrivere qualche commento all’intervista a Jamie Zawinski:

Cosa condivido:

  • Il modo migliore per immergersi in un pezzo di codice e’ prendere un task che si vuole realizzare e provare a farlo.
  • Se vuoi che il prodotto sia realmente cross-platform, devi rilasciarlo per tutte le piattaforme simultaneamente. Il risultato di un porting e’ un prodotto schifoso sulla seconda piattaforma.
  • La caratteristica che rende il codice piu’ facile da leggere sono i commenti. Scrivere le assunzioni e cosa fa un certo pezzo di codice.
  • Non essere spaventato dalla tua ignoranza. Se tu non capisci come qualcosa funziona, chiedi a qualcuno che lo sa. Non conoscere qualcosa non significa che sei stupido, semplicemente significa che tu non la conosci ancora.
  • Considera persone laureate che hanno utilizzato Java e mai C/C++ bizzarro e sbagliato.
  • Un aspetto chiave di un programmatore deve essere la curiosita’, voler sapere come le cose funzionano “under the hood”
  • Una importante capacita’ e’ essere capace di esplorare il codice scritto da qualcun altro e come utilizzarlo/modificarlo.
Cosa non condivido:
  • Gli Unit tests non sono critici. Se non ci sono unit test il cliente non si lamenta.
  • Il libro “Design Patterns” fa’ schifo. E’ giusto programmazione via taglia e incolla.
Insegnamenti e spunti per il futuro:
Ho meno di un anno di esperienza commerciale nello scrivere software e fino ad allora non avevo mai messo mano a software scritto da altre persone al di fuori di me. La prima grossa difficolta’ che ho provato dal primo giorno di lavoro e’ proprio quella di avere davanti una marea di codice gia’ scritto e doverlo capire e modificare. Credo sia abbastanza facile farsi prendere dal panico e imparare a farlo e’ veramente di una importanza cruciale nei nostri giorni dove e’ praticamente impossibile realizzare software di una certa rilevanza da soli chiusi in camera. Sembra proprio che non ci siano libri che trattino questo aspetto in una maniera sufficientemente chiara. D’altronde e’ un tema estremamente generico e l’esperienza e’ completamente diversa da software a software e da team a team. Una cosa pero’ ho capito dalla mia esperienza. Ho avuto modo di lavorare su codice legacy, senza test e senza una forte struttura e ho avuto modo di lavorare su codice veramente di ottima qualita’, ben commentato, ricco di test e con una struttura e dipendenze chiare. Inutile dirvi quanto l’immersione nel secondo progetto sia stata decisamente piu’ piacevole ed agile. Scrivere sofware di qualita’ ha molti vantaggi e questo e’ senz’altro uno di quelli.
Ho sempre avuto un approccio molto accademico alla programmazione: acquistare un libro, leggere gli esempi di codice, provarli e imparare creando qualche demo. Tuttavia questo approccio e’ particolarmente lento e forse per certi versi anche un po’ noioso. Ho sempre avuto un po’ di paura nel prendere e leggere codice scritto da altri, questo e’ stato il mio principale freno. Mi piace una introduzione sequenziale ad una tecnologia, con esempi di complessita’ crescenti che aiutino a comprenderla a fondo (appunto un approccio accademico). Tuttavia mi rendo conto che la fuori (anche in questa community) ci sono persone che imparano estremamente in fretta e forse uno dei motivi e’ proprio perche’ leggono (e scrivono) molto codice. Grazie a sofware open source abbiamo a disposizione una valanga di codice da cui trarre spunto e riflettere. Si tratta solo di iniziare a farlo sul serio…
Sito web del libro:
http://codersatwork.com/

[Books] Coders at Work - Brad Fitzpatrick

Il libro Coders at Work contiene interessanti interviste a famosi programmatori.

In questo post voglio scrivere qualche commento all’intervista a Brad Fitzpatrick.

Cosa condivido:
  • Io giusto assumo che qualcun altro non capira’ alcune delle invarianti che ho. Cosi’ praticamente mi assicuro di avere un opporunto test.
  • Tipizzazione statica e controlli a tempo di compilazione sono di grande importanza.
  • C++ ha una sintassi terribile e totalmente inconsistente e i messaggi di errore, almeno da GCC sono ridicoli. Puoi ottenre quaranta pagine di errori semplicemente perche’ hai dimenticato un punto e virgola.
  • Conosco persone molto intelligenti che conoscono solo Java. Io penso che e’ realmente importante conoscere l’intero stack anche se tu non operi all’interno dell’intero stack.
  • Un consiglio ai programmatori:
    • Sempre provare a fare qualcosa un po’ piu’ difficile, fuori dal quello che puoi pensare di realizzare.
    • Leggere codice. Non essere spaventato dal farlo. Dopo un po’ inizierai a vedere “pattern” nel codice scritto dagli altri.
  • E’ importantissimo avere un consistente stile di codifica all’interno del team/progetto che sia documentato e rispettato
  • Penso che la “pair programming” sia divertente. E’ ottima per molte cose e forza a non annoiarsi.
  • Non penso che il codice debba essere posseduto. Il codice e’ scritto dal team nella sua interezza e le revisioni di codice sono importantissime per mantenere alta la sua qualita’.
  • Un grande programmatore ad un colloquio si riconosce anche da cose che ha fatto nel tempo libero senza avere obblighi. Questo dimostra passione.
  • Non pensare di conoscere un algoritmo senza averlo mai scritto personalmente. Scrivere un algoritmo ti forza a capire tutti i casi limite e quindi lo imparari veramente
  • Le persone non vogliono scaricare programmi ora che esiste il web.
  • Essere personalmente coinvolti in community permette di crescere e incontrare persone di grande rispetto.
  • Non fidarti ciecamente del codice scritto da terzi o della documentazione. Prima scrivi un test che usa le funzioni che intendi usare per assicurarti che funzionino.
  • E’ importante pensare come uno scienziato. Avere pazienza e provare a capire la casa principale delle cose. Impara a scrivere le cose in modo incrementale cosi che in ogni fase tu possa verificarle.
  • Puo’ essere utile qualche volta scrivere qualcosa in un linguaggio nuovo e con cui non sei a tuo agio in modo da migliorare come programmatore.
  • Ricordati che in un team tutti dipendono da tutti. La collaborazione e’ fondamentale.
Insegnamenti e spunti per il futuro:
Condivito praticamente tutti gli aspetti principali sollevati da Brad.
Anche lui come Jamie Zawinsky riflette sull’importanza di imparare a leggere il codice scritto da altri, qualcosa sui devo assolutamente lavorare.

Sito web del libro:
http://codersatwork.com/

Tuesday, 25 January 2011

Il mio anno 2010 e i miei piani per il futuro.

Ciao a tutti ragazzi.
Con estremo ritardo voglio pubblicare anch’io la mia lista di cose fatte nel 2010.
Questo anno e’ stato veramente intenso e puo’ essere considerato come un anno di svolta nella mia vita.
E’ praticamente l’anno in cui ho iniziato a lavorare e a diventare indipendente dai miei genitori.

Cosa ho fatto nel 2010 (cercando di mantenere un certo ordine temporale):
  • Sono rientrato dall’Italia dopo le vacanze natalizie.
  • Ho preso un appartamento in condivisione a Londra.
  • Ho spostato la mia roba dalla casa famiglia in cui ero durante il mio corso di inglese nel nuovo appartamento.
  • Ho iniziato a cercare lavoro e a prepararmi ai colloqui.
  • Una macchinetta a Londra mi ha mangiato la carta postepay e ho dovuto sopravvivere con pochi contanti in attesa di aiuto dalla madre patria (i miei genitori).
  • Ho aperto un conto corrente bancario in UK.
  • Ho fatto due colloqui uno a Londra e uno a Cambridge ma non sono stato assunto.
  • Ho fatto un altro colloquio a Cambridge e mi ha assunto Autonomy.
  • Sono andato sulla ruota panoramica di Londra a San Valentino con la mia ragazza e ho festeggiato un anno insieme il 21 Marzo.
  • Ho vissuto due settimane in una casa temporanea offerta da Autonomy con un altro collega.
  • Il 15 Febbraio ho iniziato a lavorare ad Autonomy come Software Developer.
  • Ho cercato e trovato una casa in condivisione a Cambridge e quindi nuovo trasloco.
  • Ho avuto le mie soddisfazioni in Autonomy entro i miei primi tre mesi come spiegato in un precedente post.
  • Ho fatto l’esame FCE della Cambridge con un risultato di 58 su 100 e quindi non sono passato (minimo 60).
  • Ho fatto l’esame del Mensa UK ma non sono passato. Da riprovare quest’anno ma in Italia.
  • Ho aperto il mio blog UgiDotNet in inglese
  • Non essendo particolarmente soddisfatto in Autonomy ho iniziato a cercare altrove e a prepararmi di nuovo ai colloqui. Un grazie particolare ad Alessio Marziali per i suoi suggerimenti e ovviamente alla mia ragazza e alla mia famiglia per avermi sopportato durante questo periodo molto stressante.
  • Mi sono iscritto al corso di laurea magistrale in Matematica all’universita’ di Pisa
  • Ho fatto una operazione chirurgica per rimuovere tutti e quattro i denti del giudizio.
  • Ho vinto la competizione della battaglia navale organizzata da Luca Minudel insieme al mio ex-collega e amico Valerio Vitacolonna.
  • Ho acquistato un Windows Phone 7 (LG Optimus 7) il giorno del lancio
  • Ho partecipato a una conferenza del massimo esperto al mondo di cibernetica: Kevin Warwick
  • Ho fatto due collqui per grosse aziende informatiche a Dublino e a Londra ma non sono andati bene.
  • Ho fatto e superato il colloquio telefonico e in sede per Citrix UK in Cambourne (vicino Cambridge) Sorriso
  • Mi sono licenziato da Autonomy.
  • Ho iniziato a lavorare per Citrix UK il 13 Dicembre come Software Development Engineer con un notevole aumento di stipendio.
  • Ho quindi affittato una casa (non fornita) tutta per me su due piani con cucina, sala, due camere, bagno e giardino. Terzo trasloco… Triste
  • Ho comprato da IKEA in Londra divano, tavolo, sedie, mobile TV, attaccapanni, letto, due cassettiere, libreria e altro.
  • Ho dormito in terra sulla moquette in attesa della consegna IKEA (rimandata due volte per neve).
  • Sono rientrato in Italia per passare il natale in famiglia.
  • Ho smesso completamente di bere Coca-Cola e bibite in generale in quanto ne abusavo.
Visto che ci sono completo l’opera dicendo cosa ho fatto nelle prime tre settimane del 2011:
  • Ho dormito sul materasso in terra per piu’ di una settimana in attesa dell’installazione IKEA (rimandata una volta).
  • Ho fatto montare tutti i mobili IKEA da un tecnico professionista.
  • Ho comprato il frigorifero e la lavatrice.
  • Ho comprato uno schermo 42 pollici al plasma.
  • Ho comprato la XBOX con KINECT e due controller wireless Sorriso
  • Ho sistemato tutte le bollette di casa.
  • Ho comprato la bici nuova.
  • Ho ottenuto la certificazione “CCSP (Citrix Certified Sales Professional) Virtual Computing”.
  • Il 20 Gennario mi hanno attivato la linea telefonica ed Internet. E questo e’ il motivo principale per cui scrivo solo adesso questo post.
  • Il mio amico Stefano D’Onofrio e’ venuto a trovarmi e abbiamo passato un weekend di puro divertimento a Cambridge e a Londra.
Tutto sommato il 2010 e’ stato un anno che mi ha regalato molte emozioni e mi ha insegnato molte cose della vita. Dal punto di vista tecnico tuttavia non sono cresciuto abbastanza soprattutto perche’ in Autonomy non utilizzavo le tecnologie Microsoft che amo. Ora finalmente ho trovato una azienda veramente eccezionale che utilizza le tecnologie che amo, dove le persone sono molto in gamba. L’ambiente estremamente collaborativo con forte comunicazione a tutti i livelli, l’orario flessibile e la condivisione della visione aziendale con tutti i dipendenti rende questa azienda ottima dal mio punto di vista. Spero di crescere molto e di farmi valere!!!
Per i curiosi sono entrato nel team dei “Delivery Services”. Mi occupo di sviluppare la parte di middleware tra il client (Citrix Receiver) e la parte server/data center/cloud (dominata da XenApp e XenDesktop ma anche App-V). Seguiranno in futuro post sulle mie esperienze. Per chi di voi che non conosce Citrix puo’ farsi una idea dei suoi prodotti relativi al mondo della virtualizzazione nel canale video Citrix TV. In particolare consiglio i video della conferenza Synergy Berlin 2010.
Ora che mi sono sistemato, ho una casa e un ottimo lavoro come Software Developmente Engineer posso finalmente concentrarmi sui contenuti e iniziare a crescere professionalmente in tutti i sensi.

Ecco un breve elenco delle cose che voglio fare/ottenere nel 2011:
  • Dedicarmi alla mia salute iniziando ad andare regolarmente in palestra.
  • Prendere almeno una certificazione Microsoft MCTS.
  • Prendere almeno una certificazione come Basic Administrator di un prodotto Citrix. Probabilmente XenApp.
  • Riprovare e possibilmente superare la prova del Mensa Italia.
  • Riprovare e possibilmente superare un esame di certificazione della lingua.
  • Superare un esame di matematica.
  • Lanciarmi con il paracadute.
  • Scrivere articoli per DotNetToscana e cercare di aiutare la community a crescere.
  • Scrivere decisamente di piu’ sul mio blog che nel 2010 e’ stato particolarmente trascurato.
  • Iniziare a fare brevi vacanze per conoscere il mondo (a partire dall’Europa) insieme ad amici e fidanzata.
  • Aggiornare e creare una versione localizzata e piu’ professionale del mio sito web www.angellaa.it
Vorrei concludere con un post a cui tengo particolarmente:
"An investment in knowledge always pays the best interest", Benjamin Franklin
Ciao a tutti

Thursday, 28 October 2010

[BOOKS] – Ingegneria del codice, Seconda Edizione

Tutti quelli che mi conoscono sanno quanto mi piace leggere e imparare cose nuove. In particolare adoro leggere libri tecnici per aumentare le mie competenze e imparare dall’esperienza di tanti altri che mi hanno preceduto. Per questo motivo ho deciso che ogni volta che terminero’ la lettura di un libro scrivero’ un post in cui racchiudero’ l’essenza del libro e le mie considerazioni. Lo scopo e’ riassumere il contenuto, evidenziando i punti principali e piu’ importanti. Spero che possa anche accendersi un dibattito e un confronto costruttivo sui contenuti con le persone che hanno letto il libro o quelle che desiderano acquistarlo.
Ho deciso di inaugurare questa sezione del mio blog con un testo classico che ho recentemente finito di leggere:
Ingegneria del Codice, Seconda Edizione” di Steve McConnell


Questo libro mi e’ stato regalato da alcuni amici dell’universita’ di Pisa per la mia laurea triennale nel 2006. Il libro e’ in italiano. La traduzione non e’ particolarmente brillante, quindi per coloro che avessero intenzione di acquistarlo consiglio il testo in lingua inglese:
“Code Complete, Second Edition”
Il libro e’ un mattone di 900 pagine che affronta a 360 gradi tutto cio’ che riguarda la costruzione del software. Esso presenta una serie di pratiche di programmazione che servono a mantenere sotto controllo, a manutenere e a modificare grossi e complessi progetti. Il libro e’ una raccolta di innumerevoli fonti integrate con anni di esperienza professionale. Dal mio punto di vista, il suo valore e’ altissimo e molto probabilmente dovro’ leggerlo una seconda volta, magari in inglese.
Uno degli aspetti interessanti del libro e’ il numero di ricerche statistice che vengono riportate per supportare le tesi sostenute.
Ecco alcune frasi significative estratte dal testo:
  • Il prodotto della costruzione, il codice sorgente, e’ spesso la sola descrizione accurata del software. Di conseguenza, e’ imperativo che il codice sorgente sia della piu’ alta qualita’ possibile.
  • I rischi di progetto piu’ comuni nello sviluppo del software sono i prerequisiti scarsi e una scarsa pianificazione di progetto
  • Parte del lavoro di dipendente tecnico consiste nell’educare il personale non tecnico che vi circonda sul processo di sviluppo
  • In generale, il principio e’ trovare un errore nel momento il piu’ vicino possibile a quando e’ stato commesso
  • Il primo prerequisito che si deve soddisfare prima di iniziare la costruzione e’ una formulazione chiara del problema che si vuole risolvere: la mission del prodotto
  • I prerequisiti stabili rappresentano il sacro Graal dello sviluppo del software
  • I programmatori che non dimenticano di considerare l’impatto business delle loro decisioni valgono tanto ora quanto pesano
  • Una delle maggiori sfide che si presenta a un architetto software e’ rendere l’architettura abbastanza flessibile da favorire le probabili modifiche
  • Prima che la costruzione inizi, specificate le convenzioni di programmazione che utilizzerete.
  • I tool di programmazione utilizzati non devono determinare come si interpreta la programmazione
  • Il design e’ l’attivita’ che collega i prerequisiti alla codifica e al debugging.
  • L’imperativo tecnico principale del software e’ gestire la complessita’
  • Abituatevi a chiedervi “Cosa devo nascondere?”. Resterete sorpresi dal come molti difficili problemi di design si dissolveranno davanti ai vostri occhi
  • Talvolta non si puo’ realmente sapere se un design funzionera’ finche’ non si comprendono meglio alcuni dettagli di implementazione.
  • Il design e’ euristico. Una adesione dogmatica a qualsiasi singola metodologia danneggia la creativita’ e danneggia i programmi
  • I programmatori nel corso dell’esistenza di un sistema spendono molto piu’ tempo a leggere il codice che a scriverlo
  • Le revisioni rappresentano un meccanismo importante per fornire ai programmatori un feedback sul loro codice
  • La scrittura dei test case prima del codice richiede la stessa quantita’ di tempo e impegno della scrittura dei test case dopo il codice, ma accorcia i cicli difetto-rilevazione-debug-correzione
  • Neanche l’esperienza aiuta molto con l’ottimizzazione. L’esperienza di una persona puo’ essere stata acquisita su una macchina, un linguaggio o un compilatore ormai datato: se cambia uno di questi aspetti, tutte le certezze sono errate. Non si puo’ mai essere certi sull’effetto di una ottimizzazione finche’ non si misura l’effetto.
  • Piu’ cervelli bisogna coordinare, piu’ documentazione formale e’ necessaria per coordinarli
  • Utilizzare il sistema di benefit della propria azienda per incentivare le buone pratiche di codifica
  • Gestire un progetto software e’ una delle imprese piu’ eccezionali del ventunesimo secolo, e stimare le dimensioni di un progetto e l’impegno richiesto per terminarlo e’ uno degli aspetti piu’ impegnativi della gestione di un progetto software
  • I buoni programmatori tendono a raggrupparsi
  • I manager dei progetti di programmazione non sono sempre consapevoli che certi aspetti della programmazione sono questioni di religione
  • Nello sviluppo del software, i manager non tecnici sono comuni, come lo sono i manager che hanno esperienza tecnica ma che e’ obsoleta di 10 anni. I manager tecnicamente competenti, e tecnicamente aggiornati sono rari. Se si lavora con uno di essi, fate di tutto per mantenere il vostro lavoro. E’ un piacere insolito.
  • La soddisfazione visuale e intellettuale del codice ben formattato e’ un piacere che pochi non programmatori possono apprezzare
  • Il Teorema Fondamentale della Formattazione dice che una buona disposizione visuale mostra la struttura logica di un programma. Se una tecnica mostra meglio la struttura e un’altra conferisce un aspetto migliore, utilizzare quella che mostra meglio la struttura
  • Molti aspetti del layout sono aspetti religiosi. Cercate di separare le preferenze di obiettivo da quelle soggettive.
  • I commenti inadeguati sono peggio di nessun commento
  • Commentare il codice complicato e’ esattamente l’approccio errato da seguire. Non documentare il codice pessimo: riscriverlo.

Una cosa interessante che ho scoperto da questo libro e’ che il mio stile di codifica pur essendo esteticamente valido viola quello che l’autore chiama il Teorema Fondamentale della Formattazione. In pratica io preferisco mettere la prima parentesi di un blocco nella riga successiva. Lo trovo estremamente leggibile anche se talvolta porta ad un aumento del numero di linee di codice.

Come dice Steve: I buoni programmatori devono essere di larghe vedute sulle proprie pratiche di layout e accettare le pratiche che si sono dimostrate migliori di quelle a cui sono abituati, anche se adattarsi a un nuovo metodo comporta un disagio iniziale.

I motivi per cui questo approccio e’ sconsigliato sono:
  • Begin e End (le parentesi) non fanno parte del costrutto di controllo, ma non fanno neanche parte della istruzione seguente
Onestamente tuttavia non lo trovo un motivo sufficiente per farmi cambiare il mio stile di formattazione dei blocchi. Sarei curioso di sapere il vostro. Qual e’ ?
Altre frasi:
  • Se siente un ingegnere del software, il materiale di base di costruzione e’ intelletto umano e il vostro strumento primario siete voi. Piuttosto che progettare una struttura fino all’ultimo dettaglio e poi passare i disegni a qualcun altro per la costruzione, sapete che dopo aver progettato un blocco di software fino all’ultimo dettaglio, e’ fatta. L’intero lavoro della programmazione e’ realizzare castelli in aria: e’ una delle attivita’ piu’ puramente mentali che si possa fare.
  • Se volete essere validi, e’ vostra la responsabilita’ di rendervi tali. E’ una questione di carattere personale.
  • Nello sviluppo di un ottimo programmatore la curiosita’ sugli argomenti tecnici deve essere una priorita’.
  • Un modo particolarmente valido per apprendere la programmazione e’ studiare il lavoro di ottimi programmatori.
  • Alcuni programmatori creativi vedono la disciplina degli standard e le convenzioni come qualcosa di asfissiante per la creativita’. E’ vero il contrario.
  • Dijkstra ha costantemente sottolineato il messaggio che il compito essenziale della programmazione e’ padroneggiare l’enorme complessita’ della scienza dei computer.
  • Per sperimentare efficacemente, si deve essere disposti a modificare le proprie opinioni in base ai risultati dell’esperimento
Il libro e’ una vera miniera di consigli e linee guida. Tuttavia e’ solamente un punto di partenza in quanto vengono elencate una raccolta sterminata di ulteriori libri/articoli/fonti su cui approfondire ed espandere gli argomenti trattati. Un intero capito e’ dedicato a questo scopo.


Wednesday, 25 August 2010

The first program I wrote !

I entered in the fantastic world of programming when I was 9 years old.

My father give me a Casio graphical/programmable calculator as a present. It was exactly a FX-7400 G.

Quick Specifications:
  • Maximum of 26 variables (alphabet letters)
  • 13-character x 6-line display
  • 7 Kbytes of memory


If you ask me what is the first program that I have created the right answer is that I simply copied the first example in the manual.

This is the first program I wrote, and I’m writing this post just to share my enthusiasm in reading this again:



This is the beginning of my career in the computer science field :)

Sunday, 6 June 2010

BOOKS - The Art of Happiness

Few minutes ago, I finished to read the Dalai Lama book: “The Art of Happiness”.



I truly think this is a valuable book to understand the real value of the human life. This is a book that force you to reflect deeply about yourself and your relations with all human beings.

The book is divided in 5 sections.





I report some sentences that, for me, are the most significant:
  • THE PURPOSE OF LIFE
    • The very purpose of life is to seek happiness.
    • Happy people are generally found to be more sociable, flexible, and creative and are able to tolerate life’s daily frustrations more easily than unhappy people. And, most important, they are found to be more loving and forgiving than unhappy people.
    • Happiness is determined more by one’s state of mind than by external events.
    • Happiness can be achieved through training the mind.
    • Our feelings of contentment are strongly influenced by our tendency to compare. We can increase our feeling of life satisfaction by comparing ourselves to those who are less fortunate than us and by reflecting on all things we have.
    • The greater the level of calmness of our mind, the greater our peace of mind, the greater our ability to enjoy and joyful life
    • The demarcation between a positive and a negative desire or action is not whether it gives you a immediate feeling of satisfaction but whether it ultimately results in positive or negative consequences.
    • Is not to have what we want but rather to want and appreciate what we have.
    • Sometimes people confuse happiness with pleasure. True happiness relates more to the mind and heart. Happiness that depends mainly on physical pleasure is unstable.
    • Framing any decision we face by asking ourselves: “Will it bring me happiness?
    • The first step in seeking happiness is learning. We first have to learn how negative emotions and behaviours are harmful to us and how positive emotions are helpful.
    • The proper utilization of our intelligence and knowledge is to effect changes from within to develop a good heart.
    • It is still my firm conviction that human nature is essentially compassionate, gentle. That is the predominant feature of human nature.
    • When we combine a warm heart with knowledge and education, we can learn to respect other’s views and other’s rights.
    • Scientists are discovering that those who lack close social ties seem to suffer from poor health, higher levels of unhappiness, and a greater vulnerability to stress

  • HUMAN WARMTH AND COMPASSION
    • Once you accept the fact that compassion is not something childish or sentimental, once you realize that compassion is something really worthwhile, realize it’s deeper value, then you immediate develop an attraction towards it, a willingness to cultivate it.
    • There is a widespread notion in our culture that deep intimacy is best achieved within the context of a passionate romantic relationship. This can be a profoundly limiting viewpoint, cutting us off from other potential sources of intimacy, and the cause of much misery and unhappiness when that Special Someone isn’t there.
    • Intimacy is based on a willingness to open ourselves to many others, to family, friends, and even strangers, forming a genuine and deep bonds based on our common humanity.
    • Empathy is an important factor. The ability to appreciate another’s suffering.
    • If you are having some difficulties, it’s extremely helpful to be able to try to put yourself in the other person’s place and see how you would react to the situation.
    • We are all born in the same way, and we all die. All of us want happiness and do not want to suffer. Relating to others on that level makes it much easier to exchange and communicate with one another.
    • Married people are happier and more satisfied with life than single or widowed people, or especially compared to divorced or separated people.
    • Compassion can be roughly defined in terms of a state of mind that is nonviolent, non harming, and nonaggressive. It is a mental attitude based on the wish for others to be free of their suffering and is associated with a sense of commitment, responsibility, and respect towards the other.
    • Positive states of mind can improve our physical health.

  • TRANSFORMING SUFFERING
    • As long as we view suffering as an unnatural state, an abnormal condition that we fear, avoid, and reject, we will never uproot the causes of suffering and begin to live a happier life.
    • We tend to take small things too seriously, and blow them up out of proportion, while at the same time we often remain indifferent to the really important things.
    • As a product of an imperfect world, all of us are imperfect. Every one of us has one some wrong.
    • The acceptance of change can be an important factor in reducing a large measure of our self-created suffering.
    • One must understand that every phenomena, every event, has different aspects. Everything is of a relative nature.
    • You might reflect on the fact that when you are really angry at someone you tend to perceive them as having 100 percent negative qualities. The tendency to see someone as completely negative is due to your own perception based on your own mental projection, rather than the true nature of that individual.
    • The enemy is the necessary condition for practicing patience.
    • A balanced and skilful approach to life, taking care to avoid extremes, becomes a very important factor in conducting one’s everyday existence.
    • The vulnerability we experience in the midst of our suffering can open us and deepen our connection with others
    • We convert pain into suffering in the mind. It is our suffering that is the most basic element that we share with others, the factor that unifies us with all living creatures.

  • OVERCOMING OBSTACLES
    • Learning and education are important because they help one develop conviction of the need to change and help increase one’s commitment. This conviction to change than develops into determination. Next, one transforms determination into action – the strong determination to change enables one to make a sustained effort to implement the actual changes. The final factor of effort is critical.
    • You have to be always aware of the destructive effects of the negative behaviour.
    • Genuine change does not happen overnight.
    • Numerous surveys have conclusively found that higher levels of education have a positive correlation with better health and a longer life, and even protect an individual from depression.
    • Through proper training we can gradually reduce our negative emotions and increase positive states of mind such as love, compassion, and forgiveness.
    • We need to actively cultivate the antidotes to hatred: patience and tolerance.
    • An end result, or a product of patience and tolerance, is forgiveness. When you are truly patient and tolerant, then forgiveness comes naturally.
    • Working on improving our physical health through proper diet and exercise can be useful to reduce anxiety and stress.
    • If the situation or problem is such that it can be remedied, then there is no need to worry about it. Alternatively, if there is no way out, no solution, no possibility of resolution, then there is also no point in being worried about it, because you can’t do anything about it anyway.
    • Sincere motivation acts as an antidote to reduce fear and anxiety.
    • A healthy sense of self-confidence is a critical factor in achieving our goals.
    • The more honest you are, the more self-confident you will be.
    • Love is a genuine wish for someone’s happiness.

  • CLOSING REFLECTIONS ON LIVING A SPIRITUAL LIFE
    • In helping us understand the true meaning of spirituality is important to distinguish between spirituality and religion.
    • True spirituality is a mental attitude that you can practice at any time.
    • Independent researchers have found that religious people report feeling happy and satisfied with life more often than non-religious people.
    • It is important to respect the rights of others. We must to learn to respect all there major religion traditions.

I strongly recommend to read this book.