Combattons la programmation orientée Aspect
Par Laurent simon le vendredi, 24 mars 2006, 04:45 - Comprendre - Lien permanent
Hier j’ai découvert ce commentaire surprenant sur l’un de mes billets :
Mr Simon, ayant la plus haute estime pour vos compétences, je souhaiterais avoir votre opinion sur un sujet grave:
Au terme de plusieurs années de développements, je vois avec effroi l'apparition du métier à tisser dans notre noble corporation. J'ai été de tous les combats, ainsi j'ai structuré puis encapsulé afin de chasser l'impie de mes programmes.
Mais cette fois-ci la coupe est pleine: j'apprends avec stupeur que l'on veut injecter des greffons sur mon code, sans m'en avertir. Mon code va donc être utilisé, détourné de son objectif initial, dénaturé par de multiples et invisibles GoTos!
J'appelle donc à la révolte! Unissons-nous programmeurs de tous les pays! Contraquons contre cette soi-disant programmation orientée Aspect juste bonne à nous transformer en petites mains!
Bruno
J’ai commencé par répondre à ce commentaire, mais la "gravité" du sujet évoqué par Bruno m’a amené à considérer de répondre sous la forme d’un billet à part entière. Ceci afin d’attirer l’attention du plus grand nombre sur les mesures à prendre pour empêcher la progression de la programmation orientée Aspect.
Bruno, voici donc ma réponse :POA, c'est moche ce qui vous arrive. Je comprends très bien que le viol de votre code au plus profond de son intimité puisse vous faire craindre la mise en péril de son intégrité. Mais sachez que vous en êtes avant tout le principal responsable! De par votre attitude, à sans cesse le structurer et a en isoler chacune des fonctions en procédant à une encapsulation systématique vous avez rendu votre code aguichant sous tous ses aspects
. Si vous vouliez porter l’affaire en justice, je pense qu’au regard de votre attitude provocante les violeurs/voleurs dont vous parlez seraient relaxés.
Egalement amateur de beau code, je comprends votre douleur et vos craintes. Malheureusement pour vous aider dans votre combat je ne peux que vous donner quelques conseils qui vous demanderons certainement beaucoup de courage et d’efforts pour les mettre en application.
Afin que ce gang de violeurs qui se réclament du mouvement de la programmation Aspect ne puisse plus s’en prendre à votre code, il faut que vous cessiez de les provoquer ainsi en affichant de tels attraits. Pour les repousser, vous devez produire du code qui pour eux sera répulsif. La recette de l’écriture d’un tel code est relativement simple :
- Afin d’éviter l’intrusion ultérieure de Gotos invisibles mettez en partout dès le départ ainsi ces intrus trouverons difficilement un endroit où s’installer.
- Ne scindez pas votre code en fonction des services qu’il rend mais plutôt en fonction de critères purement techniques dans l’unique but d’en faciliter la rédaction. Ce découpage ingénieux satisfera votre égo de développeur, n’apportera strictement rien en terme de service rendu mais rendra surtout ces services difficilement utilisables par vos violeurs.
- Pour couvrir un besoin n’essayez pas de comprendre le « quoi » mais pensez uniquement au « comment ». Cherchez une solution technique. Dès que vous en tenez une, lancez vous. Ne vous inquiétez pas. Si par la suite vous découvriez des besoins que vous n’aviez pas perçus au départ, vous trouverez toujours bien un endroit où les intégrer dans ces grandes procédures monolithiques auxquelles vous aurez naturellement abouti.
- Pour chaque nouveau besoin semblable au premier, mettez en pratique la réutilisation. Pour ce, commencez par une opération de copier/coller et aménager ensuite le code ainsi obtenu en fonction du besoin. Les points de passages génériques sont les endroits de prédilection de vos agresseurs. En procédant ainsi vous rendez chaque point de passage unique et donc moins attrayant pour ces derniers.
- Utilisez les notions de classes, d’attributs et de méthodes en fonction de vos inspirations du moment en dehors de tout standard et de toute attente. Ceci vous apportera un grand sentiment de liberté et aura le bénéfice de mettre vos violeurs en déroute.
- N’utilisez surtout pas de système d’exceptions. Les exceptions ainsi générées pourraient être dérobés par vos voleurs. Utilisez exclusivement des codes de retour dont vous seul aurez le secret.
- N’utilisez pas non plus une classification trop précise, elle pourrait fournir des indices à vos agresseurs. Concevez un système hyper générique dans lequel vous seul saurez appliquer le cast qui va bien au moment opportun.
- Si vous programmez en Java, pour les mettre définitivement en échec, le must serait bien sûr d’utiliser votre propre ClassLoader en prenant soin de ne passer la main aux autres ClassLoader sous-jacents qu’en cas d’absolue nécessité car c’est par là qu’entrent vos voleurs.
Je sais quelle peine cela peut vous causer de devoir écrire un tel code. Aussi, afin de faciliter votre démarche, je vous conseille d’aller faire un stage dans une SSII très réputée pour vous faire coacher par un développeur ou mieux encore par un architecte. Choisissez cette SSII la plus grosse possible. J’ai en effet constaté de par mon expérience que plus elles étaient grosses, plus les intervenants qu’elles proposaient à leurs clients avaient un talent inné pour produire un tel code. Je les en remercie d’ailleurs tous les jours car après leur passage ils laissent de véritables mines d’or. Quand j’arrive ensuite pour restructurer ces grands projets malades je suis alors accueilli en véritable messie.
Voilà, j’espère que ces humbles conseils que je vous prodigues vous permettrons à vous et à beaucoup d’autres de gagner le combat que vous avez engagé contre la programmation orientée Aspect.
Laurent Simon
Attention, ce billet contient une forte dose d’humour. Sa lecture au premier degré peut provoquer des maladies graves.
Commentaires
Cher laurent,
Je crois déceler dans votre meta-reflexion une critique bien sentie sur mon comportement de POUF (Programmeur Orienté UML Facile) juste bon à attirer des violeurs GOF à l'intellect puissant et fortement membrés.
Je ne m'en offusque pas loin de là mais vos reflexions m'inspirent quelques remarques:
Ne pensez-vous pas que le retour à la POP (Programmation orientée Programmation) est difficilement envisageable dans un contexte où l'abstraction connait une telle surenchère sémantique et médiatique?
RDF, XML, XMI, XAML, MetaFramework tout cela me rappelle l'époque bénie des PF (Petits Fronts) pendant mon service militaire.
Il fallait à l'époque une pléthore de sigles courts, précis et bien patternisés permettant de communiquer rapidement entre tous les PF bien formés.
Désormais, tous les cabinets de recrutements ont une méthodologie (XPOufML) pour reconnaitre et classifier rapidement leurs POUFS:
<begin>
<transaction>
<a connait XML?:>
<2 ans senior>
<a connait Java?>
<5 ans confirmé>
<a connait POA?>
<a Corba non?>
<mmmmm....a connait RDF?>
<A koi? Ile de France? Oui a connais ca!!>
</transaction>
</begin>
Sans compter tous les décideurs qui grâce à tous ces sigles ont maintenant une visibilité parfaite sur l'évolution de leurs meta-urbanisations:
un nouveau portail d'accès pour les machines à café de nos clients? pfff.. quelques annotations soupoudrées de tissages et le tour est joué!
La situation n'est donc pas si simple.
Dans cette lutte de pouvoirs titanesque et dévastatrice, dans cette tour de Babel, qui m'interdit de constituer mon propre XMYSELFML? A moi? Afin de revendiquer mon identité.
je suis perdu, je ne sais plus et je n'ai pas envie de faire comme l'oiseau...Aidez-moi..
Bruno G
PS: dis donc Laurent quand on clique sur tes boutons en haut (profil, mission..) ca marche pas avec mon IE. A spécialiser peut etre?
Concernant RDF, un de mes copains qui bosse à la recherche fondamentale chez Krosoft à Redmond m'a appris cette semaine que les meta données vont transformer considérablement notre conception cognitive apportant enfin une apothéose sémantique sur la manipulation de la connaissance.
Tout ceci, je dois le dire humblement, m'a à proprement parlé, troué le c...
Et puis j'ai puissamment réfléchi.
Cet après-midi, en épluchant mes pommes de terre pour le repas du soir, j'ai eu une vision brutale de la réalité.
Ainsi, en faisant abstraction de toute la pollution rhétorique actuellement en vigueur, j'ai constaté un fait troublant et consternant:
La meta donnée, débarassée de toute l'auréole de noblesse et de mystère qui l'entoure, est en fait une donnée comme les autres sauf qu'elle est meta justement!
A ce propos, on peut se demander qui aujourd'hui, a le pouvoir de décision sur la qualification et la hierarchisation d'une donnée par rapport à une autre.
Il serait interessant de définir là encore, dans un souci de normalisation, un comité patternisé avec des roles bien précisés qui discuteraient à l'infini des forces d'interraction entre ces différents niveaux de conception de données.
Mais là n'est pas le propos, on déduit facilement que la meta donnée est aussi exposée à une observation à partir de laquelle on peut 'ontologuer' ce qu'on veut.
Alors pourquoi cette démarche d'encapsulation, d'observation? Qui tire les ficelles de tout cela?
Une piste quantique n'est pas à négliger: par ta Sainte Observation les Sous-Systèmes tu Modifieras (Heisenberg).
J'ai l'impression que l'on nous propose ni plus ni moins que d'alimenter par nos annotations un système d'observation et d'inférence glouton (mais que fait Morpheus?).
Les cadors de l'IA récidivent ainsi avec leurs systèmes à base de règles zombies et péteux.
Mais cette fois-ci, c'est vous tous artisans du Web qui allez devoir contribuer à l'effort commun pour dynamiser des systèmes d'inférence vampires, vieux comme le Web.
En conclusion et d'une manière plus pragmatique, j'aimerais donc savoir cher Laurent, quand ces concepteurs de systèmes à base de règles vont ils arreter de nous embeter?
Quand vont ils cesser de faire de l'ombrage aux vrais développeurs, ceux qui travaillent sur des techologies bien burnées telle la recherche opérationnelle?
bruno
Bruno,
Je crois qu’il va falloir s’y habituer. Plus nous avancerons plus nous irons dans ce sens. A terme, ce qui risque de disparaître c’est tout simplement la bonne vieille programmation (ce que tu appelles la programmation orientée programmation). L’informatique en est encore à un stade artisanal comparée à des technologies plus anciennes qui ont atteint un stade industriel. L’informatique se cherche toujours. Aujourd’hui, ce sont les développeurs qui créent les applications. Par conséquent se sont donc eux qui dirigent son évolution en élisant les technologies qui leurs conviennent. Mais, petit à petit, les mentalités évoluent. Les développeurs admettent maintenant des choses auxquelles ils n’auraient pas adhéré il y a encore quelques années.
J’en ai d’ailleurs un très bon exemple. En 92, j’avais créé un outil un peu magique qui séduisait les directions opérationnelles. Sans dire le mot, tout était basé sur un méta-modèle qui permettait de décrire les specs techniques pour produire des applications CRUD. Je l’ai commercialisé début 95 mais j’ai fini par le mettre au placard en 97 devant l’enthousiasme limité qu’il suscitait auprès des développeurs. Bien qu’ils puissent faire tout ce qu’ils voulaient, ceux-ci se sentais frustrés de perdre la main sur une partie du code. Quand je vois les éloges que l’on peut faire de Ruby on Rails aujourd’hui, je souris car c’était exactement la même chose mais seulement 10 ans trop tôt.
Le problème dans cette phase transitoire, c’est que vu que l’informatique se cherche, elle va un peut dans toutes les directions nous amenant cette profusion de technologies plus ou moins complémentaires accompagnées de tous leurs acronymes.
La bonne nouvelle dans tout ça c’est que les véritables changements ne pourront se produire qu’à partir du moment où les technologies de remplacement seront simples et accessibles au plus grand nombre. On peut donc déjà affirmer qu’il ne s’agira pas de tous les méta-trucs dont on nous gratifie en ce moment. On retrouvera certainement alors une bonne logique bien rationnelle et simple à comprendre mais probablement pas de code au sens ou on le perçoit aujourd’hui.
Dans cette veine, ce qui est certainement le plus à surveiller, je pense que c’est ce qui tourne autour de la sémantique. (RDF, OWL, Sparql)
Ceci dit les méta-trucs du moment ont leur intérêt. Le problème n’est pas le méta en soit mais l’excès de trucs. Que ce soit la POA, les annotations Java, aucunes de ces technos n’est la pierre philosophale. Mais elles peuvent grandement faciliter la vie si elles sont bien utilisées pour simplifier le quotidien en évitant d’écrire des choses rébarbatives ou en permettant une intégration normalisée au travers de standards reconnus. Le tout c’est de les utiliser à bon escient et non pas par effet de mode. Combien de fois je vois des choses réalisées sous forme d’annotations ou injectés en aspect qui n’apportent strictement rien et qui auraient pu être réalisées plus simplement de façon plus traditionnelle. Mais c’est la mode…
Pour les liens qui ne fonctionnent pas actuellement, c’est normal ça fait partie des 99 000 choses qui me restent à faire.
PS : excuse moi, suite à une vague de spam, j’ai du faire le ménage dans les commentaires et j’ai fait un clic de trop. J’ai supprimé ton dernier commentaire (mais après l’avoir lu). C'est aussi la cause de ma réponse trés tardive.
Bravo, Il y a longtemps qu'un blog ne m'avait pas fait rire comme ça! J'ai même relu ce post en entier (avec les liens et tout) après avoir remarqué le commentaire au sujet du degré de lecture... D'habitude je suis pas bon public pour les blagues d'informaticien mais là, c'est vraiment excellent! Merci.
Bravo, Il y a longtemps qu'un blog ne m'avait pas fait rire comme ça! J'ai même relu ce post en entier (avec les liens et tout) après avoir remarqué le commentaire au sujet du degré de lecture... D'habitude je suis pas bon public pour les blagues d'informaticien mais là, c'est vraiment excellent! Merci.
Ah ! la POP, en voila un concept interessant ! Nul doute que cet acronyme sera repris et reutilise (par copier-coller) par de nombreux informaticien, a commencer par moi (pour ceux qui l'ont remarquer, oui, il n'y a pas d'accents, non, je ne sais pas quoi faire pour en mettre, oui, je sais, je suis petit, et oui, aussi, le clavoer qwerty de ce portable est lui aussi petit).
Je voudrais ajouter un point - histoire de completer le tableau. Qui dit code d'erreur dit constantes. Utilisez des constantes litterales plutot que symboliques. Elles ont l'avantage de se repeter de multiple fois dans le code (des fonctions differentes peuvent renvoyer des codes d'erreurs identiques). Si les guidelines d'ecriture du code vous forcent a utiliser des constantes symboliques, utilisez des noms tels que ERROR_5 (et son pendant ERROR_5_OK, a utiliser de temps en temps) - bref : surprenez !
J'ai pas trop compris c'était quoi la programmation orienté aspect (je sais juste programmer en PHP et j'ai commencé la programmation en C).