Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica è ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte è adatta ai ragazzi di 1-2° liceo SSA e di 2°-3° ITIS (in particolare ad indirizzo informatico)
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica è ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte è adatta ai ragazzi di 1-2° liceo SSA e di 2°-3° ITIS (in particolare ad indirizzo informatico)
Introduzione al linguaggio Java per chi ha esperienza di C++. Non si parla di OOP, solo di linguaggio.
Codice sorgente dell'esercizio finale qui: https://pastebin.com/R4yZGQcy
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica è ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte è adatta ai ragazzi di 1-2° liceo SSA e di 2°-3° ITIS (in particolare ad indirizzo informatico)
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica è ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte è adatta ai ragazzi di 1-2° liceo SSA e di 2°-3° ITIS (in particolare ad indirizzo informatico)
Introduzione al linguaggio Java per chi ha esperienza di C++. Non si parla di OOP, solo di linguaggio.
Codice sorgente dell'esercizio finale qui: https://pastebin.com/R4yZGQcy
Queste slide dal titolo provocatorio cercano di dare l'idea che la stupidità e la pigrizia possono avere un effetto positivo nela programmazione per la ricerca di soluzioni semplici. Nello specifico caso parliamo di funzioni in C
TypeScript, ovvero JavaScript che "non si rompe"BENTOSA
Le slide del seminario introduttivo su TypeScript, il superset di JavaScript di Microsoft. Antonio e Federico ci hanno illustrato le potenzialità di questo linguaggio per scrivere del codice JavaScript con meno errori.
Una primissima introduzione al TDD per chi è a digiuno di test in generale e di TDD in particolare. Usa Java/Junit, ma è facimente adattabile ad altri linguaggi. 40-60 minuti.
Creare Suite di Test Automatici intelligenti con Selenium IDEStefano Trojani
Come creare delle suite (test plan) intelligenti con Selenium IDE? Una completa guida che parte dal concettuale per andare nel dettaglio tecnico (non troppo) che spiega un approccio testing strutturato, partendo dagli use case, ai test case.
I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
Dai problemi più semplici a quelli più complessi, è la logica con cui si risolve il problema che fa la differenza. E, nel risolvere un problema, non sarebbe bello poter sempicemente dire alla macchina "cosa" si vuole ottenere, lasciando risolvere il problema di "come" farlo, alla macchina stessa? In questo modo essa potrebbe anche tenere conto delle condizioni di contorno, in modo tale di produrre il risultato nel modo migliore possibile. In questa sessione vedremo come poter risolvere problemi comuni utilizzando un approcio "Set-Based" ("pensare per insiemi"), grazie al quale sarà possibile migliorare le performance di oltre il 100%!
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
Surviving to a Legacy Codebase - Codemotion Berlin 2018 EditionPietro Di Bello
We share our lessons learned on how to regain control of a legacy codebase written in Java (https://github.com/xpepper/fifty-shades-of-legacy-goose-game/tree/master/goose-game-two).
This codebase shows some classic design problems but more than that, badly expresses the domain of the problem we want to solve.
During the session we will tackle the code the XP way: it will be a live refactoring in pair programming; we will show how the quality and expressiveness of the code can be progressively improved if we apply some good development practices with the help of some effective tools.
More Related Content
Similar to A brief intro to TDD for a JUG-TAA event
Queste slide dal titolo provocatorio cercano di dare l'idea che la stupidità e la pigrizia possono avere un effetto positivo nela programmazione per la ricerca di soluzioni semplici. Nello specifico caso parliamo di funzioni in C
TypeScript, ovvero JavaScript che "non si rompe"BENTOSA
Le slide del seminario introduttivo su TypeScript, il superset di JavaScript di Microsoft. Antonio e Federico ci hanno illustrato le potenzialità di questo linguaggio per scrivere del codice JavaScript con meno errori.
Una primissima introduzione al TDD per chi è a digiuno di test in generale e di TDD in particolare. Usa Java/Junit, ma è facimente adattabile ad altri linguaggi. 40-60 minuti.
Creare Suite di Test Automatici intelligenti con Selenium IDEStefano Trojani
Come creare delle suite (test plan) intelligenti con Selenium IDE? Una completa guida che parte dal concettuale per andare nel dettaglio tecnico (non troppo) che spiega un approccio testing strutturato, partendo dagli use case, ai test case.
I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
Dai problemi più semplici a quelli più complessi, è la logica con cui si risolve il problema che fa la differenza. E, nel risolvere un problema, non sarebbe bello poter sempicemente dire alla macchina "cosa" si vuole ottenere, lasciando risolvere il problema di "come" farlo, alla macchina stessa? In questo modo essa potrebbe anche tenere conto delle condizioni di contorno, in modo tale di produrre il risultato nel modo migliore possibile. In questa sessione vedremo come poter risolvere problemi comuni utilizzando un approcio "Set-Based" ("pensare per insiemi"), grazie al quale sarà possibile migliorare le performance di oltre il 100%!
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
Similar to A brief intro to TDD for a JUG-TAA event (20)
Surviving to a Legacy Codebase - Codemotion Berlin 2018 EditionPietro Di Bello
We share our lessons learned on how to regain control of a legacy codebase written in Java (https://github.com/xpepper/fifty-shades-of-legacy-goose-game/tree/master/goose-game-two).
This codebase shows some classic design problems but more than that, badly expresses the domain of the problem we want to solve.
During the session we will tackle the code the XP way: it will be a live refactoring in pair programming; we will show how the quality and expressiveness of the code can be progressively improved if we apply some good development practices with the help of some effective tools.
Surviving to a Legacy Codebase - Voxxed Days Ticino EditionPietro Di Bello
Surviving a legacy codebase: tactics and tools to keep the right path
We will show you how to regain control of a legacy codebase written in Java. This codebase (https://github.com/xpepper/fifty-shades-of-legacy-goose-game/tree/master/goose-game-two) shows some classic design problems but more than that, badly expresses the domain of the problem we want to solve. During the session we will tackle the code the XP way: it will be a live refactoring in pair programming; we will show how the quality and expressiveness of the code can be progressively improved if we apply some good development practices with the help of some effective tools.
Made by Paolo D'Incau and Pietro Di Bello
Vivere per raccontarla: l’importanza del daily journal in un team agilePietro Di Bello
Da anni, nei diversi team con i quali mi sono trovato a collaborare, ho proposto sempre questa pratica: tenere un diario di bordo, da scrivere a fine giornata, per raccontare come è andata, cosa abbiamo imparato, cosa ci manca per chiudere il task sul quale stiamo lavorando e quali ostacoli o dubbi abbiamo incontrato.
Pensatela come un vero specchio dello stand-up meeting: con questo apro la giornata, mentre con il daily journal la chiudo.
Il journal ha tantissimi effetti benefici! Il mio obiettivo è darvi uno spunto per valutare e provare anche voi questa pratica.
Hiring Great People: how we improved our recruiting process to build and grow...Pietro Di Bello
Getting the right people will help create a great team, and will let it grow healthy. Moreover, it will keep it rooted in your company culture, and sustaining that same culture in turn. Nevertheless, too often recruiting is overlooked or completely delegated to HR or external recruiting agencies. In this session I’ll share our experience in building our actual recruitment process, how we got to this recruitment workflow, what lessons we’ve learned and what are the key elements of a recruitment process. I’ll also examine some differences compared to a more “traditional” way of selecting and assessing people. My goal is to help attendees reflect on their own recruitment process and on the value they (and their companies) are getting from it, so that they can find improvement opportunities and ideas to get more value from the recruitment process and “be able to transform your organization”.
Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del malePietro Di Bello
In questa presentazione io e Paolo D'Incau condividiamo esperienze reali tratte da progetti dove applichiamo pratiche di Continous Delivery.
Raccontiamo di come si può far evolvere iterativamente una pipeline partendo da semplici task (build e deploy mono-ambiente) fino ad arrivare ad unica pipeline multi-ambiente ispirata allo stato dell'arte e alle lezioni che abbiamo imparato facendoci del male.
Forniamo esempi concreti, focalizzandoci sugli aspetti relativi al codice, all'infrastruttura e rapporto con gli stakeholders.
Autori: Paolo D'Incau, Pietro Di Bello
Hiring Great People: how we improved our recruiting process to build and grow...Pietro Di Bello
Getting the right people will help create a great team, and will let it grow healthy. Moreover, it will keep it rooted in your company culture, and sustaining that same culture in turn.
Nevertheless, too often recruiting is overlooked or completely delegated to HR or external recruiting agencies.
In this session I’ll share our experience in building our actual recruitment process, how we got to this recruitment workflow, what lessons we’ve learned and what are the key elements of a recruitment process. I’ll also examine some differences compared to a more “traditional” way of selecting and assessing people.
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...Pietro Di Bello
La nostra esperienza ha mostrato che esistono alcune pratiche “rompighiaccio” che, con un costo di introduzione relativamente basso, permettono di far prendere coscienza alle persone di alcune problematiche e dinamiche tipiche dei progetti software e che ne minano il successo.
La presa di coscienza di queste problematiche e dinamiche è il primo passo per comprendere e abbracciare valori e principi dei metodi agili.
Le pratiche di cui vorremmo parlare e che definiamo “ice breakers” per quel che riguarda le metodologie agili sono: lavagna, standup meeting, retrospective, build automatica, test automatici di accettazione.
A cascata poi queste pratiche se ne portano dietro altre più difficili da adottare fin da subito, ma più facili da far adottare quando le persone prendono coscienza dei problemi che gli impediscono di lavorare in modo efficace (pair, tecnica del pomodoro, user stories, TDD, CI, simple design, daily journal, etc) e abbracciano i principi dell’agile.
Per ogni pratica “ice breakers”, a partire dalla nostra esperienza, illustreremo il motivo per cui secondo noi sono tali, le dinamiche secondo noi migliori per proporne l’introduzione, anti-pattern e resistenze al cambiamento che abbiamo incontrato e come le abbiamo affrontate.
Seconda serata di introduzione al Test-Driven Development, tenuta in XPeppers a Trento il 24 Ottobre 2012.
Nelle slide c'è anche la descrizione del coding dojo sullo string calculator che abbiamo svolto assieme.
The rules of the goose game ("il gioco dell'oca" in italian) to be developed in your preferred language as a programming exercise.
We developed using TDD and Java during a JUG Trentino AltoAdige event at XPeppers (August 22, 2012)
1. Test-Driven Development
Coding Dojo
Pietro Di Bello
pietro.di.bello@xpeppers.com
@pierodibello
@xpeppers
JUG Trentino Alto-Adige
Agosto 2012
2. Che cos’è il TDD?
è una tecnica di design in cui lo sviluppo di una
funzionalità è guidato dalla scrittura di uno o più unit
test
• si basa sull'uso di unit test
• lo sviluppo del codice è guidato dalla scrittura di
unit test che devono essere di volta in volta verificati
• il test viene scritto ed eseguito PRIMA del codice
stesso che consentirà di verificarlo
3. Write a test
public class AdderTest {
@Test
public void testTwoPlusThree() {
Adder a = new Adder();
assertEquals(5, a.add(2, 3));
}
}
4. Now it compiles
public class AdderTest {
@Test
public void testTwoPlusThree() {
Adder a = new Adder();
assertEquals(5, a.add(2, 3));
}
}
public class Adder {
public int add(int a, int b) { return 0; }
}
5. Red bar!
public class AdderTest {
@Test
public void testTwoPlusThree() {
Adder a = new Adder();
assertEquals(5, a.add(2, 3));
}
}
public class Adder {
public int add(int a, int b) { return 0; }
}
Expected 5, was 0
6. Do the simplest thing
public class AdderTest {
@Test
public void testTwoPlusThree() {
Adder a = new Adder();
assertEquals(5, a.add(2, 3));
}
}
public class Adder {
public int add(int a, int b) { return 5; }
}
7. Refactor
public class AdderTest {
@Test
public void testTwoPlusThree() {
Adder a = new Adder();
assertEquals(5, a.add(2, 3));
}
}
public class Adder {
public int add(int a, int b) { return a+b; }
}
8. The procedure
1. Write a test
2. Make it compile
Expected 5, was 0
3. Make it pass quickly
4. Refactor to remove duplication
11. TDD: why?
• Per abbattere la complessità
• Consente di ridurre la soluzione di un problema
complesso in tanti problemi più semplici (divide et
impera)
12. TDD: why?
Ogni test rappresenta una opportunità di porre una
domanda sul sistema, la cui risposta ci porterà ad un
maggiore consolidamento della conoscenza e una
riduzione dell'unknown
13. TDD: why?
When we write a test, we imagine the perfect
interface for our operation.We are telling ourselves
a story about how the operation will look from the
outside.
Our story won't always come true, but it's better to
start from the best-possible application program
interface (API) and work backward than to make
things complicated, ugly, and "realistic" from the
get-go.
Kent Beck
14. Simple design
The code is simple enough when it:
0. Runs all the tests
1. Contains no duplication
2. Expresses every idea that we need to express
3. Has the minimum number of classes and functions
(In this order)
Kent Beck, Extreme Programming Explained
15. Il primo test
• deve essere piccolo
• il più semplice possibile
• ad es possiamo selezionare un caso
degenere
• tracciamo i primi contorni di una API ad un
dettaglio molto più fine di quanto siamo abituati
solitamente
18. Il prossimo test
Trattiamo ogni test come una nuova occasione per
imparare e ridurre la complessità sul modello del
problema
Qual’è la prossima domanda a cui vogliamo rispondere?
20. Uso della to-do list
• Utile per gestire la complessità
• elencare i diversi aspetti del problema
• NON si elencano i test da implementare
• non è TDD
• Riduce lo stress
• Bussola per farci capire a che punto siamo e non ci
perdere la strada
• Se mi viene in mente qualcosa la scrivo nella todolist e
continuo sulla mia strada senza perdere focus
• => tecnica del Pomodoro
23. What’s a kata?
A kata is meant to be memorized.
Students of a kata study it as a form, not as a conclusion.
It is not the conclusion of the kata that matters, it's the
steps that lead to the conclusion.
Bob Martin (http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata)
24. The Bowling Game Kata
By Robert Martin “Uncle Bob”
http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
25. Il punteggio del bowling
Ci sono 10 frame. In ogni frame il giocatore ha due possibilità di abbattere 10 birilli
(pins). Il punteggio per il frame è il numero di birilli abbattuti, più i bonus per stike o
spare.
Uno spare è quando il giocatore abbatte 10 birilli in due tiri. Il bonus per quel frame è il
numero di birilli abbattuti al tiro successivo. Nel frame 3 dell'esempio, il punteggio è 10
(i birilli abbattuti) più il bonus di 5 (abbattuti nel tiro successivo.)
Uno strike è quando il giocatore abbatte tutti i birilli in un solo tiro. Il bonus per quel
frame è il numero di birilli abbattuti nei due tiri successivi
Nel decimo frame, se il giocatore fa uno strike o spare può fare i tiri necessari per
completare il frame. In ogni caso, al decimo frame non vengono fatti più di tre tiri.
26. I requisiti
• Scrivete una classe“Game” con due metodi:
• roll(pins : int) è chiamato ogni volta che il
giocatore fa un tiro. L’argomento è il
numero di birilli abbattuti.
• score(): int è chiamato quando il gioco
termina e ritorna il punteggio finale.
30. Una veloce sessione di design
Il decimo frame è diverso dagli
altri: può avere due o tre tiri.
31. Una veloce sessione di design
La funzione score
deve iterare su tutti i
frames e calcolare i
loro punteggi.
32. Una veloce sessione di design
Il punteggio di uno spare o di uno strike
dipende dal punteggio del frame
successivo
33. Coding Katas: String
Calculator
by Roy Osherove
(http://osherove.com/tdd-
kata-1)
34. StringCalculator Kata
Create a simple String calculator with a method
int Add(string numbers)
The method can take zero, one or two numbers, and
will return their sum
• for example “” or “1” or “1,2”
• for an empty string it will return 0
Start with the simplest test case of an empty string and
move to one and two numbers
35. StringCalculator Kata
Remember to solve things as simply as possible so
that you force yourself to write tests you did not
think about
Remember to refactor after each passing test
37. StringCalculator Kata
Allow the Add method to handle new lines between
numbers (instead of commas).
• the following input is ok: “1n2,3” (will equal
6)
• the following input is NOT ok: “1,n” (not need
to prove it - just clarifying)
38. StringCalculator Kata
Support different delimiters
to change a delimiter, the beginning of the string will contain a
separate line that looks like this:
“//[delimiter]n[numbers…]”
for example “//;n1;2” should return three where the default
delimiter is ‘;’ .
the first line is optional.
all existing scenarios should still be supported
39. StringCalculator Kata
Calling Add with a negative number will throw an
exception “negatives not allowed” - and the
negative that was passed.
If there are multiple negatives, show all of them in
the exception message
41. More on code kata
• http://codekata.pragprog.com/
• http://codingdojo.org/
• https://sites.google.com/site/tddproblems/all-problems-1
• http://xp123.com/articles/tests-from-a-hat/
42. Homework
Roman Numerals kata:
write a Roman class which converts an integer into a
roman number string.
es: 12 => “XII”
Bonus: can you write the inverse converter (from roman
to integer)?
es: “IX” => 9
45. Copyright 2008-2012
XPeppers
Tutti i diritti di riproduzione sono riservati.
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
Quickly add a test.\nRun all tests and see the new one fail.\nMake a little change.\nRun all tests and see them all succeed.\nRefactor to remove duplication.\n\n
\n
First we'll solve the “that works” part\n Then we'll solve the “clean code” part\n
\n
\n
\n
\n
Esempio:\n \n Roman 0 => ""\n \n Mercato Titoli\n il mercato è chiuso di default\n non ci sono ordini su un titolo che non esiste\n se metto ordini su un titolo con il mercato chiuso ho una eccezione\n\n
\n
\n
Il prossimo test\n Trattiamo ogni test come una nuova occasione per imparare e ridurre la complessità sul modello del problema \n ogni test ci da ulteriore conoscenza\n ES\n Mercato Titoli\n qual'è la prossima domanda a cui vogliamo rispondere?\n\n
Il prossimo test\n Trattiamo ogni test come una nuova occasione per imparare e ridurre la complessità sul modello del problema \n ogni test ci da ulteriore conoscenza\n ES\n Mercato Titoli\n qual'è la prossima domanda a cui vogliamo rispondere?\n\n