|
| 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 | + |
0 commit comments