Avanscoperta
Software Crafting Programme

Software Crafting Programme

The must-do learning journey in socio-technical practices and principles

La prossima edizione del corso si terrà in inglese.

Abstract

La maggior parte delle persone che lavorano nello sviluppo software sono fortemente motivate a migliorare le proprie competenze ingegneristiche e creare software di alta qualità.
Imparare i principi di eccellenza tecnica che sorreggono lo sviluppo software crea soddisfazione, e la voglia di continuare a fare sempre meglio.

Per tutte quelle persone che sono mosse da questa grande passione e sono alla ricerca di strumenti che aiutino a lavorare meglio, a ridurre l’ansia, a essere più consapevoli ed efficaci, abbiamo creato Software Crafting Programme, insieme ad Alessandro Di Gioia e Marco Consolaro di Alcor Academy.
Con questo corso vogliamo contribuire a far entrare TDD, Refactoring, Code Smell… a tutti gli effetti nel tuo flusso di lavoro quotidiano.

Programma

Il corso si articola in 10 sessioni da 3.5 ore ed è strutturato in un’alternanza di discussioni, teoria e lavori di gruppo.

Il programma di formazione ha un taglio estremamente pratico e partecipativo.
Ogni singola lezione è costruita sulla pratica del Software Teaming (Mob Programming) con lo scopo di massimizzare l’apprendimento e allenare le capacità collaborative nello sviluppo del software attraverso una comunicazione tecnica più avanzata.

Il corso è frutto dell’esperienza sul campo dei due docenti nello sviluppo e design del software con pratiche XP e Domain-Driven Design.
Esperienza ampiamente raccontata anche nel libro Agile Technical Practices Distilled, scritto da Marco Consolaro, Alessandro Di Gioia e Pedro M. Santos, e nel libro Cronache di Domain-Driven Design, edito da Avanscoperta.

È consigliato dedicare almeno un’ora di tempo tra un modulo e l’altro per lo svolgimento di compiti a casa e per approfondimenti.

Target Audience

Il programma è progettato per accelerare le competenze tecniche in ambito sviluppo software e per aiutare i team tecnici ad applicare le pratiche ingegneristiche più efficaci.

Si rivolge in particolare a:

  • tutte quelle persone che sviluppano software per professione e vogliono migliorare le proprie competenze ingegneristiche per diventare Tech Lead;
  • Scale-up o aziende che stanno assumendo tech people rapidamente e vogliono creare una cultura ingegneristica volta alla qualità;
  • team che stanno lavorando a un nuovo progetto e vogliono modernizzare i sistemi esistenti evitando le insidie ​​che hanno danneggiato quelli precedenti;
  • Software Developer, QA, Software Engineer e Freelance Software Developer che vogliono fare il passo successivo nella propria carriera.

Argomenti

  • Test-Driven Development Classico
  • Test-Driven Development della scuola di Londra
  • Object-Oriented Design
  • Object Calisthenics
  • Refactoring
  • Code Smells
  • SOLID Principles
  • Coesione e Accoppiamento
  • I 4 elementi del Design Semplice
  • Test Doubles
  • Architettura Esagonale
  • Behaviour-Driven Development
  • Acceptance Test-Driven Development
  • Outside-in Mindset
  • Software Teaming (Mob Programming).

Agenda

Un buon 70% del tempo del corso è basato sulla scrittura di codice in Software Teaming (Mob Programming) e sulla condivisione delle soluzioni con gli altri partecipanti.

È consigliato dedicare almeno un’ora di tempo tra un modulo e l’altro per lo svolgimento di compiti a casa e per approfondimenti.

Di seguito il dettaglio di ogni singola sessione.

Session 1: Buone abitudini del TDD Classico

  • Cos’è il TDD: origine della tecnica e possibili benefici
  • Il ciclo del TDD: red/green/refactor, capiamo quali sono i passi da seguire e in cosa si distinguono fra di loro
  • Le tecniche di avanzamento: Triangolazione, Implementazione finta, Implementazione ovvia
  • La lista dei test: strumento fondamentale per chiarire gli obiettivi e mantenere alta l’attenzione durante lo sviluppo
  • Le proprietà di un buon test: quali sono le proprietà che un test deve dimostrare per essere considerato buono
  • Gli anti-pattern: quali sono i problemi riscontrati più comunemente nei test e come risolverli
  • Esercizio in Mob Programming: Calcolatore di stringhe usando il TDD classico.

Sessione 2: Object Calisthenics

  • Object Calisthenics: 10 semplici regole per migliorare da subito il tuo Object-Oriented Design
  • Codice a oggetti dichiarativo e incapsulato
  • Uso del Type System per rendere lo stato invalido non rappresentabile
  • Esercizio in Mob Programming: sviluppo di un’applicazione per giocare a Tris usando il TDD classico e le regole di Object Calisthenics.

Sessione 3: Code smells

  • Gli anti-pattern più comuni che rendono il codice più difficile da mantenere
  • Come usare i code smells come feedback per migliorare il tuo design
  • Come migliorare le code review attraverso un’analisi sistemica dei code smells
  • Esercizio in gruppi: analizzare il codice di un’applicazione per giocare a Tris piena di code smells e individuarli.

Sessione 4: Refactoring

  • Principali tecniche di refactoring automatico usando l’IDE
  • Come sfruttare al meglio il ciclo di refactoring del Test Driven-Development classico
  • Come applicare il principio di Pareto nel refactoring
  • Sequenza di priorità nel refactoring
  • Esercizio in Mob Programming: fare il refactoring dell’applicazione della lezione precedente, procedendo nella sequenza di priorità corretta.

Sessione 5: Principi SOLID++

  • Single Responsibility
  • Open/Closed principle
  • Liskov substitution
  • Interface Segregation
  • Dependency Inversion
  • Balanced Abstraction
  • Least Astonishment
  • Esercizio in Mob Programming: implementare il Mars Rover kata usando TDD classico e applicando Open/Closed principle.

Sessione 6: Coupling & Cohesion

  • Categorie di Coesione: Coesione di classe e Coesione di metodo
  • Categorie di Accoppiamento: Accoppiamento di interazione e Accoppiamento ereditario
  • Coesione e Accoppiamento sistemici
  • Come minimizzare l’accoppiamento attraverso il disegno dei metodi pubblici
  • Esercizio in Mob Programming: finire l’implementazione del Mars Rover kata della lezione precedente usando TDD classico ed applicando Open/Closed principle.

Sessione 7: Test Doubles

  • Tassonomia dei Test Doubles: distinzione concettuale tra Mock, Stub, Fake, Spy and Dummy objects
  • Command-Query Separation principle
  • Euristiche per la scelta dei Test Doubles corretti
  • Come utilizzare i Test Doubles per verificare la correttezza della collaborazione fra oggetti
  • Quando non utilizzare i Test Doubles preferendo il TDD classico
  • Anti-patterns più comuni nell’utilizzo dei Test Doubles
  • Esercizio in Mob Programming: copiatore di caratteri utilizzando TDD classico e test di collaborazione. Implementeremo la soluzione sia usando Mock and Stub, che usando Fake and Spy.

Sessione 8: Le 4 Regole del Design Semplice

  • Simple design: cosa si intende per design semplice e come possiamo ottenerlo
  • Come applicare le 4 regole del Simple Design
  • Introduzione ad architettura esagonale con Ports and Adapters
  • Identifica dove e quali Test Doubles utilizzare all’interno di un’architettura esagonale
  • Esercizio di Little Design Upfront: dato uno scenario e un criterio di accettazione, faremo un esercizio di “idealized design” per avere una base di partenza per l’implementazione della storia.

Sessioni 9 e 10: Mentalità Outside-In, TDD scuola di Londra, Sviluppo Outside-In applicato

  • Impara il doppio ciclo di Acceptance Tests Driven Development
  • Applica Behaviour-Driven Development attraverso la definizione di un criterio di accettazione automatico
  • Utilizza la mentalità outside-in per implementare una storia con lo stile della scuola di Londra usando correttamente mock e stub nei tuoi test
  • Esercizio finale in Mob Programming: implementeremo lo scenario e il criterio di accettazione utilizzando il design concordato nella lezione precedente, partendo da un Acceptance test come un vero team della scuola di Londra.

Cosa impareremo

Al termine di questo percorso, sarai in grado di:

  • scrivere test che funzionano come documentazione vivente
  • sfruttare il sistema di tipizzazione per rendere uno stato errato non rappresentabile
  • collaborare con altri sviluppatori utilizzando un dizionario tecnico professionale
  • effettuare revisioni del codice di alto valore che incoraggino il miglioramento del design
  • identificare i difetti che aumentano il costo della manutenzione
  • utilizzare i principi di buon design per semplificare il codice e ottenere un’architettura modulare
  • comunicare con il business per fornire software di valore e in tempi brevi
  • ridurre i feedback loop per sviluppare il software incrementalmente e promuovere la sperimentazione continua
  • utilizzare la mentalità Outside-In per scrivere codice che si concentra sulle esigenze degli utenti.

Come si svolge

Il programma di formazione ha un taglio estremamente pratico, collaborativo e partecipativo. Ogni lezione dura circa tre ore e mezza e si compone di una breve parte teorica seguita da una sessione di programmazione collaborativa.
L’idea è di poter applicare i concetti in modo pratico in un contesto safe, dove poter sperimentare senza paure e lavorare sullo spirito di gruppo.

L’intero programma è progettato applicando i princinpi di Training From the Back of The Room, Micro Learning e Project Based Learning, per dare la possibilità di imparare e mettere in pratica il prima possibile.

Il corso si svolgerà online e in diretta per un massimo di 16 persone: i docenti e tutti i partecipanti saranno in video conferenza e avranno a disposizione una serie di strumenti digitali per interagire tra di loro e lavorare hands-on.
Per questo motivo, è richiesto che tutti i partecipanti abbiano una propria postazione e la telecamera accesa per tutta la durata del workshop per una migliore fruizione e comunicazione.

Perché partecipare

Al termine di questo corso avrai acquisito un livello di seniority superiore.
Sarai in grado di scrivere software mantenibile e di alta qualità, senza cadere nelle comuni trappole di over engineering.
Ti aiuteremo a sviluppare capacità di interazione e comunicazione in gruppo, aspetti fondamentali per la crescita professionale in ruoli di leadership.

F.A.Q.

Sono previsti requisiti minimi per poter partecipare a questo corso?
È richiesta un’esperienza base nello scrivere Unit Tests.
Inoltre, è richiesta la partecipazione attiva durante le sessioni e la presenza ad almeno l’80% dell’intero programma.

Sono previste attività al di fuori delle ore del corso e compiti a casa?
È consigliato dedicare almeno un’ora di tempo tra un modulo e l’altro per lo svolgimento di compiti a casa e per approfondimenti.

Qual è il linguaggio previsto per gli esercizi?
Java o .NET (verrà deciso a conferma del corso).

Come posso prepararmi per partecipare al corso? Letture consigliate? Altro?
Con l’acquisto del biglietto del corso, ti verrà fornito un codice per scaricare una copia digitale del libro Agile Technical Practices Distilled (scritto dagli autori del corso).
Consigliamo anche la lettura di The Five Dysfunctions of a Team di Patrick Lencioni.

Cosa serve installare?
Comunicheremo le specifiche tecniche alla conferma del corso.

Cosa devo assolutamente avere per potermi iscrivere a questo corso online?
Se possiedi un computer/tablet, una rete stabile (almeno 20 Mbps in download e 10 Mbps in upload), cuffie, microfono e videocamera, allora puoi iscriverti al corso senza problemi. Un paio di settimane prima del corso ti invieremo tutte le informazioni sugli strumenti che useremo e come accedervi.
Per la rete, prova a fare uno Speed Test.
Nonostante la modalità online, il corso mantiene il suo approccio interattivo e partecipativo. Per questo motivo, è richiesto che tutti i partecipanti abbiano la telecamera accesa per tutta la durata del workshop per una migliore fruizione e comunicazione.

N.B.

Il workshop verrà confermato al raggiungimento dei numeri minimi di partecipanti utili alla sua attivazione. Invieremo comunicazione agli iscritti 10-15 giorni prima del workshop.

LAST CHANCE! Ti interessa questo corso? Acquista il biglietto entro venerdì 30 settembre 2024 per aiutarci a confermarlo quanto prima.
Se entro questa data non raggiungiamo i numeri minimi di partecipanti richiesti per attivarlo, il corso non sarà confermato e verrà posticipato… non aspettare all’ultimo per comprare il tuo biglietto!

Prima raggiungiamo i numeri minimi utili alla sua attivazione, prima saremo in grado di confermare il corso e garantirne l’esecuzione.
Se il corso sarà confermato, vedrai una spunta verde su questa pagina che dice “confermato/guaranteed to run”, e potrai comprare i biglietti anche dopo questa data.

Info pratiche sul workshop

Lingua: inglese.
Numero massimo: 16 partecipanti
Strumenti e postazione: il corso si svolgerà online e in diretta, attraverso l’uso di alcuni strumenti digitali. Una volta confermato, riceverai tutti i dettagli su come accedere al corso e interagire con il docente e gli altri partecipanti, e su come prepararti al meglio.
È consigliato che ciascun partecipante segua il corso dalla sua postazione: è preferibile non condividere il laptop e la stanza con altre persone e colleghi per una migliore esperienza da remoto.

Porta il corso in azienda

Contattaci utilizzando il form in fondo alla pagina per chiedere informazioni sull’erogazione in forma privata e personalizzabile del corso Software Crafting Programme.

Testimonials…

It’s been five intense weeks in which we explored the principles of good programming, from the “classics” SOLID to the hexagonal architecture.
It wasn’t just a series of lessons but a hands-on and engaging learning experience.
In fact, we worked in Mob Programming mode, all contributing together to writing the code. The common thread was TDD, a technique which, if applied properly, allows you to write “bomb-proof” code!
Heartfelt thanks to Marco and Alessandro for accompanying and guiding us throughout the journey.Alessandra Turolla

An excellent workshop for those who are starting to develop complex architectures and want to understand how to write good code in an agile team.Daniele Ferrari

A truly unique course. It combines theory and practice, gives you lots of ideas and leaves you with the desire to improve your code and your work.Emilio Palmerini

This programme is a real eye-opener! Not only about test-driving your code, but also for writing well-designed software.Vetle Horpestad

The course is very interactive and all participants are included in the learning and discovery.Linh Nguyen

Alessandro Di Gioia

Co-autore del libro Agile Technical Practices Distilled, co-fondatore di Alcor Academy, trainer, sviluppatore e consulente software.

Marco Consolaro

Software crafter, coach tecnico, speaker internazionale, systems thinker,  filosofo, il tutto shakerato con humor veneziano. Co-autore del libro Agile Technical Practices Distilled e co-fondatore di Alcor Academy.

Blog

Outside-In TDD: Scrivere codice che piace al business: Intervista ad Alessandro Di Gioia e Marco Consolaro.

Video

Small Talk: Una chiacchierata informale con Alessandro Di Gioia e Marco Consolaro (YouTubeSpotify).

Chi siamo, in breve :)

Avanscoperta è un ecosistema in espansione fatto di professionisti con una grande passione per l’apprendimento: ci piace imparare cose nuove e scambiare esperienze e idee, esplorando territori finora inesplorati in ambito software, nella sua accezione più ampia possibile.

Selezioniamo con attenzione gli argomenti più rilevanti e i migliori docenti da tutto il mondo, e diamo particolare importanza alle tecniche di insegnamento, preferendo approcci pratici e coinvolgenti.
Unisciti a noi!

Ti interessa questo corso?

Se hai delle domande specifiche, o vuoi ricevere maggiori informazioni, scrivici. Saremo felici di risponderti!







    NEWSLETTER

    Vuoi ricevere una volta a settimana i nostri contenuti esclusivi su tecnologia, sviluppo software, business e design?

    ISCRIVITI ALLA NEWSLETTER :-)

    Iscriviti alla newsletter!