IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débats sur le développement - Le Best Of Discussion :

Quel est le pire bout de code que vous ayez jamais écrit ?


Sujet :

Débats sur le développement - Le Best Of

  1. #1
    Expert éminent sénior

    Inscrit en
    Juillet 2009
    Messages
    3 407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 407
    Points : 149 059
    Points
    149 059
    Par défaut Quel est le pire bout de code que vous ayez jamais écrit ?
    Quel est le pire bout de code que vous ayez jamais écrit ?
    En avez-vous eu honte et pourquoi ?


    Un professionnel sérieux se reconnaît au fait qu'il sait évaluer son travail et reconnaître ses erreurs.

    Autrement dit, un développeur réfléchi est celui qui sait quand il écrit un code efficace, ou beau et qui répond aux besoins de l'utilisateur ou du client. Mais il sait aussi quand c'est exactement le contraire.

    Ihssen, développeur web et membre de la rédaction de Developpez.com, n'a par exemple pas mis longtemps à avouer, non sans une certaine gêne, avoir écrit une application Web communautaire, riche en fonctionnalités... « mais sans avoir la moindre idée sur le concept de jointures en SQL ».

    « Pour chaque liste d'affichage, les scripts empilaient donc une ou plusieurs requêtes supplémentaires pour chaque ligne issue de la requête principale. N + 1 était la règle, mais sur plusieurs modules on pouvait trouver des tas de requêtes de type N * M + 1 », explique-t-il.

    Au final le site a pourtant fonctionné d'une manière plutôt robuste durant plusieurs années, « mais son serveur dédié a du souffrir. Heureusement qu'il y avait de la pagination ! ».

    Autre horreur, Hinault Romaric, lui aussi rédacteur sur Developpez.com, se souvient que « son pire code était pour une petite application de gestion dans le cadre d’un premier stage en entreprise. Le code était bourré des concaténations de chaînes pour les requêtes SQL et de déclarations de variables sans aucune normalisation. Il n’était pas du tout optimisé (utilisation par exemple des if où des switch auraient été suffisants) et encore moins commenté».

    Et de conclure « lorsque je tombe parfois sur ce code dans mes archives, il me fait aujourd'hui bien rigoler ». Mais pas à l'époque.

    Après avoir abordé le sujet des pires bouts de code que vous ayez vus, et les développements dont vous êtes le plus fier, il nous a paru juste et légitime de vous demander aujourd'hui de confesser vos petites hontes.

    Alors, vous ? C'était quoi votre pire bout de code ?

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Le pire que j'ai fait ? Euhhh ...

    C'est lié un bug incompréhensible sur une synchro multithread en C.

    Seule solution trouvée : ajouter une trace dans la console (printf).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Points : 358
    Points
    358
    Par défaut vérifier que le modulo d'un nombre positif ...
    soit positif ou non ...

  4. #4
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    Le pire code que j'ai fait , c'est pendant mon tous premier stage en .NET y'a 4ans pour une ecole . j'ai du ecrire le code SQL de creation des tables en dure et qui s'execute ligne par ligne ., le tous sans aucune clef primaire ni etrangere . je n'avais pas cette notions mais je savais instinctivement qu'il ne fallais pas faire des operations d'ajout et de suppresion a l'arrache , alors j'ai moi meme cree des classes pour faire le travail du SGBD et verifier ces contrainte par code . et comme j'utilisais MySql pour faire un backup de la table j'ai du ecrire un programme en C++ pour executer des lignes de commandes sur console ( C# ne peut pas le faire a ma connaissance , car j'ai esseye et demandé ) .

    c'est sur que y'a un apres , mais sa me reconforte tellement de voir le niveau ou j'etais et comment je pensais par rapport a aujourdui , mais on passe tous par la .

  5. #5
    Membre chevronné Avatar de Hellwing
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 538
    Points : 2 089
    Points
    2 089
    Par défaut
    Je me souviens d'un petit bout de code plus ridicule que horrible écrit lorsque j'étais encore étudiant.

    J'avais écris une méthode qui prenait en paramètre un Booléen et renvoyait un booléen selon le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si le booléen est vrai
      alors je renvoie faux
    Si le booléen est faux
      alors je renvoie vrai
    Une méthode juste pour ça.

    J'ai sans doute dû faire plus horrible comme code depuis, mais celui-ci est mon souvenir le plus mémorable ^^

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 21
    Points : 39
    Points
    39
    Par défaut
    En stage de première année, j'ai du ajouter des traces-logs d'informations dans un programme existant ... j'ai du copier/coller des centaines de fois le même bout de code pour écrire dans le log ...

    Sinon je fais encore de temps en temps un
    si (condition OU vrai)
    Pour tester des morceaux de code pendant les développements.

    Mais généralement je pense à claquer un //TODO au dessus.

  7. #7
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  8. #8
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    Citation Envoyé par Lapinpanda Voir le message
    c'est assez usuelle comme code , faut juste penser a mettre un break ou un return dedans , ou bien mettre le thread qui execute cette partie en background . on utilise souvent une boucle infinie pour ecouter des Client TCP

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Le pire bout de code que j'ai du écrire date de seulement trois mois.

    1. Rechercher manuellement un message utilisateur dans toutes les langues et trouver un groupe de lettres commun à tous ces messages mais inexistant dans d'autres messages.
    2. Attraper le message lorsqu'il est envoyé afin de mettre éventuellement un booléen à vrai
    3. Utiliser le booléen plus tard pour décider d'envoyer ou non un autre message.

    Pourquoi ce code ? Parce que nous n'avons (oui, au présent : il n'est pas encore corrigé, ce problème) pas de possibilité de découvrir le type de message recherché par nous même : on nous envoie 3 informations, l'une d'elle est celle qu'on cherche, mais les 3 ne sont jamais dans le même ordre. Les messages, eux, sont correctement placés dans la base de données. On a interdit aux gars du business de changer les messages sans notre accord préalable à cause de ce problème. Heureusement, le projet pour fixer cela arrive. Ouf !

    Dépendre ainsi des messages utilisateurs qui peuvent changer à tout moment m'angoisse comme c'est pas possible !

  10. #10
    Membre actif Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Points : 278
    Points
    278
    Par défaut
    en entrer de méthode j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(true)
    throw new Excpetion("a");

  11. #11
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Mon pire code c'est lorsque j'ai débuté la prog en total autodidacte étant ado (il y a entre 15 et 20 ans).
    J'avais un Thompson TO8 (il était déjà vieux pour son époque) qui se programmait en BASIC, l'édition du code lui-même se faisait en lignes de commandes car je n'avait pas d'éditeur de texte, je n'avais pas la moindre notion d'algo ni d'informatique en général, j'ai appris tout seul par jeu de façon empirique en modifiant des programmes existant pour voir ce que ça fait et en lisant le manuel utilisateur de l'ordi.
    Résultat : je me suis inventé ma propre "méthode" (hum) de programmation et quand j'ai commencé à me sentir un peu plus à l'aise, j'ai créé à partir de 0 un jeu de Jackpot avec une interface graphique représentant une machine à sous avec ses symoles qui défilent, et même une animation du bras du "bandit manchot".

    Le tout tenait dans un seul fichier .bas de code BASIC brut qui devait faire 1000 ou 2000 lignes numérotées (de 10 en 10 pour laisser de la place au cas où il faille par la suite insérer une ligne entre les deux), ne contenait pas la moindre fonction ni procédure ni la moindre boucle for ou while, ni de else ... toutes ces structures dont j'ignorais l'existence étaient remplacées par des test simples avec du renvoi brutal à grand renfort de GOTO du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    100 A=1
    110 PRINT A
    120 A=A+1
    130 IF A<10 GOTO 100
    ... en fait c'était tellement "brut" avec des instruction tellement simple et décomposées, c'était presque comme de l'assembleur quand j'y repense.
    Pas non plus d'expression booléenne comprenant plus d'un test (pas de ET ni de OU), et toutes les variables étaient nommées A,B,C et ainsi de suite ... et le pire c'est que ça marchait et même plutôt bien et que j'étais capable de m'y retrouver dans mon code !

    Avec du recul je me demande comment je faisais pour comprendre cet infâme charabia, si je m'y replongeais aujourd'hui je serais incapable de le relire ou de refaire la même chose.
    Cela dit même si c'était une horreur je n'en ai pas honte, je suis même plutôt fier d'avoir commencé comme ça parce que je trouve que j'avais quand même du mérite à avoir découvert ça tout seul sans la moindre aide et quasiment sans la moindre documentation, et à m'être suffisamment acharné pour maîtriser ça "à ma façon".

  12. #12
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut
    En PHP, au lieu de tester si la méthode d'une entité existe, j'ai fait un Try/Catch. Il me restait deux heures avant de livrer le projet et je ne savais pas comment faire ce test dans ce fichu langage. Je ne sais d'ailleurs toujours pas

    J'ai pas honte, parce que j'ai gentiment mis une note dans le document de dette technique.

  13. #13
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Citation Envoyé par Lapinpanda Voir le message
    Où est le problème dans ce code? mon PIC16F84 il aime bien ce code là
    http://www.pocketmt.com GLCD Font Creator home site.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i = 0; i < j; ++i);
    au lieu d'un simple
    J'étais fatigué quand j'ai écrit ça. Je vous dis pas ma tête quand le lendemain je suis retombé dessus.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  15. #15
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 527
    Points : 1 523
    Points
    1 523
    Par défaut
    Citation Envoyé par nicorama Voir le message
    En PHP, au lieu de tester si la méthode d'une entité existe, j'ai fait un Try/Catch. Il me restait deux heures avant de livrer le projet et je ne savais pas comment faire ce test dans ce fichu langage. Je ne sais d'ailleurs toujours pas

    J'ai pas honte, parce que j'ai gentiment mis une note dans le document de dette technique.
    http://www.php.net/manual/fr/function.method-exists.php


  16. #16
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 527
    Points
    1 527
    Par défaut
    Un vendredi soir, une fonction de tri sur un std::vector en o(n^3) (sisi, c'est possible...)

    Le lundi matin en arrivant je me suis souvenu que la fonction std::sort existait...
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  17. #17
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 665
    Points
    665
    Par défaut
    Je devais porter une appli C/C++ vers Windows 64 bits.
    Le problème est que cette appli nécessitait une XXX.dll propriétaire dispo en 32 bit uniquement (Et exposant une trentaine de fonctions avec la convention d'appel cdecl).

    Impossible d'utiliser une dll 32 dans un processus 64. Du coup j'ai fait un wrapper :
    appli 64 bit -> dll 64 bit reprenant l'interface de XXX.dll -> Serveur COM en VB6 -> dll 32 bit exposant l'interface de XXX.dll, mais en convention stdcall -> XXX.dll.

    Cette usine à gaz est une solution temporaire faite à la va vite en attendant le portage de XXX.dll. Mais depuis je fais des cauchemars en imaginant que cet infâme sandwich puisse malencontreusement partir en production...

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Ma premiére appli pro.

    Je n'avais jamais fait de vrai dev pro et donc entre la bd (access évidemment), les tables sans index, les requêtes codées en dur et les écrans multicolors (en dehors des icones bart simpson).

    Le pire c'est qu'elle est en prod et fonctionne tous les jours...

  19. #19
    Membre régulier
    Homme Profil pro
    http://tuatini-godard.me/
    Inscrit en
    Décembre 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : http://tuatini-godard.me/

    Informations forums :
    Inscription : Décembre 2010
    Messages : 70
    Points : 93
    Points
    93
    Par défaut
    int pasBien;
    int * maladie;
    int q = sizeof(maladie) * 5;

    if(pasBien){
    maladie = (* int) malloc(q);
    }


  20. #20
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 83
    Points : 536
    Points
    536
    Par défaut
    J'ai lu dans le code d'un enseignant en école d'ingénieur :
    while(nombre >= 256)
    {
    nombre = nombre % 256;
    }
    Je crois qu'il n'avait pas totalement assimilé le concept "reste de la division entière".
    les algorithmes qui oublient leur histoire sont condamnés à la répéter

Discussions similaires

  1. Le pire bout de code que vous ayez vu
    Par Gordon Fowler dans le forum Actualités
    Réponses: 495
    Dernier message: 06/06/2014, 17h56
  2. Quel est le développeur le plus fainéant que vous ayez rencontré ?
    Par Gordon Fowler dans le forum Actualités
    Réponses: 101
    Dernier message: 13/03/2013, 15h45
  3. Réponses: 85
    Dernier message: 08/02/2011, 19h02
  4. Réponses: 64
    Dernier message: 06/12/2010, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo