In azienda mi sono imbattuto in un libro molto interessante chiamato “The Pragmatic Programmer” della Addison-Wesley. Il libro e’ sostanzialmente una raccolta di Tip estremamente preziosi ottenuti tramite anni di esperienza diretta sul campo. L’obiettivo del libro e’ quello di far diventare uno sviluppatore piu’ efficace e piu’ produttivo.
In particolare mi sono imbattuto sul seguente tip:
“Don’t Program by Coincidence”
L’idea e’ quella di cercare di evitare di affidarsi a fortuna o successi casuali in favore di una programmazione piu’ attenta. Quando introduci del codice e scopri che qualcosa non funziona e non riesci a capire perche’ non funziona, questo potrebbe significare che forse tu non sapevi ancor prima della tua motifica perche’ il codice funzionava. Questa affermazione sembra banale ma non lo e’ affatto.
Come fare ad evitare tutto questo ?
- Essere sempre consapevoli di quello che si sta facendo
- Non scrivere codice ciecamente. Cercare di realizzare una applicazione che non comprendi completamente, o usare una tecnologia che non conosci e’ un invito a procedere in maniera incauta.
- Affidarsi a cose affidabili. Non dipendere da assunzioni o da codice di libreria non documentato. (se possibile)
- Documenta le tue assunzioni.
- Non testare giusto il tuo codice, ma testa anche le tue assunzioni
- Non essere schiavo della storia. Non permettere che il codice esistente detti il codice futuro. Tutto il codice puo’ essere sostituito tramite opportuno refactoring.
Ho scritto questo post perche’ mi sono reso conto che da quando ho iniziato a lavorare mi sta capitando troppo spesso di programmare by coincidence. Nel mio caso, il motivo ovviamente e’ banale. Mi sono ritrovato a lavorare su una grossa applicazione enterprise scritta in Java che utilizza il framework ExtJS come tecnologia client. Queste sono tutte tecnologie con cui non sono familiare e il cui apprendimento richiedera’ molto tempo. Anche se in futuro spero di lavorare in tecnologia .NET.
Quello che sto cercando di fare ora e’ riuscire a portare a termine i miei incarichi nel modo migliore possibile cercando di evitare il piu’ possibile di cadere in questo errore. Prima di modificare qualcosa devo cercare di capire (meglio che posso) come il codice funziona attualmente. Ovviamente nel tempo libero devo cercare di apprendere queste tecnologie nel modo piu’ veloce possibile, ma il tempo non basta mai.
E’ faticoso ed e’ solo l’inizio…
Consigli ?