Outside-in TDD: scrivere codice che piace al business
Small Talk con Alessandro Di Gioia e Marco Consolaro
Trascrizione dello Small Talk del 30 maggio con Alessandro Di Gioia e Marco Consolaro - si parla di Software Crafting Programme, il nuovo workshop organizzato in collaborazione con Alcor Academy.
L'intervista è stata leggermente modificata per adattarla al formato scritto.
Avanscoperta: A ottobre proporremo il vostro nuovo workshop, composto da 10 moduli. Di cosa si tratta? Cosa è Software Crafting Programme?
Marco: È una versione un po' ridotta nel nostro training program classico per andare incontro alle esigenze di programmatori e programmatrici singoli che vogliono fare il corso ma non possono farlo all'interno della loro azienda.
I nostri corsi sono stati pensati per essere fatti all'interno delle aziende, quindi è un percorso particolare.
Ovviamente per chi lo fa da casa seguendo i suoi tempi e modalità è difficile avere un programma più prolungato. Quindi abbiamo pensato a un training apposito per sviluppatori e sviluppatrici singoli, non a livello di team quindi, che vogliono investire tempo e soldi per migliorare il proprio background, sempre con la qualità e l'attenzione al dettaglio che ci distingue.
Alessandro: Sono 10 lezioni da 3 ore e mezza più o meno. Più di così sarebbe troppo pesante dal punto di vista dell'apprendimento. Il corso tocca diversi argomenti, molti dei quali trattati anche nel nostro libro Agile Technical Practices Distilled, che è praticamente una sorta di compendio di tutte le tecniche agili di programmazione (anche se in realtà il titolo è un po' fuorviante).
Noi abbiamo un passato fortemente basato su Extreme Programming, quindi ovviamente si parla molto di Test-Driven Development, ma non soltanto il TDD classico perché ovviamente, per chi ha un pochino di conoscenza in questo ambito, si è visto che ha certi limiti nella sua applicabilità in contesti Enterprise.
Per cui noi proponiamo un approccio che alla fine del corso svilupperà la mentalità che noi chiamiamo outside-in, che è quella allineata alle necessità e ai valori del business.
Tutto questo, ovviamente, considerando il fatto che ci saranno delle interazioni umane, quindi molto del nostro approccio è basato su uno sviluppo socio-tecnico del gruppo: diamo grande importanza alla capacità di comunicare e di negoziare determinati tipi di design e di discuterli in maniera efficace.
Fra gli argomenti ci saranno appunto il Test-Driven Development, il Refactoring, quindi come sistemare il codice che è difficile da mantenere - ovviamente non si parla di Legacy Code senza test, che è una cosa particolare. Ma se avete dei test vedremo come migliorare il design, poi parleremo un bel po’ di software design partendo dagli Object Calisthenics, passando per i SOLID Principles per arrivare a Coupling & Cohesion e infine attraverso tutte queste tematiche introdurre il concetto dei test doubles e dell'architettura esagonale, e vedremo come tutto questo si collega alla delivery per il business.
Avanscoperta: Una delle cose che mi preme sottolineare è il fatto che abbiate già detto più volte come sia importante la parte della comunicazione e dell’allineamento col business. Come si suol dire, tutti bravi a scrivere codice ma ricordiamoci che il problema è sempre scrivere qualcosa che risolva il problema di qualcuno, che spesso si concretizza nella relazione tra una parte tecnica e il business.
Alessandro: Alberto Brandolini dice “in produzione ci va quello che capiscono i developers”, quindi se non si comunica col business, in produzione ci va il fraintendimento degli sviluppatori, e questo può essere sia costoso che superfluo.
Marco: Per noi il punto d'arrivo del training è questa tecnica, chiamata Outside-in, o London School Test-Driven Development, o Acceptance Test-Driven Development, o Behaviour-Driven Development… prendiamo spunti da tutte queste idee.
Però il punto principale è proprio questo: partire con lo sviluppo dai business requirements, e utilizzare sempre i business requirements come punto di partenza, per poi scrivere il software che ci serve a risolvere questi business requirements.
Pertanto questa è una tecnica abbastanza avanzata, ed è il motivo per cui partiamo dal TDD classico e arriviamo a questa tecnica solamente alla fine del training. Seguire la storia di come si sono evolute le cose aiuta molto a capire il motivo per cui queste tecniche funzionano e quale problema risolvono.
E in effetti sia il BDD che l’Acceptance Test-Driven Development sono evoluzioni del TDD classico.
È difficile apprezzare i dettagli e le caratteristiche se si parte dalla fine: è molto più efficace seguire la storia dell'evoluzione del TDD. Così si parte dal TDD classico, poi piano piano aggiungiamo dei concetti e delle idee per poi arrivare al punto in cui si ha lo sviluppo in armonia con il business che, ricordiamolo, è la cosa principale e il fine ultimo. Solo che arrivare a queste conclusioni risulta difficilissimo senza conoscere tutte queste tecniche.
Alessandro: Un aspetto fondamentale di questo corso è il fatto che sarà erogato da remoto, quindi completamente on-line, ma dal vivo, quindi con la nostra presenza, e in modalità Mob Programming (o Software Teaming).
Che cos'è il Mob Programming? Lo dirà Marco tra poco per bene perché è il presentatore ufficiale della modalità di lavoro.
Basti dire che il Mob Programming è un modo fantastico per trasmettere la conoscenza.
Marco: Sì, il Mob Programming è una tecnica di programmazione collaborativa dove ci sono determinati ruoli, determinate situazioni e alcune piccole regole. È una tecnica che deve essere imparata e praticata e ci vuole tempo, quindi anche per questo servono le diverse lezioni che faremo. Un conto è leggere un libro, un conto è leggere un libro e provare a farlo, e un altro conto è provare a farlo 10 volte di fila con qualcuno che ti guida quando fai qualcosa di inesatto.
Dopo 10 lezioni direi che tutti i nostri partecipanti diventano capaci di fare Mob Programming, non solo come spettatori o programmatori, ma sono anche in grado di replicare l’esperienza nei loro team e situazioni aziendali interne. È una tecnica che non è difficile da imparare se la si pratica per un po' di volte nel modo corretto.
Il problema è che se non si applica in modo corretto, il Mob Programming si trasforma molto facilmente in caos e quindi poi gli sviluppatori concludono che il “Mob Programming non funziona”.
Dal punto di vista dell'insegnamento, Mob Programming per noi è stato una svolta perché siamo finalmente riusciti a mettere insieme gruppi da 6 a 10 persone e a farle lavorare con lo stesso codice. L'esperienza dal punto di vista del training in diretta è veramente interessante.
Avanscoperta: Grazie mille per aver anticipato la prossima domanda, che riguarda proprio il rapporto tra teoria e pratica all’interno del percorso di 10 moduli che faremo insieme. Non si tratta certamente di un corso in cui ci sediamo e guardiamo delle slide sulla storia del TDD, per intenderci…
Marco: La storia del TDD verrà ripercorsa hands-on, quindi ci saranno esercizi da svolgere in maniera collaborativa dalla prima all'ultima lezione. Per chi ama scrivere codice, ci sarà un bel po’ di divertimento, ma anche un bel po’ di lavoro: è un corso non semplice che non si può fare bevendo una birra mentre si scrivono due linee qua e là, ci sono problemi da risolvere, del codice da scrivere.
In tutto questo noi non saremo lì ad aiutarvi a scrivere il codice giusto, ma siamo lì per aiutarvi a capire i principi, ma il codice lo scrivono le persone che vengono al corso.
Quindi cervello acceso, critical thinking e probabilmente ci saranno esercizi dove sbatteremo contro qualche muro, ed è tutto preventivato, è tutto messo in conto. Vi aiuteremo a scavalcare il muro e poi anche a buttarlo giù. Ma prima bisogna sbatterci!
Alessandro: Il corso è fortemente influenzato da Training from the BACK of the Room. Con Avanscoperta avevamo partecipato a questo corso, e l’idea è proprio quella di learning by doing.
Come ha detto Marco, non è un corso in cui voi assisterete: è un corso in cui ci sarà ovviamente un'introduzione teorica perché ovviamente dobbiamo spiegare dei principi, però poi si passa immediatamente alla parte pratica, che è la parte che dovete fare voi.
Noi saremo lì per sfidarvi e per aiutarvi a rimettervi in piedi quando inciamperete. Sarà un giro sulle montagne russe parecchio intenso: ci saranno momenti di disperazione, momenti di rabbia, momenti di gioia - tutto ovviamente ingegnerizzato affinché sia piacevole, ma non pensiate che sia una passeggiata nel parco. Noi generalmente diciamo che questo è un corso che richiede un impegno da semestre universitario. Infatti, anche se non lo richiediamo, è fortemente consigliata la pratica a casa.
L’idea fondamentale è che ci sarà tantissima pratica e ci saranno tantissimi esercizi.
La parte più importante degli esercizi non è neanche la pratica in sé, ma le discussioni che avrete. Sicuramente vi verranno in mente delle cose che avete affrontato in produzione o che dovrete affrontare produzione o che vi hanno creato problemi.
Quindi nel momento in cui c'è questa cross-pollination in realtà il valore incrementa esponenzialmente per tutti perché condividiamo le nostre esperienze.
Marco: Poi la cosa più importante è che noi siamo lì e possiamo rispondere a qualunque domanda in tempo reale. Non siate timidi/e, potrete farci qualunque domanda vi venga in mente su qualunque argomento.
Siamo abbastanza esperti e abbiamo affrontato anche personaggi supercritici senza problemi: accettiamo la sfida con chi dice per esempio che “TDD non mi ha mai convinto”. Noi non siamo supporter di questa o quella metodologia, di TDD o non TDD: pensiamo che siano degli strumenti molto utili in moltissime situazioni.
E pertanto il nostro corso serve per imparare a praticare in maniera corretta queste tecnologie, tecniche, principi, pratiche e metodi per poi applicarli nei vostri contesti come meglio credete.
Pertanto quello che noi vi garantiamo è che alla fine del corso queste tecniche le imparerete in maniera abbastanza profonda.
Poi ovviamente dovrete fare pratica per migliorare, però dopo il nostro corso saprete iniziare un progetto applicando queste tecniche e potete decidere se pensate che il TDD funzioni oppure no.
L'unica cosa che posso dire è che non ho ancora visto nessuna persona che, finito il corso, abbia detto che era meglio prima - nessuno è mai tornato indietro… questo vuol dire che qualcosa resta.
Avanscoperta: grazie per la lunga digressione e un messaggio per chi ci ascolta o legge: non spaventarti! Lo spirito è quello sfidante, è quello giusto…
Alessandro: è un corso sfidante e ad alto valore. Tante persone che hanno seguito il corso hanno avuto un'impennata nella loro carriera perché promuove la leadership: fondamentalmente in cui nel momento in cui tu sei in grado di comunicare col business, di sapere come connettere i puntini… la cosa che emerge molto spesso è che ci sono tanti sviluppatori e sviluppatrici senior che conoscono questi argomenti, però non sono in grado di mettere in relazione gli uni agli altri.
Mentre invece quello che vogliamo dare noi è, diciamo, è il corso (o il libro) che avremmo voluto avere vent'anni fa quando avevamo iniziato ad applicare questo genere di tecniche.
Quindi l'idea è quella di fornire alle persone non soltanto la conoscenza di queste tematiche, ma anche un workflow ripetibile e predicibile per fare la delivery di software che sia di alta qualità, ma anche allineato coi valori dei business.
Infatti quando Marco menziona il fatto che la parte finale del corso riguarda l'implementazione guidata dai requisiti di business, la cosa che tengo a sottolineare è che questi requisiti in realtà voi imparerete a scriverli assieme al business. È questa la cosa fondamentale, perché questo favorisce quella collaborazione che da una parte riunisce il team, ma dall'altra assicura che quello che state facendo è quello che loro considerano la cosa che ha più valore.
Marco: Poi alla fine il corso è ovviamente diviso in lezioni dove ogni lezione ha un tema diverso con una componente tecnica. Però la nostra visione dello sviluppo software è una visione olistica, dove per noi è importante avere sempre presente l’obiettivo finale: il perché, il come e il dove applicare - o non applicare - determinate tecniche.
Il nostro corso è tutto una serie di regole da imparare, che poi però verranno infrante. E scopriremo dove bisogna infrangerle - come diceva Picasso Learn the rules like a pro so you can break them like an artist.
Prima bisogna imparare, è fondamentale, ma poi in realtà bisogna capire che ciò che conta davvero è il contesto.
Quindi bisogna capire quando è il caso di infrangere le regole: se le si applica sempre alla cieca si fanno tantissimi errori.
Ed è lì che diventa difficile e interessante capire queste cose: quando si capiscono determinati contesti, è naturale capire quali sono le regole che si possono applicare; e questo è un discorso che non si può fare se non si ha un'idea generale dello sviluppo software, ma anche del lavoro in team.
Avanscoperta: e con questo colgo l'occasione per un gancio. Abbiamo parlato di persone che lavoreranno in Mob Programming durante il corso, quindi persone con cui lavoreremo al fine di connettere i puntini tra tech e business.
La mia domanda ora è: a chi è rivolto il workshop nello specifico? Qual è il tipo di persona, sviluppatore o sviluppatrice, che abbiamo in mente, anche riferito a bisogni specifici e anni di esperienza?
Marco: Il workshop è rivolto a tutti gli sviluppatori e le sviluppatrici che vogliono imparare delle tecniche di sviluppo software che funzionano, che sono efficaci, e che vogliono migliorare la loro comprensione del design del software, ma direi anche del design di qualunque sistema.
Se il vostro obiettivo è migliorare voi stessi, il modo in cui scrivete software e il modo in cui vi approcciate a un team o ad altre persone che scrivono software, questo secondo me è uno dei training program migliori al mondo.
Le esperienze precedenti di chi partecipa al workshop contano in maniera molto relativa: il nostro corso si basa su principi, tecniche e idee che vanno al di là del linguaggio di programmazione, quindi si possono applicare in qualunque linguaggio. L’importante è avere voglia di migliorarsi e andare a fondo nel capire come migliorare la scrittura del proprio codice.
Alessandro: dal punto di vista dell'esperienza professionale, noi generalmente forniamo questo corso a tutti i livelli. Abbiamo visto anche sviluppatori e sviluppatrici junior sorprenderci per la facilità con cui alcuni concetti sono appresi, ma anche sviluppatori senior che molto spesso ci dicono: “cavoli, se avessi visto questa cosa 10 o 20 anni fa, avrei rivisto le cose in maniera molto diversa”.
Il corso poi naturalmente sarà svolto con un linguaggio di programmazione, e lo decideremo quando avremo gli scritti. Questo sarà sicuramente vicino a C++. Cosa significa? Java, C#, TypeScript, JavaScript, per cui chiunque riesca a leggere e capire uno di questi linguaggi non avrà problemi durante il corso.
Come diceva Marco, ci teniamo a sottolineare il fatto che è un corso tecnologicamente agnostico: noi non ci preoccupiamo delle varie offerte commerciali disponibili di anno in anno sul mercato.
Per noi il linguaggio è uno strumento che serve per insegnare i principi. Il vantaggio è che questi principi non cambiano ogni due anni, anzi: sono proprio quelle le cose che fanno la differenza, perché qualunque linguaggio o paradigma voi stiate usando, questa conoscenza può essere riutilizzata.
Molti criticano per esempio il fatto che i SOLID Principle possano essere usati solo nell’Object-Oriented Programming… venite a sfidarmi perché io e Marco siamo in grado di spiegarvi, come questi si relazionano al Functional Programming o al Distributed Computing.
Quindi per chiudere - a chi è rivolto il workshop? A chi è abbastanza ambizioso/a e ha voglia di fare un passo successivo nella propria carriera.
È successo molto spesso che persone che sono venute al nostro corso poi abbiamo avuto un'impennata nella propria carriera non soltanto per le conoscenze del corso, ma perché
hanno acquisito sicurezza in loro stesse, hanno capito come studiare e si sono anche trovate a collaborare con altre persone, quindi a dover negoziare e imparare a essere influenti - e questa è una cosa fondamentale che in ambiti lavorativi fa la differenza ancora di più che la conoscenza e l'esperienza tecnica.
Nel momento in cui noi impariamo ad ascoltare gli altri, ad argomentare le nostre scelte e a negoziare un design finale - diventiamo veramente 10x Developer, perché rendiamo 10 persone intorno a noi più produttive.
Se come conseguenza del nostro corso ognuno diventa un 10x Developer, è chiaro quanto sia efficace poi andare in produzione.
Marco: infatti
il meta valore di questo corso è nella comunicazione tecnica, perché il Mob Programming ci forza a utilizzare un vocabolario ben preciso per essere efficaci.
Questo ci porta a dover utilizzare dei concetti di un certo tipo, a parlare in termini di principi, di Code Smells, di tipi di Refactoring. Sono situazioni in cui bisogna per forza avere un linguaggio di un certo tipo per essere davvero efficaci.
Quando faccio consulenza per me è abbastanza semplice capire il livello di maturità di un team: mi siedo lì vicino e li ascolto mentre parlano del loro codice. In base al linguaggio che il team utilizza per parlare di codice, si capisce abbastanza chiaramente il livello di maturità.
Noi non diamo nemmeno certificati. Il certificato non ti serve perché quando tu finisci questo training e torni a lavorare nel tuo team, scrivi codice in un altro modo, parli in altro modo. Ti chiederanno: “dove sei andato a imparare tutte queste cose?”. Per noi, questa è la cosa principale: quando si riesce a ricostruire vocabolario tecnico di un certo tipo, poi si sviluppano idee di un certo tipo e pertanto si crea anche un collective mindset di un certo tipo, all'interno del team.
Questo è il vero segreto per raggiungere dei risultati eccezionali ed è anche il motivo per cui di solito facciamo questo corso all'interno delle aziende. Ma in questo caso ci sarà un altro tipo di magia, anche se lo faremo tra persone che magari non si conoscono: alla fine del corso saremo tutti amici. La speranza è che poi però queste persone possano portare un po’ di esperienza e vocabolario all’interno dei propri team.
Avanscoperta: si tratta infatti di un corso che è già stato fatto in qualche forma in aziende private e che continua a essere disponibile in formato B2B. Grazie al formato pubblico vogliamo attirare persone che una a una diventeranno poi ambasciatrici nei loro contesti di questi nuovi modi di lavorare.
Parliamo di libri: insieme siete gli autori di Agile Technical Practices Distilled, scritto insieme a Pedro Santos, che viene fornito in formato digitale a chiunque si iscriva al corso.
Marco poi ha anche scritto un capitolo su Cronache di Domain-Driven Design, pubblicato da Avanscoperta: un libro corale composto da 10 storie di vita vissuta, racconti di applicazioni di Domain-Driven Design, scritto in italiano e pubblicato sia in cartaceo che in digitale.
Vorrei un vostro racconto o delle impressioni sulla vita da scrittori… Intanto ci togliamo il dubbio: c’è qualche altro libro in programma che state scrivendo o per ora siete fermi?
Alessandro: c’è la seconda edizione di Agile Technical Practices Distilled, che sarà un aggiornamento quasi automatico per chi ha già acquistato la prima versione digitale.
Però fondamentalmente andiamo un pochino più in profondità su determinate tematiche, come per esempio il Legacy Code e il Refactoring, aggiungiamo altri altri esercizi e riorganizziamo alcuni dei capitoli.
Marco: questa è l’idea per lo meno, non sappiamo ancora quando riusciremo a portarla a termine.
Poi possiamo dire che il corso è totalmente basato sul libro, non possiamo farlo tutto perché il libro è abbastanza denso e praticamente c'è tutto tutto il nostro sapere distillato, o meglio quello che pensiamo sia importante. Però tratteremo i punti chiavi contenuti dal libro.
La curiosità che posso raccontare… Agile Technical Practices Distilled l’abbiamo scritto in 3, e abbiamo fatto Mob Programming anche quando abbiamo scritto il libro. Per cui il libro è interamente scritto a 6 mani.
L’episodio più interessante è successo quando mancavano alcuni capitoli alla fine del libro, che erano in capo a me. Mio figlio era piccolo, aveva due o tre anni, e mi è venuta l'illuminazione: dato che mia moglie è filippina, ho deciso di trasferirmi lì per due mesi per finire il libro.
Per cui mentre mia moglie e mio figlio stavano coi nostri parenti nelle Filippine a visitare spiagge e parchi naturali, io ho passato settimane chiuso nella camera del resort a scrivere. Ricordo di aver scritto per tutto il tempo, incluso quello del viaggio in aereo: all’andata ho buttato giù l’appendice su EventStorming di Alberto, e al ritorno quella su Popcornflow di Claudio Perrone.
E quando ero lì idem: tutto il giorno lo passavo a scrivere e alla sera mi connettevo con Alessandro e Pedro, dall’Europa, dove era giorno, e facevamo il Mob Programming per le review.
Avanscoperta: siamo quasi in chiusura. Raccontateci un caso pratico di una volta che avete fatto questo corso da un cliente. Com’è andata l'esperienza e cosa è successo una volta finito il corso?
Alessandro: uno dei nostri clienti, dopo quasi un anno di training, ha raggiunto la massa critica di sviluppatori che hanno seguito questo corso. Da lì in poi hanno letteralmente cambiato marcia nel modo in cui fanno delivery. La situazione è diventata difficile per alcuni manager: addirittura alcuni erano in imbarazzo perché in passato avevano promesso che stavano già facendo tutto quello che potevano per essere più efficienti, senza portare a casa i risultati.
Dopo un anno di collaborazione con noi si sono ritrovati ad aumentare il numero dei rilasci in produzione di un ordine di magnitudine incredibile (si parla di cifre decuplicate) oppure problemi che prima risolvevano in mesi ora venivano risolti in due giorni.
Quindi sì, vediamo la differenza tra "prima e dopo" il nostro corso, e lo rimarchiamo giusto per menzionare che ovviamente le cose di valore non avvengono dal giorno alla notte… però la gente tende a sottostimare ciò che si riesce a ottenere nel lungo periodo e a sovrastimare quello che invece si ottiene nel breve periodo.
È un esempio abbastanza significativo di come un cambiamento culturale possa avere un impatto a livello globale, andando oltre le aspettative di chiunque. E questo in generale.
In particolare, invece, posso menzionare un fatto che accade spesso all’estero:
sappiamo di donne che partecipano al corso e che ci han detto che grazie al corso si sentono più sicure di quello che sanno e che non sanno, e sanno come affrontarlo. Ultimamente ho avuto la conferma che hanno cambiato la loro carriera, assumendo ruoli più senior, di maggiore leadership…
non posso fare nomi ma sono tutte informazioni riscontrabili.
Marco: per me la cosa più bella è capire quanto è importante quello che diamo ai partecipanti. Ti faccio un esempio: eravamo Oslo la settimana scorsa, e avevo comprato una bottiglia di prosecco al Duty Free. Una sera, mentre Alessandro e io ci stavamo gustando il prosecco fuori dall'albergo, passa un ragazzo che aveva partecipato al nostro corso in passato. Appena ci riconosce, si ferma con noi e inizia a ringraziarci, raccontandoci di quanto gli era piaciuto il corso e gli sia servito per il suo nuovo lavoro. Davvero un bel momento. Quando succedono queste cose per me è il massimo: la riconoscenza dei partecipanti è la cosa più bella di quello che facciamo.
Alessandro: immagina: siamo fuori fuori dall'hotel, a un certo punto incontri un ex allievo che ti ringrazia e ti dice che grazie al nostro corso, a parte il divertimento e le cose che ha imparato, ha cambiato carriera, tant’è che ora è consulente. È diventato consulente a seguito di quel corso.
Quando vedi che un corso del genere contribuisce a impattare positivamente la vita delle persone… è molto motivante. Perché è la nostra missione fondamentale.
Avanscoperta: e se volete incontrare Marco e Alessandro vi lascio con un ultimo spoiler: ci vediamo a Working Software Conference a Milano il 30 giugno, dove faranno una breve anticipazione di una delle lezioni finali del corso. Per cui avrete l'opportunità di parlare direttamente con loro ed eventualmente fare altre domande sul corso.
Alessandro: sarà anche un modo di vedere in prima persona come funzioneranno i nostri workshop. Ovviamente quello che portiamo alla conferenza è una versione estremamente ridotta, sia in termini di complessità che di interazione rispetto a quello che faremo online. Però è importante perché dà veramente l'impressione di cosa significhi fare Mob Programming, risolvere questo tipo di problemi, avere un approccio Test-Driven e avere l'interazione diretta con i trainer.
Marco: nei workshop che facciamo alle conferenze il Mob diventa enorme perché accettiamo un numero infinito di persone, quindi abbiamo una tecnica particolare per farlo quando il pubblico è numeroso. Va da sé che poi fare queste cose nel training sarà molto diverso.
Avanscoperta: grazie mille ragazzi, ci vediamo a Working Software a Milano e su Zoom a ottobre col workshop.
Cover photo: Foto di Joshua Sortino su Unsplash
Small Talk con Alessandro Di Gioia e Marco Consolaro: il video - il podcast.
Learn with Alessandro Di Gioia e Marco Consolaro
Alessandro e Marco sono i trainer di Software Crafting Programme.
Vuoi continuare a leggere le cose che pubblichiamo? Iscriviti alla nostra Newsletter 📩 (disponibile in italiano e in inglese).
Ti faremo compagnia ogni venerdì mattina. ☕️
La lista completa dei nostri corsi: Avanscoperta Workshops.