me, myself and I1999: io, il mio computer, e le cose da fare (ed imparare a fare…)
Versioning? Che roba è?!
Qualche zip di backup basta e avanza…
2
Aprés moi, le diluge!Tutto sotto controllo
Nessun conflitto, nessun problema
Il codice è mio e me lo gestisco io
3
Il mio primo TeamNuovi arrivi
Si lavora bene in team!
Tu fai le tue cose, io faccio le mie…
Collaborazione? Sì
Cooperazione? No (le due parole non sono esattamente sinonimi, poi ne riparliamo...)
4
Ho deciso, farò il programmatoreMi piace l’insegnamento
La scuola (italiana) ed i suoi concorsi un po’ meno
Un anno interlocutorio, con un paio di lavori poco significativi
Poi il grande salto: vengo assunto da una vera software house!
5
Si inizia a fare sul serioGestionale (COBOL) per farmacisti, up-and-running dal 1984
8000+ farmacie (50%+ del mercato!)
4/5x utilizzatori
Se scazzi qualcosa non è così immediato rimediare...
6
Dijkstra e Il COBOL“The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.”
Edsger W. Dijkstra8
“Amazing” Grace Hopper➔Programmed Mark I in 1944
➔Invented 1st compiler
➔Realized one of the first machine indipendent programming language
➔Coined the term “bug”
➔Admiral of the US Navy
Only joked for inventing COBOL...
See: http://eniacprogrammers.org9
I “veci” Cobolisti e la precisioneLoro: cartella condivisa in rete
Ognuno “tocca” a turno i file sorgente che deve, senza pestarsi i piedi
Incredibilmente… FUNZIONA! :O
10
I “giovani programmatori d’oggi”Io invece se posso combinare un casino, lo combino…
Devo trovare qualcosa in grado di salvarmi da me stesso
11
Subversion: da soloFinché lo usi da solo, tutto ok
Figo poter navigare la storia delle tue modifiche!
Ok i tag per le release
Il diff con la precedente versione ora è più pratico!
13
Una discarica di codice sorgenteFaccio cose, ed ogni tot scarico quanto prodotto sul server
Il commit delle 18:00
Sto versionando? Mah, non mi sembra granché diverso da prima
14
Subversion e la NON cooperazioneProgetti “condivisi”, ma ci si lavora uno alla volta
No cooperazione
Versione 2.0 del team a scuola: ognuno lavora sulle sue cose
Perché?
15
Subversion e gli effetti dell’updateLavoro finito, devi committare
Commit rifiutato, devi fare update...
Una strage…
Subversion non consente di separare l’azione di commit da quella di integrazione delle modifiche altrui
17
Subversion e la paura dell’updateAlla fine l’update diventa una cosa che ti spaventa, che hai paura a fare
Quando “funziona” al primo colpo è quasi un evento!
(anche se comunque la colpa non è tutta di Subversion… Leggasi spaghetti code)
18
Subversion e i problemi di reteBello il repo centralizzato, ma se sono offline non posso committare
E non posso fare il checkout delle modifiche degli altri
E così la prossima volta che dovrò farlo sarà un casino…
19
Per non parlare dei branch (sono una capra)Come gestire la risoluzione di bug?
Fare branch e poi merge era un attimino complesso (per me)
Diverse cartelle per diversi branch
Risultato: lavorare su due funzionalità in parallelo è quasi impossibile
20
Subversion: y u no work?!Ad un certo punto ti sale una carogna che nemmeno Germano Mosconi, Nonno Fiorucci e Lugaresi da Cesenatico messi insieme…
21
La rivoluzione AgilePrimi contatti tramite i colleghi di Brescia (grazie!!)
Primo Agile Day (2011, Roma)
“Ragazzi, c’è un nuovo modo di approcciare lo sviluppo software!”
“Bello! Ma adesso non c’è tempo, abbiamo tante cose da fare... ”
22
L’arrivo del messiaFinalmente l’azienda ci concede qualche giornata con un coach agile
Adesso che l’ha detto lui, tutti ci credono…
Meglio che niente, l’importante è cominciare!
23
Ruoli, lavagne, storie e taskSpezzare il lavoro in piccole parti si può!
I “veci” diventano P.O.
Storie e task
Standup meetings
Retrospettive? Mmm...
NB: “vecio” = alpino più anziano ed esperto
24
Le pratiche “estreme”Io continuo ad esplorare
TDD!
BDD!
XP? Mmm...
Clienti sempre presenti? No.
Pair programming? Ma dighet del bù?!(tradotto: “ma dici davvero?!”)
25
Bello, però pota...Bella ‘sta storia del lavoro suddiviso in piccoli step
Però con Subversion non riesco a metterlo in pratica: se capita un bug devo fare copie di cartelle e revertare per poterlo risolvere (o tutt’al più fare delle patch...)
I branch? Non li so usare, sono una capra!
26
Sarà mica questo essere Agile?Agile cosa se poi non posso passare facilmente da un lavoro ad un altro?!
Non riesco a fare prove ed esperimenti (e a salvare o a lasciare a metà un lavoro per poi riprenderlo)
Sto Subversion ha rotto...
27
Ho sentito parlar bene di Git...“Git è meraviglioso!”
“Risolve tutti i problemi!”
“Le donne lo adorano!”
28
Bello ‘sto Git, ma che casino...200 comandi e decine di opzioni
File che spariscono al cambio branch
Come faccio il diff tra 2 branch?
Non ci capisco una mazza!
29
Non è come Subversion, accidenti...Ogni volta che modifichi un file devi fare git add, ma perché?!
Perché mi obbliga a scrivere il messaggio di commit?
Reset --hard e --soft… Cosa sono, comandi NSFW?
E poi c’è amend, e checkout --
30
Ho pauraaaaaaaaaaaaaaaaaaa!!1!Dai, forza e coraggio, impegnati un pochino…
Si ma se sbaglio?
Ok, o la va o la spacca: migro tutti i repository al lavoro
31
Non è come Subversion, per fortuna!Finalmente i branch, che figata!
Nuova funzionalità? Feature branch!
Bug? No problem, branch dal master!
Voi fare una prova? Branch usa-e-getta per spike/esperimenti
Era poi così difficile?!
32
C’ho un flow che manco Eraclito...Ed ora un buon workflow
Feature branches (Github flow)
Git flow (bello, bello in maniera assurda!)
“Se committi su master ti taglio il dito mignolo, una falange alla volta…” (cit.)
33
Nel piccolo però posso ancora migliorare...Sì, ma…
I miei commit sono ancora un po’ troppo cicciotti ed infrequenti…
Si può fare di meglio, o no?
34
Quella storia del pomodoro… Provaci!Lavora time-boxed! (sì ma io odio quei dannati ticchettii...)
Un A.T., un pomodoro (o 2, o 3)
L’importante è provare a fare fettine sottili...
35
Zio bob ti vede!One change, one commit
S.R.P. vale anche per i commit!
git add -p is your friend, justin case...
36
Commit-message driven developmentScrivi il messaggio di commit prima di iniziare a scrivere codice, ti sfido!
(grazie Arialdo Martini!)37
Così la smetti di scrivere str…E scrivi messaggi significativi!
La lunghezza dei messaggi è inversamente proporzionale alla dimensione dei commit
(Più c’è roba -> meno sai cosa scrivere -> meno scrivi)
38
Bravo bambino, fai i compiti!Appuntati tutti i test che dovranno passare su un foglio
Falli uno ad uno, integrando la lista man mano che ne scopri di nuovi (ma non devi implementarli per forza subito, anzi!)
Commit early, commit often
40
C’è commit e commit...Separa commit di “valore” da commit di “clean-up”
Riassumendo, a good commit is:- Frequent- Small- Decoupled- Meaningful
Ma soprattutto, non committare codice che non compila, maledetto!
41
Commit compulsivo-ossessivoUn commit per ogni step del TDD, ti sfido!
(poi puoi/devi fare uno squash e crearne uno di maggior significato prima di pushare)
42
Eureka! Ogni commit è una micro iterazione!Tratta ogni commit come fosse una sorta di micro-sprint!
Set the focus: verifica l’obiettivo, elenca i test, scrivi il messaggio di commit
Act: lavora! :)
Reflect, adjust, restart: rifletti su quanto fatto e pianifica il prossimo commit/pomodoro
43
Prima di iniziare col prossimo, svuota la mente...“Svuota la mente” ad ogni commit
Scrivi!
Anche la nostra RAM è limitata…
"Almost everything will work again if you unplug it for a few minutes, including you." Anne Lamott
44
In conclusione…Git magari c’entra poco con tutto questo, ma ha avuto e sta avendo ancora per me dei side-effects estremamenti interessanti
(ok, magari non proprio interessanti come quelli del sildenafil citrato...)
46
Git Side effects: sharingCode
Effort
Knowledge
→ Collective Code Ownership
→ Feedback and “codeback”
47
Git Side effects: FreedomFree to fail: you can do whatever you want in your branch, then throw it away
Free to work everywhere
Free to host your code wherever you want
48
Collaborating AND CooperatingPuoi lavorare al sicuro nel tuo recinto, ma in caso di necessità puoi condividere il tuo codice col mondo in pochi secondi
Pull requests e Code reviews
Team building
49
Collaborazione: insieme per produrre qualcosa Lavorare insieme con qualcuno
Ma non necessariamente per lo stesso fine
E nemmeno con lo stesso coinvolgimento
“Io il mio lavoro l’ho fatto, arrivederci e tanti saluti”
50
Cooperazione: insieme per lo stesso fineIn etologia, termine utilizzato quando organismi della stessa specie condividono i benefici di un’azione svolta insieme.
E’ finalizzata al conseguimento di un obiettivo comune.
Esige che ciascuno dei ruoli selezioni solo ciò che è funzionale al raggiungimento di uno scopo condiviso.
51
EusocialitàL'eusocialità (dal greco eu, "buono", e "socialità") è il livello più alto di organizzazione sociale, che si realizza per alcune specie animali.
Caratteristica di alcuni insetti, quali formiche, termiti e api; in essa la cooperazione, l’altruismo e la divisione del lavoro tra i membri della colonia si esprimono ai massimi livelli.
L’uomo è eusociale? 52