mageekblog - RéfléxionsLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearEt si nous utilisions mal nos outils ?urn:md5:643c34f4db7c9c7fa75373110f52e1f82018-10-18T17:30:00+02:002018-10-18T17:30:00+02:00mageekguyRéfléxions<p>Dans <a href="https://damien.pobel.fr/post/au-cas-ou/">l’un</a> de ces récents billets, <a href="https://damien.pobel.fr/page/cv/">Damien</a> exprime sa défiance vis-à-vis de ce qu’il appelle la généralité spéculative, c’est-à-dire le fait de concevoir son code dans le but d’anticiper la résolution de problèmes éventuels, car cela implique la construction d’usine à gaz et donc la contraction d’une dette technique sans raison factuelle.</p>
<p>En tant qu’adepte de l’agilité, je suis sensible à ce discours, puisque l’un des buts des méthodes agiles est notamment de permettre la résolution d’un problème réel avec une solution apportant un maximum de valeur ajoutée, et il serait donc logique que je n’aie aucune réserve par rapport aux idées portées Damien.</p>
<p>Cependant, ce n’est pas le cas.</p> <p>En effet, dans un contexte agile, afin de pouvoir pivoter afin de résoudre un problème avec un maximum d’efficacité, il y a des prérequis humains et techniques indispensables qui doivent avoir été mis en place en amont.</p>
<p>Humainement parlant, la communication au sein de l’équipe et de l’entreprise qui l’accueille doit être efficace, l’équipe doit disposer rapidement des moyens nécessaires pour atteindre ses objectifs, les responsabilités doivent y être partagées, les rôles clairement déterminés, et elle doit exploiter correctement le feedback qui doit bien évidemment être collecté afin que l’amélioration continue devienne une réalité, et cette liste est loin d’être exhaustive.</p>
<p>Et techniquement parlant, les développeurs doivent être en mesure de faire évoluer leur code rapidement, de faire des expérimentations et de revenir en arrière à moindre coût, tout en garantissant qu’il répond toujours aux besoins du client.</p>
<p>En clair, l’équipe doit disposer des outils et des moyens nécessaires non pas pour anticiper un avenir par nature incertain, mais pour pouvoir s’y adapter.</p>
<p>Or, la production d’un code suffisamment générique est à ma connaissance le seul moyen dont dispose un développeur pour que son code puisse être adapté au changement par lui-même ou quelqu’un d’autre.</p>
<p>Écrire du code générique n’est donc pas à mon avis une mauvaise pratique, bien au contraire, d’autant que la programmation orientée objet a précisément été conçue pour cela : permettre la création à moindre coût à tout point de vue d’un code facile à maintenir, à faire évoluer et réutilisable.</p>
<p>Par conséquent, écrire du code générique ne devrait pas être un problème pour un développeur pratiquant la programmation orientée objet (je ne me prononce pas pour les autres paradigmes…), puisqu’il dispose du meilleur outil disponible à ce jour pour cela.</p>
<p>Alors pourquoi est-ce que c’est considéré comme une mauvaise pratique ? Ou, formulé autrement, comment est-il possible qu’écrire du code générique à l’aide d’un paradigme censé le permettre simplement et facilement semble être une tâche insurmontable, la chose à ne surtout pas faire ?</p>
<p>Le paradoxe semble insurmontable, mais j’ai une explication qui risque de faire mal à votre ego si vous pratiquez la programmation orientée objet : la plupart des développeurs ne savent pas utiliser ce paradigme correctement, ce qui les empêche d’en exploiter le plein potentiel !</p>
<p>En effet, nous faisons pour la plupart d’entre nous de la programmation procédurale déguisée en programmation orientée objet.</p>
<p>Au lieu de faire communiquer ensemble des objets, nous manipulons des structures de données qui se font passer pour des objets, à grand renfort de conditions qui nous permettent de prendre des décisions en fonction des données contenues dans ces structures.</p>
<p>Et le plus paradoxal n’est pas que nous ne parvenions pas à utiliser le paradigme de la programmation orientée objet pour concevoir du code générique alors qu’il a été conçu pour cela.</p>
<p>Le plus paradoxal est que nous savons que nous ne l’utilisons pas correctement, que nous cherchons des solutions pour le faire, mais que ces solutions ne sont que des pis-aller et des recettes de cuisine.</p>
<p>Ainsi, nous dressons des catalogues de patrons de conception censés nous permettre de répondre correctement à la grande majorité des problématiques que nous rencontrons et nous créons des acronymes tels que <a href="https://en.wikipedia.org/wiki/SOLID">SOLID</a> pour évangéliser des bonnes pratiques censées nous permettre de comprendre ce qu’est un « bon » code objet, nous lançons des mouvements tels que le « if less programming » ou le « east oriented programming », nous répétons à l’envi qu’il faut privilégier la composition et restreindre fortement l’utilisation de l’héritage, nous expliquons ce qu’est l’encapsulation ou le polymorphisme, nous crachons sur les « getter/setter », etc.</p>
<p>Nous disons beaucoup… et nous faisons finalement peu (un peu comme pour le climat, d’ailleurs…).</p>
<p>Mais rarement nous cherchons à comprendre pourquoi il est nécessaire de faire tout cela, rarement nous cherchons à comprendre ce qu’est la programmation orientée objet, rarement nous remettons fondamentalement en cause nos pratiques et nos connaissances.</p>
<p>À décharge, il faut bien dire qu’il n’est pas simple pour un développeur de remettre en cause l’ensemble de ses connaissances, surtout lorsque tout le monde fait de même, et je suis bien placé pour le savoir, puisque je l’ai fait il y a 5 ans.</p>
<p>Or, ce n’est pas parce que tout le monde fait la même chose de la même façon que c’est forcément ce qu’il faut faire pour obtenir le meilleur résultat.</p>
<p>De plus, les langages de programmation « orientés objet » n’aident pas, car ils sont pour la plupart basés sur des habitudes de syntaxe et des algorithmes issus du paradigme procédural.</p>
<p>Pourtant, pour celui qui a le courage d’entreprendre cette démarche et qui prend le temps de le faire, il devient possible d’écrire du code générique naturellement, ainsi que les tests associés.</p>
<p>Car vous pouvez très bien remplacer le concept de code générique par celui des tests dans le billet de Damien sans en changer le sens fondamental.</p>
<p>En effet, si je résume son article en une phrase, elle pourrait être :</p>
<blockquote>Écrire du code générique, tout le monde voudrait le faire, mais ceux qui essayent ne savent pas le faire correctement, ce qui met la merde dans les projets, donc il ne faut pas écrire de code générique.</blockquote>
<p>Maintenant, est-ce que vous voyez une grosse différence avec cela :</p>
<blockquote>Écrire des tests, tout le monde voudrait le faire, mais ceux qui essayent ne savent pas le faire correctement, ce qui met la merde dans les projets, donc il ne faut pas écrire de tests.</blockquote>
<p>J’avoue caricaturer quelque peu, mais je trouve que c’est tout de même assez proche de la réalité.</p>
<p>Et c’est la raison pour laquelle aujourd’hui, les tests sont l’exception et non la règle dans la plupart des projets informatiques et que des propositions commerciales sont faites avec à peine 1 % du budget alloué aux tests (quand il y a un budget alloué pour eux), avec tout ce que cela implique en termes d’insatisfaction, aussi bien chez les développeurs que chez les clients !</p>
<p>Et l’un dans l’autre, c’est aussi pour cela que nous avons des applications très gourmandes en mémoire par rapport aux services qu’elles rendent ce qui provoque la rédaction de ce type de <a href="https://blog.romainfallet.fr/desenchantement-logiciel/">billet d’humeur</a>.</p>
<p>Alors la question est (un peu comme pour le climat, d’ailleurs…) : qu’allez-vous faire pour que cela change ?</p>
<p>Continuer à mal utiliser vos outils, ou bien faire en sorte de les utiliser correctement pour produire du code de qualité ?</p>http://blog.mageekbox.net/?post/2018/10/18/Et-si-nous-utilisions-mal-nos-outils-#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/505Soyez le changement que vous voulez voir dans le code !urn:md5:402e62ca0b7477df00ed7d0684874f282018-10-04T10:50:00+02:002018-10-04T10:50:00+02:00mageekguyRéfléxions<p>Chez <a href="https://www.norsys.fr">Norsys</a>, l’un de mes rôles est d’être formateur au sein de « l’école du développeur », un cursus de formation qui est suivi par les nouveaux arrivants.</p>
<p>Concrètement, ils partent dans un premier temps 5 jours à Lille au siège du groupe pour apprendre les bases théoriques que nous pensons nécessaires pour qu’ils soient de « bons » développeurs au sens « Norsys » du terme.</p>
<p>Et dans un second temps, la plupart du temps dans la foulée de la session lilloise, je reçois sur Lyon ceux qui font du PHP pour une session de travaux pratiques de 5 jours pour leur faire toucher du doigt ce qu’implique être un « bon » développeur aujourd’hui, toujours au sens « Norsys » du terme.</p>
<p>Je ne vais pas vous expliquer dans le détail ce qu’est pour Norsys un « bon développeur », car pour comprendre mon message, vous avez uniquement besoin de savoir qu’à la suite de cette formation, je reçois souvent des messages qui peuvent, en caricaturant à peine, se résumer à :</p>
<blockquote>Mon projet, c’est le gros bordel, la dette technique est phénoménale, il n’y a aucune communication au sein de l’équipe, d’ailleurs, il n’y a pas d’équipe ni de tests ni de spécifications, par contre, il y a de la duplication de code partout, l’architecture est aux abonnés absents, il n’y a pas de vision ou alors elle change d’un jour à l’autre, les algorithmes sont inefficaces, l’intégration continue n’existe pas, et puis… tu te rends compte qu’ils travaillent encore avec SVN ???? Je n’ai pas signé pour ça !</blockquote> <p>Et bien souvent, comme si l’auteur du message avait honte de me dire qu’il voudrait pouvoir faire correctement son travail, il minore son propos avec quelque chose du style « Est-ce que tu penses que j’en demande trop ? »</p>
<p>Bref, il veut me faire sentir que je lui ai vendu du rêve durant la formation, qu’il est totalement frustré par la réalité de son quotidien, et que par conséquent il n’est pas du tout heureux.</p>
<p>Et je reçois et je comprends très bien ce message, car cela fait 18 ans que je vis cela.</p>
<p>En effet, que ce soit durant les 15 années que j’ai passées chez des éditeurs de logiciel ou bien les 3 années que je viens de passer chez Norsys, je n’ai jamais rencontré un projet qui respectait l’ensemble des bonnes pratiques de développement ou qui correspondait à mes critères de qualité.</p>
<p>Plus fort, si les projets que j’ai fait naître ont pu à une époque être à mes yeux de « qualité », ce n’est plus forcément le cas aujourd’hui !</p>
<p>Toujours plus forts, les développeurs plus expérimentés que je connais ont également ce ressenti !</p>
<p>Je pense donc qu’il est possible d’en conclure que le projet parfait n’existe pas !</p>
<p>Arrivé à ce point de votre lecture, je suis prêt à parier que vous êtes en train de penser que si cela est avéré, c’est d’une tristesse affligeante et qu’il vaudrait mieux changer de métier et devenir (par exemple) charcutier…</p>
<p>C’est effectivement une possibilité… mais ce n’est pas la seule.</p>
<p>En effet, il serait dommage de jeter l’éponge, car c’est un gâchis de vouloir arrêter de faire un travail lorsqu’on sait comment le faire correctement.</p>
<p>C’est peut-être même la pire des décisions possibles, car vous n’apportez aucune valeur…</p>
<p>Mais si au contraire vous suivez le conseil de <a href="https://fr.wikipedia.org/wiki/Mohandas_Karamchand_Gandhi">Gandhi</a> en faisant en sorte d’apporter le changement que vous voulez voir apparaître, vous apportez une valeur énorme, parce que vous savez (ou penser savoir, n’oubliez pas cela) comment faire les choses correctement et que visiblement ce n’est pas forcément le cas des autres autour de vous.</p>
<p>D’un point de vue capitaliste (hum), c’est d’ailleurs ce qui fait votre valeur, car dans notre société, ce qui est rare est cher, donc si vous êtes le seul dans une équipe à savoir comment améliorer les choses, vous êtes un diamant dans un tas de charbon !</p>
<p>Dit autrement, si tout le monde savait développer en suivant les bonnes pratiques, le fait de les connaître et de savoir les appliquer n’aurait quasiment aucune valeur !</p>
<p>Alors oui, ça ne va pas être simple, il va y avoir du sang, des larmes et de la sueur qui vont couler, et il va falloir se salir les mains en utilisant une batte de base-ball ou de la vaseline, en fonction de votre caractère (et les deux ne sont pas forcément incompatibles).</p>
<p>Il vous faudra être pédagogue, être capable de communiquer, expliquer, montrer, faire, démontrer, répéter, évangéliser, à l’aide de méthodes diverses et variées, telles que le « pair programming », le « mob programming », les « meetups », les revues de code, un partage de veille technologique, etc.</p>
<p>Et oui, tout cela représente un travail intellectuel et psychologique de longue haleine qui ne portera ses fruits qu’à long terme ou qui n’aboutira pas.</p>
<p>En effet, comme l’a justement remarqué <a href="https://fr.wikipedia.org/wiki/Forrest_Gump">Forrest Gump</a>, un autre grand philosophe, la merde, ça arrive, ce qui veut dire que vous allez peut-être échouer à porter la bonne parole, mais n’oubliez pas que même Jésus a fini sur une croix en le faisant.</p>
<p>Peut-être qu'à un moment, il faudra donc savoir être lucide et jeter l'éponge avant de faire un <a href="https://fr.wikipedia.org/wiki/Burnout">burnout</a> en allant travailler pour une entreprise qui correspond mieux à vos attentes.</p>
<p>Cependant, ce n’est pas une raison pour ne pas au moins essayer, d’autant que malheureusement, cela fait aujourd’hui partie intégrante de notre métier.</p>
<p>Le Code, au sens large du terme, a aujourd’hui un passif énorme, et la dette technique à l’échelle mondiale est certainement bien plus importante que la dette financière.</p>
<p>Il repose sur des bases anciennes, à commencer par les systèmes d’exploitation qui ont tous plus de 20 ans et dont la conception est dirigée pour la plupart d’entre eux en fonction de critères économiques, ce qui est loin d’être un gage de qualité.</p>
<p>N’ayez aucun doute que chacun d’eux à des zones d’ombre dans lesquelles vivent des monstres que vous n’imaginez même pas, sans parler <a href="https://meltdownattack.com">des problématiques au niveau du matériel</a>.</p>
<p>Les bases ne sont donc pas saines, et nous avons donc construit notre code sur ce château de cartes, couche après couche, parfois sans même savoir ce que nous faisions exactement, faute de formation adaptée et d’une volonté de simplification des outils qui a pour conséquence que de nos jours, plus personne ne sait exactement ce qui se passe dans un CPU.</p>
<p>De plus, nos pères fondateurs ont aussi une part de responsabilités, même si à leur décharge, ils étaient des précurseurs et étaient donc par nature bien mal armés pour pouvoir concevoir du code destiné à vivre sur le long terme.</p>
<p>La programmation orientée objet a par exemple été inventée dans les années 60 pour répondre aux problèmes posés par la maintenance et l’évolution du code, mais malheureusement, des générations entières de développeurs n’ont pas bien compris le message (la dose d’ironie présente dans cette phrase est phénoménale).</p>
<p>Mais connaître tout ou partie de l’origine de cette dette n’a de toute façon pas beaucoup d’importance, car il est aujourd’hui devenu très difficile d’y changer quoi que ce soit.</p>
<p>La refonte nécessaire pour la réduire et pouvoir ainsi produire du code sur des bases plus saines est bien trop importante pour être rentable économiquement parlant, même si elle implique <a href="https://blog.romainfallet.fr/desenchantement-logiciel/">le sacrifice d’une bonne partie des ressources des ordinateurs d’aujourd’hui</a> pour être tenable.</p>
<p>Si vous voulez être un développeur, vous n’avez donc pas le choix, il va vous falloir vous coltiner beaucoup de merde durant votre carrière.</p>
<p>C’est un peu la même dynamique que pour le changement climatique : La voiture est en train de tomber dans le ravin, mais ça couterait bien trop cher de la transformer en hélicoptère ou bien à minima de lui greffer un parachute pour amortir un minimum la chute, et nous allons donc atterrir très violemment un jour.</p>
<p>Cependant, si je pense qu’en tant qu’individu, il n’est plus vraiment possible d’avoir un impact significatif sur l’évolution du climat, je pense qu’il est encore possible d’améliorer le code localement, car contrairement au climat, le couplage entre les différents composants d’un programme informatique est (censé être) faible (même s’il est probable que dans 50 ans, il n’y aura plus d’électricité pour faire fonctionner les ordinateurs permettant d’exécuter du code).</p>
<p>Alors, comme l’a dit encore un autre grand philosophe, <a href="https://twitter.com/Kaepernick7/status/1036695513251434498">JUST… DO… IT!</a></p>http://blog.mageekbox.net/?post/2018/10/04/Soyez-le-changement-que-vous-voulez-voir-dans-le-code-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/504Les outils sont-ils la solution à nos problèmes ?urn:md5:ab0f4f2f9b7a81509e5229b36fb7be752018-01-08T20:06:00+01:002018-01-08T20:16:59+01:00mageekguyRéfléxions<p><a href="https://medium.com/@ptitfred/haskell-and-fp-a83b5b22f67f">Frédéric Menou</a> a écrit un très bon article à propos de la <a href="https://fr.wikipedia.org/wiki/Programmation_fonctionnelle">programmation fonctionnel</a> et <a href="https://fr.wikipedia.org/wiki/Haskell">d’Haskell</a>, dans lequel il décrit notamment les raisons qui l’ont amené à apprendre ce paradigme et ce langage.</p>
<p>Je n’ai pas d’avis sur son choix d’Haskell pour son activité, car je ne connais pas ce langage et encore moins son métier.</p>
<p>Par contre, je connais relativement bien la problématique qui l’a mené vers cette solution, car j’ai rencontré exactement la même.</p>
<p>En effet, si je résume (certainement très grossièrement) sa démarche, Frédéric s’est tourné vers Haskell essentiellement parce qu’il cherche à écrire le moins de bogues possible lorsqu’il code, et il pense que le formalisme offert par le langage lui permet d’y parvenir, tout en améliorant la communication avec l’ensemble des parties prenantes dans un développement informatique.</p> <p>Or, cela fait au moins maintenant presque 12 ans que je cherche à atteindre le même objectif.</p>
<p>De plus, j’ai commencé à développer de la même façon que Frédéric, en me consacrant sur les algorithmes et l’aspect technique, en renforçant ma maîtrise de PHP et des outils afférents grâce à une veille technologique quotidienne.</p>
<p>Notre parcours concernant les éditeurs de code a également été très similaire.</p>
<p>Pourtant, malgré une problématique similaire, nous sommes parvenus à des solutions très différentes.</p>
<p>Frédéric a remis en cause ses outils et en a sélectionné d’autres qui lui semblent plus adaptés pour atteindre son objectif.</p>
<p>De mon côté, au lieu de remettre en cause mes outils, j’ai choisi de me remettre en cause et de mieux comprendre les principes fondamentaux du paradigme que j’utilise, ce qui m’a amené à faire évoluer très fortement mes méthodes de développement.</p>
<p>À mon avis, celui qui peut dire lequel de nous deux a la meilleure stratégie pour atteindre son objectif n’est pas encore né, et je n’en ai donc pas la prétention, mais son billet m’a tout de même inspiré une réflexion que j’aimerai maintenant vous faire partager.</p>
<p>L’être humain a une tendance naturelle à incriminer ses outils lorsqu’il ne parvient pas à réaliser correctement quelque chose.</p>
<p>C’est un fait, et c’est bien normal, puisqu’il est bien plus simple et agréable pour nous de remettre en cause l’outillage que de se remettre en cause.</p>
<p>Donc, lorsqu’il est en situation d’échec, l’Homme adopte principalement deux stratégies.</p>
<p>La première consiste à changer d’outils, la seconde à les modifier dans l’espoir qu’une fois « améliorés », ils permettront de réussir.</p>
<p>Et parfois (et j’insiste sur ce « parfois »), je pense que cela a des effets très pervers, et je vais donner trois exemples, certes très caricaturaux, mais qui sont également à mes yeux très représentatifs.</p>
<p>Autrefois, dans des temps fort fort lointains, le développeur devait gérer lui-même la mémoire utilisée pour son programme, ce qui parfois, provoquait des erreurs de segmentations.</p>
<p>Une couche de complexité a donc été ajoutée aux langages informatiques afin de décharger les développeurs de cette tâche et ainsi éviter ces erreurs, et aujourd’hui, ils n'ont plus à se soucier de la mémoire vive, ou de quoi que ce soit d’autre relatifs au matériel sur lequel sera exécuté le code, d’ailleurs.</p>
<p>Mais qui, aujourd’hui, connait encore le fonctionnement de la mémoire vive d’un ordinateur ?</p>
<p>Pour ce que je peux en constater, il n’y a plus que les vieux barbus et les spécialistes de l’embarqué qui possèdent encore cette connaissance, alors qu’il s’agit de l’une des bases de la technologie sur laquelle repose le métier de développeur.</p>
<p>De plus, si autrefois, il pouvait y avoir des erreurs de segmentations, en contrepartie, la mémoire était généralement gérée aux petits oignons, car il s’agissait en plus d’une ressource comptée qu’il ne fallait pas gaspiller.</p>
<p>Mais aujourd’hui, il suffit qu’un onglet inactif dans un navigateur ne consomme pas plus de 80 Mo pour que nous soyons heureux…</p>
<p>Le quotidien du développeur a donc été « amélioré » grâce à une évolution de ses outils, mais en contrepartie, il a perdu de la connaissance et les programmes ont perdu en efficacité.</p>
<p>Quant à la stratégie du changement total d’outil pour palier à une défaillance, l’une des plus belles illustrations est justement la démarche décrite par Frédéric dans son billet (ce qui ne veut pas dire que je pense qu’il a fait une erreur, encore une fois, son billet n’a été qu’une source d’inspiration pour écrire celui-ci).</p>
<p>Nombre de développeurs passent en effet de la programmation orientée objet vers la programmation fonctionnelle, car ils pensent qu’elle est plus apte à répondre à leurs besoins, sans se poser de question par rapport à leur pratique et à leur compréhension de la programmation orientée objet.</p>
<p>Or, pour la plupart, ils pratiquent cette dernière sous une forme « diminuée » qui ne leur permet pas d’en tirer la quintessence.</p>
<p>Et le monde du logiciel n’est pas le seul à être concerné, celui du matériel l’est tout autant.</p>
<p>Les bases de l’architecture x86 ont été posées par Intel à la fin des années 1970, mais pour autant, elle est toujours massivement utilisée aujourd’hui.</p>
<p>Pourtant, je connais assez peu de personnes compétentes dans le domaine qui pense que cette architecture est la panacée.</p>
<p>Mais il faut dire qu’Intel a tout fait pour contrebalancer cela par une évolution à marche forcée des performances, en ajoutant de la complexité couche après couche afin de respecter la <a href="https://fr.wikipedia.org/wiki/Loi_de_Moore">loi de Moore</a>.</p>
<p>Et aujourd’hui, nous faisons face à <a href="https://meltdownattack.com">Meltdown et Spectre</a>, et l’avenir ne semble <a href="https://www.blackhat.com/docs/us-17/thursday/us-17-Domas-Breaking-The-x86-ISA.pdf">pas radieux</a>.</p>
<p>Et comme tous les fondeurs sont pris dans la course à la performance sous la pression du marché, les concurrents d’Intel ont fait de même en utilisant les mêmes concepts, ce qui fait qu’aujourd’hui, la <a href="https://twitter.com/ochsff/status/949840209553887232">quasi-totalité des CPU</a> actuellement en <a href="https://twitter.com/Blips_and_Chitz/status/949979576087797760">activité</a> est plus ou moins vulnérable à ces attaques d’un nouveau genre (même si elles ne semblent pas <a href="https://randomascii.wordpress.com/2018/01/07/finding-a-cpu-design-bug-in-the-xbox-360/">si nouvelles que cela</a>).</p>
<p>D’ailleurs, j’aime beaucoup ce commentaire de <a href="https://lkml.org/lkml/2018/1/3/797">Linus Torvald</a> à ce sujet :</p>
<blockquote>
<p>I think somebody inside of Intel needs to really take a long hard look at their CPU’s, and actually admit that they have issues instead of writing PR blurbs that say that everything works as designed.</p>
</blockquote>
<p>Plutôt que de repartir à la table à dessin et se creuser la tête, Intel a en effet préféré spéculer le plus longtemps possible sur l’architecture x86 en la faisant évoluer aux forceps pour pallier ses défaillances grâce à une augmentation vertigineuse des performances, sans jamais en remettre en cause la philosophie et les fondamentaux.</p>
<p>Pour conclure, il peut être sain de changer d’outils ou de les rendre plus complexes afin de se simplifier la vie, mais il ne faut surtout pas oublier qu’il y a toujours un prix à payer, et par conséquent, il ne faut surtout pas penser qu’un tel changement vous permettra systématiquement d’atteindre votre objectif plus vite ou plus efficacement.</p>
<p>Le chemin que vous aurez à parcourir pourra en être simplifié, mais il pourra également vous emmener vers un précipice, une voie de garage, ou bien encore vous faire faire bien des détours tortueux et dangereux.</p>
<p>Pour preuve, malgré la simplicité apparente de son exemple pour illustrer le typage algébrique, malgré les fonctionnalités d’Haskell qui sont censées lui permettre d’esquiver les bugs, Frédéric a <a href="https://twitter.com/clementd/status/950270642418601984">introduit un bug</a> dans le code présent dans son billet…</p>
<p>Alors parfois, faire preuve d’humilité, d’honnêteté, en remettant en question ses pratiques afin de repartir sur des bases plus saines peut valoir le coût, plutôt que de déléguer à des outils la charge de nous rendre meilleurs, ce qui leur est impossible par nature.</p>
<p>La solution est rarement dans les outils, mais l’Homme est toujours à l’origine des problèmes.</p>http://blog.mageekbox.net/?post/2018/01/08/Les-outils-sont-ils-la-solution-a-nos-problemes#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/502À propos de l’USB-C des nouveaux MacBook Prourn:md5:948e36eabee30445e9ebe34b8092d7bf2016-11-16T12:39:00+01:002016-11-18T10:13:05+01:00mageekguyRéfléxionsApple<p>Beaucoup de choses sont dites à propos des ordinateurs portables présentés dernièrement par la firme à la pomme, et notamment qu’ils sont trop chers et trop limités pour un usage professionnel.</p>
<p>Je ne vais pas entrer dans cette polémique, car j’ai mieux à faire de mon temps, et je vais donc me contenter de vous présenter ma réflexion personnelle sur le sujet.</p>
<p>Lorsqu’est sorti l’iMac sans lecteur de disquette, je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsqu’est sorti le premier iPod, je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsqu’est sorti le MacBook sans lecteur optique, je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsqu’est sorti le premier iPhone, je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsqu’est sortie la première version du MacBook Air sans port Ethernet, je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsqu’est sorti l’iPhone 7 sans port « jack », je me suis dit qu’Apple était devenue folle.</p>
<p>Lorsque j'ai regardé les spécifications des nouveaux MacBook Pro, je me suis dit qu’Apple était devenue folle… et puis, j’ai regardé dans le rétroviseur.</p> <p>Lorsque j’ai acheté la seconde version du MacBook Air, j’ai acheté en même temps une polyméagachié d’adaptateurs qui m’ont couté un rein, et dans les faits, je ne me suis servi que de l’adapteur VGA lors de mes conférences, et je l’utilise encore avec mon MacBook Pro actuel (donc autant dire qu’en six ans, il est largement rentabilisé).</p>
<p>Les autres adapteurs sont restés au fond de mon sac, à part l’adaptateur Ethernet que j’ai utilisé très occasionnellement lorsque j’étais en présence d’un réseau Wi-Fi de qualité déplorable et lorsque l’alternative filaire était disponible, donc dans un contexte qui est largement plus l’exception que la règle.</p>
<p>En investissant dans ces adaptateurs, j’ai donc anticipé des besoins totalement imaginaires, car j’ai oublié que notre société évolue en fonction de nos besoins.</p>
<p>Nos pratiques et nos infrastructures s’adaptent en effet en permanence à nos façons de vivre et de travailler, parfois sans que l’on s’en rende compte, parfois dans la douleur.</p>
<p>Il y a 5 ans, les Wi-Fi ouverts étaient loin d’être aussi répandus qu’aujourd’hui.</p>
<p>Il y a 10 ans, avoir Internet dans sa poche et pouvoir s’y connecter sans aucun câble dans le train n’était même pas un rêve dans la tête des geeks.</p>
<p>Il y a 15 ans, les clefs USB étaient l’exception plutôt que la règle et le Bluetooth n’existait pas.</p>
<p>Il y a 20 ans, avoir 128 Mo de RAM ou disposer d’un ordinateur (trans) portable avec une autonomie de plus de deux heures était inconcevable.</p>
<p>Il y a 30 ans, 80 Mo de stockage de masse représentait le nirvana, et personne ne pensait pouvoir avoir son ordinateur partout et en permanence avec lui.</p>
<p>Il y a 40 ans, l’idée d’Internet même n’existait pas, et je ne parle même pas des disques externes, du HDMI, du Thunderbolt ou des cartes SD.</p>
<p>Alors, je sais que je ne suis pas représentatif de l’ensemble des utilisateurs de MacBook Pro, ce que la plupart des mécontents ont d’ailleurs souvent tendance à oublier, mais par contre, je sais que nous allons évoluer, et que nous allons le faire dans le sens ou nous pousse Apple, car c’est naturel.</p>
<p>Les choses naissent, vivent, évoluent, puis meurent, et sont remplacées par d’autres, plus efficaces, plus pratiques, plus efficientes, plus écologiques, plus simples, plus esthétiques, plus… bref, vous avez compris.</p>
<p>Mais pour Apple, nous évoluons trop lentement.</p>
<blockquote>La toute première motivation de Steve a toujours été une volonté réelle de faire de grandes choses pour l’humanité, et cette philosophie reste à la fois notre idéal et notre objectif dans notre façon d’appréhender l’avenir pour Apple — Johnny Ive</blockquote>
<p>Pour pouvoir aller dans la direction où elle le souhaite, pour pouvoir « rendre le monde meilleur », elle a besoin que le port Jack disparaisse et que le port de demain, à savoir l’USB-C, soit le port d’aujourd’hui le plus rapidement possible.</p>
<p>Alors elle pousse, fort, très fort, avec toute la puissance de sa marque, pour entrainer dans son sillage l’ensemble de l’industrie, pour que sa vision devienne de fait celle de tous les acteurs technologiques, pour le pire et pour le meilleur.</p>
<p>En conséquence, si Apple vend très cher ses adaptateurs, peut-être n’est-ce pas (uniquement) pour augmenter ses bénéfices, mais pour nous dissuader de les acheter et ainsi obliger l’industrie et ses clients à s’adapter plus vite.</p>
<p>Et si Apple vend sa rallonge pour câble d’alimentation 25 €, peut-être n’est-ce pas (uniquement) pour augmenter ses bénéfices et parce qu’elle dispose aujourd’hui de la technologie permettant à ses ordinateurs de passer la journée loin d’une prise électrique, mais pour réduire de quelques centaines de grammes le poids de chaque boite et réduire d’autant l’impact écologique du transport (à la vue du volume des ventes, cela représente quelques milliers de tonnes par an qui ne sont pas à transporter).</p>
<p>Aujourd’hui, plus aucun ordinateur n’est vendu avec un lecteur de disquette, tous les téléphones tactiles sont un pastiche des concepts de l’iPhone, les clefs USB font 1 To, et les constructeurs de PC font leur possible pour que leurs produits ressemblent le plus possible aux produits Apple, à tel point qu’il devient parfois difficile de faire la différence entre <a href="https://youtu.be/BzMLA8YIgG0">leurs produits et leur marketing</a> et ce que fait Apple.</p>
<p>Et la marque à la pomme sait très bien qu’elle a cet impact sur l’industrie informatique en général, tout comme elle sait très bien qu’elle représente des millions d’utilisateurs de par le monde.</p>
<p>Et je pense qu’elle se sert de ce levier colossal pour accélérer l’évolution du marché, pour pouvoir atteindre son objectif plus rapidement.</p>
<p>Cette stratégie qui consiste à faire les choix qu’elle pense indispensables pour atteindre ses objectifs le plus rapidement possible n’est pas nouvelle.</p>
<p>Elle faisait partie intégrante de son ADN lorsque Steve était aux commandes, lorsqu’il ne l’a plus été, lorsqu’il y est revenu, et cela y est encore aujourd’hui malgré sa disparition.</p>
<p>Pour autant, est-ce que la communication d’Apple est bonne ? Le fait qu’elle a jugé nécessaire de faire une ristourne (à mon sens une chose inédite dans les annales) sur ses adaptateurs jusqu’en janvier, ainsi que les <a href="http://www.independent.co.uk/life-style/gadgets-and-tech/features/apple-macbook-pro-new-philip-schiller-interview-phil-iphone-ios-criticism-a7393156.html">différentes interviews</a> données dernièrement par <a href="https://www.cnet.com/special-reports/jony-ive-talks-about-putting-the-apple-touch-on-the-macbook-pro/">ses cadres</a> pour éteindre l’incendie, me font penser que la réponse est négative et qu’elle en a bien conscience.</p>
<p>Est-ce le bon moment ? Si la technologie est suffisamment mature et qu’elle est en mesure de répondre correctement à 80 % des besoins, alors il fallait le faire dès maintenant, quitte à frustrer les 20 % de la clientèle qui n’y trouveront pas leur compte dans l’immédiat, d’autant qu’Apple a les moyens financiers nécessaires pour encaisser sans souffrir ce désamour.</p>
<p>Attendre, c’est prendre le risque de se faire doubler par la concurrence, et puis, combien de temps aurait-il fallu attendre ? Bien malin qui peut répondre à cette question…</p>
<p>Apple a-t-elle raison de faire cela ? L’avenir répondra à cette question, et si d’aventure le marché n’évolue pas dans la direction voulue par Apple, il ne faudra surtout pas oublier que la seconde version du MacBook Air a prouvé qu’elle est capable de pivoter très rapidement pour améliorer ses produits.</p>
<p>Apple fait-elle payer cette évolution à marche forcée trop cher ? Il est difficile de répondre à cette question, d’autant que la nouvelle gamme embarque la Touch Bar, au coût (et à l’intérêt) difficile à estimer.</p>
<p>Le problème financier est à mon avis en grande partie induit par le fait que le produit oblige à la fois l’acheteur à débourser une somme rondelette et à faire l’effort de modifier ses habitudes.</p>
<p>Le prix est donc la goutte d’eau qui fait déborder le vase, surtout en ajoutant dans l’équation le prix des adaptateurs permettant de conserver les bonnes vieilles habitudes.</p>
<p>Alors, Apple est-elle arrogante en faisant cela ? Cela pourrait très (trop) facilement être perçu de cette façon, et la politique tarifaire conjuguée au bruit des mécontents rend le raccourci d’autant plus facile, mais je pense que ce n’est pas pour rien que la notion de <a href="http://www.theverge.com/2016/9/7/12838024/apple-iphone-7-plus-headphone-jack-removal-courage">courage</a> a été évoquée durant une interview.</p>
<p>Apple pourrait très bien rester dans sa zone de confort, et se contenter d’itérer sur la gamme précédente en ajoutant des ports USB-C, un capteur TouchID, proposer jusqu’à 1 To de RAM, des processeurs plus puissants ainsi qu’une résolution d’écran supérieure tout en remaniant son design à volume constant, en déplaçant les haut-parleurs, en changeant le clavier et en augmentant la taille du trackpad.</p>
<p>Après tout, la quasi-totalité des fabricants d’ordinateurs présents sur le marché fait cela, même si certains prennent parfois le risque de lancer sur le marché une démonstration technologique camouflée parmi une gamme de produits fondamentalement classiques pour démontrer qu’ils savent faire aussi bien qu’Apple, voir même mieux.</p>
<p>Sauf qu’Apple a eu le courage d’être disruptive en proposant de manière très visible pour l’ensemble de sa gamme d’ordinateurs portables quelque chose d’inédit sur le marché, en prenant le risque de décevoir ou de mécontenter une frange potentiellement significative de sa clientèle habituelle.</p>
<p>En clair, Apple a eu le courage d’innover.</p>http://blog.mageekbox.net/?post/2016/11/16/%C3%80-propos-de-l%E2%80%99USB-C-des-nouveaux-MacBook-Pro#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/496Alan Kay about objecturn:md5:4a4965a344c7545f38dfe0aecb22156c2016-06-21T16:34:00+02:002016-06-21T16:34:00+02:00mageekguyRéfléxions <blockquote cite="https://news.ycombinator.com/item?id=11940028"><p>I've been constantly surprised about how what I called <q>object-oriented</q> and <q>system-oriented</q> got neutered into Abstract Data Types, etc. I think because people wanted to retain the old ways of programming with procedures, assignment statements, and data structures. These don't scale well, but enormous amounts of effort have been expended to retain the old paradigms…</p>
</blockquote>http://blog.mageekbox.net/?post/2016/06/21/Alan-Kay-about-object#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/494Réussir dans la vie…urn:md5:6021d35012d1856d2fe73defa7542fa52014-08-11T15:08:00+02:002014-08-11T15:08:00+02:00mageekguyRéfléxions <p>Il faut que tu travailles bien à l’école pour réussir dans la vie.</p>
<p>Il faut que tu travailles bien et beaucoup pour réussir ta carrière.</p>
<p>Il faut que tu aies une Rolex à ton poignet avant 50 ans pour réussir ta vie.</p>
<p>Il faut… pour réussir…</p>
<p>Je pense que nous avons tous entendu cette ritournelle à minima une fois dans notre vie, même si parfois, elle est exprimée de manière presque subliminale.</p>
<p>Pendant longtemps, je me suis interrogé sur la signification de ce « réussir » que nos parents, les politiques et la société nous servent à toutes les sauces sous une forme ou sous une autre.</p>
<p>En effet, je ne me sentais pas à l’aise avec la définition implicite qui émane de tous ces leitmotivs récurrents qui semblent systématiquement attacher à la notion de réussite l’argent, le travail et le matérialisme.</p>
<p>Et puis, au détour d’un film, j’ai eu « ma » définition de la réussite, celle qui correspond à mes valeurs, qui est en accord avec mes convictions et avec laquelle je suis parfaitement en phase :</p>
<blockquote cite="http://www.imdb.com/title/tt1016075/">
<p>Réussir, ce n’est pas toujours ce qu’on croit.</p>
<p>Ce n’est pas devenir célèbre, ni riche ou encore puissant.</p>
<p>Réussir, c’est sortir de son lit le matin et être heureux de ce que l’on va faire durant la journée, si heureux qu’on a l’impression de s’envoler.</p>
<p>C’est travailler avec des gens qu’on aime.</p>
<p>Réussir, c’est être en contact avec le monde, et communiquer sa passion.</p>
<p>C’est trouver une façon de rassembler des gens qui n’ont peut-être rien d’autre en commun qu’un rêve.</p>
<p>C’est se coucher le soir en se disant qu’on a fait du mieux qu’on a pu.</p>
<p>Réussir, c’est connaître la joie, la liberté et l’amitié.</p>
<p>Je dirais que réussir, c’est aimer.</p>
</blockquote>
<p>Et si je me base sur cette définition, aujourd’hui, je n’ai pas réussi, et malheureusement à plus d’un titre.</p>
<p>Il est donc plus que temps que je fasse en sorte d’y parvenir !</p>http://blog.mageekbox.net/?post/2014/08/11/R%C3%A9ussir-dans-la-vie%E2%80%A6#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/483À propos de la programmation orientée objet #2urn:md5:d4081f78ca6e65f60adf2136d3ce353d2014-04-18T22:39:00+02:002014-08-11T14:17:27+02:00mageekguyRéfléxions<p>J’ai eu <a href="http://blog.mageekbox.net/?post/2014/04/11/A-propos-de-de-la-programmation-orientee-objet#c6820">quelques</a> <a href="http://blog.mageekbox.net/?post/2014/04/11/A-propos-de-de-la-programmation-orientee-objet#c6822">commentaires</a> à propos de <a href="http://blog.mageekbox.net/?post/2014/04/11/A-propos-de-de-la-programmation-orientee-objet">mon dernier billet</a> dans lequel je dis qu’il n’est pas prudent, lorsqu’on fait de la programmation orientée objet, de se baser à l’intérieur d’une méthode de classe sur une valeur retournée par ce qui est communément appelé un « getter » pour prendre une décision.</p>
<p>Étant donné que je suis un peu masochiste, j’ai pris le temps de coder quelques lignes pour démontrer qu’il s’agit d’une mauvaise pratique.</p>
<p>Étant amateur de (bonne) bière, je me suis permis de choisir comme cas d’usage la réalisation d’une commande par un client dans un bar à bière, de la demande au paiement.</p>
<p>De plus, afin de limiter la portée de l’exemple, j’ai fait quelques concessions sur la réalisation technique.</p>
<p>Ainsi, mon code ne contient pas d’interface, alors que dans un cas réel, afin d’augmenter le niveau d’abstraction, il faudrait y recourir afin de pouvoir par exemple remplacer le barman par une pompe à bière automatique, ou bien le client par un Autrichien sachant parler le français et payer en euro.</p>
<p>De plus, je n’ai pas utilisé d’injection de dépendance pour la création de mes objets et au moins une méthode assure une méthode qui ne devrait pas être de la responsabilité de la classe, mais j'ai choisi dans ce cas la facilité, car la méthode concernée est périphérique et n'apporte rien au propos.</p> <p>Ces précisions étant apportées, voici donc maintenant <a href="https://gist.github.com/mageekguy/11062796">une première version</a> des classes nécessaires et vous constaterez en l’exécutant avec le code suivant et une version de PHP ≥ 5.4 que le client a bien payé 30 avec une carte de crédit et dispose bien de 5 verres de Chimay Bleu remplis à 75 %.</p>
<blockquote><pre><code>$me = new client();
$barman = new barman();
$barman
->receiveOrder($me->order(5, 'Chimay bleu'))
->prepareOrder()
;
$me->receiveDrinks($barman->giveDrinks());
$barman->billDrinks($me);
$me->showDrinks();</code></pre></blockquote>
<p>Maintenant, voyons ce qu’il se passe lorsqu’on utilise ces classes avec le code suivant :</p>
<blockquote><pre><code>$me = new client();
$barman = new barman();
$barman
->receiveOrder($me->order(5, 'Chimay bleu'))
->prepareOrder()
;
$me
->updateOrder(0, 'Chimay bleu')
->receiveDrinks($barman->giveDrinks())
;
$barman
->billDrinks($me)
->updateDrinks();
;
$me->showDrinks();</code></pre></blockquote>
<p>Vous constaterez que non seulement le client n’a rien payé, mais en plus, ses verres sont remplis à 10 % de 1664 !</p>
<p>Pourtant, il n’y a dans ce contexte aucune concurrence, aucune parallélisation, aucun fichier, aucune base de données, et toutes les propriétés des classes sont privées.</p>
<p>Je vous propose maintenant d’exécuter le code suivant avec <a href="https://gist.github.com/mageekguy/11062841">ces autres classes</a> :</p>
<blockquote><pre><code>$me = (new client())->order(5, 'Chimay bleu', $barman = new barman());
$barman
->prepareOrder()
->giveDrinks($me)
->billDrinks($me)
;
$me->showDrinks();</code></pre></blockquote>
<p>Nous retrouvons le comportement de départ, puisque le client a bien payé 30 avec une carte de crédit et dispose bien de 5 verres de Chimay Bleu remplis à 75 %.</p>
<p>Et maintenant, je vous invite à essayer de faire en sorte avec ces classes que le client soit servi gratuitement dispose de verres remplis à 10 % de 1664 (sans toucher au code des méthodes existantes évidemment)…</p>
<p>Et pour ceux désirant des explications supplémentaires ou ne sont pas encore convaincu, je vous invite à lire <a href="http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf">ceci</a> ou <a href="http://williamdurand.fr/2013/06/03/object-calisthenics/">cela</a>.</p>http://blog.mageekbox.net/?post/2014/04/18/%C3%80-propos-de-de-la-programmation-orient%C3%A9e-objet-2#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/482À propos de la programmation orientée objeturn:md5:a43c29cdcf7752e6d67b56dddb6d74bd2014-04-11T23:32:00+02:002014-08-11T14:17:42+02:00mageekguyRéfléxions<p>Il y a quelque temps, un vieux serpent de mer est ressurgi puisque quelqu’un a demandé si atoum est aujourd’hui capable de <a href="https://github.com/atoum/atoum/issues/322">tester des méthodes protégées</a>.</p>
<p>J’ai tout d’abord laissé le <a href="http://blog.mageekbox.net/?post/2013/07/09/Merci-a-la-marmotte-et-au-rasta-blanc">rasta blanc</a> ainsi que d’autres utilisateurs répondre à la question et justifier le fait qu’atoum ne propose pas cette fonctionnalité.</p>
<p>Cependant, du code censé me démontrer l’utilité de cette possibilité m’a été présenté, et je suis alors rentré dans le débat en expliquant que lorsque les concepts de base de la programmation orientée sont respectés, il est inutile de tester des méthodes protégées.</p>
<p>Et je ne justifierais pas ici et maintenant une nouvelle fois cela, car ce n’est pas l’objet de ce billet, d’autant que <a href="http://blog.mageekbox.net/?post/2010/12/28/private%2C-protected-et-public-sont-dans-un-b%C3%A2teau...">je l’ai déjà fait</a>.</p>
<p>La discussion a en effet dévié du sujet initial pour se focaliser sur la programmation orientée objet et ses concepts, et je me suis rendu compte à cette occasion qu’en réalité nous ne faisions pas toujours de la programmation orientée objet, moi compris.</p> <p>Voici par exemple le code qui m’a été présenté dans l’optique de justifier le test des méthodes protégées :</p>
<blockquote><pre><code>interface Personn
{
public function getBirthdate();
}
class Francais implements Person
{
private $birthdate = null;
public function __construct(JulienDate $date)
{
$this->birthdate = $date;
}
public function getBirthdate()
{
return $this->birthdate;
}
}
class DisneyLandParisPricingSystem implements TicketPricingSystem
{
public function getPrice(Person $person)
{
$now = new julianDate();
if ($now - $person->getBirthdate() <= 2) {
return 0;
} elseif ($now - $person->getBirthdate() <= 4) {
return 10;
} else {
return 30;
}
}
}</code></pre></blockquote>
<p>Il n’a rien d’exceptionnel et il est certainement semblable à celui que vous ou moi avons pu écrire ou écrivons quotidiennement.</p>
<p>Pourtant, il ne s’agit pas de programmation orientée objet.</p>
<p>En effet, ce style de programmation a pour but de masquer aux yeux du monde le fonctionnement interne d’un objet.</p>
<p>Un objet est donc <a href="http://blog.mageekbox.net/?post/2013/03/12/La-POO-expliqu%C3%A9e-par-Steve-Jobs">une boite noire</a> capable d’effectuer des actions en fonction de son état interne et des informations qui lui sont communiquées.</p>
<p>La boite noire est donc la classe, les actions qu’elle peut effectuer sont définies par les méthodes de cette classe, tandis que son état interne est représenté par les propriétés de la classe.</p>
<p>Or, dans le code ci-dessous, une propriété de la classe, donc une information relative à l’état interne de la boite noire est utilisée dans une méthode externe à la classe.</p>
<p>En effet, la date de naissance de la personne est utilisée pour calculer son âge afin de décider de la valeur d’une variable.</p>
<p>La boite noire qu’est censée être l’objet ne l’est donc plus réellement, puisqu’elle expose des informations sur sa structure interne.</p>
<p>Donc, même si ce code atteint son objectif, à savoir calculer une valeur en fonction de l’âge de la personne, il ne s’agit pas de programmation orientée objet, mais bien de programmation procédurale, puisqu’il y a rupture de l’encapsulation.</p>
<p>Il arrive cependant que certains ne soient pas convaincus par cet argument, et il est donc nécessaire de pousser la démonstration un cran plus loin.</p>
<p>Quel est le résultat fourni par le code précédent si la valeur de la date de naissance est modifiée entre le premier et le second appel à <code>Person::getBirthdate()</code> ?</p>
<p>Car même si le code ne semble pas le permettre, c’est tout de même possible, puisqu’il suffit pour cela que l’âge soit par exemple stocké dans un fichier, une base de données ou tout autre contenant modifiable indépendamment de ce code.</p>
<p>Si nous supposons par exemple que le premier appel permet de calculer un âge de 10 ans, puis que le second permet de calculer un âge de 1 an, car quelqu’un a entre temps édité le fichier ou la base de données correspondante pour par exemple corriger une faute de frappe, la méthode va retourner la valeur 10 au lieu de 30.</p>
<p>On va alors me répondre que pour éviter cela, il suffit de n’appeler qu’une seule fois la méthode <code>Person::getBirthdate()</code> et de stocker sa valeur de retour dans une variable.</p>
<p>C’est tout à fait exact, mais encore faut-il y penser, et y penser systématiquement à chaque fois qu’on utilise cette méthode pour prendre une décision…</p>
<p>De plus, le nom de la méthode laisse à penser qu’elle renvoie la date de naissance, mais rien n’impose le type dans lequel elle sera exprimée.</p>
<p>En fonction des différentes implémentations possibles de l’interface Person, la date de naissance pourra donc être exprimée dans un calendrier qui n’est pas celui utilisé par <code>DisneyLandParisPricingSystem</code>.</p>
<p>Et dans ce cas, le résultat de la méthode <code>DisneyLandParisPricingSystem ::getPrice()</code> pourra être erroné :</p>
<blockquote><pre><code>class Maya implements Person
{
private $birthdate = null;
public function __construct(MayaDate $date)
{
$this->birthdate = $date;
}
public function getBirthdate()
{
return $this->birthdate;
}
}</code></pre></blockquote>
<p>De plus, rien n’impose à <code>Person ::getBirthdate()</code> de renvoyer un objet, et elle pourrait donc très bien renvoyer un timestamp UNIX, par exemple, ou le nombre de jour écoulé depuis l’an 0.</p>
<p>Certes, il est possible de déléguer ce calcul à des méthodes qui s'appeleraient par exemple <code>Person::isBaby()</code>, <code>Person::isChild()</code> ou <code>Person::isAdult()</code>, mais outre le fait qu'il va être difficile de trouver un nom pour une méthode permettant de détecter les personnes ayant entre 37 et 42 ans, seul la bonne volonté de leur développeur fera qu'elles renverront effectivement un booléen.</p>
<p>De plus, au fur et à mesure de l'évolution de vos règles de tarification, il faudra ajouter de plus en plus de méthodes de ce type à l'interface <code>Person</code>, donc les implémenter systèmatiquement pour chaque classe qui l'implémentera.</p>
<p>Donc en admettant que votre système de tarification utilise 20 critères, il faudra implémenter 20 méthodes…</p>
<p>Or, il se trouve que si la classe Person n’expose pas son état interne via la méthode <code>getBirthdate()</code>, tous ces problèmes ne se posent plus :</p>
<blockquote><pre><code>
class Maya implements Person
{
private $birthdate = null;
public function setBirthdate(MayaDate $date) // Oui, Maya, pourquoi pas :)
{
$this->birthdate = $date;
return $this;
}
public functionc giveInformationsTo(DisneyLandParisPricingSystem $pricingSystem)
{
$pricingSystem->setBirthdate($this->birthdate->toJulianDate());
}
}
class Français implements Person
{
private $birthdate = null;
public function setBirthdate(JulianDate $date)
{
$this->birthdate = $date;
return $this;
}
public functionc giveInformationsTo(DisneyLandParisPricingSystem $pricingSystem)
{
$pricingSystem->setBirthdate($this->birthdate);
}
}
class DisneyLandParisPricingSystem implements TicketPricingSystem
{
private $birthdate = null;
public function setBirthdate(JulianDate $date)
{
$this->birthdate = $date;
return $this;
}
public function getPrice(Personn $person)
{
$person->giveInformationTo($this);
$age = $this->computeAge();
if ($age <= 2) {
return 0;
} elseif ($age <= 4) {
return 10;
} else {
return 30;
}
}
private function computeAge()
{
return new julianDate() - $this->birthdate;
}
}
</code></pre></blockquote>
<p>Avec cette solution qui suit les paradigmes de la programmation orientée objet, les problèmes évoqués précédemment n’existent plus.</p>
<p>En effet, c’est la classe implémentant <code>Person</code> qui se charge de renseigner la classe chargée de calculer le prix du billet et le développeur n’a ainsi plus à se soucier d’appeler une seule fois une méthode pour être certain d’avoir un résultat cohérent.</p>
<p>De plus, le système de tarification exprime ses besoins à l’aide du typage des arguments de ses méthodes, puisque <code>DisneyLandParisPricingSystem::setBirthdate()</code> précise qu’elle n’accepte que les dates au format julien.</p>
<p>Le problème posé par le calendrier utilisé pour exprimer l’âge disparait donc automatiquement et de plus, les classes implémentant l’interface <code>Person</code> sont à même de faire les éventuelles conversions nécessaires au diaglogue avec une instance de <code>DisneyLandParisPricingSystem</code>.</p>
<blockquote><p>Think declaratively instead of procedurally!</p>
</blockquote>
<p>Enfin, cerise sur le gâteau, si les règles de tarification évoluent, pour par exemple prendre en compte le fait que la personne est handicapée, il suffit de faire évoluer <code>DisneyLandParisPricingSystem</code> pour que les instances de <code>Person</code> soit à même de lui fournir l'information ou non en fonction de leur état :</p>
<blockquote><pre><code>class Handicape implements Person
{
private $birthdate = null;
public function setBirthdate(JulianDate $date)
{
$this->birthdate = $date;
return $this;
}
public functionc giveInformationsTo(DisneyLandParisPricingSystem $pricingSystem)
{
$pricingSystem
->setBirthdate($this->birthdate)
->setHandicape(true)
;
}
}
class DisneyLandParisPricingSystem implements TicketPricingSystem
{
private $birthdate = null;
private $handicape = false;
public function setBirthdate(JulianDate $date)
{
$this->birthdate = $date;
return $this;
}
public function setHandicape($boolean)
{
$this->handicape = ($boolean == true);
}
public function getPrice(Personn $person)
{
$person->giveInformationTo($this);
$age = $this->computeAge();
if ($age <= 2) {
return 0;
} elseif ($age <= 4) {
return 10;
} else {
return ($this->handicape ? 15 : 30);
}
}
private function computeAge()
{
return new julianDate() - $this->birthdate;
}
}
</code></pre></blockquote>
<p>Lorsque notre code demande une information à une instance de classe et prend une décision en fonction, nous ne faisons donc pas de la programmation orientée objet.</p>
<p>Afin de profiter des avantages de cette dernière, il est bien plus efficace de respecter ses paradigmes en n’exposant pas les propriétés de nos objets aux yeux de l’extérieur et en demandant à nos objets de faire des actions.</p>
<p>En anglais, ce concept est connu sous le nom de <a href="http://pragprog.com/articles/tell-dont-ask">Tell, Don't as</a>.</p>
<blockquote><p>Procedural code gets information then makes decisions. Object-oriented code tells objects to do things.</p>
</blockquote>
<p>PS : Cet <a href="http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf">article</a> est également une bonne ressource, en plus d'être un excellent exercice pour améliorer ses compétences en programmation orientée objet.</p>http://blog.mageekbox.net/?post/2014/04/11/A-propos-de-de-la-programmation-orientee-objet#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/481PHP au Nirvanaurn:md5:8ef9f3e81771eccaf3e0d619a44c958a2014-04-01T00:00:00+02:002014-04-01T08:16:34+02:00mageekguyRéfléxions<p>Il y a encore peu de temps, dans un monde pas si vieux que cela, <a href="http://www.zend.com">Zend</a> régnait en maître dans l’écosystème <a href="http://www.php.net">PHP</a>.</p>
<p>En effet, le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> était la seule et unique solution viable pour exécuter du code PHP, et si son code est libre et ouvert, Zend exerce suffisamment de contrôle sur son développement pour pouvoir le maîtriser plus ou moins ouvertement.</p>
<p>Mais depuis quelque temps, la situation a beaucoup évolué, puisqu’il existe maintenant des alternatives viables et surtout plus performantes.</p>
<p>J’avais déjà évoqué <a href="http://blog.mageekbox.net/?post/2012/04/02/Poisson-d-avril-or-not-poisson-d-avril">il y a deux ans</a> le projet <a href="https://github.com/CleverCloud/Bianca">Bianca</a> mis au point par <a href="http://www.clever-cloud.com">Clever Cloud</a> comme solution de remplacement au Zend Engine, mais depuis, d’autres solutions sont apparues, à commencer par <a href="http://hhvm.com">HHVM</a>, conçu par <a href="https://www.facebook.com">Facebook</a>.</p> <p><a href="https://www.facebook.com">Facebook</a> a de plus dévoilé dans la foulée <a href="http://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/">Hack</a> qui apporte le typage strict à PHP, tandis que <a href="http://hippyvm.com">hippyvm</a> et <a href="https://github.com/dim-s/jphp">jphp</a>, basée respectivement sur python et la <abbr title="Java Virtual Machine">JVM</abbr>, ont également fait leur apparition.</p>
<p>L’apparition de ces alternatives ont fait ressurgir le besoin <a href="http://news.php.net/php.internals/73367">d’une normalisation de l’implémentation de PHP</a> en tant que langage, car étant donné qu’elle n’existe pas, <a href="http://hhvm.com">HHVM</a> et consorts sont obligés de se caler plus ou moins finement et plus ou moins de réussite sur le fonctionnement de la seule implémentation de référence du langage, à savoir le Zend Engine.</p>
<p>Or, ce dernier recèle sont lot de bugs et d’incohérences, et de plus, une telle normalisation est un travail de longue haleine dans lequel la communauté des développeurs du Zend Engine semble ne pas avoir envie de se lancer.</p>
<p>Cependant, si les choses continuent d’évoluer à ce rythme, il va devenir à plus ou moins court terme de mettre le langage à plat en décrivant précisément sa syntaxe et son comportement.</p>
<p>Et le jour où cela arrivera, Zend perdra alors tout contrôle sur l’écosystème lié à PHP et son évolution.</p>
<p>Sauf que fort de son expertise, Zend a une solution clef en main et déjà opérationnelle dans ses tiroirs.</p>
<p>En effet, elle travaille déjà depuis plus de 13 mois sur une nouvelle version du langage apportant notamment le support d’Unicode ainsi que le typage strict au niveau des types de base que sont par exemple les entiers et les flottants, et de plus, cette nouvelle version est totalement compatible avec les versions antérieures du langage.</p>
<p>Il serait donc légitime que cette version, dénommée en interne <a href="http://rickrolled.fr">Nirvana</a>, soit du pur bonheur en barre pour tout développeur PHP qui se respecte, au détail près que Zend, grâce à l’expérience acquise avec <a href="http://www.phpcloud.com/develop">phpcloud.com</a>, compte la distribuer uniquement via ce biais.</p>
<p>Ainsi, avec <a href="http://rickrolled.fr">Nirvana</a>, le code PHP est exécuté par une ferme de serveur et la synchronisation des sources est effectuée à l’aide d’un outil développé par Zend, mais basé sur <a href="http://git-scm.com">Git</a> et notamment son mécanisme de <a href="http://git-scm.com/book/en/Customizing-Git-Git-Hooks">« hook »</a> afin de conserver l’instantanéité du développement en PHP.</p>
<p>Lors d’une modification du code, ce dernier est donc aussitôt transmis par <a href="http://rickrolled.fr">Nirvana</a> de manière transparente au nuage qui se charge alors de le compiler, de l’optimiser puis de l’exécuter autant de fois que nécessaire sans repasser par les deux étapes précédentes.</p>
<p>Le tout fonctionnerait à l’aide d'une interface similaire à celle de <a href="https://github.com">Github</a> et cerise sur le gâteau, ce mode de fonctionnement permet à <a href="http://rickrolled.fr">Nirvana</a> de disposer d’une couche de persistance qui lui permet de devenir un véritable serveur d’application similaire à ceux connus dans l'univers Java.</p>
<p>Évidemment, <a href="http://rickrolled.fr">Nirvana</a> s’interface sans le moindre problème avec les outils traditionnels fournis par Zend, à commencer par son IDE, et les performances sont incomparables par rapport à celles du Zend Engine 2 et dépassent même celle de <a href="http://hhvm.com">HHVM</a>.</p>
<p>En effet, outre que le code bénéficie de la puissance du nuage et que ce dernier est de plus capable d’adapter automatiquement les ressources nécessaires en fonction du volume de requêtes à exécuter, le code de <a href="http://rickrolled.fr">Nirvana</a> est une remise à plat complète du Zend Engine et de son architecture.</p>
<p>De plus, des ingénieurs ayant travaillé sur <a href="http://hhvm.com">HHVM</a> ont rejoint son équipe de développement, ce qui lui a permis de bénéficier de leur expertise.</p>
<p>Enfin, pour s’assurer du succès, Zend proposera <a href="http://rickrolled.fr">Nirvana</a> gratuitement à tous, du simple développeur à la multinationale, car elle compte en effet sur la vente des services et outils associés pour financer à la fois son développement et l’infrastructure technique nécessaire à son fonctionnement, ainsi que sur des abonnements sur mesure comprenant des services à haute valeur ajoutée, par exemple de l’analyse de performance en temps réel (pour ce que j’ai pu en savoir, Zend use et abuse de <a href="http://fr.wikipedia.org/wiki/DTrace">DTrace</a> pour ce type de prestation).</p>
<p>Zend va donc dans les jours qui viennent proposer sa propre alternative au Zend Engine qui offrira des fonctionnalités demandées à corps et à cris par sa communauté d’utilisateur avec des performances incomparables, tout en verrouillant sa distribution et son évolution en la conservant sur sa propre infrastructure technique.</p>
<p>La société compte ainsi laisser sur place les alternatives au Zend Engine nouvellement apparu sur le marché afin de continuer à disposer d’un quasi-monopole sur le développement de PHP.</p>
<p>À titre personnel, je suis plus que partagé à propos de cette évolution du langage voulu par Zend.</p>
<p>En effet, si <a href="http://hhvm.com">HHVM</a> me pose <a href="http://blog.mageekbox.net/?post/2014/01/11/Atoum-et-HipHopVM">des problèmes</a> à cause de la potentielle fragmentation du marché qu’elle peut induire, l’impact de <a href="http://rickrolled.fr">Nirvana</a> peut être bien plus dévastateur, car tout ce qui concerne cette évolution du langage sera concentré entre les mains d’un seul acteur du marché.</p>
<p>Et vu l’engouement des développeurs pour <a href="http://hhvm.com">HHVM</a> alors que le projet est encore trop jeune pour pouvoir être utilisé en production dans un environnement différent de celui de <a href="https://www.facebook.com">Facebook</a>, si Zend propose un produit finalisé et totalement compatible avec le Zend Engine, je crains le pire en ce qui concerne l’avenir du langage.</p>http://blog.mageekbox.net/?post/2014/03/31/PHP-au-Nirvana#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/480Nous devrions tous avoir les mêmes valeurs qu'Apple !urn:md5:64f59aea918bf226caabad8dfd1761c92014-03-28T14:00:00+01:002014-03-28T15:13:34+01:00mageekguyRéfléxions<p>Régulièrement, de grandes entreprises américaines communiquent sur les valeurs de leur entreprise.</p>
<p>Et parmi elles, la plus scrutée est évidemment <a href="http://www.apple.fr">Apple</a> puisqu’outre le fait que cette dernière a une culture du secret et que chaque information divulguée peut donner des indices sur ses futurs agissements, elle est attendue au tournant depuis la mort de Steve Jobs.</p>
<p>Ainsi, Tim Cook a par exemple indiqué <a href="http://www.macg.co/aapl/2014/03/tim-cook-reagit-face-au-dernier-livre-sur-apple-maj-80726/page/2/0#comments">au cours d’une interview</a> qu’il a donnée au sujet du livre <a href="http://www.amazon.fr/Haunted-Empire-Apple-After-Steve/dp/006232683X/ref=sr_1_1?ie=UTF8&qid=1396015452&sr=8-1&keywords=haunted+empire">« Haunted Empire : Apple after Steve Jobs »</a> qu’<a href="http://www.apple.fr">Apple</a> n’a pas d’autres objectifs que de créer les meilleurs produits au monde afin de marquer l’univers de son empreinte et le laisser dans une meilleure condition qu’elle ne l’a trouvé.</p>
<p>Et à chaque fois, ce genre de diatribe est perçue plus ou moins négativement par certains, car ils trouvent bien souvent ce discours à minima présomptueux et à maxima digne du guru d’une secte qui n’a que pour seul et unique but de laver un peu plus le cerveau de ses ouailles présentes ou à venir.</p> <p>J’avoue qu’à une époque, j’ai également trouvé ce genre de discours bien pompeux et manipulateur.</p>
<p>Cependant, il faut également savoir faire preuve d’esprit critique, car outre le fait que je vois mal un dirigeant d’entreprise dire autre chose que <a href="http://fr.wikipedia.org/wiki/Don't_be_evil">« Don't be Evil »</a>, avoir de telles valeurs et les énoncer publiquement à plusieurs avantages.</p>
<p>En effet, outre le fait qu’elles définissent en grande partie son image de marque, ces valeurs permettent à <a href="http://www.apple.fr">Apple</a> de prendre plus facilement des décisions, notamment sur des sujets qui font débat.</p>
<p>Il n’est pas rare en effet que des salariés soient en compétition dans l’entreprise et défendent chacun ardemment leurs idées auprès de leur hiérarchie qui peut alors avoir bien du mal à trancher en faveur de l’un ou l’autre camp.</p>
<p>Encore une fois, <a href="http://www.apple.fr">Apple</a> est l’archétype de ce genre de lobbying interne, car les discussions parfois violentes qu’il y a pu avoir entre Steve Jobs et ses collaborateurs ou la compétition parfois bien peu fair-play qui a pu exister entre ses collaborateurs sont de notoriété publique. </p>
<p>Dans un tel contexte, les valeurs de l’entreprise sont alors un bon moyen d’y voir clair, car elles sont indépendantes de la subjectivité de chacun des deux camps vis-à-vis de leur travail.</p>
<p>Il suffit donc de mettre en balance ces valeurs et les projets des deux parties pour savoir lequel y correspond le plus.</p>
<p>Ainsi, si les souris <a href="http://www.apple.fr">Apple</a> n’ont eu pendant longtemps <a href="http://www.macg.co/aapl/2014/03/des-anecdotes-sur-les-souris-apple-des-annees-2000-80592">qu’un seul bouton</a>, c’est parce que Steve Jobs avait jugé que cela était contraire à l’une des principales valeurs recherchées par sa société, à savoir la simplicité d’utilisation.</p>
<p>Et d’ailleurs, cette situation n’a évolué que lorsqu’il a été prouvé à Jobs qu’il était possible d’avoir plusieurs boutons sur une souris qui gardait en apparence sa simplicité.</p>
<p>Dans un autre registre, à une époque, <a href="http://www.apple.fr">Apple</a> (pour ne pas dire Steve Jobs) a eu à choisir entre Gecko et KHTML pour le moteur de rendu de ce qui allait devenir Safari, tout comme elle a été obligée de choisir entre Linux et OSX comme base pour ce qui allait devenir iOS, et je suis prêt à parier que le respect des valeurs énoncées par Tim Cook par chacun de ces projets a pesé dans la balance à l’heure de la décision définitive.</p>
<p>Dans la même veine, les efforts d’<a href="http://www.apple.fr">Apple</a> en ce qui concerne l’impact écologique de ses infrastructures ou le contrôle qu’elle exerce sur ses sous-traitants asiatiques sont concordants avec le discours de Tim Cook.</p>
<p>Par ailleurs, je suis persuadé que les salariés d’<a href="http://www.apple.fr">Apple</a> adhèrent plus ou moins à cette vision de manière consciente ou inconsciente, indépendamment de leur rémunération ou de tout autre avantage.</p>
<p>L’Homme a en effet besoin d’un objectif pour avancer, et honnêtement, je n’en vois pas de plus beau que celui de faciliter la vie de son prochain ou d’améliorer le monde.</p>
<p>Le message véhiculé par Tim Cook est donc sans aucun doute l’un des moteurs qui a permis à <a href="http://www.apple.fr">Apple</a> de survivre et qui lui permet aujourd’hui d’avancer contre vents, bourse, concurrents et marées malgré des choix qui ne sont pas forcément consensuels.</p>
<p>Face à ce raisonnement, certains me rétorquent qu’<a href="http://www.apple.fr">Apple</a> n’a de toute façon qu’un seul but, faire de l’argent, et que si moteur il y a bien, il sert à remplir les caisses et non à améliorer le monde.</p>
<p>Sauf que ceux qui tiennent ce discours oublient que l’argent n’est qu’un moyen de parvenir à ses fins, et non une finalité en soi, car il faut des moyens humains, techniques et financier important pour parvenir à faire ce que l’on veut être le meilleur produit au monde dans sa catégorie.</p>
<p>Et quand bien même ce n’était pas le cas, si en plus d’améliorer le Monde, il est possible de gagner de l’argent, pourquoi s’en priver ?</p>
<p>Le mantra d’<a href="http://www.apple.fr">Apple</a> et d’autres sociétés peut donc sembler présomptueux et être perçu uniquement comme un discours marketing à destination de moutons capables d’avaler l’appât, l’hameçon, la ligne, la canne, le pécheur et même le chalutier, voir même être perçu comme de l’évangélisation permettant à l’entreprise de se remplir encore plus les poches.</p>
<p>Cependant, ce discours peut également être perçu comme une volonté réelle et surtout un moyen pour l’entreprise de prendre les bonnes décisions et d’obtenir les ressources qui lui permettront d’arriver à ses fins.</p>
<p>Indépendamment de l’entreprise qui le tient, il n’y a donc pas à mon sens lieu de s’offusquer d’un tel discours, et nous devrions au contraire avoir la même démarche à titre individuel ou collectif.</p>
<p>Car si, en tant qu’homme ou groupe d’individus, nous avions de telles valeurs affichées publiquement et faisions en sorte de les respecter, le Monde serait certainement un endroit bien différent.</p>http://blog.mageekbox.net/?post/2014/03/28/Nous-devrions-tous-avoir-les-m%C3%AAmes-valeurs-qu-Apple-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/479Les tests sont les panneaux routiers du développeururn:md5:7afcc94821cbde75be0f4619370c434d2014-03-10T13:59:00+01:002014-03-10T14:06:56+01:00mageekguyRéfléxions<p>Même si je me suis sevré du réseau pendant ma semaine de vacances, j’ai vu passer régulièrement cette citation sur <a href="https://twitter.com/ludofleury/status/441876664147271680">twitter</a> :</p>
<blockquote><p>Be humble about what tests can achieve. Tests don’t improve quality: developers do.</p>
</blockquote>
<p>Et même si je suis absolument d’accord, elle m’a fait réfléchir à la signification que je donne aux tests.</p>
<p>J’ai commencé par me dire que si les tests ne permettaient effectivement pas d’améliorer la qualité du code, ils permettaient cependant à minima de la maintenir au cours du temps.</p>
<p>Ils sont en effet les garants du fait qu’une modification effectuée sur le code n’a pas altéré son fonctionnement, du moins en ce qui concerne les fonctionnalités qu’ils prennent en compte.</p>
<p>À première vue, les tests sont donc pour moi un indicateur prenant la forme d’une alarme visuelle telle qu’un gyrophare géant qui passe du vert au rouge lorsqu’elle détecte une anomalie dans le comportement du code.</p>
<p>Arrivé à ce point de mes réflexions, j’aurais pu m’arrêter là, mais j’ai cependant continué à réfléchir à la nature des tests, car intuitivement, je savais qu’ils étaient pour moi plus qu’un simple système d’alarme, notamment dans le cadre du développement par les tests.</p> <p>En effet, dans ce contexte, les tests obligent le développeur à suivre de manière plus formelle les préceptes de base de la programmation orientée objet regroupés sous l’acronyme <a href="http://fr.wikipedia.org/wiki/SOLID_(informatique)">SOLID</a>.</p>
<p>Les tests écrits dans le cadre du <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development"><abbr title="Test Driven Development">TDD</abbr></a> sont donc, en plus d’être un signal d’alarme en cas de problème, des indicateurs qui indiquent au développeur le chemin à suivre pour écrire un code plus lisible et plus facile à réutiliser, maintenir et à faire évoluer.</p>
<p>Si les tests n’améliorent pas la qualité du code, ils permettent donc cependant au développeur qui les rédige de le faire tel un guide de haute montagne montrant à l’alpiniste pourtant chevronné le chemin à la fois le plus efficace et le plus sécurisé lui permettant d’atteindre le sommet de la montagne de la manière la plus sure.</p>
<p>Car malgré son expérience et son intelligence, le développeur reste tout de même un être humain et il est donc par nature faillible et surtout fainéant.</p>
<p>Il est en donc parfois pour lui très tentant d’emprunter des raccourcis ou de prendre des chemins de traverse, car à première vue le chemin à parcourir pour atteindre l’objectif sera plus facile, plus rapide ou moins fastidieux.</p>
<p>Il oublie alors les bonnes pratiques, car il ne veut pas prendre le temps de faire les choses correctement, non pas parce qu’il ne veut pas faire bien son travail, mais parce qu’il a la pression de sa hiérarchie ou bien parce qu’il pense que cela sera sans conséquence, oubliant par la même le sacro-saint précepte de Edward Aloysius Murphy.</p>
<p>Ou bien alors, il pense tout simplement qu’il n’a pas forcément besoin de suivre le chemin plus fastidieux imposé par le respect de SOLID pour obtenir le résultat voulu : peu importe la forme, l’important est que ça fonctionne.</p>
<p>Or, les tests ne permettent pas cela, car un code écrit de cette façon devient très difficile à tester, et c’est d’ailleurs souvent ce qui les rend si détestable aux yeux des développeurs.</p>
<p>D’ailleurs, un bon indicateur empirique de la qualité d’un code est la facilité d’écriture des tests associés.</p>
<p>Si ces derniers sont simples à rédiger, alors il y a de fortes chances que le code correspondant soit de qualité.</p>
<p>Dans le cas contraire, c’est un indicateur très fort de la nécessité d’une refonte de l’architecture du code.</p>
<p>Arrivé à ce point de mes réflexions, j'ai réalisé que le mot <q>indicateur</q> y revient régulièrement, et j'en suis donc arrivé à la conclusion que les tests sont donc de mon point de vue en tout point similaire à la signalisation routière.</p>
<p>En effet, tout comme les tests pour le développeur, certains panneaux routiers indiquent au conducteur la direction à suivre parmi tous les chemins possibles pour arriver correctement à destination, tandis que d’autres l’avertissent d’un danger plus ou moins imminent ainsi que sur sa nature.</p>
<p>Et tout comme un test ne peut vérifier que les comportements pour lesquels il a été conçu, les radars routiers sont capables de détecter automatiquement de par leur conception uniquement certaines infractions spécifiques et ignore totalement toutes les autres.</p>
<p>Pour la gestion de ces dernières, l’intervention humaine sous la forme d’un humain coiffé d’un képi reste incontournable, tout comme le travail en binôme, la revue de code et la recette manuelle sont incontournables pour le développeur même lorsqu’il met en œuvre des tests automatisés.</p>
<p>De là à dire que le développement revient à arpenter un chemin semé d’embuches diverses que les tests nous permettent plus ou moins d’anticiper efficacement…</p>http://blog.mageekbox.net/?post/2014/03/10/Les-tests-sont-les-panneaux-routiers-du-d%C3%A9veloppeur#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/477À perception différente, incompréhension mutuelle #2urn:md5:e31bee9298d383df1728080ed9d8368c2014-02-23T21:15:00+01:002014-02-24T11:35:31+01:00mageekguyRéfléxions<p>Malgré l’angine qui me ravage la gorge, je ne résiste pas à l’envie de poursuivre ma réflexion concernant la difficulté à communiquer la complexité du métier de développeur au néophyte.</p>
<p>J’ai émis <a href="http://blog.mageekbox.net/?post/2014/02/14/A-perception-differente-incomprehension-mutuelle">précédemment</a> à ce sujet l’hypothèse que l’origine de cette difficulté trouve sa source dans le fait que la plupart des gens ont une vision très simplifiée des concepts qu’ils manipulent au quotidien, comme le temps, justement parce qu’ils pensent les manipuler efficacement et surtout correctement quotidiennement et qu’en conséquence, cela doit être tout aussi facile pour un ordinateur et donc un développeur.</p>
<p>Cependant, j’ai également une autre hypothèse pouvant expliquer la vision déformée qu’ont la plupart des gens de notre métier.</p> <p>Tout d’abord, si ces gens pensent manipuler correctement et facilement un concept tels que le temps, c’est en fait très rarement le cas.</p>
<p>Si vous voulez vous en convaincre, il vous suffit de demander à quelqu’un de vous dire par exemple si le prochain mois compte bien 30 jours, ou si le prochain mois de février aura 27, 28 ou 28 jours, ou bien de vous donner l’heure qu’il sera dans 940 minutes, ou bien si le 24 décembre sera l’année prochaine un samedi ou un mercredi.</p>
<p>Vous constaterez alors que bien peu de gens sont capables de répondre à ce genre de question rapidement et surtout sans faire d’erreurs.</p>
<p>Or, en informatique, les erreurs existent également et l’ordinateur doit être capable de plus ou moins les gérer en fonction de la criticité des tâches qu’il effectue.</p>
<p>Et le panel des erreurs possibles est très vaste, car si l’Homme est généralement très faillible lorsqu’il effectue un calcul mathématique, l’ordinateur doit lui faire face à des erreurs de nature bien plus différente et variée.</p>
<p>En effet, si les probabilités qu’un calcul effectué par un ordinateur soit incorrect mathématiquement parlant sont extrêmement faibles (mais pas <a href="http://fr.wikipedia.org/wiki/Bug_de_la_division_du_Pentium">non nulle</a>), techniquement, un grand nombre de problèmes sont susceptibles de survenir au cours de l’exécution d’un programme.</p>
<p>La connexion réseau peut être interrompue, un composant peut devenir défectueux, la mémoire de masse ou la mémoire vive peuvent ne pas être disponibles en quantité suffisante pour la bonne exécution du programme, ou plus simplement, le système d’exploitation ou l’un de ses services peut être mal configuré, un fichier peut être inaccessible car l‘utilisateur ne dispose pas des permissions nécessaires, et cette liste est loin d’être exhaustive.</p>
<p>Un (bon) développeur doit en effet lorsqu’il développe un programme se préoccuper de la disponibilité des ressources que ce dernier utilise au niveau matériel et logiciel.</p>
<p>Mais cela, le néophyte l’ignore totalement, car il a tendance à penser dans un premier temps que l’informatique est une technologie infaillible, malgré les années d’éducation données par Microsoft à ce sujet avec ses « <a href="http://fr.wikipedia.org/wiki/Blue_Screen_of_Death">Blue Screen Of Death</a> »…</p>
<p><a href="http://blog.mageekbox.net/public/bsod.png" title="bsod.png"><img src="http://blog.mageekbox.net/public/.bsod_m.png" alt="bsod.png" title="bsod.png, fév. 2014" style="border: solid 1px; margin: 20px auto; display: block;" /></a></p>
<p>Or, la gestion des erreurs est une tâche difficile et parfois extrêmement complexe pour un développeur, car en fonction du type des erreurs susceptibles de se produire et de leur contexte, il devra définir des stratégies permettant au programme à minima de se terminer correctement et à maxima de poursuive son exécution soit dans un mode dégradé, soit comme si de rien n’était.</p>
<p>Et je ne parle même pas de la difficulté qu’il peut avoir à tester les différents cas d’erreur possibles au niveau unitaire avec l’aide de bouchons et autres moles.</p>
<p>Il n’est donc pas rare que la gestion des erreurs demande au développeur un travail largement plus conséquent que celui requis par le développement de la tâche que doit réaliser son programme lorsque tout se passe bien, que ce soit en terme de volume de code ou bien en terme de conception et de tests.</p>
<p>De plus, dans un monde idéal, il faudrait que le programme conserve une trace de ces erreurs, afin de permettre aux développeurs ou aux administrateurs systèmes d’être alerté et pouvoir ainsi prendre rapidement et efficacement les mesures correctives adéquates.</p>
<p>Et là encore, un grand nombre de stratégies sont possibles, en fonction de la criticité du programme et donc du niveau de précision désiré.</p>
<p>Une personne n’ayant aucune idée de ces problématiques peut donc penser qu’un développement est très simple et va donc être réalisé très rapidement, vu qu’elle fait totalement abstraction de la partie la plus délicate du travail à effectuer puisqu’elle en ignore l’existence.</p>
<p>Et si d’aventure l’envie vous prend de lui en parler, je suis prêt à parier qu’elle vous répondra que tout cela n’arrivera jamais, même si la <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">Loi de Murphy</a> est démontrée quotidiennement.</p>http://blog.mageekbox.net/?post/2014/02/23/A-perception-differente-incomprehension-mutuelle-2#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/476À perception différente, incompréhension mutuelleurn:md5:5b99fc5942f5140bb3cf991f93cc17e82014-02-14T13:59:00+01:002014-02-14T15:32:06+01:00mageekguyRéfléxions<p>Je me demande souvent pourquoi les personnes qui n’ont jamais tapé une seule ligne de code dans leur vie ne comprennent pas la complexité de notre métier.</p>
<p>Et si une réponse évidente est déjà dans la question en elle-même, je pense qu’il est tout de même intéressant de pousser la réflexion un peu plus loin, ne serait-ce que pour pouvoir améliorer notre communication, par exemple lors d’une planification de tâche ou une discussion à propos du nombre de jours nécessaire à un développement.</p>
<p>Et l’une des réponses que j’ai trouvées est que le non-informaticien a une vision extrêmement simplifiée de nos problématiques.</p> <p>Ainsi, pour un néophyte en programmation, la gestion du temps est par exemple une chose très simple, puisqu’il y a des secondes, des minutes, des heures, des jours et que tout cela mis bout à bout permet d’obtenir des années, des siècles et même des millénaires.</p>
<p>Et de plus, tout cela est régi par des règles universelles, car tout le monde sait que 60 secondes forment une minute, que 60 minutes forment une heure et que 24 heures constituent une journée.</p>
<p>Le tout est de plus utilisé quotidiennement de manière quasi automatique par le commun des mortels depuis plusieurs millénaires, et si le commun des mortels est capable de le faire, un ordinateur devrait en être tout autant capable.</p>
<p>Sauf qu’en réalité, le temps et sa gestion sont infiniment plus complexes, car pour paraphraser Albert Einstein, il s’agit d’une notion toute relative.</p>
<p>Toutes les années ne font en effet pas 365 jours, comme tout les mois ne font pas forcément 30 ou 31 jours et certaines journées peuvent faire 25 heures, voir même contenir des secondes intercalaires.</p>
<p>De plus, en fonction de la position géographique, une date n’a pas forcément la même signification, puisque le 14 février à 18 h en France peut être le 15 février à 2 h à Tokyo.</p>
<p>La représentation d’une date peut également prendre moult formes, en fonction de la langue, du calendrier, de l’époque ou de la culture utilisée, ce qui peut par exemple mener à des ambiguïtés si le référentiel n’est pas précisé.</p>
<p>Ainsi, 9 h peut tout aussi bien signifier 9 h ou bien 21 h.</p>
<p>De plus, une date pourra avoir une signification différente en fonction de l’ordinateur utilisé, grâce par exemple à la magie de la localisation.</p>
<p>Le développeur doit donc prendre tout cela en compte, et même si les règles sont bien connues, faire les bons choix techniques en fonction du contexte d’utilisation et prendre en compte ces règles pour répondre correctement à un besoin peut devenir une véritable gageure.</p>
<p>Et si d’aventure les règles relatives au métier sont également complexes, la problématique peut devenir rapidement très complexe, et si vous avez le moindre doute à ce sujet, je vous invite pour vous en convaincre définitivement à, par exemple, lire les textes de loi régissant les 35 heures ou bien encore les congés payés.</p>
<p>J’ajoute que pour couronner le tout, valider le bon fonctionnement d’un code utilisant le temps peut être délicat, puisqu’il faut pour cela pouvoir se mettre aussi bien dans des contextes d’utilisation nominaux, mais aussi dans des contextes d’utilisation particuliers, par exemple un passage de l’heure d’hivers à l’heure d’été.</p>
<p>Or, la machine à voyager dans le temps n’a pas encore été inventée et s’il est bien possible d’avancer ou de reculer l’horloge d’un ordinateur à volonté, c’est une démarche plus que fastidieuse à réaliser dans le cadre du test logiciel, sans compter que cette modification peut avoir un impact significatif sur le bon fonctionnement de la machine.</p>
<p>Tester le comportement d’un code utilisant une ou plusieurs données temporelles demande donc des techniques d’ingénierie logicielles spécifiques, par exemple la mise en œuvre de bouchons permettant de simuler de manière logicielle l’écoulement du temps au niveau des tests unitaires.</p>
<p>Le développeur peut alors à sa guise accélérer le temps, le ralentir ou s’y déplacer, ce qui lui permet de valider son code par rapport à toutes les situations qu’il peut imaginer.</p>
<p>Reste que le développeur restera tout de même un Humain, et qu’en conséquence, il est sujet à l’erreur et qu’il est très possible que malgré ses efforts, un cas limite lui échappe et que malgré les tests, un bug restera donc tout de même caché au sein de son code, n’attendant que le moment adéquat pour se manifester.</p>
<p>Or, le néophyte ne voit rien de tout cela, et c’est absolument normal, car outre le fait que l’informatique moderne est conçue de façon à masquer totalement sa complexité à son utilisateur final, ce dernier n’a pas à la connaître car ce n’est pas son domaine d’expertise.</p>
<p>Et ce qui est valable pour le temps s’applique également à la sauvegarde dans un fichier, aux connexions à une base de données, et même parfois à des calculs très basiques.</p>
<p>Durant ma première expérience professionnelle, j’ai ainsi eu besoin de justifier le développement d’un programme en C au lieu d’un code en PHP pour calculer des proratas, car mon interlocuteur n’arrivait pas à comprendre que PHP était un outil particulièrement inefficace pour effectuer des calculs même très simples avec des flottants.</p>
<p>D’ailleurs, je ne parlerais pas de <a href="http://accu.org/index.php/journals/1702">la problématique posée par les arrondis</a> qui parait souvent totalement aberrante au béotien tant il a une perception absolue de l’informatique, à tel point qu’il ne veut pas comprendre que pour un ordinateur 0.33333 + 0.33333 n’est pas égal à 2/3 et qu’en conséquence, faire calculer une TVA ou un total de facture à un ordinateur n’est pas forcément une chose simple.</p>
<p>Tout cela pour dire qu’il peut être pertinent lors d’une discussion à propos d’un chiffrage ou d’une planification de faire preuve de pédagogie en donnant une idée, même minimale ou approximative, de la complexité des problèmes à résoudre au niveau informatique pour obtenir le résultat désiré.</p>
<p>Et pour y parvenir, je n’ai toujours pas trouvé la recette magique, donc si vous avez des suggestions, n’hésitez surtout pas à me la communiquer, car je saurais quoi en faire quasi quotidiennement.</p>http://blog.mageekbox.net/?post/2014/02/14/A-perception-differente-incomprehension-mutuelle#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/474Remerciementurn:md5:b8cd1ac40175a6689632504a4ab14ee02014-02-07T22:08:00+01:002014-02-07T22:17:56+01:00mageekguyRéfléxions<p>Depuis maintenant un moment, j’ai levé le pied en ce qui concerne le développement <a href="http://www.atoum.org/atoum">d’atoum</a> suite à certains événements survenus dans ma vie aussi bien qu’au sein de sa communauté.</p>
<p><a href="http://blog.mageekbox.net/public/atoum/commits.png" title="commits.png"><img src="http://blog.mageekbox.net/public/atoum/.commits_m.jpg" style="margin: 10px auto; display: block; border: solid 1px #000" /></a></p>
<p>Non pas que le projet ne m’intéresse plus intellectuellement, bien au contraire, mais le mélange de certaines paroles et certains actes avec d'autres choses plus personnelles m’a tellement atteint que pratiquement toute ma motivation pour ce projet a disparu, alors même que je déborde d’idée et d’envie en ce qui le concerne.</p>
<blockquote><p>If you use an open source project, _let the authors_ know. Progress is limited by a developer's interest in working on it.</p>
<div><a href="https://twitter.com/jeremyckahn/status/416629555403579394">Jeremy Kahn</a></div></blockquote> <p>Au début, j’ai pensé que ça passerait vite, que ma motivation réapparaitrait et que je retrouverais l’envie d’aligner des kilomètres de code dès que j’en aurais l’occasion, comme je le faisais depuis plusieurs années.</p>
<p>Je me suis également dit que lorsque je verrais ceux qui avaient tant parlé faire enfin quelque chose de concret pour le projet, cela m’aiderait à tourner la page.</p>
<p>Mais rien de tout cela ne s’est produit, même si j’ai vu des expériences très intéressantes réalisées par le rasta blanc et Hywan, que certains se sont presque excusés et que j’ai fait quelques expérimentations concluantes pour faciliter encore un peu plus l’écriture et la lecture des tests écrits avec atoum dans mon coin.</p>
<p>Le feu qui m’habitait et me permettait de faire avancer le projet n’a pas repris et est resté le petit tas de braises rougeoyant qu’il est devenu.</p>
<p>Et puis, aujourd’hui, j’ai lu <a href="https://twitter.com/FlavienMetivier/status/431881556857065473">ceci</a> et <a href="https://twitter.com/FlavienMetivier/status/431888815343407104">cela</a>.</p>
<p>Et je n’aurais qu’une chose à dire à l’auteur : merci.</p>
<p>Grâce à lui, si le feu n’est toujours pas revenu, les braises sont tout de même un peu plus rougeoyantes aujourd'hui qu'hier, car cela fait vraiment du bien de constater que le temps et l’énergie que j’ai investis dans ce projet sont utiles à certains !</p>http://blog.mageekbox.net/?post/2014/02/07/Remerciement#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/473De l'intérêt des testsurn:md5:dc43e360dc2954646f4cff0b234ace9a2014-01-31T21:20:00+01:002014-01-31T21:55:59+01:00mageekguyRéfléxionsatoumDemeterLiskovSOLIDtests<p>Il y a quelques jours, j’ai remarqué un fait intéressant.</p>
<p>En effet, j’avais encore il y a peu régulièrement envie de vomir lorsque je revenais sur du code quelque temps après l’avoir écrit.</p>
<p>Mais aujourd’hui, cette envie de vomir ne me prend plus lorsque je regarde mon code, mais plutôt les tests associés.</p>
<p>J’ai donc essayé de comprendre cette évolution, et j’en suis arrivé à la conclusion que cela vient du fait que ma façon de développer a profondément changé.</p>
<p>En effet, depuis que je développe <a href="http://www.atoum.org/atoum">atoum</a>, j’essaye (et ce n’est pas toujours facile, car les mauvaises habitudes ont la vie dure) de faire du <a href="http://fr.wikipedia.org/wiki/Test_Driven_Development">développement piloté par les tests</a>.</p> <p>De cette façon, j’obtiens donc forcément du code testable, donc du code qui respecte les principes fondamentaux de la programmation orientée objet tels que <a href="http://fr.wikipedia.org/wiki/SOLID_(informatique)">SOLID</a>, <a href="http://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov">Liskov</a> et la <a href="http://fr.wikipedia.org/wiki/Loi_de_Déméter">loi de Demeter</a>.</p>
<p>Par contre, je me rends compte encore régulièrement que ma façon d’écrire des tests n’est pas forcément la meilleure, notamment lorsque je lis de la littérature sur le sujet ou lorsque je modifie le code d’une de mes classes afin de l’optimiser et que les tests associés passent au rouge alors que le périmètre fonctionnel n’a pas changé.</p>
<p>Il est donc finalement normal qu’aujourd’hui, mes tests me donnent régulièrement envie de vomir, d’autant plus qu’il n’existe pas à ma connaissance de bible de référence ou de lois aussi absolue que SOLID ou Demeter en ce qui concerne leur rédaction.</p>
<p>Il y a certes de très bonnes sources d’inspiration, mais l’information est fragmentée et le vocabulaire est souvent fluctuant en fonction des sources, d’autant qu’en règle générale elles sont spécifiques à un outil de test particulier et n’embrassent pas l’intégralité du domaine du test.</p>
<p>Dans un tel contexte, celui qui souhaite améliorer la qualité de ces tests le fait donc en fonction de l’outil qu’il utilise, de l’expérience qu’il acquière en le manipulant et de ses lectures.</p>
<p>Le coefficient directeur de sa courbe d’apprentissage est donc relativement faible et elle est de plus relativement linéaire, car l’apprentissage est très progressif par rapport à celui d’une personne qui disposerait d’une bible de référence efficace pour appréhender un nouveau domaine d’expertise.</p>
<p>J’ai de plus remarqué deux autres facteurs expliquant l’amélioration de la qualité de mon code depuis que j’ai adopté le développement piloté par les tests.</p>
<p>Le premier est que cette méthode de travail oblige en effet à suivre les bonnes pratiques de la programmation orientée objet, sans quoi le code devient très difficilement testable de manière correcte, c’est à dire avec un taux de couverture suffisamment significatif.</p>
<p>Et comme l’une de ces bonnes pratiques est de découpler fortement les fonctionnalités, je passe donc par exemple parfois un temps négligeable à réfléchir à un nom adéquat pour mes variables, propriétés, fonction, classe et interface afin d’avoir une sémantique suffisante pour que mon code reste compréhensible pour celui qui le découvre, ce qui confirme que <a href="http://www.meerkat.com/karlton/">Phil Karlton</a> a bien raison lorsqu’il dit que trouver un nom est l’une des deux seules choses réellement difficiles en informatique.</p>
<blockquote>
<p>There are only two hard things in Computer Science: cache invalidation and naming things.</p>
<div>Phil Karlton</div>
</blockquote>
<p>Le second facteur est que je développe plus lentement qu’auparavant, indépendamment du fait que j’écris maintenant des tests en plus du code.</p>
<p>Le développement piloté par les tests m’oblige en effet, pour que je puisse rédiger mes tests, à réfléchir à l’architecture de mon code avant de l’écrire, au lieu de laisser émerger cette architecture de mon code et éventuellement de la corriger à postériori, au risque d’y introduire des bogues ou de provoquer des régressions.</p>
<p>Et même si les tests facilitent le processus, car ils mettent le code en situation d’exploitation, cela peut être un réel challenge, notamment dans le cas de fonctionnalités complexes.</p>
<p>De plus, les tests sont une mise en pratique du code, et ils encouragent donc le développeur à gérer correctement les cas d’erreur ou limite, soit parce que ces derniers surviennent lors de l’exécution des tests, soit parce que leur écriture l’y fait penser naturellement.</p>
<p>En conséquence, ma productivité quotidienne instantanée a donc baissé puisque je réfléchis beaucoup plus que par le passé lorsque je développe, mais mécaniquement, la qualité de mon code en est augmentée d’autant.</p>
<p>De plus, je suis persuadé qu‘assez paradoxalement, cette amélioration de la qualité de mon code m’a à contrario fait augmenter ma productivité moyenne, notamment parce que les tests me permettent de remettre en cause partiellement ou totalement le code que j’ai écrit en ayant la garantie de ne pas altérer son fonctionnement, sans parler du fait que les tests documentent mon code automatiquement.</p>
<p>Reste que je n’ai aucune donnée objective pour étayer ce qui n’est donc qu’une intuition, et que je ne sais pas comment les obtenir alors qu’elles me permettraient de démontrer l’intérêt des tests sans coup férir.</p>http://blog.mageekbox.net/?post/2014/01/31/De-l-int%C3%A9r%C3%AAt-des-tests#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/472À propos du télétravailurn:md5:3814657e5d03ccf1e5e10001755273492014-01-19T21:51:00+01:002014-01-19T21:54:35+01:00mageekguyRéfléxionstélétravail<p>Mes <a href="http://blog.mageekbox.net/?post/2014/01/17/La-liste-de-Tariq">derniers</a> <a href="http://blog.mageekbox.net/?post/2014/01/18/C-est-l-histoire-d-un-dev">articles</a> ont provoqué pas mal d’émois, au vu de mes statistiques de fréquentation, mais surtout quelques commentaires aussi bien sur twitter que sur ce blog à propos de mes dires sur le télétravail.</p>
<p>En effet, certains semblent ignorer ou découvrir que travailler de cette façon est compliqué, notamment à cause du Code du travail français.</p>
<p>Voici donc une synthèse rapide de ce que j’ai découvert à ce sujet lorsque ma femme a demandé à son employeur de pouvoir travailler de cette façon.</p>
<p>Tout d’abord, le <a href="http://www.legifrance.gouv.fr/affichCode.do;jsessionid=8C039BBEBABF69AE0AAC4BE633B03BBE.tpdjo17v_2?idSectionTA=LEGISCTA000025558058&cidTexte=LEGITEXT000006072050&dateTexte=vig">Code du travail défini le télétravail</a> et ce qu’il implique tant du point de vue de l’employé que de celui de l’employeur dans ses articles L1222-9, L1222-10 et L1222-11.</p> <p>Ils nous apprennent tout d’abord que le télétravail doit être contractualisé entre les parties, ce qui implique soit que ses conditions d’application sont définies dès la signature du contrat, soit qu’il est nécessaire de les définir dans le cadre d’un avenant.</p>
<p>Dans ce dernier cas, cela peut ouvrir la porte à une renégociation de la totalité du contrat et même si l’employé n’est pas tenu de l’accepter, un refus peut compliquer les relations futures avec l’employeur.</p>
<p>Dès le départ, le fait de demander à faire du télétravail représente donc un risque potentiel, même s’il peut être relativement faible si l’employé a de bonnes relations avec son employeur.</p>
<p>L’article <a href="http://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=1601610150B5008D77ECDE565D2BF742.tpdjo17v_2?idArticle=LEGIARTI000025558062&cidTexte=LEGITEXT000006072050&dateTexte=20140119">L1222-10</a> nous apprend de plus que l’employeur est tenu de prendre en charge tous les coûts découlant directement de l’exercice du télétravail, notamment le coût des matériels, logiciels, abonnements, communications et outils ainsi que de la maintenance de ceux-ci.</p>
<p>Et si son principe me semble logique, dans les faits, parvenir à trouver une méthode permettant de calculer le taux d’utilisation d’un abonnement internet (et de la consommation électrique du matériel correspondant) dans le cadre du télétravail et la faire accepter par son employeur peut être une véritable partie de plaisir, notamment en cette période de crise où le moindre euro dépensé doit être justifié.</p>
<p>Une solution serait d’avoir deux abonnements téléphoniques, donc deux lignes téléphoniques distinctes, d’autant que l’employeur peut décider, avec l’accord de l’employé, de contrôler ou de restreindre l’utilisation qui peut être faite de la connexion.</p>
<p>Cependant, dans les faits, peu de logements disposent nativement de deux lignes, et l’installation d’une seconde ligne a un coût, ce qui peut donc représenter un frein supplémentaire à la mise en place du télétravail.</p>
<p>Quant à la maintenance du matériel, si votre employeur ne vous fournit pas le matériel, je souhaite bien du plaisir à celui qui voudra faire prendre en charge la maintenance de son matériel personnel.</p>
<p>Lors de la négociation du contrat ou de l’avenant, il faut donc impérativement parvenir à un accord clair et précis sur ces points et cela peut être très difficile, surtout si l’employeur veut optimiser des coûts et sécuriser ses investissements.</p>
<p>Par ailleurs, <a href="http://archive.medef.com/medias/upload/85566_FICHIER.pdf">l’Accord national interprofessionnel du 19 juillet 2005</a>, qui n’a pas été abrogé par <a href="http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000025553296&fastPos=1&fastReqId=1841498515&categorieLien=id&oldAction=rechTexte#JORFARTI000025553658">la loi n° 2012-387 du 22 mars 2012</a> qui définit les articles du Code du travail précités, encadre plus précisément les obligations respectives des deux parties, et plus particulièrement celles relatives à l’hygiène et à la sécurité telle que définie par l’article <a href="http://www.legifrance.gouv.fr/affichCode.do?idSectionTA=LEGISCTA000006178066&cidTexte=LEGITEXT000006072050&dateTexte=20090528">L4121-1</a> du Code du travail.</p>
<p>L’employeur a ainsi une obligation de sécurité envers ses salaries, ce qui l’oblige par exemple à s’assurer, avant de mettre en place le télétravail, de la conformité du domicile du salarié, et notamment de celle des installations électriques.</p>
<p>De plus, l’employeur peut demander l’inspection du lieu de travail du télétravailleur afin de s’assurer de sa conformité vis-à-vis des règles d’hygiène et de sécurité de l’entreprise.</p>
<p>Si l’employeur souhaite respecter le Code du travail et donc ne pas avoir de problèmes avec l’inspection du travail (et quiconque a subi une fois un contrôle n’a vraiment pas envie de repasser par là une seconde fois), il y a donc un certain nombre de choses à faire non seulement avant la mise en place du télétravail, mais également par la suite et de manière récurrente.</p>
<p>De plus, il faut prendre en compte la problématique de l’assurance.</p>
<p>L’employé doit en effet être titulaire d’une assurance multirisque habitation, et c’est généralement le cas, mais l’employeur doit également assurer les éventuels équipements fournis au salarié pour qu’il puisse assurer sa mission dans le cadre du télétravail, ainsi que les éventuels dégâts que ce matériel peut provoquer au domicile du salarié.</p>
<p>Outre la négociation ou la renégociation du contrat de travail, l’employeur devra donc également négocier avec son assureur pour couvrir son salarié, en plus de devoir s’assurer de la conformité de son domicile.</p>
<p>Si le télétravail n’est pas encore en place dans l’entreprise, le faire représente donc une masse importante de travail pour l’employeur à différents niveaux, notamment si un unique salarié en fait la demande.</p>
<p>Car de plus, en fonction de la taille de l’entreprise, le Comité d’entreprise et Comité d’Hygiène, de Sécurité et des Conditions de travail, aka le <abbr title="Comité d’entreprise et Comité d’Hygiène, de Sécurité et des Conditions de travail">CHSCT</abbr>, devra être également consulté (si vous voulez énerver un patron d'une entreprise de taille moyenne, placez ce sigle dans votre conversation)…</p>
<p>Et si l’on ajoute à cela une volonté des employeurs de garder le contrôle sur la productivité de leurs salariés (comme s’il n’était pas possible de faire autre chose que son travail au bureau) et donc une résistance au télétravail relativement importante, parvenir à le mettre en place peut être dans le meilleur des cas une mission de longue haleine, et dans le pire une entreprise vouée à l’échec dès le départ.</p>
<p>Et il ne s’agit là que <a href="http://istnf.fr/_admin/Repertoire/Fichier/2012/14-120413061709.pdf">des obligations</a> qui m’ont le plus interpellé lorsque je me suis renseigné sur le sujet ou ceux qui ont posé problème lorsque ma femme a demandé à télétravailler.</p>
<p>Le télétravail bénéficie donc aujourd’hui d’un statut juridique extrêmement balisé dans le Code du travail, voire même trop balisé, ce qui peut rendre sa mise en application plus que difficile dans les entreprises dans lesquelles il n’est pas encore en place ou qui sont soucieuses de respecter à la lettre le cadre de la loi, ce qu’on ne peut leur reprocher.</p>
<p>Il serait donc appréciable que tout cela soit allégé et/ou simplifié, comme d’ailleurs beaucoup d’autres choses au niveau de la Loi française.</p>http://blog.mageekbox.net/?post/2014/01/19/%C3%80-propos-du-t%C3%A9l%C3%A9travail#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/470C'est l'histoire d'un devurn:md5:586c2744c8b6e936d991c65674f194d42014-01-18T11:25:00+01:002014-01-18T14:43:02+01:00mageekguyRéfléxionsSyntecTariq Krim<p>Il s'appelle Jean-Kevin, il a 24 ans, bientôt 25, et il est dans une soirée, en train de discuter avec une fille, qui vient à l'instant de lui demander sa profession.</p>
<p>Et Jean-Kevin, malgré sa tension qui vient de monter d'un cran, car il sait qu'il s'aventure sur un terrain miné et que sa crédibilité sociale peut à partir de cet instant voler en éclat à tout moment, lui répond avec un léger trémolo dans la voie qu'il travaille dans l'informatique.</p>
<p>La fille lui demande alors avec les yeux écarquillés d’admiration s’il serait capable de lui réparer son ordinateur ou de lui pirater son téléphone comme la <a href="http://fr.wikipedia.org/wiki/National_Security_Agency"><abbr title="National Security Agency">NSA</abbr>.</a></p> <p>Jean-Kevin hésite, car il sait qu'il est sur une pente glissante, mais, courageusement, il annonce qu'il est développeur, qu'il travaille pour la société KaPaDeSous pour le compte de BaiseurDeDev.</p>
<p>Et comme d'habitude, Jean-Kevin constate alors l'effet négatif de cette annonce sur son interlocutrice.</p>
<p>L'admiration a en effet fait place dans ses yeux à la suspicion et sa question suivante confirme à Jean-Kevin qu'il est maintenant encore plus grillé qu'une cacahuète prête à être emballé dans un sachet apéritif.</p>
<p>La fille vient en effet de lui dire qu'elle ne comprend pas ce qu'il fait ni la nature de son employeur, et Jean-Kevin va donc maintenant être obligé de lui avouer qu'il est développeur, qu'il est employé par la Société de Service en Informatique et Ingénierie BaiseurDeDev qui le loue à KaPaDeSous pour qu'il conçoive un programme pour importer des lignes de facture datant de 1913 dans une base de données plus moderne.</p>
<p>Et comme il sait que ce n’est guère glorieux aux yeux du monde, il va ajouter qu’effectivement ce n’est guère intéressant, qu’il est bien payé au lance-pierre, mais que ce n’est que transitoire, car il a bon espoir de passer chef de projet à très court terme pour enfin faire des choses intéressantes comme gérer des gens, ce qui lui permettra de gagner plus d’argent et donc de s’élever dans l’échelle sociale.</p>
<p>Évidemment, Jean-Kevin sait que ce n'est pas exactement la vérité, puisque son commercial lui fait miroiter cette perspective depuis son troisième CDD de six mois et qu'il en est maintenant au cinquième, mais il se console en se disant qu'il n'a pas trop déformé la vérité, puisqu'un CDD est transitoire par nature.</p>
<p>De plus, ce qui passionne Jean-Kevin, ce sont les lignes de code qu’il aligne sur son écran jusqu’à trois heures du matin, et non d’utiliser un tableur pour agréger des statistiques truquées afin de faire correspondre des plannings de développement aux attentes de sa hiérarchie ou du client comme le fait Jean Manchasec, son supérieur. </p>
<p>Et pour ne pas définitivement griller ses chances avec la fille, il ne va également pas lui parler des problèmes que cette situation lui pose avec son banquier, car évidemment, avec sa paye et le coût de son loyer parisien, les fins de mois sont difficiles et pouvoir obtenir un crédit tient du miracle.</p>
<p>À sa décharge, il faut dire qu’il n’a pas eu trop le choix. Jean-Kevin est en effet issue d’une université de province peu reconnue, et durant sa formation, il est loin d’avoir eu tous les atouts possibles en sa possession.</p>
<p>Le matériel de son université était quasi inexistant et ses professeurs se contentaient pour la plupart de resservir à leurs étudiants ce qu'ils avaient appris il y a 25 ans.</p>
<p>Jean-Kevin aurait de plus aimé rester en province, mais le Code du travail français est tellement lourd et tellement inadapté aux nouveaux moyens de travailler que l'évolution de l'informatique rend possibles aujourd'hui que le télétravail est quasi impossible.</p>
<p>Pour trouver un emploi, Jean-Kevin a donc dû devenir parisien, avec tout ce que cela implique en terme de qualité de vie et de coût financier, et les candidats sont tellement nombreux par rapport au nombre d'offres d'emploi qu'il a pris la première opportunité qui lui a semblé intéressante.</p>
<p>L’annonce, publiée par une société de conseils et de services dans l’informatique et les hautes technologies cotée depuis 172 ans à la bourse de Paris, parlait de développement web, de définition de cahier des charges, de mise en œuvre de normes, de standards, de méthodes, d’outils et de procédures, de qualité, de sécurité, et de conduite de projet, le tout saupoudré d’une liste de compétence correspondant à son profil.</p>
<p>Le salaire proposé n'était pas mirobolant, surtout par rapport aux compétences demandées, mais Jean-Kevin avait un besoin urgent de mettre quelque chose dans son assiette.</p>
<p>Il avait donc rencontré Jean Cule, le responsable des ressources humaines de BaiseurDeDev et il avait signé son premier contrat avec son sang.</p>
<p>Sauf qu’au final, il s’est retrouvé à jouer au démineur sur son téléphone portable pendant 7 jours, car il ne disposait pas d’un poste de travail, et lorsqu’il en a finalement disposé, il s’est rendu compte qu’il avait été vendu pour reprendre un programme écrit en COBOL en C# en 10 jours parce que le directeur technique de son client, Gérald Mentor, avait lu dans <a href="http://www.01net.com">O1net</a> que c’était l’avenir.</p>
<p>Jean-Kevin s'est alors ému auprès de Gérald du fait qu'il ne connaissait pas le COBOL et qu'en conséquence, trois jours seraient un peu courts.</p>
<p>Étonné, Gérald avait alors sorti le CV de Jean-Kevin que lui avait fourni Jean Cule, et Jean-Kevin a alors découvert que d'après ce document, il avait appris le COBOL il y a 49 ans et qu'il disposait même d'une certification.</p>
<p>C'est à ce moment que Jean-Kevin a compris que le patronyme de Jean Cule avait été vachement bien choisi par ses parents…</p>
<p>Depuis, Jean-Kevin fait de la merde le jour pour les clients de BaiseurDeDev et essaye de s'éclater la nuit sur ses propres projets, mais la crise économique est là et il est vraiment devenu difficile pour lui de s'en sortir, d'autant qu'à force de dormir trois heures par nuit, il est en mauvaise santé et devient insomniaque.</p>
<p>Mais heureusement, il voit la sortie du tunnel, car Tariq Krim, le vice-président du Conseil national du numérique, a cartographié les briques logicielles créées par les Français !</p>
<p>Du coup, il a maintenant les moyens de refaire briller d'admiration les yeux de la fille et de l'emballer en lui disant que Jean-Claude, le bras droit du bras gauche du cousin de Mark Zuckerberg, est français et a développé la page des mentions légales de Facebook.</p>
<p>Et en prime, le fait que cette carte existe va lui permettre de travailler quand il veut, car sa création a permis de réformer le Code du travail ce qui fait qu'il est maintenant possible de faire du développement en télétravail facilement au niveau légal et il va donc pouvoir retourner en province, réduire ses charges et travailler à son rythme.</p>
<p>Et cerise sur le gâteau, les minimas salariaux de la grille Syntec ont été revus significativement à la hausse, sans parler de la dotation de plusieurs millions d'euros qui a été faite aux différents cursus informatiques dont les contenus ont été bien évidemment réactualisés.</p>
<p>C'est fou l'effet que peut avoir une liste de 100 noms, non ?</p>
<p>Non ?</p>
<p>Non.</p>
<p>Car tout ce qui précède, ou du moins les derniers paragraphes, est une pure fiction, car même lorsqu'on s'appelle <a href="http://blog.mageekbox.net/?post/2014/01/17/La-liste-de-Tariq">Tariq Krim</a>, on n’est pas magicien et créer <a href="http://blog.mageekbox.net/?post/2014/01/17/La-liste-de-Tariq">la liste des 100 développeurs français les plus marquants</a> ne changera strictement rien au quotidien des développeurs français.</p>
<p>Car les premiers paragraphes, eux, sont un échantillon représentatif des problèmes rencontrés par les développeurs travaillant en SSII avec lesquels je discute depuis 15 ans, même si parfois je n’ai pas pu résister aux délices de la caricature.</p>
<p>Et vous en conviendrez, il faut du courage pour rester développeur dans ces conditions et encore plus pour faire en France un développement capable de marquer significativement l'histoire de l'informatique.</p>http://blog.mageekbox.net/?post/2014/01/18/C-est-l-histoire-d-un-dev#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/469La liste de Tariqurn:md5:77991a204901f102b5783e59cea59b8e2014-01-17T16:06:00+01:002014-01-17T20:59:28+01:00mageekguyRéfléxionsMUNCISyntecTariq Krim<p>Donc <a href="http://fr.wikipedia.org/wiki/Tariq_Krim">M. Tariq Krim</a>, le créateur de Netvibes et actuel vice-président « écosystème et innovation » du <a href="http://fr.wikipedia.org/wiki/Conseil_national_du_numérique">Conseil national du numérique</a>, est en train de constituer <a href="https://medium.com/p/e222faa21947">une liste des 100 développeurs de France les plus marquants</a> avec la bénédiction de Mme la Ministre <span style="font-family: sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(255, 255, 255);">déléguée chargée des </span><a href="http://fr.wikipedia.org/wiki/Petites_et_moyennes_entreprises" title="Petites et moyennes entreprises" style="text-decoration: none; color: rgb(11, 0, 128); background-image: none; background-color: rgb(255, 255, 255); font-family: sans-serif; font-size: 13px; line-height: 19px;">PME</a><span style="font-family: sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(255, 255, 255);">, de l</span>’<span style="font-family: sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(255, 255, 255);">Innovation et de l'</span><a href="http://fr.wikipedia.org/wiki/%C3%89conomie_num%C3%A9rique" title="Économie numérique" style="text-decoration: none; color: rgb(11, 0, 128); background-image: none; background-color: rgb(255, 255, 255); font-family: sans-serif; font-size: 13px; line-height: 19px;">Économie numérique</a>, j'ai nommé <a href="http://fr.wikipedia.org/wiki/Fleur_Pellerin">Fleur Péllerin</a>.</p>
<p>J’avoue que ça me laisse plus que songeur, car je ne comprends pas en quoi la création d’une telle liste va permettre de faire de notre pays « l’autre nation du code » comme il l’ambitionne.</p>
<p>Car en admettant que la constitution d’une telle liste soit la première étape indispensable pour atteindre ce louable objectif, il faudrait pour cela que la création de cette liste soit possible.</p> <p>Et rien n’est moins certain, car par nature, la constitution d’une telle liste est subjective, puisque rien ne permet à mon sens de quantifier objectivement la valeur d’un développeur par rapport à un autre, ou bien la marque qu’il est susceptible de laisser sur le monde de l’informatique.</p>
<p>En effet, notre métier est tellement protéiforme sur tous les plans qu’il est très difficile et même à mon avis impossible de définir une échelle de valeurs pertinente permettant de nous classer les uns par rapport aux autres.</p>
<p>En conséquence, une telle liste sera forcément subjective.</p>
<p>De plus, il n’est possible de mettre sur une liste que ce que l’on connaît, et je doute que quiconque connaisse l’ensemble des développeurs français, et je doute encore plus que si elle existe, cette personne soit à même de juger de leurs compétences respectives.</p>
<p>Il faudrait pour cela qu’elle dispose elle-même de ces compétences, et donc qu’elle maîtrise l’ensemble des langages et concepts que nous manipulons quotidiennement collectivement.</p>
<p>Et si une telle personne existait, il n’y aurait plus besoin de créer cette fameuse liste puisque nous aurions là le Sauveur des nouvelles technologies français capable de nous créer à lui seul en deux jours le Google français…</p>
<p>De plus, pourquoi mettre uniquement sur cette liste 100 personnes et pas 200, 500, ou 1000 ?</p>
<p>Pourquoi mettre une limite, au risque de passer à côté de la perle rare, de notre Sauveur ?</p>
<p>Pour résumer, cette liste qui doit être le point de départ d’une stratégie qui permettra à notre pays de briller au firmament du Monde Binaire, ne sera donc aucunement le reflet de la réalité et forcément incomplète.</p>
<p>Si elle est la première étape vers notre conquête du numérique, nous sommes donc mal partis dès le départ.</p>
<p>Certains vont alors me répondre que cela reste cependant un mouvement politique significatif et que c’est mieux que rien.</p>
<p>Je veux bien l’admettre, si ce n’est que même en admettant que cette liste ait une quelconque valeur, je me demande vers quoi ce mouvement va bien pouvoir nous mener.</p>
<p>À quoi ces 100 personnes vont-elles servir ?</p>
<p>Vont-elles être consultantes ou bombardées conseillères spéciales au gouvernement ?</p>
<p>Vont-elles être débauchées et employées par une structure disposant des moyens suffisants pour créer l’Apple français ?</p>
<p>Mais de toute façon, est-ce que les deux Steve, Bill, Mark ou Larry ont été sur une telle liste ?</p>
<p>Est-ce que c’est cela qui a permis à ces hommes d’être les créateurs des entreprises les plus renommées aujourd’hui dans l’informatique ?</p>
<p>Et donc, est-ce que c’est pour cela que l’on passe du temps en France à créer une telle liste ?</p>
<p>J’espère que c’est le cas, car j’avoue que je ne vois pas d’autre objectif à cette démarche à part celui de me mettre en colère ainsi que d’autres, ne serait-ce que parce qu’il y a des choses autrement plus constructives à faire dans notre pays pour les développeurs.</p>
<p>La rénovation du Syntec Numérique ainsi que du modèle des SSII serait par exemple un bon début.</p>
<p>Cela permettrait en effet aux développeurs de le rester pour pouvoir évoluer socialement au lieu d’être obligé pour y parvenir de devenir des chefs de projets qui pilotent des tableaux de bord.</p>
<p>Cela permettrait aux développeurs qui sortent tous les ans de l’école d’envisager une véritable carrière dans le développement logiciel et non d’ambitionner à court terme de devenir chef de projet, car c’est aujourd’hui le Saint-Graal dans notre milieu, puisqu’il semble que ce soit le seul moyen pour ajouter un montant quelque peu significatif à la dernière ligne de la feuille de paye.</p>
<p>Cela permettait au métier de développeurs d’être perçu comme une profession valorisante qui offre des perspectives d’avenir, et non comme une étape indispensable, mais forcément courte et transitoire dans un parcours professionnel sous peine de devenir un paria sur le marché de l’emploi.</p>
<p>Et si d’aventure je me trompe, je suis certain que des structures telles que le <a href="http://munci.org">MUNCI</a> ont des propositions plus pertinentes à faire que moi à faire pour que notre pays puisse devenir un jour l’un des leaders dans le domaine du numérique.</p>
<p>Bref, il y a des choses bien plus concrètes et utiles à faire que la création d'une liste de 100 noms basée sur un réseau de relations personnel pour élever notre nation au niveau des États-Unis en ce qui concerne le développement logiciel, mais il est vrai qu’elles sont un peu plus complexes à réaliser et surtout qu’elles demandent un peu plus de courage politique…</p>
<p>PS : À lire également <a href="https://blog.crafting-labs.fr/?post/2014/01/17/les-100-meilleurs-developpeurs-preferes-des-francais">la réflexion d'Antoine</a> sur le sujet, qui aborde avec talent la problématique posée par cette liste sous un autre angle, plus humain.</p>http://blog.mageekbox.net/?post/2014/01/17/La-liste-de-Tariq#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/468Vous êtes étudiant ? Lisez ce qui suit !urn:md5:ac7d41440c3e0bdc8c7a816412707f452013-12-20T10:45:00+01:002013-12-20T14:42:01+01:00mageekguyRéfléxions<p>Lorsque j’étais étudiant, je me suis beaucoup amusé et j’ai peu étudié.</p>
<p>J’avais en effet beaucoup de temps libre, car, hormis lors de mon année de spécialisation en imagerie, j’avais peu besoin d'étudier pour avoir des résultats corrects et je pense aujourd’hui rétrospectivement avoir mis ce temps à profit de la façon la plus mauvaise qui soit.</p>
<p>J’ai en effet fait la fête, j’ai rencontré mon ex-femme, j’ai joué à des jeux vidéos pendant des journées et parfois des nuits entières, j’ai regardé un nombre incalculable de films, et j’avais un tas d’autres activités qu’il me semblait à l’époque indispensable de pratiquer ou d’essayer.</p>
<p>Et j’y ai pris du plaisir, donc je ne me suis donc jamais posé la moindre question sur l’intérêt de cette démarche, sur sa finalité, sur sa valeur ajoutée, sur ce qu’elle m’apportait, car j’étais bien trop occupé à <q>profiter de la vie</q>.</p> <p>Sauf qu’aujourd’hui, entre ma vie de famille, ma vie professionnelle et les transports, je n’ai plus de temps libre pour réaliser mes idées.</p>
<p>Et des idées, pour mon malheur, j’en ai à la pelle et j’ai donc autant de regrets puisque je ne peux que difficilement les mener à terme, ou bien alors trop lentement à mes yeux.</p>
<p>Si vous me lisez aujourd’hui alors que vous êtes à l’université et que vous avez du temps libre pour d’autres choses que vos études, comme faire la fête, je me permets donc de vous donner un conseil, au risque de passer pour un vieux con : si vous avez une idée, si vous y croyez, profitez dès maintenant de la vie différemment et utilisez ce temps pour créer plutôt que dans des activités sans valeur ajoutée significative, car plus tard, vous aurez certainement des contraintes bien plus fortes que celles que vous avez actuellement et vous serez contraints de revoir vos ambitions significativement à la baisse.</p>
<p>Attention, je ne renie nullement l’intérêt d’une vie étudiante joyeuse et délurée et je ne prône aucunement le fait de devenir à contrario un moine retiré dans un monastère perdu d’une région du monde inhospitalière sans présence féminine pour travailler comme un forcené afin de produire quelque chose, quoique cela puisse être.</p>
<p>Je pense juste que pour l’étudiant qui a un rêve, une envie, une idée, une ambition et qui disposerait du temps nécessaire à sa concrétisation s’il le voulait, il est pertinent de sacrifier une partie de ses loisirs pour y travailler puisque par la suite, les possibilités de le faire seront de plus en plus rares, car les contraintes seront dans le futur de plus en plus nombreuses.</p>http://blog.mageekbox.net/?post/2013/12/20/Vous-etes-etudiant-Lisez-ce-qui-suit#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/465À propos de la simplicitéurn:md5:120a9a010fa77116145b48bbe362184d2013-12-16T11:15:00+01:002013-12-16T11:32:51+01:00mageekguyRéfléxions<blockquote><p>Simplicity is the essence of happiness</p>
</blockquote>
<p>J’ai utilisé pendant très longtemps cette citation de Cedric Bledsoe comme fond d’écran, notamment pendant la phase de développement initiale d’<a href="http://atoum.org/atoum">atoum</a>.</p>
<p>Elle correspondait en effet très bien à l’un des objectifs que je m’étais fixés en commençant son développement, à savoir rendre le test unitaire simple à rédiger et à exécuter.</p>
<p>Et elle était également en phase avec les méthodes agiles, car la simplicité est l’un de leurs piliers.</p> <p>J’utilise aujourd’hui un autre fond d’écran, car ce mantra fait aujourd’hui partie de moi et je n’ai donc plus besoin de ce rappel.</p>
<p>Chaque jour qui passe, j’essaye en effet dans la mesure de mes moyens de trouver des solutions simples à mes problèmes, aussi bien dans ma vie privée que ma vie professionnelle.</p>
<p>Et ce n’est pas toujours évident, car paradoxalement, il est très compliqué de faire simple, notamment parce que l’Homme semble être un proche cousin des <a href="http://fr.wikipedia.org/wiki/Les_Shadoks#Principes_et_devises">Shadocks</a> puisqu’il a une aptitude naturelle à rendre compliqué ce qui ne devrait pas l’être.</p>
<p>L’administration française en est un exemple éclatant, mais il est loin d’être le seul, et le code informatique peut également en être également l’illustration parfaite.</p>
<p>Et je ne suis pas le seul à le penser, car au hasard d’une <a href="http://fr.wikipedia.org/wiki/Papillote">papillote</a>, j’ai découvert cette citation de <a href="http://fr.wikipedia.org/wiki/Henri_Bergson">Henri Bergson</a>, un philosophe français qui a reçu le prix Nobel de littérature en 1927 :</p>
<blockquote><p>L’homme devrait mettre autant d’ardeur à simplifier sa vie qu’il en met à la compliquer</p>
</blockquote>
<p>En cette période de fin d’année souvent considérée comme propice aux bonnes résolutions, il serait peut-être bon pour tout le monde que tout le monde médite là-dessus, afin que l’Homme se rapproche un peu plus du bonheur.</p>http://blog.mageekbox.net/?post/2013/12/16/A-propos-de-la-simplicite#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/464