In questo periodo mi faccio un bel po' di domande. Le ultime vicissitudini lavorative mi hanno portato a rendermi conto che devo ricalibrare le mie priorità, cosa che ovviamente ho già messo in pratica. Ricalibrare vuol dire anche capire cosa posso dare e quanto mi viene dato, mentre lavoro. E lavorare meno :)
Per cui, mentre lavoro ad un progetto seduto nella mia comoda poltrona e 2Pac canta allegramente i tempi che furono ed il progetto di cui sopra un po' comincia ad annoiarmi per limiti tecnici che non dipendono da me e che devono risolvermi altrimenti mi toccherà bere 5-6 tè stamattina, un po' di cose mi frullano nella testa.
Per prima cosa, ne parlavamo giusto con Stefano stamattina, forse questo lavoro è diventato troppo semplice. O meglio, nella testa delle gente è diventata semplicistica la concezione di questo lavoro.
Trascina, clicca, punta, ritrascina, copia, incolla. L'ho vista troppe volte come sequenza di operazioni e gli esiti, specie delle ultime due azioni, sappiamo tutti quali sono: danni.
Sempre per il progetto di cui sopra, ho dovuto utilizzare due servizi esterni messi a punto da altrettante aziende: assurdo come nel primo caso una semplice & in un flusso XML rompesse tutto e nel secondo, invece, vedessi l'errore di una pagina PHP (essì, l'interoperabilità...) direttamente a video.
Oggi, annus domini 2007, c'è ancora gente che se ne frega altamente di fare il proprio lavoro per bene. Bene vuol dire essenzialmente farlo nella maniera più semplice possibile: sviluppare accendendo il cervello, testare le modifiche che si fanno, andare oltre i test più facili e semplicistici, perchè gli utenti sono bastardi, nel senso migliore del termine, evitare regressione, evitare di lasciare voragini, come query che vanno a nozze con la SQL injection lasciate così perchè tanto è solo back office: ebbene, le insidie vengono sempre da dentro, più che da fuori...
Ho sempre pensato al mio lavoro come una cosa semplice da fare: è una sequenza di buone azioni da compiere, di regole minime che se un meccanico non osservasse quando ripara la vostra auto e dopo 2 km vi trovereste schiantati, non la prendereste affatto bene.
Mi sono fatto l'idea, anche parlando con le persone con cui ho il piacere di formare il circolo del Kapuziner (ogni martedì 2 kg di carne ed un po' di chiacchiere), che sia una sindrome diffusa dal fatto che ci sia purtroppo approssimazione, che porta alla semplicità (presunta) e quindi a danni, molti danni. E se è vero che non si ammazza nessuno, come farebbe un meccanico, di sicuro si fanno perdere soldi alle aziende per cui si lavora.
La triste realtà è che nessuno vuole fare le cose semplici, io lo vedo in tutti i campi del mio lavoro: dalla formazione, allo sviluppo, agli articoli che pubblichiamo.
E' emblematico che io mi sia rifiutato di fare un articolo introduttivo su ADO.NET per aspettare che lo facesse qualcuno (non mi piace occupare tutto solo perchè ho visibilità sui contenuti) e ci abbiamo messo 3 anni dall'uscita del .NET Framework per averlo. E' emblematico che non ci sia mai ressa per le sessioni di livello introduttivo (che io prendo volentieri, perchè trovo molto più stimolante insegnare a chi non sa, che a chi sa già...), che nessuno controlli i parametri di input in un metodo, che nessuno testi le modifiche fatte. Potrei continuare per ore ed ore.
Non è un problema di dimensioni, anche Microsoft nel suo "piccolo" fa queste cose: spesso scartano le soluzioni più semplici perchè non fa figo.
Morale: sento che troppo spesso c'è un rifiuto verso la semplicità, ma è quella la chiave per fare le cose per bene, perchè la complessità altro non è che tante cose semplici messe insieme. Peccato, abbiamo reso un lavoro semplice cattivo e mal percepito.
Questo tuo post è emblematico, non potrei essere più d'accordo. Ti pongo adesso il mio personalissimo punto di vista (un po' noioso forse).
Una premessa. Mi sono sempre interessato alla programmazione per hobby, da diversi anni quasi esclusivamente in ambito web. Pur essendo un hobby, ci ho studiato tanto ed ho fatto cose anche molto complesse (html,css,js,php,mysql,ajax), studiando le tecnologie e scrivendo tutto il codice da zero. Essendo sostanzialmente per hobby non ho mai avuto limiti di tempo, per cui il focus era sulla perfezione della soluzione.
Il mio lavoro di tutti i giorni è molto vicino alla programmazione, ma alla fine il risultato non è un software, ma un hardware. Il sorgente che produco usando un linguaggio particolare viene impresso nel silicio da una fonderia per farne una sorta di CPU personalizzata, su cui i programmatori fanno girare il software vero e proprio. In questo ambito le condizioni sono molto diverse dallo sviluppo del software tradizionale, perchè quando un sorgente viene rilasciato DEVE essere privo di errori, dati tempi e costi di una diffusione su silicio di una chip. Questa necessità ha portato due cose: una metodologia di sviluppo orientata alla validazione e l'esistenza di tools che coadiuvino questa metodologia. Per dare un'idea della situazione, il 5% del tempo viene speso nella scrittura e debug del codice, il restante 95% viene speso nella scrittura di test automatizzati che controllano e validano il codice in tutti i possibili casi. Ci sono tool che alla fine danno una misura di quanto i test siano coprenti, cioè si fanno girare i test (durano qualche settimana di ore macchina) ed il tool alla fine ti dice che ha coperto il 98% dei casi, cioè ha provato il 98% di tutte le possibili combinazioni di input e ramificazioni del codice. Questa metodologia di lavoro può sembrare assurda e snervante (come anche i test di regressione che citavi), ma personalmente la preferisco perchè mi permette di tenere tutto sotto controllo in modo sistematico.
Torno quindi alla tua affermazioni iniziale: realizzare software è diventato troppo semplice, o più precisamente è troppo semplice per chiunque (anche senza background o titoli) arrivare a fare qualcosa che si avvicina al 90% al prodotto finale ideale. Troppo semplice per troppe persone significa una "compressione" del mercato e dei tempi anche per i professionisti di alto livello, che spesso devono scendere a compromessi su qualità/prezzo per essere competitivi. Per questo un approccio sistematico e ragionata per il test e debug diventa sempre meno fattibile.
ummon wrote:
Torno quindi alla tua affermazioni iniziale: realizzare software è diventato troppo semplice, o più precisamente è troppo semplice per chiunque (anche senza background o titoli) arrivare a fare qualcosa che si avvicina al 90% al prodotto finale ideale.
il problema è che le cose che citi teoricamente ci sono anche per lo sviluppo web/client. è che se la gente pensa di essere Gesù sceso in terra e non mette in dubbio le proprie capacità, è difficile che utilizzi strumenti del genere, perchè pensa di programmare con la sola imposizione delle mani...
Troppo semplice per
troppe persone significa una "compressione" del mercato e dei tempi anche per i professionisti di alto livello, che spesso devono scendere a compromessi su qualità/prezzo per essere competitivi.
no, non mi lamentavo di questo, perchè per fortuna la qualità viene ancora percepita e pagata (anche se non viene ritenuta sempre necessaria, questo sì...). mi riferivo espressamente all'approssimazione regnate che c'è in giro. e mi spiace perchè poi alla fine ci rimette tutta la categoria...
Daniele, concordo pienamente con quanto espresso nel tuo Post, ma vorrei anche sottolineare il fatto che spesso ci complichiamo la vita da soli (io per primo):
quante volte nei miei progetti (chissà perchè) mi dimentico della filofia "KISS"
(Keep It Simple Stupid).
ciao
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


Daniele Bochicchio