Thématiques principales

Affichage des articles dont le libellé est Réflexion. Afficher tous les articles
Affichage des articles dont le libellé est Réflexion. Afficher tous les articles

dimanche 19 avril 2020

Le gain en maturité

Un petit billet d'humeur aujourd'hui suite à un constat. Quand j'ai commencé ce blog, j'avais la résolution de retrouver un rythme. J'en avais rapidement parler dans [donc-ca] sans vraiment être rentré dans le détail ensuite a l'occasion d'un bilan [autobio], la j'ai expliqué un peu mon parcours et pourquoi j'avais décidé de tenir ce blog.

Ecrire un blog


Sur le fond au delà des raisons personnelles, si l'on souhaite être pragmatique, tenir un blog ça permet en premier lieu de faire une veille techno réaliste. Comme je l'expliquais dans [veille], a mon sens on peut bien lire tout les articles que l'on veut ou tous les tutoriaux du monde, le monde de l'informatique est vaste et très hétérogène et retenir quelque chose d'une lecture au delà de quelques semaines permet au mieux de pouvoir dire, "oui j'ai vu ou entendu parler", mais clairement celui qui prêtent dire "oui je connais" est  un menteur.

De la veille


Sans revenir sur le contenu de cet article [veille], prendre la mesure d'un outils ou d'un concept en informatique, cela nécessite au moins de manipuler. Cela permet de se confronter (un peu) aux limites, aux écueils, aux trucs fun d'une techno mais cela permet aussi de mieux la situer dans son écosystème technique.

Par expérience, la encore, (et cela me relève de mon opinion et peut être de mon fonctionnement, se rassurer, consolider, se prouver etc...) a mon sens il faut aussi aller au delà et écrire un billet sur ce que l'on voit, cela permet de consolider et de garder une trace de ce que l'on a fait.... car il faut pas se leurrer: on oubli!

Oui on oubli! Aussi bon soit votre mémoire, elle a une limite et un temps d’accès ou un temps de recontextualisation (vous savez le truc que vous savez mais vous savez plus pourquoi comment ni comme ça s'y rattache...)

Et la encore, mettre noir sur blanc (ou 1 sur 0) permet de fixer les choses, de mieux mémoriser et cerise sur le gâteau, vérifier si notre vision de quelques a du sens! Je ne compte plus aujourd'hui les fois ou lors de la rédaction d'un article je me suis rendu compte d'une faille dans ma compréhension des choses. Et parfois cela a même pus complètement remettre en question l'article!

Mais pas que


Aujourd'hui, après 3 ans de rédaction plus ou moins suivi et prés de 170 publiés j'ai découvert un denier point intéressant a la rédaction d'articles. Non cela n’améliore pas l'orthographe désolé ! (même si la capacité rédactionnelle est quand même notablement amélioré) non mais la rédaction de tous ces articles permet a terme d'avoir son parcours en perspective.

Je ne parle pas forcement de pouvoir utiliser cela comme un outil du genre CV même si ce la peut y trouver du sens (jusqu’à un certain point) mais de simplement permettre de regarder son parcours, ce que l'on a appris, les choix que l'on a fait (ces derniers étant contextualisable avec parfois peut être des besoins, d'autres par goût personnel) et aussi de voir son évolution sur les sujets.

Quand je relis certains de mes articles (car oui ça m'arrive pas de façon narcissique mais parce que parfois c'est utile de les utiliser comme aide mémoire) je me rend compte que autant parfois j'ai pu être pertinent sur certains sujet parfois pas du tout. Pour tout dire, je me suis même demandé parfois si je ne devais pas retirer certains de mes anciens articles car je les juge aujourd'hui insuffisant....

Bien sur je ne ferai pas ça, car en fait ces articles démontrent une évolution, si leur contenu n'est pas pertinent, leur présence au milieu des autres faits états des tentatives pour avancer et construire. Bien sur parfois c'est léger et parfois il y a des bêtises de dites mais c'est la aussi que l'on apprend et que l'on se rend compte justement que l'on avance!

Donc voila un autre point qui devrais donner envie d’écrire: le droit de se tromper, la possibilité de prendre du recul, la joie de se voir évoluer et de gagner en maturité!

Références


[donc-ca] https://un-est-tout-et-tout-est-un.blogspot.com/2017/09/donc-ca.html
[veille] https://un-est-tout-et-tout-est-un.blogspot.com/search?q=veille
[autobio] https://un-est-tout-et-tout-est-un.blogspot.com/2018/09/100-un-peu-dautobio.html

dimanche 29 mars 2020

Confinement, articles, boulots, tout ca tout ca....

Je n'ai pas beaucoup donné de signes de vie ce mois ci. Il faut dire que ce mois de mars a ete un peu spécial, je prévoyais d’écrire un peu plus.  J'avais même pas mal de sujets sous le coude, mais tout ça a été perturbé : non seulement je devais normalement changer de mission début mars afin de rejoindre la cellule architecture de la boite dans laquelle je suis en mission, mais en plus de cela, la vague Coronavirus est arrivée!

Mon changement de mission a donc été reporté tout comme les missions dans lesquelles je devais intervenir. Ainsi en attendant, restant dans l'equipe initiale, il a fallu alors trouver de quoi s'occuper.

Bon de ce coté la, il y avait encore de quoi faire, surtout dans la thématique de soutien d’équipe (ce que l'on pourrait appeler DevOps aujourd'hui) et c'est justement sur ces sujets que les prochains articles vont s'appuyer (ba oui tant que c'est chaud).

Pourtant, pas d'articles! Ba oui en fait avec tout ca, il a fallu etre sur le pont! Car le coronavirus nous a un peu mis dehors de l'entreprise! Et il a fallu s'adapter au mode teletravail mais toutes les contraintes que cela peut appeler: déménagement, autorisations, VPN, organisation etc.. un grand pas en avant malgré tout!

Et finalement j'ai quand même changé d’équipe! donc forcement, de nouveaux sujets a aborder, des nouvelles contraintes de nouvelles réunions! Enfin bref, beaucoup de taff!

Du coup bien sur j'ai pris du retard, un bon mois même! Mais cela va se tasser, la routine commence a se remettre en place autant a la maison qu'au boulot! (pas dur c'est le même lieu du coup!) et on va aussi pouvoir se reallouer un peu de temps pour les articles!

Donc voila, je suis pas mort et prochainement, il devrait y avoir une petite série sur le DevOps qui devrait arriver! a bientôt donc!

jeudi 7 mars 2019

Python : Les classes et méta-classes

Un article, court celui ci pour explorer le concept de class dans python. ici rien de compliqué, l’approche est classique comme dans tout autre langage. On déclare un mot clef spécifique un nom, et on par sur une surcharge éventuelle des méthodes de base de la classe Object dont on dérive par défaut.

La classe

Ainsi sera par  exemple amener à surcharger une où plusieurs méthodes __init__ dont le rôle est l’initialisation de votre instance. A noter que cette instance est créée par la méthode __new__ qui elle n’est pas à surcharger (enfin on peut mais c’est pas bien) et qui est en fait le vrai constructeur de notre classe.

On notera au passage que l’on pourra distinguer deux types de méthodes, celles de classe comme __new__ au quelle la classe elle même est passé en paramètre et celle d’instance auxquelles c’est le nouvel objet fraîchement qui est créé qui va etre passé en paramètre.

jeudi 3 janvier 2019

2019 une nouvelle année

Nous voilà en 2019, depuis septembre 2017 que je tiens ce blog, je tiens un rythme de croisière de 4 à 5 articles par mois arrivant pour l’année 2018 à environ 70 articles écrits. Certes la qualité n’est pas toujours au top que ce soit orthographiquement ou en terme de présentation mais sur le fond je pense que les choses posées sont à minima intéressantes.

Du coup on aura vu un peu de docker (surtout dernièrement) du Java, du python, et de l’IA. On se sera aussi intéressé au processus d’apprentissage et de veille technologique avec l’utilisation de AsciiDoc comme moyen de mise en forme (changeant assez avantageusement de latex et Beamer il faut l’avouer).

En 2018 j’avais également changé de boulot quittant Thales pour Capgemini et son client Grdf où il avait fallu faire une montée de version de son SI. Aujourd’hui, la tâche étant en passe de se finaliser et n’ayant pas, au vue des discussions que j’ai pu entretenir avec mes managers de perspectives autres que ce projet décidé de quitter de nouveau ce poste pour aller vers d’autres aventures.

Ainsi en 2019, je rejoins Norsys qui m'ont semblé être une boite responsable, voulant tirer ses collaborateurs vers le haut. Cela me va parfaitement, moi qui ne voulait clairement pas passer mon temps sur les mêmes activités je pense que chez eux j’aurais largement l’opportunité de diversifier mes tâches. Nous verrons cela.

Du coup en terme de blog qu’est ce qui s’annonce pour 2019? En l'état un peu la même chose que 2018, continuer sur l’IA et parfaire les sujets autour du machine learning afin de pouvoir passer au Deep Learning. En parallèle, il sera aussi question de terminer les dossiers autour de OSGI et Docker (aborder les outils compose, machine, swarm). Essayer également de traiter un peu plus finement la question de la modélisation (du MDE, du DDD des ontologies) et parler de Spark le framework BigData en oubliant pas Scala, R, python etc....

Voila, ca fait encore de belles perspectives et beaucoup de travail surtout que j’aimerai de nouveau également aborder la question de la publication scientifique (en tentant de publier en démarrant déjà sur mon travail de thèse et celui sur l’IA de ces derniers mois), les approches de validation (fréquentiste, bayésienne) et parler un peu peut être de scepticisme avec les approches zététiques (on verra que c’est un sujet intéressant surtout en lien avec l’IA)

Enfin voila, en vous souhaitant une bonne année 2019, je vous dis à bientôt pour le prochain article qui ne devrait pas arriver dans très longtemps.

samedi 30 juin 2018

Ceux qui nous motivent

Lorsque l'on réalise un entretien d'embauche (que l'on soit recruteur ou postulant), ce qui est déterminant, ce sont les gens et les personnalités. Au delà des compétences, l’élément déclencheur sera toujours la réponse a la question: "mais est ce que j'ai envie de bosser avec lui?"

Bien sur cela ne se résume pas à choisir un collaborateur qui sera sympa mais surtout si ce futur collaborateur aura sur moi un impact intellectuellement significatif en m'ouvrant à de nouvelles perspectives, de nouvelles réflexions. 

Personnellement, ça a toujours été la clef de mon choix dans ma manière de choisir mes employeurs. A chaque fois, le point qui m'a pousser a choisir une entreprise plutôt qu'une autre a été l'humain. 

Pour nuancer mon propos, je dirais qu'a l'inverse c'est aussi l'humain qui m'a fait quitter mes postes.... car certaines personnes a l'opposé n'apportent pas grand chose et souvent au contraire perturbent, font douter lorsque ce n'est pas justifié et corrompent la pensée. On en sort souvent en se ressourçant par une bonne prise de recul. Cependant, cela consomme de l’énergie qui aurait pu être mieux utiliser...

mercredi 10 janvier 2018

Les gens vivent en s'appuyant sur leurs convictions et leurs connaissances. Ils appellent ça la réalité.

Petit aparté sur une phrase que j’aime bien :

"Les gens vivent en s’appuyant sur leurs convictions et leurs connaissances. Et ils appellent ça la réalité. Mais connaissance et compréhension sont des concepts ambigus. Cette réalité n’est peut être qu’une illusion. Et si le monde n’était régi que par de fausses croyances… Ne porterions nous pas un autre regard sur la réalité ?"

J’aime bien cette phrase car elle met bien en évidence l'écart qui existe entre le monde et le réel, la connaissance que nous en avons et les croyances que nous portons sur lui.

C’est amusant car ces sujets sont traités par une chaine youtube très intéressante, Hygiène Mental ou c’est justement le propos de chercher à rationaliser notre rapport avec les réel, de ce que nous connaissons de lui et ce que nous pensons savoir mais qui ne se base en réalité que sur des croyances.

Cette chaine ne cherche pas à mettre croyances et connaissances en opposition mais cherche à leur donner à chacune une définition et un rôle dans le processus de réflexion intellectuelle.

Les connaissances sont des concepts et propositions évaluées, éprouvées et approuvées sur une base de faits à l’aide de méthodologies. Donc une connaissance est une affirmation démontrée, démontrable, fondée sur des connaissances valides.

Deux questions se posent donc: comment démontrer les premières connaissances? et qu’est ce qu’une méthode permettant de faire une démonstration?

Évidement il existe des connaissances que l’on ne démontrera pas car celle ci sont suffisamment élémentaire pour ne faire l’objet d’aucune contradiction. Ces connaissances font consensus comme “le nez au milieu de la figure”... et si l’on souhaite un jour pouvoir élaborer un raisonnement, il nous faut bien considérer des concepts comme acquis sans démonstration sans prendre le risque de tomber dans des paradoxes [2].

Maintenant que nous avons une base de faits, il nous faut être capable de les manipuler afin de nous permettre de tirer des conclusions. Pour cela, nous avons des propositions de base comme nous pourrions l’avoir en informatique avec la logique binaire. Ainsi, pour pouvoir raisonner et déduire des choses, il nous faut pouvoir associer des faits. En utilisant des opérateur comme ET, OU, NON ou -> (implique) nous allons pouvoir commencer à élaborer des déductions.

Sur cette base nous allons pouvoir élaborer nos premiers raisonnement nous permettant de construire une sorte de pyramide inversée de la connaissance. A partir d’une base étroite, on va déduire de nombreuses connaissances, nous permettant d'accéder à d’autres déductions et connaissances.

Bien sur ce qu’il y a de dangereux avec cette pyramide est que au plus une connaissance est en bas de l’échelle et au plus elle a de l’importance. Si elle est fausse, tout ce qui en suit est faux (même si cela semble plein de bon sens…. mais comme on dit le diable se cache dans les détails et c’est souvent en les négligeant que l’on tombe dans ses pièges) De la même manière, l’appareil de déduction se base sur des opérateurs nous permettant d'élaborer nos résultats, si ces opérateurs comportent des erreurs, alors rien dans nos déductions n’a de valeur.

Nous voyons ici que l’on peut considérer le réel comme un territoire dans lequel la connaissance cherche à s'étendre. Bien sur cette vision est absolue. Les gens ne partagent pas le même espace de connaissance et celle ci peut même parfois se coupler à ce que l’on peut considérer comme de la croyance.

Mais qu’est ce que l’on considère comme de la croyance? Alors avant de poursuivre, j'arrête tout de suite ceux qui vont se sentir attaquer, ici on ne traite pas de la pertinence de croire ou ne pas croire en un dieu ou autre chose car la croyance fait partie du réel. Aucun doute la dessus, puisque par définition, si une croyance a été même simplement pensée c’est qu’elle existe conceptuelle au moins. Alors nul doute que la croyance existe et l'objet de cette croyance également (en tout cas du moins pour celui qui croit). En fait, la croyance pourrait se définir par "ce qui se conçoit et qui est accepté comme vrai" (je ne précise pas sans preuve car si la croyance n'en a pas besoin, en apporter peut être un plus et permet à la croyance de devenir une connaissance, on serait dans un processus de démonstration).

Quel est alors la différence avec la connaissance? La différence est simple, la croyance n’a pas besoin d'être validé pour être accepté. Cependant à l’inverse de la connaissance, la véracité de la croyance n’est pas absolu. En effet, croire, c’est un choix, alors que face à la connaissance et sa démonstration (hormis si erreur il existe, ou si le cadre ne correspond pas l'utilisation de cette connaissance) nous ne pouvons la réfuter et si on le fait alors une démonstration doit elle aussi être produite.

Nous avons donc là une différence notoire. La croyance s’accepte ou se réfute sans preuve. La connaissance à l’inverse demande des preuves permettant sa validation et surtout permettant son invalidité (car il sera toujours plus convainquant de démontrer qu'une théorie est fausse plutôt que le contraire [8]). Toutes deux, croyances et connaissances, si elles se veulent une représentation du monde, ne peuvent être associé. Ainsi, il est absurde de demander de croire ou ne pas croire à une théorie sans l’avoir comprise et vu, tout comme il est absurde de vouloir une démonstration de l'existence de dieu.

Alors pourquoi cette opposition entre connaissances et croyances? Tout simplement parce que l’humain cherche à dominer et utilise la manipulation pour faire passer des croyances pour des connaissances. Ainsi, il n’y a aucun problème a croire en dieu tant que cette croyance n’est pas le support d’une démonstration. Beaucoup de scientifiques sont croyant. La ou un problème peut apparaitre, c’est lorsque l’on produit une pseudo démarche scientifique afin de crédibiliser un discours et des pseudo faits qui ne sont en fait que des croyances. Et c’est la qu'entre en jeu le point central de l'acquisition et la validation de la connaissance (et ici c'est effectivement en opposition avec la croyance) : la démarche intellectuelle, qui elle ne se concentre pas sur les faits mais la manière de les traiter [9].

Par exemple, et ça peut paraitre anodin aux yeux de tous mais actuellement nous avons un spot publicitaire de la FDJ portant sur la chance. En mettant en scène des célébrités sportives, elle tente de faire croire qu’il est possible de croire en la chance alors que ces gens sont tous sauf des chanceux. Leur travail et leur succès ne fait aucun doute et leur réussite, ils ne la doivent qu’a eux et le seul caractere assimilable a la chance qui peut intervenir dans leur vie est le caractère aléatoire de aléa de la vie (comme tout le monde d'ailleur on peut se faire renverser par une voiture au detour d'une rue) pas du tout la manière dont ils la vivent. Au delà de l’aspect moral de cette publicité (le jeu d’argent étant l’une des plus grosses addictions qui soient [3]), nous sommes face a typiquement un détournement de la démarche intellectuelle en substituant d’un côté la notion de chance (croire que l’on peut gagner qui est en fait très mais très très faible [10] ) avec un concept pseudo scientifique de chance dans lequel intervient un travail considérable (ces gens ne sont pas a ce niveau pour rien). Et encore nous parlons ici que du contenu mais dans la forme, on peut aussi largement dénoncer la démarche scientifique de prendre des cas isolés de réussite (que l'on peut assimiler a un argument d’autorité [11]) pour témoigner de leur chance (qui n’a rien à voir avec la chance aux jeux).

Ce sujet n’est pas le seul car nous avons ici a faire a un exemple classique de manipulation ou l’on manipule les faits, et on manipule le processus de déduction au profit d’une croyance (celui de gagner). Mais il existe des situation plus critique pour la connaissance elle même, en dehors de la réfutation scientifique (qui fait appel au processus de validation de la connaissance), on assiste à des manipulations dont le but est même de faire reculer la connaissance aux profits de croyances comme le cas de la théorie de l’évolution contre les créationnistes [5], ou de substitution de connaissance par d'autres mais fausse basé sur des faits et de démonstrations fallacieuses comme le conflit des platistes et des globeux [6] ou plus récemment le réchauffement climatique [7] ou l’on voit même de la récupération politique...

Sur le fond, il n’y a aucun problème a croire, tant que celle-ci ne cherche pas a se substituer à la connaissance. Au contraire, croire fait parti de l'imagination et c'est en cherchant a confronter nos croyances avec la réalité qu'avec un processus de démonstration on parvient à transformer parfois croyance en connaissance. Cette transformation doit être elle même rigoureuse et honnête en minimisant les biais en gardant a l'esprit que si on ne parvient pas a valider quelque chose, cela ne signifie pas qu'elle n'existe pas et qu'a l'inverse si l'on ne parvient pas a invalider quelques chose, cela ne signifie pas non plus qu'elle est vrai et il existe aussi des choses indémontrables.

Enfin attention avec la notion d'opinion (la votre ou celle d’un autre), elle ne vaut pas la connaissance mais relève de la croyance si elle n'est pas sourcé d'une référence qui a fait consensus. En effet, l'opinion est souvent un mélange des deux (connaissances et croyances) l'une et l'autre un peu mélangé dans l'esprit des gens quand elle n'est pas elle même fondé sur l'opinion d'un autre car comme on dit une opinion c’est comme les trou du *** ….. tout le monde en a un. ^^ Mais je vous invite vraiment a voir cette vidéo ou connaissances et croyances sont vraiment bien expliquées [1].

Références

[1] Hygiène mental : https://www.youtube.com/watch?v=09Fgix9yqbk
[2] Monsieur Phi : https://www.youtube.com/channel/UCqA8H22FwgBVcF3GJpp0MQw
[4] http://www.ifac-addictions.fr/l-addiction-aux-jeux-de-hasard-et-d-argent.html
[5] http://www.hominides.com/html/theories/theorie-evolution-idees-fausses.php
[6] http://www.leparisien.fr/sciences/le-retour-en-force-de-la-theorie-de-la-terre-plate-06-04-2017-6829746.php
[7] https://fr.wikipedia.org/wiki/Controverse_sur_le_r%C3%A9chauffement_climatique
[8] https://fr.wikipedia.org/wiki/Raisonnement_par_l%27absurde
[9] https://youtu.be/z8W8CygtlzQ
[10] http://www.spreadthetruth.fr/vous-avez-moins-de-chance-de-gagner-au-loto-que-de/
[11] https://fr.wikipedia.org/wiki/Argument_d%27autorit%C3%A9

vendredi 15 décembre 2017

Nous sommes les ancêtres des générations futurs

J'ai entendu cette phrase a la télévision, et pour une fois que la télévision me fait réfléchir, je me suis arrêter dessus. Alors réfléchir en quel sens?

Et bien, jusqu’à maintenant j'ai toujours penser qu'il existait deux types d'individus, ceux dont le nom restera marqué dans l'histoire et ceux qui ne resteront que des inconnus. Cette façon de voir les choses amène a penser que la responsabilité historique repose en fait sur ceux dont les noms seront rappeler à la mémoire des gens par les livres d'histoire. Ainsi on se souviendra des certains chercheurs (de Marie Curie a Mengele) ou de politiciens dirigeants (de Kennedy a Mao) et on fait très souvent l'amalgame de leur contribution avec l’état actuel de la société, permettant ainsi a tout a chacun de se dédouaner d'une quelconque responsabilité.

Pourtant, lorsque l'on regarde plus attentivement l'histoire ou si l'on écoute plus attentivement les historiens, il est intéressant de voir que l'implication des foules dans les redirections politiques sont beaucoup plus fréquentes que l'on peut le penser car même si les foules sont souvent l'outils de ces mêmes personnalités qui resteront dans l'histoire, elles agissent aussi par elles-même lorsqu'il s'agit d'opprimer, se révolter, se venger ou parfois heureusement soigner, soutenir, éduquer.

Ainsi, de la même manière, si nous nous projetons dans l'avenir, nous ne considérons pas vraiment comment nous agissons dessus. On imagine globalement comment le monde sera mais pas comment nous auront participé à le transformer. Et comme nous considérons nos personnages illustres comme responsable de notre passé, sans eux dans notre perspective du futur, celui-ci n'est que la résultant de plein de choses que l'on ne comprend pas mais qui ne relève clairement pas de notre si petit impact et pour beaucoup, cela nous arrange bien.

On se rend bien compte que notre manière de voir notre histoire et l'impact que nous avons dessus n'est pas la bonne mais prendre conscience de cela ne nous donne pas la clef du changement de perspective. Et c'est la qu'intervient cette phrase:  "Nous sommes les ancêtres des générations futurs". elle permet de regarder l'histoire selon une autre perspectives en nous remettant nous simples citoyens comme acteurs principales de notre histoire. Elle élimine de l’équation les personnages illustres et nous force donc a rejeter la simplicité de leur remettre les clefs l'histoire en acceptant sans broncher les directions qu'ils nous imposeront.

Ainsi, en fait, lorsque l'on se considère comme les ancêtres des générations futurs, nous faisons la démarche de nous séparer de l'anonymat que nous impose l'histoire lorsqu'elle passe. Nous nous considérons acteur et partie prenante de l'avenir. Nous pouvons alors nous demander comment nous regarderons ces gens, lorsque de la même manière que nous, ils regarderont l'histoire, la notre, celle d'aujourd'hui, comme nous, nous avons regardé nos ancêtres, eux acteurs anonymes de leur propre époque.

Enfin n'oublions pas qu'en réalité l'anonymat n'existe pas, même si certains sont sous les projecteurs, pendant un temps, chacun d'entre nous aura son nom associé a son époque et pourra être critiqué de son inaction a tenter de céder un monde meilleur, comme nous pouvons l’être avec nos propres ancêtres et leur pratiques que l'on peut juger archaïque.

Ainsi soyez les ancêtres des générations futurs car c'est cette seule posture qui nous permettra de rester, même anonymement, fier et responsable de ce que nous léguerons a nos enfants, de pouvoir supporter le regard de ces gens qui lorsqu'ils voudront comprendre pourquoi leur monde et tel qu'il est, devront choisir entre colère et révolte ou respect et reconnaissance.

mardi 5 décembre 2017

Design pattern : Visiteur

Le pattern visiteur est, a mon sens, l'un des patterns les plus importants. Il est classé parmi les patterns comportementaux mais de par son utilisation, il est aussi un pattern structurel.

Le premier intérêt du pattern visiteur est de permettre de découpler les comportements des structures des objets surtout si les comportements ne sont pas tous définis et doivent être extensible. La logique métier est définie a coté de la structure objet stockant les données. A noter qu'en règle générale, cette démarche est a proscrire en POO... sauf, sauf, sauf dans ce cas. Oui le pattern visiteur est fait pour ça, il sépare les préoccupations.



Deuxième intérêt, s'il ne s'agissait que de découpler les aspects comportements et structures, certains avanceront que l'on peut s'en passer....  Sauf .. qu'en fait le visiteur ne vient pas qu'avec cette capacité. En effet, le visiteur a aussi pour but (du fait de son besoin de visiter son objet visitable) de permettre l'appel a d'autres visiteur en faisant le parcours de ses dépendances. Avec cette capacité, le pattern visiteur acquiert le status d'iterateur (Actif) sur un parcourt de graphe, a choisir, le visiteur offrira bien plus de souplesse que l'iterateur.

Ainsi, dans son fonctionnement, le visiteur vient avec une interface Visitable qu’implémentera son client. Cette interface définit la méthode accept prenant en paramètre nos visiteurs. Cette méthode une fois implémentée appellera la méthode visit du visiteur en se passant en paramètre afin de donner a celui-ci toutes ses capacités publiques accessibles ou privées via un peu de reflexivité.

A noter que le pattern visiteur implique cependant une contrainte que la structure a visiter soit suffisamment stable de façon a ne pas avoir une double ration de maintenance a faire dans le cas de modification sur le modèle objet.


dimanche 3 décembre 2017

Aspects fonctionnels VS aspects techniques

Bien voici un article très terre a terre que j’écris sur les différences entre les aspects fonctionnels et les aspects techniques d'un sujet que se soit en informatique ou non.

Quelques définitions:

Aspects fonctionnels (le a quoi):

  • Selon le larousse :  Qui est bien adapté à sa fonction, qui convient parfaitement à sa destination : Un mobilier fonctionnels.
  • Selon Wikitionnaire: Relatif à la fonction : Le modèle fonctionnels décrit les actions du système.
Donc lorsque l'on parle d'un système quelconque, les aspects fonctionnels traitent des fonctions du système, c'est a dire ses capacités, les opérations auxquelles qu'il est capable de réaliser.

Aspects techniques (le comment):

  • Selon le larousse : Ensemble de procédés et de moyens pratiques propres à une activité : La technique de l'aquarelle.
  • Selon Wikitionnaire: Ensemble des procédés qu’on doit méthodiquement employer pour un art, pour une recherche, dans un métier. La technique d’un métier, d’un art, d’une recherche scientifique ou érudite.
De la même façon, lorsque l'on parle d'un système, les aspects techniques sont a rapprocher des moyens technologiques et procédures mises en œuvre dans le cadre du fonctionnement du système.

ATTENTION : nous parlons des aspects techniques intrinsèques au système et non aux aspects techniques permettant de donner vie au système. Ces dernières sont des techniques traitant d'un système de production du système faisant l’opération (fonctionnelle ici) de choisir les moyens techniques a mettre en œuvre pour faire vivre le système.

Différences et complémentarités

Donc lorsque l'on parle d'aspects fonctionnels et d'aspects techniques pour un système, en fait nous parlons des moyens mis en œuvre pour répondre a la problématique de fonctionnement du système, c'est a dire comment le système va-t-il faire pour répondre aux opérations souhaitées.

La dissociation des deux aspects est fondamentale pour plusieurs raisons car:
  • le a quoi peut avoir plusieurs comment. (je veux me déplacer -> j'utilise une voiture ou un velo ou des chaussures)
  • le comment peut répondre a plusieurs a quoi. (j'ai des chaussures -> je peux marcher ou courir )
  • le comment peut être multiple pour le a quoi voir modulaire. (je veux traverser une rivière -> je peux utiliser un pont avec une voiture (ou a pied) ou un bateau et des rames)
Ainsi les aspects fonctionnels expriment le besoin mais les aspects techniques expriment la réponse a ce besoin (selon ce que l'on peut appeler contrainte fonctionnelles, par exemple de cout, de temps, de sureté, etc... mais c'est un autre sujet)

Ce qui est intéressant donc, c'est que les aspects fonctionnels et les aspects techniques peuvent être vu selon deux axes orthogonaux. Une liste de besoin, une liste de réponse technique et des périmètres de couvertures de l'un par rapport a l'autre. Ainsi, on peut juger de la qualité d'une solution technique. Selon l’interdépendance des aspects fonctionnels, il est possible d’identifier le nombre de solutions "indépendantes" mise en œuvre, leur duplicité, leur capacité a répondre a plusieurs besoins, etc... et donc d'identifier si un problème fonctionnel complexe va trouver une solution simple ou si un problème simple va trouver une solution technique complexe.

A noter qu'ici nous ne parlons pas d'abstraction, de framework, de généricité ou de tous autres méthodes/approches qui sont des façons d'aborder la conception d'une solution technique et non la caractérisation des solutions techniques possibles pour un ensemble d'aspects fonctionnels.

jeudi 30 novembre 2017

Design pattern : Proxy

Le pattern Proxy ou Mandataire est aussi un pattern comportemental (on ne voit que ça on dirait des fois...). Son rôle est simple: déporter la référence sur un objet, un service ou un composant de façon a faciliter son utilisation. Il fournit ainsi une vue simplifier au client qui n'aura pas a manipuler directement l'objet.





















Ainsi le pattern Proxy va s'employer dans les cas ou il est nécessaire soit de simplifier la communication dans une architecture client/serveur(en fournissant localement au client un objet proxy qui sera l'interlocuteur d'un objet dans le serveur) ou lorsque l'on souhaitera mettre en cache des objets avec en façade des proxys découplant ainsi les mécanismes associés a la gestion du cache, des mécanismes associés à la manipulation des objets.

Enfin et c'est probablement l'utilisation la plus spécifique des proxy est sa possibilité de greffer en interne des objets cible des comportements (comme on voudrait le faire avec un décorateur mais celui ci s'attache surtout a de la structure plus que du comportement)

On aura alors comme exemple, les EJB qui sont gérer par des proxy et des invocationHandler, permettant de faire la glu entre l’implémentation du Bean faites par le développeur et toute la partie technique associé au conteneur d'application.

On aura également comme exemple les appels RMI qui utilise ce mécanisme également.

Il est fort a parié que vous en utilisé même sans le savoir.

mercredi 18 octobre 2017

Comment or not comment ?

Je ressort d'une discussion avec des collègues concernant la pertinence des commentaires dans le code. C'est une question très terre a terre pour le développeur et si elle fait couler beaucoup d'encre, il en ressort souvent que finalement chacun reste sur son opinion malgré les recommandations et des remarques de bon sens.

En fait, c'est compréhensible, étant donnée que l'apprentissage de l'utilisation des commentaires fait partie ou presque des premières choses que l'on voit, il est normal que les premiers réflexes acquis soient les plus profondément inscrits.

Ainsi l’écriture des commentaires est presque culturelle et souvent les arguments allant en faveur de leur utilisation vont citer par exemple la nécessité de réaliser un code maintenable, de fournir une description plus fine des tests, de préciser les points susceptibles d'évoluer ou même d’être corrigés. Ainsi pour beaucoup, l'utilisation des commentaires dans le code a son importance et un code non commenté n'est pas un bon code.

Mais... autant le dire tout de suite, je ne suis pas de cet avis et avant de crier au scandale, de retourner la table et d'arracher les rideaux, laissez moi exposer mon point de vue.

Je vais commencer par préciser que je parle ici de commentaires dans le code source, pas de la pertinence de la documentation technique. Je ne considère pas non plus que la javadoc s'assimile a du commentaire même si la frontière est mince est que certaines critiques identiques a la production de commentaire pourrait également être faites.

Alors voila, je suis un grand fan de la POO, et en ce sens, je considére qu'un code bien écrit est
  • simple (on écrit que des choses évidentes), 
  • explicite (on nomme les chose par leur nom), 
et qu'il
  • respecte la règle des 7+/-2 de Miller (qui si elle n'est qu'une règle a suivre ne doit pas devenir une contrainte) donc on va avoir  7+/-2 lignes par méthodes, 7+/-2 méthodes par classe, 7+/-2 classes par package, 7+/-2 package par sous-package, etc.... 
  • limite les structures lourdes (par exemple, en java, on évitera l'utilisation, des switch/case, on préférera le polymorphisme a la cascade de if/then, etc)
  • fournit une documentation technique (ou dossier d'architecture) efficace.
(Alors bien sur pour les fan des approches fonctionnelles, ça vaut aussi bien sur mais adapté forcement au langage employé)

Donc a mon sens un code bien écrit respecte par lui-même un standard de lecture facile. Qui fait que si un commentaire "utile" doit être écrit c'est que probablement le code peut être simplifier ou revu afin de tendre vers un code explicitement évident. Je précise "utile" car malheureusement et souvent un code commenté n'est commenté que par des paraphrases inutile qui au contraire vont en alourdir la charge textuelle.

D'autre part il ne faut pas oublier qu'un langage de programmation est fait nous. En fait il ne s'agit que d'une interface homme machine dédié au développeur.... techniquement, notre ordi s'en moque que l'on écrive en C++, en Java, en SmallTalk ou en Scala... Dans l’idéal il veut de l'assembleur voir des 0 et des 1 (pour caricaturer....) Donc le langage a été élaborer afin de nous permettre un certain degré d'expressivité selon un certain nombre de concepts. Il ne faut pas non plus oublier qu'un langage est formelle dans sa définition et permet de décrire des comportements prédictibles ce que ne permet pas le langage naturel (qui de plus ne sera accessible qu'a ceux parlant votre langue....) Apres tout, lorsqu'il effectue une compilation, la première chose faites par le compilateur, c'est de supprimer les commentaires....

Certains vont continuer a défendre que malgré tout il existe des algorithmes qu'il est nécessaire de commenter. A mon sens, effectivement, l’emploie des commentaires peut n'avoir vraiment de sens que pour une chose: la description d'algorithmes optimisés et spécifiques.  Dans ce cas de figure on est en présence d'informations ne pouvant pas forcement faire partie d'un dossier de conception car relevant de détails d’implémentation trop précis. Alors bien sur, même ça, est discutable, et on pourra faire un billet également sur ce que doit contenir un dossier de conception.... mais c'est un autre problème. Il faut être pragmatique et savoir reconnaître que ces détails d'optimisation de la complexité et de performances ne peuvent tous être défini par l'architecture.

Cependant lorsque l'on considère ce besoin on oublie le contexte environnemental du développement logiciel. En effet, le développement logiciel actuel nécessite l'emploi d'un gestionnaire de source tel que Git, Subversion ou Mercurial. Ces outils sont indéniablement une avancée majeure dans le développement, l’intégration continu, ou la gestion de versions. Cependant, ils ont un bais lié a leur emploi, c'est qu'ils gèrent tous incrementalement les sources logicielles. Ça parait évident car c'est leur but, mais en fait dans la gestion des commentaires, ça pose un vrai problème. En effet contrairement au code qui est, si de bonnes pratiques sont appliquées, compilé testé avant d’être intégré dans une branche principale, les commentaires ne le sont pas. 

On va me répondre : "ba oui c'est normal, c'est pas le commentaire que l'on exécute! "

Oui effectivement, donc je vous poserai alors la question: qu'est ce qui vous permet de garantir que ce que le commentaire décrit correspond à la version du code présenté? Et bien rien; et a part faire de l’archéologie dans votre gestionnaire de sources pour garantir que à chaque modification du code, une modification du commentaire a été réalisée... et bien vous ne pouvez pas sauf en ayant foi en vos prédécesseurs.... tous....

Du coup.... vaut il mieux devoir comprendre un bout de code un peu trop complexe ou vaut il mieux chercher a savoir si un commentaire est fiable pour nous aider a comprendre ce code qu'il faudra finalement appréhender pour le modifier? Moi je pense que oui... car finalement les commentaires c'est pas fiable et ca ne pousse pas a écrire un code propre....

Mais alors faut il commenter son code? Et bien, pour dernier argument, pensez au temps que vous allez passer a écrire et maintenir ces commentaires en plus du code source et du coup que çà aura pour chacun de devoir le subir... et la  Si vous restez persuader du bien fait des commentaires, et bien poursuivez votre lecture avec  Ardalis et un Hinault, peut être arriveront ils a vous convaincre.

dimanche 17 septembre 2017

Donc ça...

Nous y voici, je dis nous mais en fait je parle de ce moment important dans la vie ou nous sentons qu'il est temps que les choses changent. Dans la vie la notion de changement est importante, c'est elle qui nous permet de grandir, qui nous challenge, qui nous fait peur mais c'est elle qui fait que l'on se décide a prendre les choses en main et qu'il est hors de question que le temps passe sans que l'on puisse lui donner du sens (j'aborderai peut etre plus tout ca plus tard). 

Enfin tout ça est long a expliquer et mon but dans ce mot n'est pas de traiter des raisons profondes de ce nouveau départ. Il s'agit surtout de lancer ce que l'on appelle un blog.... Quoi? un blog? mais c'est hasbeen un blog (meme l'expression hasbeen est hasbeen peut etre... ). Et ouai effectivement aujourd'hui on traite déjà de Vlog, les plateformes youtube le prouvent et qui sait ce que l'on découvrira dans quelques années. Mais non un blog c'est bien! 

Oui, ça ancre les choses noir sur blanc, et malgré mon gout pour l'avenir, j'aime a trouver les livres plus excitant que les films... Vous savez, quoi, ce fameux débat ... de la qualité imaginaire du livre sur le film, la liberté du lecteur de ne pas se voir fermer sur la vision d'un metteur en scène... de pouvoir squeezer des lignes sans prendre le risque immense de ne plus rien comprendre...enfin tout ça quoi... Bon j'admet aussi que je n'ai pas envie de me prendre la tête sur des montages vidéo et sur un investissement matériel de ouf....

Bon donc, un blog...  J'en avais déjà essayé d'autres a une époque mais finalement cela n'avait mené a pas grand chose car j'avais voulu essayer de faire quelque chose de trop carré. J'avais fait quelque chose de très orienté "boulot", c'est a dire l'informatique,  mais finalement cela n’était pas concluant et cela demandait trop de temps pour être suffisamment sérieux pour apporter quelque chose de significatif, et d'un autre coté, je n'avais pas trop le loisir de m'exprimer librement sur mes réflexions courantes, sur l'actualité, mon boulot, ma vie en général, etc.

Du coup changement d'orientation, aujourd'hui, plus de limites. Je vais parler de tout... d'informatique surtout car c'est ma vie en quelque sorte, mais aussi des choses de la vie qui m’intéresse, des réflexions, les interrogations (j'en ai pas mal en ce moment j'expliquerai pourquoi... ou pas...), des trucs marrants et peut être aussi d'autres moins... enfin on verra. 

Donc voila prenez ceci est un peu comme un cahier de notes, des réflexions sur des sujets divers et variés. J’espère que pour ceux qui tomberont dessus, cela les intéressera même un peu et qu'ils prendront part a la discussion.