Skip to content

Commit 6cd59c5

Browse files
toolbox > swiss army knife
1 parent 11ea28c commit 6cd59c5

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

sucker-punch-propaganda/README-fr.org

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
#+TITLE: Pourquoi Clojure ?
2+
#+AUTHOR:
3+
#+OPTIONS: toc:nil
4+
* Hypothèse de Sapir Whorf
5+
(Encore) un langage de plus ?
6+
- certains langages permettent d'écrire de meilleurs programmes
7+
- certains langages permettent aussi de devenir de meilleurs
8+
programmeurs !
9+
* Immédiatement productif …
10+
grâce à une interopérabilité parfaite avec Java !
11+
- Possibilité de créer/utiliser n'importe quelle classe/interface ?
12+
- Mêmes type primitifs types (y compris java.lang.String)
13+
Résolution du problème de bootstrapping entre la communauté
14+
d'utilisateurs et les bibliothèques disponibles (qui nous a empêché de
15+
profiter des résultats de la recherche en langages de programmation
16+
pendant des décennies !)
17+
* Un language simple
18+
- Simple :: ≠ facile
19+
- Combattre la complexité incidente :: Il n'y a pas à se glorifier de
20+
maîtriser des outils inutilement complexes ! (Les développeurs
21+
en java comprennent cela très bien à propos du C++ ☺)
22+
23+
* Orienté Object ‽
24+
- type
25+
- identité
26+
- état
27+
- noms d'attributs → values
28+
- mutabilité
29+
- (single) dynamic dispatching
30+
- espace de nommage
31+
Clojure a *tout* cela, /à la carte/.
32+
33+
Boîte à outils > couteau suisse
34+
* Comportements par défaut pertinents
35+
- immutabilité : Programmatio Orientée Valeur (transients disponibles
36+
mais les structures de données persistantes sont extrêmement efficaces)
37+
- typage dynamique (possibilité d'annotation de type)
38+
- binding lexical (binding dynamic disponible)
39+
- static dispatching (dynamic dispatching (single / multiple) disponible)
40+
- structures ouvertes : dictionnaires sur des symboles (structures
41+
fermées disponibles)
42+
* Excellentes primitives pour SMP
43+
*Immutabilité !*
44+
- vars :: mutabilité isolée à chaque thread
45+
- agents :: mutations asynchrones dans une queue
46+
- synchronisation inter-threads :: mutations atomiques
47+
- sur un /atoms/
48+
- dans des transactions sur de multiples /refs/
49+
* Une syntaxe très simple ☺
50+
"Au fait, c'est un LISP"
51+
[[file:~/Code/repositories/clj-pres/4clojure-oriented-prez/src/lisp-angry-meme.png]]
52+
* Ne paniquez pas !
53+
Pas forcément /facile/ au premier abord, mais :
54+
- pas de () pour les paires lorsque la syntaxe le permet
55+
- le code est une structure de données (liste), mais la plupart des
56+
structures de données ne sont pas des listes :
57+
- [vector]
58+
- {map}
59+
- #{set}
60+
- Il y a des IDE (e.g. emacs) pour nous aider !
61+
- écriture (electric parenthesis)
62+
- lecture (rainbow parenthesis)
63+
- e.g. ≠ i.e. ☺
64+
* M-x emacs-ftw
65+
[[file:clojure-in-emacs.png]]
66+
* Plug-in Eclipse
67+
[[file:sc-ccw.png]]
68+
* La (vraie !) Metaprogrammation
69+
- David Wheeler :: "Tous les problèmes d'informatique peuvent être
70+
résolus en ajoutant un niveau d'indirection."
71+
- Moi :: "Tout tâche pénible peut et doit être automatisée."
72+
- Moi (encore!) :: "La programmation ne devrait jamais être pénible !"
73+
74+
Donc on devrait être capable d'automatiser de la programmation !
75+
Pour que ce soit /facile/, il *faut* la /simplicité/ syntaxique du
76+
code comme structure de données (et je suis un utilisateur de
77+
Boost::mpl !).
78+
[Macronomicon by M.Fogus]
79+
80+
* Conclusion
81+
Plateforme parfaite pour :
82+
- Puristes :: vous pouvez ajouter des monades avec les macros !
83+
- Adeptes de la productivité à tous crins :: réutilisation de
84+
toutes les bibliothèques / frameworks Java !
85+
- Chefs de projets frileux :: c'est juste des jars parmi d'autres !
86+
87+
Tous les effets de bord ne sont pas néfastes : en apprenant ce
88+
langage, vous découvrirez aussi de nouveaux concepts. Vous aurez aussi
89+
une meilleure compréhension de ce que vous connaissez déjà (e.g.POO,
90+
état, temps, valeur, hamacs,…)
91+
92+
* TL;DL
93+
- Ne craignez/rejetez pas l'inconnu/étrange
94+
- Apprenez et amusez-vous !
95+
96+
"+d’autres ne pourront jamais se résoudre à passer des fonctions en
97+
paramètres d’autres fonctions dans une forêt de parenthèses+" ☹
98+
99+
100+
J'ai évité les LISP pendant 10 ans :
101+
"I was blind, now I can see.
102+
Rich made a believer out of me !" ☺
103+
104+
105+
106+
* [Web|Bib]liographie
107+
108+
- Présentations (slides / vidéos)
109+
- Are We There Yet ?
110+
- Hammock Driven Development
111+
- Simple Ain't Easy
112+
- …
113+
- Livres
114+
- The Joy of Clojure
115+
- Clojure in Action
116+
- Programming Clojure 2^{nd} ed.
117+
- …
118+

sucker-punch-propaganda/README.org

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ keeping us with C for decades despite all the good work in academia.
2626
- (single) dynamic dispatching
2727
- namespace
2828
Clojure has it *all*, /à la carte/.
29+
30+
Toolbox > swiss army knife
2931
* Sane defaults
3032
- immutability : Value Oriented Programming (transients available but
3133
the persistent data structures are extremely efficient)

0 commit comments

Comments
 (0)