Solutions to most of tech problems :
- slow down
- sit down and talk to people
- try things
- rest, go home
Is Craftsmanship inclusive? and Crafting? and Craft?
Craftsman, craftswoman, craftsperson, crafter
Tests, TDD, Clean-Code, Naming, Comments, Communication, Code-review, Pair-programing, Mob-programing, Simple-Design, SOLID, Iteration, Baby-steps, Refactoring, Mentoring, Collective ownership, Self-organization, Continuous Integration, Continuous Delivery
...
Rédigez un cahier des charges pour écrire des nombres en lettres
pluriel de "vingt" et "cent".
"et-un" ou "-un" ?
Facile != Simple
Le besoin peut évoluer.
Le besoin va évoluer.
"Si votre besoin n'évolue plus, c'est que vos utilisateurs sont morts."
Pas la peine d'essayer de réaliser si ce n'est pas possible.
Ce qui est implementé n'est que ce que les devs ont compris
On fini par livrer un logiciel qui "marche" mais qui n'est pas utilisable.
Soit specs et tests sont redondant (donc inutiles)
Soit specs et tests sont incohérents (donc il faut recommencer)
Les "données" utilisées ne correspondent pas du tout à des cas d'utilisations
(type de données, volume, contenu, temps ...)
Le PO dit "là, par exemple, si je veux faire ... ça ne marche pas" avec un cas réel d'utilisations
autant utiliser les exemples dès le début !
Calculatrice Lorsque je saisis 30, j’appuie sur le bouton +, je saisis 45, j’appuie sur le bouton égal, alors j’obtiens 75.
Orthodromie La distance orthodromique entre Paris (48°51’N – 2°21’E) et Montpellier (43°36’N – 3°53’E) est de 595 kms.
Calcul d’agios Sur le 4e trimestre 2012, un compte est débiteur de 451€ du 13/11 au 28/11 et de 342 € du 08/12 au 27/12, avec un taux d’intérêt de 20% annuel. Les intérêts sur la période sont de 7,27 €
Pourquoi s'arrêter à 2 ?
"N'importe quel idiot peut écrire un code qu'un ordinateur peut comprendre. Les bons programmeurs écrivent du code que les humains peuvent comprendre."
"Mal nommer les choses, c'est ajouter au malheur du monde !"
"Il n'y a que deux choses difficiles en informatique :
- l'invalidation du cache,
- nommer les choses".
public List<int[]> getFlg() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList ) {
if (x[0] == 4)
list1.add(x);
}
return list1;
}
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard ) {
if (cell.isFlagged())
flaggedCells.add(cell);
}
return flaggedCells;
}
public RGBColor readCurrentColor(BlinkLed led) {
device.sendCommand(new ReadColorRequest(led));
byte[] response = device.readResponse();
int red = response[2] >= 0 ? response[2] : response[2] + 256;
int green = response[3] >= 0 ? response[3] : response[3] + 256;
int blue = response[4] >= 0 ? response[4] : response[4] + 256;
return new RGBColor(red, green, blue);
}
public RGBColor readCurrentColor(BlinkLed led) {
device.sendCommand(new ReadColorRequest(led));
byte[] response = device.readResponse();
return extractColor(response);
}
private RGBColor extractColor(byte[] response) {
int red = convertToPositiveInt(response[2]);
int green = convertToPositiveInt(response[3]);
int blue = convertToPositiveInt(response[4]);
return new RGBColor(red, green, blue);
}
private int convertToPositiveInt(byte byt) {
return byt >= 0 ? byt : byt + 256;
}
a.getB().getC().doThings();
Pas bien !
Bien !
a.getB().doThings();
A class should have one and only one reason to change, meaning that a class should have only one job.
Evitez les Managers
Un manager fait un peu de tout mais mal, beaucoup de rien et embrouille tout le monde.
Les objets ou entités devraient être ouverts à l'extension, mais fermés à la modification.
Penser héritage
Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.
les objets d'un programme doivent pouvoir être remplacés par des instances de leurs sous-types sans altérer l'exactitude de ce programme.
Un client ne devrait jamais être obligé de mettre en œuvre une interface qu'il n'utilise pas ou les clients ne devraient pas être obligés de dépendre de méthodes qu'ils n'utilisent pas.
one should "depend upon abstractions, [not] concretions."
A. Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux devraient dépendre d'abstractions.
B. Les abstractions ne doivent pas dépendre de détails. Les détails doivent dépendre des abstractions.
Que l'on soit l'auteur-e du code ou la personne qui relit.
On critique le code, pas la personne
Hard with code, soft with human
l'apprentissage est dans les deux sens
En asynchrone, sur un outil de gestion de conf.
En discutant au bureau de son/sa collègue.
l'écrit peut être ambigue, surtout dans une langue qu'on maitrise mal.
Attention aux tournures.
Préférer les questions plutôt que les affirmations.