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

Le , par Katleen Erna, 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

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
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
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
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
1
2
3
4
5
// pull double spaces 
itemDesc = stringReplace(stringReplace( 
    stringReplace(itemDesc, "  ", " "), 
    "  ", " "), 
    "  ", " ");

Puis une autre...

Code : Sélectionner tout
1
2
3
4
// pull double spaces 
itemDesc = stringReplace( 
    stringReplace(itemDesc, "  ", " "), 
    "  ", " ");

Finalement, il atteint la version de départ...

Code : Sélectionner tout
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
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 ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Fallen_Leaf Fallen_Leaf - Nouveau membre du Club http://www.developpez.com
le 09/12/2009 à 17:46
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
Avatar de URIOS URIOS - Membre à l'essai http://www.developpez.com
le 09/12/2009 à 21:11
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
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
1
2
3
4
5
 
function DernierJourDuMois(iAnnee,iMois : integer) : integer; 
begin 
  result:=DayOf(EndOfMonth(iAnnee,iMois)); 
end;
Avatar de salve34 salve34 - Membre régulier http://www.developpez.com
le 10/12/2009 à 9:06
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 ....
Avatar de Jcpan Jcpan - Membre averti http://www.developpez.com
le 10/12/2009 à 9:11
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
Avatar de Lyche Lyche - Expert confirmé http://www.developpez.com
le 10/12/2009 à 9:21
Citation Envoyé par Michaël  Voir le message
le forum doit avoir quelque part un regexReplace qui marche

ou une succession de
Code : Sélectionner tout
replace(monChamp, '  ', ' ');
Avatar de el_slapper el_slapper - Expert éminent sénior http://www.developpez.com
le 10/12/2009 à 9:29
Citation Envoyé par URIOS  Voir le message
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
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
1
2
3
4
5
 
function DernierJourDuMois(iAnnee,iMois : integer) : integer; 
begin 
  result:=DayOf(EndOfMonth(iAnnee,iMois)); 
end;

vu ça en COBOL, mais dans des version tellement vieilles qu'à l'époque il n'y avait aucun autre moyen de faire(par contre, ça aurait du être centralisé, chaque appli se trimballait le même genre de calcul.....)
Avatar de ferber ferber - Membre éprouvé http://www.developpez.com
le 10/12/2009 à 9:29
Citation Envoyé par Jcpan  Voir le message
Je craint que c'est pas le cas traiter ici, le boss ici est à traine et on peut blâmer pour son ignorance stupide.


Attention à votre orthographe, certains pourraient être tentés de vous blâmer.

Concernant le fait de modifier le code d'un prédécesseur, c'est utile dans la mesure ou cette modification corrige définitivement le problème. Ce qui est le cas dans l'exemple principal. De ce fait, plusieurs futures modifications ne sont plus à faire.

Par contre, si le nouveau code retombe dans les mains du boss ou d'un collège graphiste... il risque de ne pas le comprendre, de le supprimer, de remettre l'ancien et d'avoir un ressentiment envers le développeur.

Un petit commentaire explicatif aurait peut-être été le bienvenu ?
Avatar de Jcpan Jcpan - Membre averti http://www.developpez.com
le 10/12/2009 à 9:37
Merci
Avatar de Fallen_Leaf Fallen_Leaf - Nouveau membre du Club http://www.developpez.com
le 10/12/2009 à 10:47
Citation Envoyé par URIOS  Voir le message
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 ?

Parfois, le fait de réinventer la roue peut avoir son utilité. Une telle fonction pourrait avoir l'avantage d'être efficace quelque soit de potentielles évolutions de l'environnement. Par contre, dans son cas, c'est raté parce que son code n'est pas pérenne au niveau de l'année, alors que déterminer une année bissextile se fait avec deux divisions.
Avatar de URIOS URIOS - Membre à l'essai http://www.developpez.com
le 10/12/2009 à 21:37
Citation Envoyé par Fallen_Leaf  Voir le message
Parfois, le fait de réinventer la roue peut avoir son utilité. Une telle fonction pourrait avoir l'avantage d'être efficace quelque soit de potentielles évolutions de l'environnement. Par contre, dans son cas, c'est raté parce que son code n'est pas pérenne au niveau de l'année, alors que déterminer une année bissextile se fait avec deux divisions.

Et bien écoute, la ou tu n'as pas tord, ç'est pour faciliter le changement de langage. Maintenant je préfère utiliser les fonctions du langage, car elles évoluent avec le temps et surtout, dans le cas présent, se servent directement de la gestion des dates et des heures Windows et on sait que lui, au moins, sera toujours a jour niveau règles de gestion du temps...

Enfin, je pense !
Avatar de skrink_skrink skrink_skrink - Nouveau membre du Club http://www.developpez.com
le 23/12/2009 à 17:33
Urios dit [Code :
function DernierJourDuMois(iAnnee,iMois : integer) : integer;
begin
result:=DayOf(EndOfMonth(iAnnee,iMois));
end;]

Question : ca donne quoi en Delphi 5?
Avec quel version le prédesseur a t'il créé cette fonction ?
Offres d'emploi IT
Développeur php symfony 2 - h/f
Easy Partner - Provence Alpes Côte d'Azur - Marseille (13000)
Recherche développeur WINDEV, WEBDEV, WINMOBILE
Business Bagages - Provence Alpes Côte d'Azur - Aix en provence
Développeur front JS h/f
EXTERNATIC - Pays de la Loire - Nantes (44000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil