C’est pas le langage qui est laid, c’est ton code

C’est pas le langage qui est laid, c’est ton code.

Combien de fois ai-je pu balancer cette sentence sur les différents forums et sur les réseaux sociaux (du temps où j’y allais encore). A la longue, c’est lassant je vous assure. Alors pour me répéter une nouvelle fois autant le faire dans les grandes largeurs en espérant sans trop y croire que l’idée pourrait s’ancrer une fois pour toute dans le cerveau de certains réfractaires.

Je suis PHPiste et à défaut d’en être fier, je ne m’en plains pas et je m’efforce de ne pas trop verser dans l’évangélisme béa de mon langage de prédilection.

Le PHP à une mauvaise réputation auprès de nombreux développeurs. Pour certains bas du front qui tapent sur un clavier avec une massue préhistorique : le PHP est un langage bas de gamme qui est réservé aux bidouilleurs du dimanche. Avec tout le respect que je leur doit : qu’ils se mettent au tricot et qu’ils nous foutent la paix.

Tout les langages (ou presque, on ne va pas se lancer dans une digression sur les langages exotiques) ont leur horreurs et incohérences. En gros, il est possible d’écrire du code élégant dans un langage et du code à faire saigner les yeux dans un autre et vice versa.
J’explique pour ceux du fond qui n’ont pas suivi. Donnez moi le langage de votre choix et je pourrais vous écrire le code le plus obscur et puant qui soit.

Éloignez les enfants et les personnes sensibles de l’écran, la suite va être choquante. Par exemple, combien de langages permettent de faire ce genre de truc

if (true) { ... }

On est d’accord, c’est aussi inutile que laid. Y a pas à tortiller, franchement même à trois grammes : on n’écrit pas une horreur pareille. Tout le monde est d’accord ? Poursuivons.
On peut écrire ce genre de monstruosité aussi bien en Java qu’en PHP ou en Ruby. Est-ce pour autant que l’on s’autoriserait à dire que le Java est un langage pourri ? Non, bien sur. Et pourtant il suffit de voir ce bout de code en PHP pour cracher sur le langage à l’éléphant bleu.

Choisir un langage, tel qu’il soit, n’est pas la garantie d’un code élégant et propre : ça c’est le travail du dev derrière son clavier de ne pas pondre des lignes de bouses à la chaîne.
Pour la petite histoire, les concours d’ugly code se font principalement en C/C++. Voilà, je pense que ces deux langages ont suffisamment fait leurs preuves avec le temps pour qu’on ne viennent pas cracher sur leurs bottes.

Ne tapez plus sur le langage mais sur le dev qui commet l’horreur, surtout s’il hante votre openspace.

Juste pour rire, en PHP un hello world s’écrit :

<!--?=${[${[${[${[${[${[${[${[${${![]}.=[]}.=${![]}{!![]}]}.=${!![${[${[

${[${[${[${[${[]}++]}++]}++]}++]}++]}++]}++]}{![]+![]+![]}]}.=${[${[$
{[${[${[]}++]}++]}++]}++]}{![]}]}.=${[${[${[${[${[${[${[${[]}++]}++]}
++]}++]}++]}++]}++]}{![]+![]}.${[]}{![]+![]}]}.=${![]}^${!![${[${[${[
]}++]}++]}++]}{![]+![]+![]}]}.=${[]}{!![]}]}.=${[${[${[${[${[${[${[${
[${[${[${[${[${[${[${[${[]}++]}++]}++]}++]}++]}++]}++]}++]}++]}++]}++
]}++]}++]}++]}++]}{![]+![]+![]+![]}.${[]}{![]+![]+![]+![]}]}.=${[${[$
{[${[]}++]}++]}++]}{![]+![]}.${![]}{![]+![]+![]}]}.=${[${![]}=${![]}{
!![]}]}{!![${!![${!![${![]}++]}++]}++]}^${!![${[${[${[]}++]}++]}++]};

Enjoy !


Image : cats and keyboards – Lucas Falcão – CC – BY – NC – SA

L’abus de pastèque est mauvais pour l’égo

À la Une

Passé un certain stade de mégalo-céphalée on ne peut plus parler de melon. L’échelle de taille n’est plus respecté, faute d’un fruit suffisamment gros : je propose de se rabattre sur le Citrullus lanatus. L’expression plus appropriée serait plutôt : pastèque et dans sa version longue : avoir la pastèque.

Certains de mes coreligionnaires s’illustrent tout particulièrement par la taille de leur tour de tête. L’ego gonfle plus rapidement que les compétences c’est un fait, et les différents curriculum vitae que laissent ces odieux individus derrière eux ne fait que renforcer une mauvaise image de la profession.

Je m’étendrais un jour plus en détails sur le syndrome du « dégage sale développeur« , mais revenons à nos Montgolfier si vous voulez bien.

Il n’y a aucun mal à se revendiquer développeur, si quelqu’un veut absolument perdre quelques dents à coups de pelle : il n’a qu’a essayer de venir me prétendre le contraire. Cet avis n’est pas encore largement partagé, soit mais il y a pourtant des limites à ce que la mégalo peux faire. La pastèque est aussi appelée melon d’eau, alors quand on commence à entendre des bruits de flotte quand on secoue la tête faut sérieusement penser à faire quelque chose.
Je suis  un peu sur les nerfs car je viens de tomber sur quelques exemples particulièrement frappants en fouillant sur LinkedIn. Déjà que je ne porte pas bien haut dans mon estime les criminels en question, ce n’est pas avec des CV aussi bidonnés qu’ils vont réussir à se racheter un début de conscience professionnelle. Pour la conscience tout court, on repassera.

Architecte logiciel
Mais t’es sérieux mec ? Même chanvré jusqu’à la moelle j’aurais jamais osé un truc pareil. Comment tu peux te prétendre architecte de quoi que ce soit, toi qui ne sait même pas utiliser une interface et qui ne connaît que les designs patterns par un lointain bruit de couloir.
Quand ton quotidien consiste à faire du CRUD à la chaîne sur un framework du marché : tu es au mieux tâcheron, voir pisseur de code mais certainement pas architecte. Elles sont où tes contribs sur le framework ? Inutile de chercher, il n’y en a aucune et tout simplement car tu n’as jamais pris le temps de lire le source.
Mon mécano à la décence de ne pas se présenter comme ingénieur en mécanique appliquée. Non, son titre lui convient parfaitement, tout autant que ses mains tachées de cambouis car il connaît son boulot et n’a plus besoin de faire ses preuves.

Moteur d’innovation
Là j’en reste comme un rond de flan. Au niveau de l’auto-paluchage intellectuel (on n’est jamais mieux servi que par soit-même) on frôle les sommets. Le titre claque comme la baffe d’un râteau un samedi soir dans les chiottes du Macumba Club. Niveau terminologie, il n’y a rien à dire c’est de la pignole de haut vol.
Mais juste pour étoffer mon peu de culture : ça consiste en quoi au juste ?

S’il passait seulement la moitié de l’énergie qu’il met à se faire reluire la nouille à bosser réellement et à chercher à monter en compétences : cela fait longtemps qu’il aurait quitté son placard de poste pour une vrai boîte.

Pour information, je n’ai pas inventé les deux expressions : je pense que j’en aurais été bien incapable. Elles sont présentes dans le CV en ligne du spécimen en question.

« Fresh Fruit & Herbs Cocktail combination #3 » by Miriam Figueras Cuadra is licensed under CC BY-NC-ND 4.0

Si ça marche on touche pas

S’il existait une liturgie des choses qui me tapent sur le système : il est certain que cette phrase y figurerait en bonne place. Dès qu’un inconscient se risque à sortir cette monumentale ineptie, je dresse de suite une oreille et je me dirige en direction du fautif avec mon sourire de squale préféré.

Avant de rentrer dans les détails et sans doute dans le lard, revenons à la racine de la problématique.
Si ça marche on touche pas.

Grammaticalement parlant, il me semble qu’il manque une négation. Venant de ma part cela peut faire sourire. Le plus important c’est surtout : qu’est ce que je dois en conclure.

Soit que le code est tellement beau que personne ne pourra faire mieux et que ce n’est qu’une perte de temps d’essayer.
A ce niveau d’ego je pense qu’une ablation chirurgicale aux forceps s’impose. Sérieusement, on peut l’encadrer et le mettre sous verre pour l’accrocher sur le mur des toilettes ? Les éditions La Pléiade sont en négociation pour publier ce chef d’oeuvre dans leur collection ?
Non ?
Bon alors on peu quand même y toucher. Si c’est bien fait (et je le souhaite) on aura du mal à faire mieux mais ce n’est pas interdit pour autant d’essayer.

Soit que le code est tellement incompréhensible que personne n’ose mettre ses pattes dans ce sac de nœuds.
Cela me semble beaucoup probable. Pour autant : il faut absolument y toucher. Je dirais même plus il faut sacrément nettoyer tout ça et en urgence ! Mon regard se pointe tout naturellement vers l’auteur de la phrase malheureuse qui vient sans le savoir de se porter volontaire pour la mission. J’apprécie ton courage soldat, la nation peut-être fière de ton sacrifice.

Un code incompréhensible qu’on laisse traîner comme ça sans chercher à s’en inquiéter c’est une bombe à retardement lâchée dans le système. Il viendra toujours un moment où une feature se heurtera à ces fameuses lignes. Et comment fait-on dans ce cas ? Et bien, on fait pas tout simplement. J’aimerai pas être à la place du lead dev qui devrait annoncer ça à son n+1. Du temps des romains on crucifiait pour moins que ça.

D’une manière plus générale : ce genre de chose ne devrait pas se produire. J’y reviendrais sans doute un peu plus tard.

Image d’illustration : Knotted by Sam Rayner CC – BY-NC-SA

From HTML with love

… to fucking buggy PDF !

Je ne vais pas traduire le titre mais je pense que même sans être un diplômé de la langue de Cromwell on s’y retrouvera sans trop de peine.

Et puisqu’on parle de peine, commençons donc par là où sa pique le plus. J’ai fait très récemment l’état de l’art sur la façon de transposer du HTML vers du PDF en PHP. Ça fait beaucoup d’acronyme d’un coup mais je vous rappelle qu’on est toujours dans le domaine de l’informatique alors il faudra s’y faire.
Donc disais-je, je suis allé faire un tour sur mon moteur de recherche préféré pour voir ce que la grande toile pouvait me recracher comme résultats. Et c’est pas vraiment glorieux.

Un petit message à tout les rageux qui vont troller sur le PHP avec des messages du genre.

De toute façon avec un langage de tiers-mondiste comme PHP, fallait pas t’attendre à autre chose.

Pour commencer laissez moi vous offrir mon doigt du milieu le plus respectueux. Mettez le là où bon vous semble et passons à la suite si vous le voulez bien.

Coté PHP, j’ai essayé sans trop de conviction DomPdf. Cette classe sort effectivement un PDF d’un template HTML mais … il ne faut pas trop lui en demander. La mise en page à complètement atterri aux prunes : le bouzin n’a jamais entendu parler du CSS. Les développeurs conseillent d’utiliser des tableaux pour la mise en page.

[flames]SÉRIEUSEMENT ! DES TABLEAUX POUR METTRE EN PAGE DU HTML EN 2019 ?[/flames]

On laisse tomber et on élargi la recherche à tous les scripts disponibles sur le marché. Pas question de passer par un service en ligne pour faire mes conversions, je n’ai même cherché de ce coté.

Le mieux que j’ai trouvé c’est wkhtmltopdf. Ca fonctionne sous nux et c’est en pure ligne de commande. Même pas obligé de s’encombrer d’un gtk bancal pour l’utiliser. Et cerise sur le cake : c’est du libre. Que du bonheur ou presque.
Car forcément il y a un os dans le boudin : cette librairie ne reconnait pas les css grid. Résultat ma mise en page est encore aux fraises.

Il semblerait que ce bug cette fonctionnalité manquante sera implémentée dans la prochaine version. Je ne vais pas cracher dans le potage, les devs ont fait un bon boulot avec cette librairie, il n’y a aucune raison de croire qu’ils vont tourner bride et ne pas tenir leur engagement.

Sauf que, on est toujours en 2019 et je commence à douter qu’il existe un moyen propre de faire une bête conversion HTML -> PDF. Peut-être que je suis passé à coté de quelque chose mais dans ce cas, est ce quelqu’un pourrait sauver ma pomme et éclairer ma lanterne.

 

C’est trop beau pour être mergé

Avec un titre aussi putaclick j’espère que je vais achalander tout un paquet de développeur. Oui mon titre est volontairement racoleur et non seulement je ne m’en excuserais pas mais je vais de ce pas enfoncer le clou.

Cette phrase, je l’exagère sans doute un peu mais je pourrais vous jurer la main sur le gilet que j’en ai entendu des variantes à peu prêt semblables. Et je ne suis sans doute pas le seul dans ce cas. Prenez donc vos aises et laissez moi vous comptez une petite histoire de bon cru.

Attention la suite peut choquer les codeurs les plus sensibles.

Lire la suite « C’est trop beau pour être mergé »

J’chuis pas développeur

À la Une

Il y a quelques jours (je présume du décalage entre la date de parution et le début de la rédaction de l’article) mon chef m’a demandé de jeter un coup d’œil à un morceau de code qui ne fonctionnait pas.

J’en ai vomis mon café du matin.

Je vais pas retranscrire l’horreur qui m’a été donné de voir car j’ai trop peur de choquer les âmes sensibles. D’y penser j’en ai encore les yeux qui saignent.
Le code en question aurait pu fonctionner si et seulement si la logique avait eu la même réaction que moi et avait détourné le regard. Il faut croire que la bougresse à l’estomac plus solide que moi.

Sans trop rentrer dans les détails : le code en question était un code d’authentification vomis dans un controler. Rien que ça suffit amplement à me donner des envies de barres à mines dans la truffe. Une horreur en appelant une autre, le code n’était pas indenté et puis fuck aussi la PSR-4. D’ailleurs les PSR : jamais entendu parler. Les commentaires : on s’en cogne tout aussi joyeusement. Et puis dans qu’on y est on réinvente la roue mais en carré.
Bah oui comme ça c’est plus facile à empiler !

Le pire dans l’histoire c’est que le code en question aurait pu être une antiquité de legacy code moisi et couvert de toiles d’araignées mais non. Du SF 3/PHP 7! Avec ça tu peux pas sortir l’argument Denver pour te planquer derrière.

Débugger ça c’est un peu comme pelleter dans le fumier avec une fourchette à dessert. Un pure moment de souffrance et de larmes.

– Je peux connaître le nom du type qui a commis ça ?

– Non mais faut le comprendre, c’est pas un dev.

Attends, pas un dev ? Mais alors qu’est ce qu’il fout à trifouiller du code en entreprise. J’ai rien contre les newbies, on est tous passé par là. Sauf si quelqu’un peut prétendre qu’il savait déjà coder en sortant de l’œuf mais j’aurais quand même de sérieux doute à son égard. Il faut bien faire ses premières armes et essuyer ses premiers bugs, c’est bien normal et encore une fois j’ai rien contre.
Mais autant garder ce genre de chose pour la maison ou les bancs de classes. Là on est dans le monde sans pitié de l’entreprise. C’est pas exactement la même chose.

Le criminel qui à pondu cet ignominie n’est même pas un développeur. Pour s’en convaincre, il suffit de jeter un coup d’œil à sa production.

QUAND ON EST PAS DEV ON NE TOUCHE PAS AU CODE EN PROD !

C’est pas compliqué non ?
Quand on ne sait pas : on ne fait pas ! Par exemple vous accepteriez de vous faire opérer à cœur ouvert par un type qui a juste des notions de chirurgie ? Déjà que vous refuseriez à un apprenti en mécanique le simple droit d’ouvrir le capot de votre voiture, autant vous dire qu’un débutant de la blouse blanche ne pourra même pas vous approcher avec un seringue à la main. N’allez pas me dire le contraire j’aurais toutes les peines du monde à faire semblant de vous croire.

Et pourtant on laisse des bidouilleurs à la petite semaine mettre leur nez dans le code en production. Comme ça, tranquillement …

Faudra qu’on m’explique un jour.


Fire extinguishers by Peter Løvstrøm – CC – BY

Testable

À la Une
  • Le problème c’est que le code n’est pas testable.
  • Mais si, tu as juste a rajouter des var_dump dans le code et puis c’est bon.

J’aurais bien aimé dire que ce dialogue est tout droit issu de mon imagination. Que jamais un collègue n’aurait osé me dire une chose pareille. Sauf si bien sur le dit collègue souhaitais vraiment me faire sortir de mes gonds et finir pendu la tête en bas avec une pancarte d’infamie attachée autours des valseuses sur la place publique. La loi puni sévèrement ce genre d’actes mais je suis certain qu’un bon avocat saurait facilement me trouver des circonstances atténuantes.

Reprenons les choses par le bon bout. Quand je dis testable, j’entends un code sur lequel je pourrais lancer des tests unitaires afin de m’assurer que tout fonctionne correctement.

Mettre des points d’arrêts, des dumps et des die dans le code cela porte un nom : c’est du débug. Le débug, j’ai rien contre mais je préfère réserver ça pour des cas d’urgences. Quand le serveur me saute à la tronche et que j’ai aucune idée du pourquoi du où du comment. Ce genre de situation, je les préfère les plus rares possibles. Je ne suis plus tout jeune et je n’ai pas gout à me shooter à l’adrénaline surtout avec les hurlements des clients en toile sonore.
L’idéal ça reste encore le code qui fonctionne dès sa mise en prod. J’insiste sur le mot idéal car dans le mode réel tout ne va pas toujours pour le mieux dans le meilleur des mondes. Shit happens comme on dit dans le métier.

Un code cela se teste et n’en déplaise à certains : tester et debugger ce n’est pas du tout la même chose.

Les tests cela permet de s’assurer d’une part que le code fonctionne comme il est sensé le faire mais en plus qu’il ne plantera pas à la prochaine modification. Si je dois serrer les fesses à chaque commit en espérant que tout ne va pas me sauter à la tronche tout ça simplement parce qu’un béotien de fond de classe n’a strictement rien compris à la notion de test : autant dire tout de suite que je ne ferais pas de vieux os dans l’équipe.

Parce qu’au final il y a sans doute pire que celui qui ne fait pas, c’est sans doute celui qui crois avoir fait alors qu’il n’en ai rien. Je vous la refais en plus grossier, c’est sans doute plus compréhensible comme ça. Je collerais une étiquette interdit au moins de 16 ans sur le bandeau du site après. En résumé d’un coté il y a le zigue qui se bat les steaks du TDD et qui le dit fièrement. Au moins là on sait à quoi s’attendre. Et de l’autre y a le zigue qui prétend que tout roule comme sur du papier à musique et qu’il n’y a plus qu’a poser dessus les tests unitaires comme des petits papillons sur des marguerites alors qu’en réalité je pourrais tout aussi bien me les carrer dans l’oignon et profond t’en qu’à faire. Amis de la poésie, bonsoir.

Résumons : si je dois modifier ne serait ce qu’une ligne de mon code pour le tester : alors il n’est pas testable. Y a pas a tricoter c’est comme ça et pas autrement.


Witten – Muttental – Zeche Nachtigall Dampffördermaschine 06 By Daniel Mennerich – CC BY-NC-SA