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

  1. #1
    Expert éminent sénior
    Avatar de Katleen Erna
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    1 547
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 547
    Points : 76 188
    Points
    76 188
    Par défaut Que faire lorsque le programmeur qui vous a précédé ne sait pas ce qu'est une itération ? Le cas de Don R
    Que faire lorsque le programmeur qui vous a précédé ne sait pas ce qu'est une itération ? Le cas de Don R

    Don R est un programmeur normal, avec un travail normal, dans une compagnie normale. D'ailleurs, ce matin, c'est son premier jour dans la nouvelle boîte qui vient de le recruter. Confiant, il s'installe à son poste alors que son supérieur vient le voir, pour lui annoncer que le premier cas qu'il aura à traiter sera "facile".

    "Ca sera fait en un rien de temps !", assure-t-il, jovial, à la nouvelle recrue. "C'est un soucis qui arrive régulièrement, et je l'ai déjà arrangé plusieurs fois. Des fois, il y a des descriptions avec trop d'espaces, et quand on envoie un datafeed à la compagnie concernée, ça risque de dérègler leurs systèmes. Mais je suis sûr que tu sauras t'en tirer, c'est un cas de routine pour nous.", termine son patron, lui tappant sur l'épaule.

    L'homme avait raison, le cas était plutôt facile à résoudre...

    Jetez un oeil au code en question :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // pull double spaces
    itemDesc = 
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
          itemDesc, 
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " ");
    Se demandant pourquoi 24 replacements avaient été utilisés, Don regarda la version précédente...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // pull double spaces
    itemDesc = 
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
          itemDesc, 
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " ");
    Puis, la version antérieure à la version précédente...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // pull double spaces
    itemDesc = 
        stringReplace(
        stringReplace(
        stringReplace(
        stringReplace(
          itemDesc, 
        "  ", " "),
        "  ", " "),
        "  ", " "),
        "  ", " ");
    Une sorte de "suite logique" semblait se faire voir, aussi, il remonta encore d'une version....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // pull double spaces
    itemDesc = stringReplace(stringReplace(
        stringReplace(itemDesc, "  ", " "),
        "  ", " "),
        "  ", " ");
    Puis une autre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // pull double spaces
    itemDesc = stringReplace(
        stringReplace(itemDesc, "  ", " "),
        "  ", " ");
    Finalement, il atteint la version de départ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // pull double spaces
    itemDesc = stringReplace(itemDesc, "  ", " ");
    Bien qu'il fut tenté de rajouter un ligne similaire à celles ajoutées par son patron, Don décida de tout remplacer par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // pull double spaces
    regexReplace(itemDesc, "[ ][ ]+", " ");
    L'histoire ne dit pas s'il fut félicité ou remercié pour ce geste.

    Avez-vous déjà vécu des situations similaires ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 215
    Points : 558
    Points
    558
    Par défaut
    Ca fait peur... mais j'ai connu des cas aussi hallucinants moi même donc je sais que ça existe. Malheureusement.

  3. #3
    Futur Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Tiens, un article qui aurait pu terminer sur DailyWTF

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il y était déjà :

    http://thedailywtf.com/Articles/A-Spacy-Problem.aspx

    SVP indiquez vos sources, les 3/4 (a vu de nez, je dirai plus) des articles news ne sont que des traductions , sans indiquer la source. OK vous n'êtes pas journaliste et vous voulez partager l'info (et c'est très bien), mais donnez vos sources.

  5. #5
    Membre expérimenté
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Points : 1 511
    Points
    1 511
    Par défaut
    J'ai connu ça dans une très grosse société... (paramètres de fonctions remplacés par n versions de la fonction aussi) Le code avait de l'âge, ça peut excuser.
    "Il est plus facile de décomposer un problème en ses éléments, forcément plus simples, que de le traiter en sa totalité." (R. Descartes)

    Freelance iOS

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 614
    Points : 713
    Points
    713
    Par défaut
    -_- je suis en plein dedans sur en effet une trèès vielle appli -_-

  7. #7
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !

  8. #8
    Membre expérimenté
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Points : 1 511
    Points
    1 511
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !
    A la limite, le 'if else' imbriqué ne fait pas plus de code et est plus performant, donc ça peut se justifier...
    "Il est plus facile de décomposer un problème en ses éléments, forcément plus simples, que de le traiter en sa totalité." (R. Descartes)

    Freelance iOS

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    J'ai aussi rencontrer ce cas un jour

    Au lieu d'utiliser switch() il utilisait une suite de if else , if else i...... imbriquée !
    Ca je trouve que plutôt facile et pas trop choquant, switch() ce n'est pas ce qui est tjrs le plus utile (même si ca l'ai beaucoup on est d'accord),

    moi j'ai connu des lignes de codes imbriquées de cette façon:

    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
    19
    20
    21
      protected function request($method, $url
    							   
    							   
    							   
    							   
    							   
    							   
    							   , $vars = array()) {
            $this->handle = curl_init();
            
            switch ($method) 
    																																																					{
                case 'GET':
                    curl_setopt($this->handle, CURLOPT_HTTPGET, true);
                    break;
     case 'POST':
        curl_setopt($this->handle, CURLOPT_POST, true);
                   																													 break	;
    									            default:
              curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $method);
           }
    Et ca venait pas d'un problème d'éditeur, c'est pas pareil que raconté dans l'article mais bon je tenais à le dire

    tres bon article en tout cas!

  10. #10
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Citation Envoyé par Katleen Erna Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // pull double spaces
    itemDesc = stringReplace(itemDesc, "  ", " ");
    Juste pour savoir, c'est sencé faire quoi ce code... parce que bon, je suis aps familier de cette fonction et je ne comprend ni le code de la fin, ni le string replace... Bon , je suis peut etre pas bien reveillé, mais bon...

    ca remplace dans itemDesc un espace par un espace ?

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par pmithrandir Voir le message
    Juste pour savoir, c'est sencé faire quoi ce code... parce que bon, je suis aps familier de cette fonction et je ne comprend ni le code de la fin, ni le string replace... Bon , je suis peut etre pas bien reveillé, mais bon...

    ca remplace dans itemDesc un espace par un espace ?
    Un double espace par un seul espace

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut re
    excellent

  13. #13
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    Citation Envoyé par Fallen_Leaf Voir le message
    Un double espace par un seul espace
    Oui mais pourquoi autant de fois la répétition ?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // pull double spaces
    itemDesc = 
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
        stringReplace(stringReplace(
          itemDesc, 
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " "),
        "  ", " "),"  ", " ");
    Dans quel cas est ce que c'est utile ?

  14. #14
    Membre confirmé
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Points : 586
    Points
    586
    Par défaut
    Dans le cas ou t'as string de départ vaut : "plusieurs espaces"
    et que tu veut que ça valeur soit ramené à : "un seul espace"

    Désolé mais si je mets plusieurs espaces pour vous montrer, le forum n'en affiche qu'un seul

  15. #15
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    le forum doit avoir quelque part un regexReplace qui marche

  16. #16
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    il y'a 12 "stringReplace" dans ce cas c'est une chaine de 12 double espace ?
    Comment on peut connaitre à l'avance ??

  17. #17
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Jcpan Voir le message
    il y'a 12 "stringReplace" dans ce cas c'est une chaine de 12 double espace ?
    Comment on peut connaitre à l'avance ??
    Ca a sans doute été fait de manière "empirique" ; à chaque que le bug remontait, le gars rajoutait une couche de stringreplace Alors que même sans regex, une simple récursive de base suffisait ... Ils ont bien fait de le nommer manager le gars, il n'y a plus que ça à faire avant la porte

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    J'en ai déjà vus, et même des pires !!!!

    Typique, en Delphi, un développeur de qui j'ai repris un projet cherche a connaître le dernier jour d'un mois passé en paramètre..

    Que fait-il ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function DernierJourDuMois(iAnnee,iMois : integer) : integer;
    begin
      if iMois=1 or iMois=3 or iMois=5 or iMois=7 or iMois=8 or iMois=10 or iMois=12 then
        result:=31;
      if iMois=4 or iMois=6 or iMois=9 or iMois=11 then
        result:=30;
      if iMois=2 then
      begin
        if iAnnee=2012 or iAnnee=2008 or iAnnee=2004 or iAnnee=2000 or iAnnee=1996 or iAnnee=1992 or iAnnee=2016 or iAnnee=2020 then
         result:=29
        else
          result:=28;
      end;
    end;
    Après mon passage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function DernierJourDuMois(iAnnee,iMois : integer) : integer;
    begin
      result:=DayOf(EndOfMonth(iAnnee,iMois));
    end;

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 53
    Points : 118
    Points
    118
    Par défaut
    Salut à tous,
    Je voudrais pas lancer un troll, mais quel intérêt à massacrer le code de votre prédécesseur?
    Qui n'a jamais fait de bourde ????
    Et puis n'oublions pas que souvent les fonctions existantes aujourd'hui, ne l'étaient pas hier ou n'étaient pas optimisées ( c'est la raison des nouvelles versions des différents langages: Delphi1->Delphi8; Php3->Php5xx; Java->Java6 etc....)
    Allez soyons plus modestes ....

  20. #20
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    Citation Envoyé par salve34 Voir le message
    Et puis n'oublions pas que souvent les fonctions existantes aujourd'hui, ne l'étaient pas hier ou n'étaient pas optimisées ( c'est la raison des nouvelles versions des différents langages: Delphi1->Delphi8; Php3->Php5xx; Java->Java6 etc....)
    Allez soyons plus modestes ....
    Je craint que c'est pas le cas traité ici, le boss est à la traine et on peut le blâmer pour sa stupide ignorance

Discussions similaires

  1. Que faire lorsque le fichier est vide?
    Par bsangoku dans le forum Débuter
    Réponses: 6
    Dernier message: 18/01/2010, 13h46
  2. Que faire lorsqu'une surface est détruite ?
    Par gege2061 dans le forum SDL
    Réponses: 11
    Dernier message: 18/07/2007, 14h27
  3. Que faire lorsque la résolution d'écran est mauvaise ?
    Par gifffftane dans le forum Administration système
    Réponses: 2
    Dernier message: 13/06/2007, 22h30
  4. Que faire lorsque les performances d'une base chute ?
    Par Doctor Z dans le forum Oracle
    Réponses: 11
    Dernier message: 16/02/2005, 14h38

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