_(V3.0) Aux sources de la simplicité Bordeaux 2022.pptx
1. A la recherche de la
simplicité perdue
Aux sources de la simplicité
Bordeaux 2022
2.
3.
4. Une définition... pas si simple
simplex
[simplex], simplex, simplex
adjectif II classe
1 simple, composé d'un seul élément
2 particulier, singulier, unique, seul
3 naturel, dépourvu d'ornements
4 élémentaire, facile, qui n'est pas complexe
5 franc, sincère, pur, naïf (péjoratif)
5. revenons à une définition ... simple
- Qui est constitué d'un petit nombre d'éléments qui s'organisent de
manière claire, par opposition à complexe
- Qui est réduit à l'essentiel, sans recherche, sans apprêt, sans
surcharges ni ornements inutiles
13. Une proposition : “Tacler” la Complexité
3 niveaux
★ Exploratoire
★ Stratégique
★ Tactique
14. … we have to keep it crisp, disentangled and simple if we
refuse to be crushed by the complexities of our own making.
Edsger W. Dijkstra
...nous devons garder (la solution) concise, démêlée et
simple, si nous refusons d’être écrasés par la complexité
que nous engendrons.
Edsger W. Dijkstra
15. Et au sein de nos développements…
Ne nous laissons
pas dévorer par la
complexité !!!
20. Origines de la complexité accidentelle
Premature optimization is the root of all evil.
– Donald Knuth.
21. pas des scientifiques, Ni des inventeurs, juste des Assembleurs
Programming, for the most part, consists of choosing existing
algorithms in the right combination to solve your problem.
22. Origines de la complexité accidentelle
You ain't gonna need it
25. Simplicité, PRINCIPE de design (pour les développeurs)
Simple, composé d'un seul
élément (de “simplex”)
● une dimension
● un concept
● un objectif
● un rôle
● une tâche
Et non pas:
● une instance
● une opération
● une interface avec une
seule fonction
https://www.youtube.com/watch?v=SxdOUGdseq4 “Simple Made Easy" - Rich Hickey (2011)
SOLID / CUPID / GRASP Unix philosophy: does one thing well
26. Principes de design : un à la fois
source: https://itnext.io/solid-principles-sketches-a38865e771f0
27. Principes de design : rendre l’implicite Explicite
- Expressivité du code
- Nommer
There are only two hard things in Computer
Science: cache invalidation and naming things.
-- Phil Karlton
30. Définition : mob programming
All the brilliant people working on the same thing,
at the same time, in the same space,
and on the same computer.
Woody Zuill
Toutes ces brillantes personnes travaillant sur la même chose,
au même moment, dans le même espace et sur le même ordinateur.
Ensemble programming
31. S’améliorer en développant de nouvelles compétences
One hour learning, tous les jours depuis deux années
Management
42. Règles de ‘simple design’ (James Shore)
● Intention claire et compréhensible
● Concret, pas spéculatif (YAGNI)
● Cohésion: ce qui change ensemble, reste ensemble.
● Découplage: loin des yeux, loin de l’esprit (abstraction)
● Isolation: ce qui est très souvent utilisé => abstrait,
derrière une interface/contrat.
“Quand (et non pas si) je dois revenir sur ma décision dans le futur, à
quel point ce sera difficile ?"
https://www.jamesshore.com/v2/books/aoad2/simple_design
43. :( ...des outils imparfaits…
Tony Hoare introduced Null references in ALGOL
"simply because it was so easy to implement", says Mr. Hoare.
He talks about that decision considering it "my billion-dollar
mistake".
Orienté Objet - Alan Kay
OOP to me means only messaging, local retention and
protection and hiding of state-process, and extreme late-
binding of all things. It can be done in Smalltalk and in LISP.
There are possibly other systems in which this is possible, but
I'm not aware of them.
45. Identifier les causes de la complexité (et les éliminer)
● Complexité cyclomatique => Algo, fonctions (λ), SRP
● States (Etats)
○ State makes programs hard to test.
○ State makes programs hard to understand.
● Variabilité => Mutabilité
● Effets de bords => Pureté
51. Sensible reasoning in two tasks…
Hilary F. Farris & Russell Revlin
Cette séquence de nombre est donnée : 2, 4, 6
deviner la règle…
réponse 1 : 8-10-12
réponse 2: 14-16-18
https://fs.blog/complexity-bias/
Toute séquence croissante de nombres :
- The participants could have said anything
from “1, 2, 3” to “3, 7, 99” and been correct.
52. Rasoir d'Ockham - 1341
Pluralitas non est ponenda
sine necessitate
Les multiples ne doivent pas être utilisés
sans nécessité
60. Quels moyens pour la defaire…et retrouver de la simplicité
Créativité
Diversité
compétences
Coopération
61. Création d’un super CERVEAU
- compétences intégrées au sein de l’équipe
- capacité d’écoute importante
- rebondir
- considérer toutes les idées / diversité
C’est la partie organisation => rénommer Stratégique par Orga ?
restons humbles...Problem #6, inventing algorithms.
Often we as programmers think we are inventing algorithms to solve our problems. This is hardly ever the case. In almost all cases there are existing algorithms that can be put together to solve your problem. Algorithms like Dijkstra’s algorithm, levenshtein distance, voronoi tessellations etc. Programming for the most part consists of choosing existing algorithms in the right combination to solve your problem. If you are inventing new algorithms you either don’t know the right algorithm or are working on your PhD thesis.
https://syounggallery.wordpress.com/2014/11/03/why-your-code-is-so-hard-to-understand/
On peut donner la définition de Kent Beck également
“Ensemble consistent”
♻︎ Une notion objective.