"Il y a des langages qui permettent de faire plus de choses en moins
de lignes... mais finalement, est-ce le plus important ?
Bien écrit.
[Narcissistic IT, same old challenge, same old idiots] (Anglais)
http://www.application-servers.com/links.do?reqCode=showLink&lid=3548
"
Retrouvez cette news sur :
http://www.application-servers.com/comments.do?reqCode=readComments&sid=2007-02-20-23:41:21
À mon humble avis, ce qui est déterminant dans le gain marginal entre
les langages, c'est ce qui fait basculer vers un mode de pensée plus
proche de la solution du problème (voire un mode de pensée au-delà de la
solution du problème, mais c'est un autre débat ;-)
Ainsi, ce qui est radical avec Ruby on Rails, c'est le côté « déclaratif
dans le code ». Ce qui est radical avec JUnit, c'est le côté assertif
hors de tout mécanisme de lancement. Ce qui est radical avec Java, c'est
le côté garbage collecting et pointer-free. Puis le dynamisme autour de
la plateforme, qui est un aspect très particulier.
Pour en revenir aux langages, je considère qu'un des leviers les plus
importants que j'ai découverts ces dernières années concernant la
productivité logicielle, touche les tests automatisés. En fait tout gain
d'écriture dans les tests, est marginalement plus important pour moi que
le même gain d'écriture appliqué au code lui-même.
C'est ainsi que j'ai récemment appliqué pour certaines validations des
jeux de règles écrits avec JBoss Rules (ex-Drools), règles qui disposent
maintenant d'une syntaxe assez claire, sans XML dans tous les coins.
D'une part, moyennant bien sûr le bon effort initial du framework qui va
bien (mon modèle fonctionnel est spécifique. Pas vous ?), l'expressivité
des règles de validation est extrêmement forte.
D'autre part, on s'est aperçu que moyennant l'adoption de ce système de
validation, les règles, comme les tests JUnit du reste, étaient sans
contexte, et donc... parallélisables. Comme elles ne sont que
déclaratives et non compilées (la compilation se fait à la volée, avec
Janino. Demander des détails à Étienne), on arrive à les penser comme
des fichiers transportables un peu partout. C'est très important, de
savoir si un langage devra être compilé ou s'il pourra être interprété à
l'exécution. Mine de rien cela conditionne notre façon de penser son
déploiement.
Noter que les règles elles-mêmes peuvent créer un nouveau contexte, qui
lui-même peut être ensuite validé.
Donc au final, dans la balance, j'ai à comparer :
1. des classes JUnit que je dois compiler, qui me valident certains
aspects pré-déterminés de mon système, et qui s'arrêtent après.
Difficiles à paralléliser. En tout cas pas pensées pour.
2. des règles déclaratives, compréhensibles par tous, parallélisables,
et qui peuvent me créer une nouvelle « vue » du système, que je peux
également revalider par la suite.
La puissance du point 2. rend très éloignées les considérations sur le
choix du langage de développement lui-même. « Du moment que mes clusters
de tests valident votre programme, vous pouvez choisir la techno que
vous voulez ».
Qu'en pensez-vous ?
Et faites-vous confiance aux tests, ou à la maintenabilité ? (Vraie
question)
--
David
"L'expérience est le nom que chacun donne à ses erreurs." (Oscar Wilde)
"Il vaut mieux se tromper avec tout le monde que d'être intelligent
tout seul." (Marcel Achard)