Agile versioning with Git

54
Agile Versioning with Git Ferdinando Santacroce @JesusWasRasta

Transcript of Agile versioning with Git

Agile Versioning

with GitFerdinando Santacroce

@JesusWasRasta

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

il COBOL

7

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

SubversionCosa usate voi per versionare il codice?

Subversion!

Ok, vada per Subversion

12

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

Chi prima committa, meglio alloggia

16

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

Un esempio

39

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

Serve DISCIPLINA!!!

Alla fine il segreto è sempre quello...

45

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

Cosa ho capitoUn buon programmatore si vede (anche)

da come tratta il proprio codice sorgente

53

Grazie :)

54

Domande?@JesusWa

sRastawww.packtpub.com