Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Apprenti développeur dans une grande entreprise, je suis chargé de reprendre le code d'une application PHP afin de la remettre au goût du jour. Voici, telle quelle, la dernière ligne d'un fichier pris au hasard :

}}}}}}}}}}}}} // Fermetures de tous les if successifs (qui sont donc emboités).

Treize « if » imbriqués (je vous épargne le comptage), sans parler du commentaire à la Captain Obvious. PEBKAC.
PEBKAC #6081 proposé par iFrancois le 07/11/2012 | 45 commentaires | 👍🏽 👎🏽 +247
Le tout sans indentation ? Les sauvages !
Commentaire #64925 écrit par Heidi le 07/11/2012 à 17h41 | 👍🏽 👎🏽
Ça dépend...

Moi ça m'arrive d'imbriquer pas mal de if {...} ElseIf {...} ElseIf {...} etc si je peux avoir une multiple sortie de fonction, donc à moins que je n'ai rien compris au PEBKAC (ce qui est possible vu que je n'entrave que dalle au PHP ^^) je ne vois pas où il est le PEBKAC justement...
Commentaire #64930 écrit par Shadam le 07/11/2012 à 17h59 | 👍🏽 👎🏽
Si les fonctions sont optionnelles, je suppose que l'indentation, les constantes et les objets ne sont que confort aux yeux du précédent développeur. Mais il aime bien les commentaires inutiles.
Commentaire #64932 écrit par flak88 le 07/11/2012 à 18h00 | 👍🏽 👎🏽
13 niveaux d'imbrication ! Il faut être complètement malade pour pondre un truc pareil... Il faut un minimum modulariser le truc. Par exemple, sur le projet où je suis en ce moment, on essaye dans la mesure du possible d'avoir moins de 30 ";" par méthode (technique simple pour déterminer la complexité d'une méthode).
Commentaire #64934 écrit par Acné le 07/11/2012 à 18h04 | 👍🏽 👎🏽
@Heidi : Le code était vaguement indenté mais selon les pages la norme changeait (des fois je revient à la ligne, des fois pas) sans parler des normes de nommage des variables et fonctions aléatoires.

@flak : Le code a été créé sous PHP 4 (voire 3) si mes souvenirs sont exacts le PHPOO n'est possible que depuis la 5. Côté commentaires il y en a très peu et ils sont presque tous de cet acabit.

@Shadam : code en objet, j'ai pas eu à imbriquer plus de 2 if et je fais pas (que) des petits scripts du dimanche :)
Commentaire #64937 écrit par iFrancois le 07/11/2012 à 18h08 | 👍🏽 👎🏽
J'allais dire que pour une fois le PEBKAC était assez vague, mais finalement non.

PEBKAC validé.
Commentaire #64938 écrit par ROB le 07/11/2012 à 18h10 | 👍🏽 👎🏽
dans ce cas, il nous faut une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe imbriquée dans une baffe.

Le problème c'est que je ne sais pas quelle onomatopée associer à ça.
Commentaire #64939 écrit par ROB le 07/11/2012 à 18h11 | 👍🏽 👎🏽
Tu vois la scène dans Astérix et Obélix mission cléopâtre quand ils "interrogent" le marchand à grand coup de claques ? Ben pareil :)
Commentaire #64941 écrit par iFrancois le 07/11/2012 à 18h15 | 👍🏽 👎🏽
Malheureusement, je n'ai pas vu le film.

*fuis pour éviter les baffes*
Commentaire #64943 écrit par ROB le 07/11/2012 à 18h21 | 👍🏽 👎🏽
Et sinon, le switch, ça lui dit quelque chose ?

Par contre, éclairez-moi : en PHP, on peut switch sur n'importe quoi ? vu que typage et PHP, bon... Je sais qu'en Java, à part les char et les int...
Commentaire #64952 écrit par neeko le 07/11/2012 à 19h17 | 👍🏽 👎🏽
Le pire dans l'histoire c'était que ces 13 if (et encore ça c'est juste la dernière ligne il y avait encore d'autre conditions refermées plus haut) c'était simplement pour vérifier le contenu d'un formulaire.
Donc pas besoin d'imbrication, et pour répondre à ta question oui on peut switch sur n'importe quoi en PHP :)
Commentaire #64953 écrit par iFrancois le 07/11/2012 à 19h59 | 👍🏽 👎🏽
Tu peux aussi switch des enum et des String en Java.
Commentaire #64954 écrit par MSPE le 07/11/2012 à 20h11 | 👍🏽 👎🏽
Pas con, le coup des 30 ";", je garde l'idée. :)
Commentaire #64957 écrit par Sihn le 07/11/2012 à 20h49 | 👍🏽 👎🏽
Je me souvient de mes premiers codse en sequentiel tous pourrave.
On m 'a vite calmer avec un peut d'injection sql.

On a tous été un jeune developpeur à un moment donné.
Maintenant je sais que certaine personne prefere reprendre mon code plutot que d'autre , on passe tous par la case "jeune developpeur".
Soyez indulgent, c est pas un pebkac, juste un jeune developpeur.

Si tu es Apprenti développeur , il y a de fortes chances pour que la personne avant toi le soit aussi.
Commentaire #64968 écrit par Kasuo le 07/11/2012 à 22h09 | 👍🏽 👎🏽
Le gars en question n'était pas un jeune développeur mais un programmeur d'une 30aine d'années. Ceci étant le soft en question a bien 10-15 ans et entre temps on a changé la façon de programmer.

Et pour ce qui est des jeunes développeurs qui sont passés avant moi j'ai posté quelques PEBKAC à ce sujet il y a quelques jours :)
Commentaire #64969 écrit par iFrancois le 07/11/2012 à 22h32 | 👍🏽 👎🏽
Baffeception ! Je ne suis plus là
Commentaire #64970 écrit par neomega le 07/11/2012 à 22h45 | 👍🏽 👎🏽
même jeune dev, fermer ses accolades en respectant l'indentation, ça aide bien pour suivre après, et donc surtout pour ceux qui suivent (et je dis ça après expérience de débugage de mes bouts de code à moi à la fac ... ça commence à dater, enfin jamais j'aurai fait ça sur un truc pro). Même si le genre d'erreur de compil' qu'on peut trouver dans ces cas est plus ou moins facilement trouvable sans indentation (mais j'ai abandonné l'idée de débuger les trucs sur une ligne quand l'indentation est mal faite sans refaire l'indentation -mici indent quand c'est pas mon code-).
Commentaire #64976 écrit par globideuh le 07/11/2012 à 23h41 | 👍🏽 👎🏽
C'est des dev qui ferait mieux de bosser en Common Lisp...
Commentaire #64983 écrit par Johnny le 08/11/2012 à 04h23 | 👍🏽 👎🏽
Ça me rappel un de mes stages datant de quelques années: Modifier une application access déjà existante. Ma solution ? Tout refaire à partir de rien.
Au moins ça évite de tomber sur des pebkac et d'essayer de comprendre la façon de coder d'un mauvais dev ;)
Commentaire #64986 écrit par Vordano le 08/11/2012 à 07h05 | 👍🏽 👎🏽
J'aime pas trop ces normes de limitation de taille des méthodes... Je sais que, souvent, ça évite les codeurs qui écrivent 10 lignes où la moitié n'est pas utile, mais en même temps, quand on fait des choses un peu plus complexes, on se mange des warnings qui n'ont pas lieu... Vivement que ces algos deviennent intelligents !
Commentaire #65000 écrit par Mat+1 le 08/11/2012 à 09h01 | 👍🏽 👎🏽
Une onomatopée genre mitraillette à baffe, ça marcherait pas ? Genre SPSPSPSPSPSPSPSPSPSPSPSPSPAAAAAAAAAAAAAFFFFFFFFFFFFF
Commentaire #65001 écrit par Mat+1 le 08/11/2012 à 09h05 | 👍🏽 👎🏽
Je faisais pareil jusqu'à ce qu'on me dise que je perdais du temps et que c'était pas ce que l'on me demandait... Depuis, quand je vois un code dégueulasse, je râle plus ou moins discrètement et je débranche mon cerveau... Heureusement qu'il me reste les projets persos pour voir un code un peu plus clean...
Commentaire #65002 écrit par Mat+1 le 08/11/2012 à 09h10 | 👍🏽 👎🏽
C'est aussi ce que j'ai fini par faire, tout recommencer. J'en ai profité pour ajouter de l'AJAX et du JS, qui étaient totalement absents du projet original :)

@Mat+1 c'est pas toujours justifié de tout recommencer mais avec les bons arguments ça passe tout seul, notamment quand tu commences à parler de compatibilité, de facilité d'utilisation, de problèmes fonctionnels.
Commentaire #65004 écrit par iFrancois le 08/11/2012 à 09h18 | 👍🏽 👎🏽
@Mat+1 : la plupart des outils que je connaisse qui vérifie l'esthétique du code automatiquement possède des mots-clef qui permettent de désactiver localement un test pour éviter ce genre d'avertissement. Bien sûr, je vérifie que l'utilisation de ces mots-clef est justifiée, sinon ça ne sert à rien de faire les tests...
Ensuite, il est également possible de désactiver totalement la vérification du code quand on est en phase de développement, pour la réactiver juste avant la publication sur le gestionnaire de configuration.
Commentaire #65023 écrit par Acné le 08/11/2012 à 10h17 | 👍🏽 👎🏽
@Sihn : pour le Java, tu peux utiliser ça : http://checkstyle.sourceforge.net/config_metrics.html#JavaNCSS
Commentaire #65024 écrit par Acné le 08/11/2012 à 10h22 | 👍🏽 👎🏽
Pas toujours, tu peux te retrouver à la maintenance applicative et là, tu peux expliquer ce que tu veux, personne ne t'écoute...
Commentaire #65026 écrit par Mat+1 le 08/11/2012 à 10h28 | 👍🏽 👎🏽
If maVariable1 = x
message d'erreur
else
If maVariable2 = y
message d'erreur
else
If maVariable3 = z
message d'erreur
else
etc....
Commentaire #65027 écrit par Shadam le 08/11/2012 à 10h32 | 👍🏽 👎🏽
@shadam : Dans le PEBKAC ça serait plutôt

IF maVariable1 = x {
IF maVariable2 = x {
IF maVariable3 = x {
IF maVariable4 = x {
IF maVariable5 = x {
[...]
}
}
}
}
}

Le tout (à priori) sans indentation évidement. Donc rien avoir avec des IF-ELSEIF : dans le PEBKAC tous les tests de chacun des IF seront obligatoirement fait (et ce que les tests soit OK ou KO) alors que dans ton exemple, plus aucun test ne sera fait dès qu'il y en aura un OK.

En attendant, 13 niveaux d'imbrications ça va pas être évident à justifier. S'il fait pareil pour les boucles, je m'imagine les perfs de ses applis => Que du bonheur :D
Commentaire #65030 écrit par Navi le 08/11/2012 à 10h45 | 👍🏽 👎🏽
Ça, ça ressemble au son du GAU-8 monté dans les A-10 ;-)

C'est cool, mais ça reste quand même un poil overkill.
Commentaire #65034 écrit par Geist le 08/11/2012 à 10h51 | 👍🏽 👎🏽
Malheureusement je ne suis pas responsable du paramétrage de l'outil d'audit de code installé sur mon projet et qui bien souvent nous pousse à coder improprement.

Il m'est déjà arrivé de devoir clore des blocs ifs par des }}} pour un gain de 2 lignes et un substantiel gain dans ce même outil de code.

Croyez moi je le fais pas par plaisir.
Commentaire #65036 écrit par Arne Saknussemm le 08/11/2012 à 11h06 | 👍🏽 👎🏽
Oui c'est bien pour ça que j'ai précisé, parce que quand j'ai vu le -6 de mon commentaire, je me suis dit que j'avais été mal compris...

De toute façon je suis un grand incompris :'(
Commentaire #65037 écrit par Shadam le 08/11/2012 à 11h10 | 👍🏽 👎🏽
@Geist : Il me semble qu'il manque un "a", c'est "GAU-A8" si je ne m'abuse. Un joli jouet soit dit en passant, tu es la première personne que je croise qui le connaisse :)
Commentaire #65038 écrit par Acorah le 08/11/2012 à 11h14 | 👍🏽 👎🏽
J'ai déjà eu un projet où on n'avait pas le droit de dépasser 80 caractères par ligne. Déclaration du namespace, classe, méthode, avec l'indentation déjà 12 caractères bouffés. En rajoutant les tests et boucles (éventuellement imbriqués pour certains) on était obligés de mettre des retours à la ligne bien dégueulasses pour rester dans ces 80 caractères, alors qu'on n'était même pas au bout de l'écran... Et obligé de scroller verticalement du coup vu que des instructions même pas trop compliquées prenaient plusieurs lignes. Bonjour la lisibilité du code :/
Et tout ça pour quoi ? Pour que ça rentre sur une page A4 quand la personne en charge de la validation du code allait l'imprimer...
Commentaire #65042 écrit par Acorah le 08/11/2012 à 11h23 | 👍🏽 👎🏽
C'est plus courant qu'on ne pourrait l'imaginer, mais faut pas que ça soit quand même trop contraignant.

Si on suit les recommandations de codage Zend pour le Zend Framework, c'est même ce qu'ils disent :
http://framework.zend.com/manual/1.12/en/coding-standard.php-file-form[...]
Même s'ils concluent par dire que le maxi absolu d'une ligne doit être de 120 chars.
Commentaire #65047 écrit par Clem le 08/11/2012 à 12h00 | 👍🏽 👎🏽
La plupart du temps, on passe à 120 car sur les écrans actuels, c'est la limite acceptable pour que tout apparaisse. Au-delà, le résultat n'est pas toujours garanti
Commentaire #65064 écrit par Mat+1 le 08/11/2012 à 13h15 | 👍🏽 👎🏽
Ça me fait penser à SAP dans des versions pas si vieilles que ça (la 4.6C par exemple) : la limite de caractères par ligne était de 72 quoi qu'il arrive ! Cette limite additionnée au langage particulier qu'est l'ABAP rend les conditions de travail particulières ^^
Commentaire #65106 écrit par Navi le 08/11/2012 à 15h14 | 👍🏽 👎🏽
Mon principal argument c'était un schéma relationnel complètement pourri ;)
Commentaire #65108 écrit par Vordano le 08/11/2012 à 16h29 | 👍🏽 👎🏽
Apprendre à coder
À coder pour deux,
Rien qu'en ouvrant les yeux,
Et savoir penser
penser sans rature
Ni demi-mesure
Apprendre à programmer.
Vouloir jusqu'au bout
Programmer malgré tout,
Apprendre à coder,
Ou s'en aller,
Ou s'en aller...
Commentaire #65141 écrit par Cartman34 le 08/11/2012 à 18h35 | 👍🏽 👎🏽
Ma limite est fonction de celle de mon écran/éditeur (100-120), si ça dépasse, retour à la ligne, c'est TOUJOURS possible de mettre un beau retour à la ligne qui délimiter bien ce qu'on fait, avec une belle indentation comme il faut, surtout dans un if, ça devient vraiment chiant quand c'est un tableau multidimensionnel avec des noms/clés à rallonge.
Commentaire #65142 écrit par Cartman34 le 08/11/2012 à 18h38 | 👍🏽 👎🏽
Je me confesse, mon record c'est 21 if{} imbriqué.
Vous pouvez me lyncher
Commentaire #65335 écrit par lambada le 09/11/2012 à 16h15 | 👍🏽 👎🏽
80 caractères je trouve que c'est peu. C'était à l'époque où on avait des résolutions avec 800px de large. Remarque, si t'es payé à la ligne c'est good :D

Maintenant, avec 1280px de large pour la résolution d'écran, je fais tenir 180 caractères max avec l'éditeur en fullscreen. C'est quand même beaucoup, mais ça ne sert à rien d'aller jusque là.
Commentaire #65338 écrit par juu le 09/11/2012 à 16h32 | 👍🏽 👎🏽
Pourquoi faire ?
Commentaire #65341 écrit par iFrancois le 09/11/2012 à 16h50 | 👍🏽 👎🏽
Rien à voir avec la résolution de 800x600, c'était lié au nombre de caractères dans un terminal (ceux sans l'interface graphique fenêtrée).
Commentaire #65421 écrit par Freudo le 10/11/2012 à 10h43 | 👍🏽 👎🏽
Si il y a trop de if, pourquoi de pas faire un switch avec des case ?

switch ($i) {
case x":
break;
case "y":
break;
}
Commentaire #65650 écrit par Benjamin le 12/11/2012 à 18h43 | 👍🏽 👎🏽
Imbriquer des if ne signifie pas qu'on teste toujours la même variable, le switch c'est pour les else if à la suite, donc non-imbriqués.
Commentaire #81497 écrit par juu le 01/03/2013 à 10h32 | 👍🏽 👎🏽