Top Banner
Agile Versioning with Git Ferdinando Santacroce @JesusWasRasta
54

Agile versioning with Git

Jan 16, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Agile versioning with Git

Agile Versioning

with GitFerdinando Santacroce

@JesusWasRasta

Page 2: Agile versioning with Git

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

Page 3: Agile versioning with Git

Aprés moi, le diluge!Tutto sotto controllo

Nessun conflitto, nessun problema

Il codice è mio e me lo gestisco io

3

Page 4: Agile versioning with Git

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

Page 5: Agile versioning with Git

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

Page 6: Agile versioning with Git

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

Page 7: Agile versioning with Git

il COBOL

7

Page 8: Agile versioning with Git

Dijkstra e Il COBOL“The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.”

Edsger W. Dijkstra8

Page 9: Agile versioning with Git

“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

Page 10: Agile versioning with Git

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

Page 11: Agile versioning with Git

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

Page 12: Agile versioning with Git

SubversionCosa usate voi per versionare il codice?

Subversion!

Ok, vada per Subversion

12

Page 13: Agile versioning with Git

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

Page 14: Agile versioning with Git

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

Page 15: Agile versioning with Git

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

Page 16: Agile versioning with Git

Chi prima committa, meglio alloggia

16

Page 17: Agile versioning with Git

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

Page 18: Agile versioning with Git

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

Page 19: Agile versioning with Git

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

Page 20: Agile versioning with Git

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

Page 21: Agile versioning with Git

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

Page 22: Agile versioning with Git

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

Page 23: Agile versioning with Git

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

Page 24: Agile versioning with Git

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

Page 25: Agile versioning with Git

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

Page 26: Agile versioning with Git

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

Page 27: Agile versioning with Git

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

Page 28: Agile versioning with Git

Ho sentito parlar bene di Git...“Git è meraviglioso!”

“Risolve tutti i problemi!”

“Le donne lo adorano!”

28

Page 29: Agile versioning with Git

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

Page 30: Agile versioning with Git

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

Page 31: Agile versioning with Git

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

Page 32: Agile versioning with Git

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

Page 33: Agile versioning with Git

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

Page 34: Agile versioning with Git

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

Page 35: Agile versioning with Git

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

Page 36: Agile versioning with Git

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

Page 37: Agile versioning with Git

Commit-message driven developmentScrivi il messaggio di commit prima di iniziare a scrivere codice, ti sfido!

(grazie Arialdo Martini!)37

Page 38: Agile versioning with Git

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

Page 39: Agile versioning with Git

Un esempio

39

Page 40: Agile versioning with Git

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

Page 41: Agile versioning with Git

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

Page 42: Agile versioning with Git

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

Page 43: Agile versioning with Git

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

Page 44: Agile versioning with Git

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

Page 45: Agile versioning with Git

Serve DISCIPLINA!!!

Alla fine il segreto è sempre quello...

45

Page 46: Agile versioning with Git

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

Page 47: Agile versioning with Git

Git Side effects: sharingCode

Effort

Knowledge

→ Collective Code Ownership

→ Feedback and “codeback”

47

Page 48: Agile versioning with Git

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

Page 49: Agile versioning with Git

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

Page 50: Agile versioning with Git

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

Page 51: Agile versioning with Git

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

Page 52: Agile versioning with Git

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

Page 53: Agile versioning with Git

Cosa ho capitoUn buon programmatore si vede (anche)

da come tratta il proprio codice sorgente

53

Page 54: Agile versioning with Git

Grazie :)

54

Domande?@JesusWa

sRastawww.packtpub.com