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
    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é
    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
    Tiens, un article qui aurait pu terminer sur DailyWTF

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

    http://thedailywtf.com/Articles/A-Sp...y-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é
    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é
    -_- je suis en plein dedans sur en effet une trèès vielle appli -_-

  7. #7
    Inscrit
    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é
    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
    Membre à l'essai
    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
    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 ?
    Mon profil linked in

    Chez Adaptive, nous cherchons un dev senior python / Cloud sur Toulouse sud.
    Nous diffusons de la presse digitale à bord des avions avec les plus beaux partenaires !

    Envoyez moi un mp

  11. #11
    Nouveau membre du Club
    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é
    re
    excellent

  13. #13
    Membre confirmé
    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é
    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

  16. #16
    Membre confirmé
    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
    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
    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
    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é
    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

###raw>template_hook.ano_emploi###