Vu que le mec se prend pour un expert du code, est hyper désagréable et passe son temps à repasser sur chacun de mes fichiers pour les réécrire selon sa vision du code lisible et performant, je n'ai aucun scrupule.C'est moche de balancer ses collègues ! Plus que ce code je pense...
Allez, un petit autre juste pour rire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php //..... if ((($val['logged'] && $this->auth->isLoggedIn()) || !$val['logged']) && (!isset($val['auth']) || (isset($val['auth']) && ($functions->arrcomp($val['auth'], $auth) || in_array('superadmin', $auth))))) { $result[$key] = array(); $result[$key]['name'] = $this->template->translate($key); $result[$key]['key'] = $key; if (isset($val['menu'])) { if (is_array($val['menu'])) { $result[$key]['menu'] = $this->renderMenu($val['menu'], $lang, $auth); } else if (substr($val['menu'], 0, 8) == 'callback' && !strstr($_SERVER['REQUEST_URI'], 'api')) { $callback = explode('.', preg_replace('/.*\((.*)\).*/', '$1', $val['menu'])); $path = __DIR__ . '/../bundles/' . $callback[0] . '/controllers/' . $callback[1] . '.php'; //...
Ça, plus le type dit fort qu'il est bon, plus c'est suspect.
Le vrai bon, tu le repères rapidement en voyant toutes les personnes qui passent religieusement à son bureau et parce qu'il ne fait pas particulièrement de bruit (Il est bien occupé et il n'a pas besoin de plus de taf !)
Aussi, tu le repères quand tu passes sur du code désarmant de simplicité (tu aurais fais ça avec le double de lignes) et où tu y découvres deux-trois fonctionnalités dont tu ignorais l'existence.
"La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"
Pour sa défense, je pense que le mec est atteint d'un Asperger assez prononcé, et il est donc fort probable que lire 10 instructions imbriquées sur une ligne lui paraisse parfaitement naturel. Le problème, c'est que les gens comme ça, pour être un atout pour l'équipe, ont besoin d'être cadrés. Les avoir comme chef de projet est généralement une très mauvaise idée puisqu'en plus d'avoir une vision très personnelle d'un certain nombre de règles à appliquer et suivre religieusement, ils ne sont pas capable d'imaginer que d'autres personnes puissent penser autrement.Voilà on y est. C'est exactement le sujet de ce topic. Des mecs qui pensent faire mieux que les autres... Voire que si c'est pas eux qui on pondu le code, c'est forcément de la merde...
Je ne suis pas mort, j'ai du travail !
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
Tiens aujourd'hui
J'avais un cas edge case à reproduire en unit test.
Du coup je vais chercher le test de base pour le modifier avec le edge case.
pas moyen de trouver le test de base de la fonctionnalité.
Je remonte à la fonctionnalité dans l'historique des commits pour voir ce qui a été commit avec, histoire de trouver le test
pas de test relevant commité avec.
Mais qui a négligé le test?
Ha ben c'est moi
Allez, un petit bout de code sur lequel je suis tombé pour relancer le topic :
C'est indenté(semble-t-il correctement, même si ce genre de langage, ça n'est pas ma came, donc je ne suis pas sur), et les rares mots qu'on trouve sont dans une langue identifiable.
Après, c'est sur, pour avoir la moindre idée de ce que ça fait, c'est plus compliqué. Sur comment, ben un prépare un tableau à renvoyer, on cherche quelquepart dans les données ce qui correspond à la clef data qu'on a entré, et on fait pas mal de recherches derrière. La tuyauterie est lisible. Mais à quoi elle sert???
Un bel exemple, parce-que je suis sur que l'auteur croit que son truc est lisible. J'ai sans doute commis des trucs de ce genre, moi-même, parfois. On comprend en gros chacune des actions unitaires, et si on sait à quoi ça sert, on peut même sans doute le débogguer. Et c'est là qu'est l'os : "à quoi ça sert???"
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
Le pire programme que j'aie vu est un programme écrit en Adélia 400 (pour ceux qui ne connaîtraient pas c'est un L4G avec des mots clés en Français qui génère du RPG pour AS400).
Le premier SI était en ligne 10 et le FIN lui correspondant plus de 1.000 lignes plus loin !!! Bien entendu entre les 1.000 lignes il y avait d'autres conditions du même genre.
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Je viens de m'exercer à analyser ce code.
$data est un tableau associatif (disons, de type MapAMapBC) qui associe à chaque clé (disons, de type A) un tableau associatif (disons, de type MapBC) qui associe à chaque clé (disons, de type B) une valeur (disons, de type C).
$search est un tableau de valeurs de type C.
Premier morceau de code : un foreach :
Si $search est vide, on inverse les clés et les valeurs de tous les MapBC. Appelons MapCB le type du résultat.
Si $search est non vide alors, pour chaque MapBC, on regarde les valeurs de type C à la fois présentes dans MapBC et $search. On remplace alors le MapBC par un tableau associatif qui à chaque clé de type C associe un numéro. Dans ce tableau associatif, les valeurs vont de 0 au nombre de clés moins 1.
Si on suppose que le type final des tableaux transformés ne dépend pas que $search soit vide ou non, alors le type B est un nombre. Du coup, MapBC était en fait le type tableau de C. Donc $data était au départ un tableau associatif de type MapAC. Maintenant, il est de type MapAMapCB.
Deuxième bloc de code : un if si $data n'a qu'un seul élément (de type MapCB) :
Visiblement, le type A est un type caractère. Si 'a' est une clé de $data, on prend les valeurs C qu'il contient sous forme de tableau de C. Sinon, on retourne directement le MapCB sans réinverser les clés et les valeurs.
Troisième morceau de code : le else :
On cherche tous les C qui sont dans un seul des MapCB de $data. On retourne un tableau associatif qui associe, à chacun de ces C, la valeur 0.
En résumé :
$data associe à chaque caractère une valeur de type C.
$search est un filtre optionnel sous la forme d'un tableau avec des valeurs de type C.
On retourne les valeurs de type C auxquelles est associé un et un seul caractère de $data. Si $search est non vide, on enlève les valeurs de type C qui ne sont pas présentes dans $search.
Si on n'entre pas dans le if du $data avec un seul élément, on retourne les valeurs de type C sous la forme d'un tableau associatif étrange qui associe à chacune de ces valeurs de type C le nombre 0.
Si on entre dans le if du $data avec un seul élément, les valeurs de type C sont retournées sous une forme différente qui dépend si le caractère contenu dans $data est 'a'.
Bilan :
La conception semble inexistante, l'implémentation est absurde et il y a un problème de nommage des variables : on ne sait pas ce que chaque variable représente.
Si c'est du RPG à l'ancienne en positionnel - et donc avec indentation impossible - j'imagine le carnage.
Perso, j'ai eu un jour 533 lignes entre un IF et un END-IF en COBOL. Pas si impressionnant, sauf que lors d'une maintenance, mon prédécesseur s'est mélangé sur les indentations. Et plus rien n'était en face. J'ai du imprimer le code en petits caractères pour avoir les 533 lignes sons les yeux et tirer des traits jusqu'à comprendre le souci.
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
Bienvenue dans mon quotidien.Bilan :
La conception semble inexistante, l'implémentation est absurde et il y a un problème de nommage des variables : on ne sait pas ce que chaque variable représente.
L'app sur laquelle je bosse est bourrée de code comme ça, pas toujours aussi obscur mais il faut à chaque analyser le truc en plusieurs étapes pour tester l'avant-après à cause de variables mal nommées ("final", "data", "temp" ...) et même une qu'on a compris ce que le bout de code fait, il faut encore comprendre pourquoi. Au final je me rends compte que deux bons tiers du code servent à reproduire des fonctionnalités pour lesquelles PHP a des fonctions natives : comparer deux tableaux, parser une url ... avec une bonne quantité de répétitions.
L'auteur étant autiste, il est pratiquement impossible de discuter avec lui car ça lui semble absurde que son code ne soit pas parfaitement lisible par d'autres personnes, d'après lui tous les pros travaillent comme lui.
@el_slapper.
Adelia est un langage algorithmique (en français) qui gènère du RPG. En RPG j'aurai carrément pété les plombs.
Je me souviens que j'avais un listing de je ne sais plus combien de pages (imprimé sur une grosse matricielle) et que je reproduisais les indentations sur des feuilles avec des carreaux de 5mm.
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Les programmes écrits dans les années 60-70 en cobol, étaient contraints par les "performances" machine extrêmement limitées .
Le code source devait être le plus court possible
Du coup, il n'y avait jamais de commentaire et les noms des variables et des paragraphes étaient les plus courts possibles.
Pour la même raison, le code pouvait s'altérer lui même un peu comme en assembleur, grâce à (ou plutôt à cause de) l'instruction "ALTER TO PROCEED" dont le but étaient de modifier les instructions de branchement !
Et enfin, il n'y avait pas de END-IF, seul le point terminait le IF.
A cette époque, ce genre de code était donc la norme, "va comprendre Charles" :
Bien évidemment, il n'existait pas de debogeur et l'espace DATA (la working storage) n'était pas balisé, retrouver les valeurs des variables pour expliquer un plantage n'était donc pas chose aisée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 P1. IF A > 12 AND B1 > B2 GO TO P1 ELSE GO TO P2. MOVE CX(T, U) TO CZ(T1, U1). P2. IF B1 > B2 ALTER P2 TO PROCEED TO P3.
Et, cerise sur le gâteau, comme le temps machine était très couteux, les développeurs n'avaient droit qu'à 1 compilation par jour !
Une autre époque, heureusement révolue
Puis on est d'accord tout doit être écrit en français pour être compréhensible par tous.
Non, ça dépend de ton environnement de travail et de la dispersion de tes collègues à travers le monde ou de la langue des clients visés.
Tant qu'à moi, je préfère lire du français à de l'anglais écrit par des Français, qui est souvent ubuesque - et j'ai un niveau de Français , mais qui vit en terre bilingue.
Dernière modification par Invité ; 09/11/2018 à 22h39.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager