# Le club des professionnels en informatique > Actualits >  Le pire bout de code que vous ayez vu

## Gordon Fowler

*Le pire bout de code que vous ayez jamais vu*
*Qui l'a fait ? Pourquoi ? Pourquoi tait-il si horrible ?*


Il vous a fait rire. Ou hurler. Ou les deux. 
Vous n'en avez pas cru vos yeux et pourtant il tait l. Et bien l. Un humain avait crit a. 
Il est rest dans votre mmoire comme le pire bout de code que vous ayez jamais vu.

Quelque fois ce "pire code" n'est pas trop mchant. Il relve juste du non sens :



```

```


Ou comment calculer simplement la longueur du tableau  partir de la longueur ("a.length") qu'on a ds le dpart...

D'autres sont juste parfaitement inutiles :



```

```


En Java tout est Object. Aucun besoin d'effectuer un cast donc.

Mais ce code peut aussi aller jusqu' vous hanter tant il est horrible. A se demander ce qui a bien pu passer par la tte du "crateur" de ce "monstre", voire si celui-ci sait dans quel langage il code :



```

```


InputStream est un flux vers une ressource. Pour le fermer, par exemple, il faut invoquer sa mthode close(), mais dans ce cas, le "crateur" s'est content de le mettre  null. Les dveloppeurs Java seront d'accord pour admettre l'inutilit crasse de ce bout de code : les variables sont passes par copie de la valeur, donc ce ne sera "null" que dans la mthode.

Allez une dernire pour la route (pardon pour les yeux) :



```

```


Tout cela est faisable en une seule et simple ligne de Java (avec Integer.parseInt(String value) ).
Mais le pire c'est que, en plus, la mthode de cet autre "crateur fou" ne fonctionne pas du tout. En Java, on ne peut pas faire value == "1" pour comparer sa valeur (il faut faire "1".equals(value) ).



Invention de syntaxe, non-sens, aberration dans les raisonnements, *vous avez dj d croiser ces codes cauchemardesques*.

Que vous soyez dveloppeur JavaScript, PHP, Ruby, C, C++, C#, Assembleur, Pascal, Visual Basic, Perl, Python ou autres (dsol de ne pouvoir tous les citer), fates nous part de votre exprience de codeur : *quel est le pire du pire que vous avez d lire ?* 

Une petite explication succincte pour que les non-spcialistes puissent galement partager votre mois (qui je n'en doute pas est encore palpable aujourd'hui) est galement la bienvenue.

Quant  tous ces honteux bouts de Java reproduits ici, ils m'ont t communiqus par Baptiste Witch (responsable rubrique Java) qui se fera un plaisir de nous en livrer d'autres. Un grand merci  lui.

Mais... je suis sr que vous avez encore bien pire  raconter.

Pas vrai ?


Lire aussi :

 ::fleche::  Les rubriques Java, Dveloppement Web et Langages (actus, forums, tutos) de Dveloppez.com

 ::fleche::  Et pour se dtendre aprs une journe bien charge, la rubrique Humour Informatique

----------


## crazyday

J'en ai vu un pas mal en php, fait par le responsable dveloppement de ma bote :



```

```

Ce jour-l je me suis dis que finalement je n'tais pas le plus mauvais ...

----------


## Invit

Tout frais : en C++, sous un #ifdef _DEBUG, un if quelconque juste pour choper un point d'arrt. Le gars s'tonne que le programme ne s'arrte pas... en Release-Debug.

----------


## BainE

Deux petits bouts de codes qui nous ont fait bien marr devant la machine a caf, en C++



```

```

deja faire un switch sur un booleen ca nous a surpris, mais quand on a vu le default  ::mrgreen:: 

et le second, un parcours de liste de la STL


```

```

voila voila

p.s. : heu faites pas trop gaffe a la syntaxe, ca fait un moment que j ai plus fait de C++ et je me suis pas amus a compiler ces perles  ::D:

----------


## Acropole

Dans le SDK de physX :



```

```

Ca sert  rien, c'est pas trs pro, et a vient de types  la pointe de la technologie, donc a surprend.
Ou alors c'est tellement gnial que ca me dpasse.

----------


## clemphenix

Un code javascript bien crade sur un template d'une page produit d'une boutique sous magento (php).



```

```


Il rend en partie statique la boutique (on doit manuellement ajouter un case  chaque cration de nouvelles catgories).
Il dpend du nom de la catgorie : lors d'une traduction ou d'un changement par le client, tout foire.
Il y a surement d'autres choses  critiquer sur ce code mais je vais en rester l ^^.

----------


## DrHelmut

en java, fait par un 'expert' sur une appli que j'ai dbogu il y a deux ans.

Tellement norme que je m'en rappelle encore, a donnait  peu prs a :



```

```

----------


## Shaidak

En Java avec Struts, un getter void ... tellement idiot qu'on a perdu 15min pour savoir d'o venait le problme  ::aie::

----------


## Invit

Si vous voulez vous marrez avec ce genre de chose : 

http://thedailywtf.com/Series/CodeSOD.aspx

C'est parfois a mourrir.



```

```


Donc a cre ces fonctions car a une epoque ou les dev ne connaissai pas le booleen de .net(migration depuis asp), ils utilisaient 1 ou 0 et parfois "YES" ou "NO" ....  ::):  Donc il reste du code avec ce genre de chose ^^

----------


## threshold

pour ma part, durant mon stage j'ai d dbugger une petite appli qui avait cote plus de 50 000   la socit. Vu la "qualit" du code, je croit que c'est bien plus en ralit...mais chut le boss n'aime pas admettre ses conneries.



```

```

sans oublier les Exceptions avales, les erreurs dans le formules mathematiques etc...
Edit: Je prcise juste que l'application en question est une webapp Java et que la quasi totalit du code mtier tait crit dans les servlets ainsi que le code HTML. Cette prcision fait suite  une remarque que j'ai reu par MP:




> J'ai travaill dans une boite ou il fallait mettre un if pour que le temps machine soit identique lors de l'excution  une autre boucle, et le code machine gnr *devait tre aussi long*. a ne veut absolument pas dire qu'il est mauvais. Par contre, votre message montre surtout clairement que vous n'avez aucune exprience en dveloppement, ou pas assez pour viter de critiquer ce genre de chose. A la limite, critiquer le fait qu'il n'y ait aucun commentaire expliquant cette technique *ok*.


Si quelqu'un peut m'expliquer le lien avec mon exemple de code je suis preneur...car dans mon exemple je parle d'un code qui excut dans le if, ou dans le else revient au mme code sans un if...si besoin est de mettre un if inutile, il aurait t plus lgant de mettre :


```

```

----------


## dista

Je dis que le code suivant (qui peut etre tester dans plusieurs langages) ne fait rien, on me dit que la reponse est superficielle



```

```

Quelle serait la vrai reponse(peut-etre celle, profonde)

----------


## Invit

> sans oublier les Exceptions avales, les erreurs dans le formules mathematiques etc...


En meme temp ce que tu mets dans le " Exceptions avales, les erreurs dans le formules mathematiques,etc" tu en fera tout les jours , aucun dveloppeur ne fait pas d'erreur. Si tu pense qu'un dveloppeur est une merde des qu'il fait une erreur, mme grossire ben bonne chance dans ton bureau  ::D:  

Ce qui est amusant ce sont les erreurs plus que grossire, les truc limite qui sont des correctifs de bug par dessus des correctif de bug par dessus d'autre patch, du style if(5<8). Et a peut etre pondu par n'importe que dev, tout dpend de sa fatigue / degr d'alcoolmie / cafeine / vacance etc ...

"It's not a bug , it's a feature"

----------


## tamiel

En php :



```

```

J'ai saut au plafond et je fais pas partie de l'quipe de dev web ... ::aie::

----------


## monsieurben

J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.

J'ai eu droit  celui-ci, plutt pas mal : 

Dans une page de traitement d'un formulaire : 



```

```

Et dans un fichier inclus, ladite fonction : 



```

```

La fonction ne servait strictement  rien, mais elle tait consciencieusement applique  tous les champs de tous les formulaires (plus de 500 champs)... 

J'en ai plein d'autres comme a : 

- Le CMS utilisait adodb pour accder  la BDD. Par dessus, une classe d'abstraction stocke dans un Zend_Registry, et par dessus un ensemble de fonctions  style dbQuery(), dbResult() pour faire abstraction de la classe d'abstraction. 


L'agence est une trs grosse webAgency parisienne.

----------


## nfrancois

Comment faire une pause d'une seconde en java ?


```

```

J'y trouve un cot artistique.
Je m'tais demand l'interet du i++ suivi de i--; peut tre avait il peur d'un dpassement capacit du int  ::mouarf::

----------


## wizad

> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...


En thorie a ne doit mme pas fonctionner : les variables entre guillemets simple ne sont pas interprt...

----------


## ke2007

> Dans le SDK de physX :
> 
> 
> 
> ```
> 
> ```
> 
> Ca sert  rien, c'est pas trs pro, et a vient de types  la pointe de la technologie, donc a surprend.
> Ou alors c'est tellement gnial que ca me dpasse.


La mme dans le code de font2ftt  ::D:

----------


## LordBob

> Dans le SDK de physX :
> 
> ```
> 
> ```


Je rigolais toujours en voyant ce genre de code jusqu' y  quelques mois o j'ai repris une application que j'ai dvelopp y  presque 1,5 ans maintenant et ou j'ai crit presque la mme chose, mais en pire...



```

```

Je me demande bien ce qui  pu me traverser l'esprit quand j'ai crit a! J'ai mme honte de le poster ce soir...
 ::oops::

----------


## cysboy

Une fois j'ai tout de mme vu que mon voisin de bureau cherchait  faire passer le contenu d'une table contenant, au bas mot, 25 colonnes et environ 1 000 000 de lignes en paramtres GET d'une page PHP...  :8O: 

Le tout, pour pouvoir trier et afficher le contenu de la dite table sur une page...

Je l'ai arrter avant qu'il ne teste.

----------


## LeGritche

Difficile de trouver le pire tant j'en vois tous les jours ... 

je me rappelle d'une action struts avec une mthode de plus de 5000+ lignes en un seul bloc, non comment, mal indent, avec des noms de variables incomprhensibles et les attributs des objets rutiliss pour faire plein de choses ... Imaginez qu'en plus celui qui a dveloppez a tait un peu "artiste" et l ... 

Et imaginez que dans ce code, vous savez qu'il y a un bug et c'est  vous qu'incombe le privilge de le corriger... a doit certainement rappeler des souvenir  des gens ...

----------


## Auteur

Quand j'ai repris un projet sous C++ builder j'ai dcouvert dans chaque fonction du projet des dclarations de la forme :


```

```

 ::koi:: 


Et aprs avoir longuement cherch (le projet possdait plus d'une centaine de fichiers) j'ai dcouvert dans un fichier C++ bien cach ceci :


```

```

Bref, chaque type C++Builder avait t francis  ::aie::

----------


## gibet_b

Alors moi le pire morceau de code que j'ai vu a t crit par une amie lorsque j'tais en BTS IG. C'tait du VB.



```

```

Et le compilateur VB laissait passer a !!! En Delphi, il est pas d'accord... Cette amie me demandait de l'aide parce que son programme plantait, quand j'ai vu a, je lui ai dit : "bah tu as trouv le moyen pas forcment vident de faire une boucle for infinie, donc tu vires a et aprs je t'aide  trouver ton erreur". Elle tait un peu vexe  ::mouarf::

----------


## kev42100

J'ai vu aussi le  if(true) dans Mitaka, un logiciel astronomique de 3D temps rel ............

----------


## Invit

> ```
> 
> ```


Ce code l peut apparaitre assez naturellement dans deux situations... 

1- en prvision d'un second cas, pour en marquer la place... (normalement il faudrait mettre un commentaire, quand mme), ou pour pouvoir facilement liminer la boucle ( if(0) )
2- aprs la suppression d'un else, un jour de presse, pour viter des conflits de noms avec des variables locales au if()...

Ce n'est pas gracieux gracieux, mais comme ca disparait  la compilation, et que ca ne pose aucun problme de comprhension...

Francois

----------


## xtope

> public void close(InputStream stream){
>     stream = null;
> }
> 			
> 		
> 
> InputStream est un flux vers une ressource. Pour le fermer, par exemple, il faut invoyer sa mthode close(), mais dans ce cas, le "crateur" s'est content de le mettre  null. Les dveloppeurs Java seront d'accord pour admettre l'inutilit crasse de ce bout de code : les variables sont passes par copie de la valeur, donc ce ne sera "null" que dans la mthode.



Je dis peut-tre une btise (faut pas m'en vouloir, parfois je suis crev aprs le boulot..) mais ce bout de code m'a l'air tout a fait fonctionnel.
En Java les paramtres ne sont passs par valeur que pour les types primitifs, pour les objets c'est par rfrence.
Ici donc c'est bien par rfrence que c'est pass.

----------


## Mat.M

> Et le compilateur VB laissait passer a !!! En Delphi, il est pas d'accord...


je doute que Delphi refuse de compiler..mais si tu le dis alors....
Le code suivant 


```

```

est accept par VB et en principe serait accepte dans n'importe quel langage par n'importe quel compilateur..
en principe le compilateur ne fait pas d'analyse prdictive donc ce qui est correct smantiquement parlant passe parfaitement  la compilation
Les compilateurs ne se proccupent pas de savoir ce qui va se passer  la compilation et si tu dis qu'en Delphi cela passe je suis un peu sceptique.
Dans le mme ordre d'ide en C++


```

```

A la compilation cela passe sans problme ,  l'excution ..plantage

----------


## Invit

Mon passage prfr, c'est de l'AS3, mais c'est faisable dans plein d'autres langages...



```

```

Pour ceux qui ont lu un peu vite, je rsume...

On a une classe SelectorItemVO, qui dfinit les lments (Item) d'un slecteur (Selector) (le VO  la fin, c'est juste parce que ca fait plus pro...)

Les instances de cette classe ont pour vocation d'tre intgres dans des conteneurs, appels SelectorItemsVO (notez le "s" aprs SelectorItem, c'est frapp au coin du bon sens : une collection d'item, c'est des items...)

Comme chaque lment doit connaitre le nom de son conteneur, il nous faut une variable membre, et la logique en impose le nom : selectorItemsVO (s minuscule au dbut, c'est la rgle en AS3 comme dans d'autres langages)

Et bon, forcment, ce conteneur, il va falloir l'initialiser dans le constructeur, en lui passant une rfrence, appele selectorItemsVO (comme ca on sait ce que c'est).

Ca part d'un bon sentiment: une convention de nommage forte, respecte scrupuleusement...

Francois

----------


## Furikawari

> Je dis peut-tre une btise (faut pas m'en vouloir, parfois je suis crev aprs le boulot..) mais ce bout de code m'a l'air tout a fait fonctionnel.
> En Java les paramtres ne sont passs par valeur que pour les types primitifs, pour les objets c'est par rfrence.
> Ici donc c'est bien par rfrence que c'est pass.


Non, en Java tout est par valeur... Tu passes une copie de la rfrence d'un objet, ce qui te permet de modifier les champs de cet objet mais en aucun cas sa rfrence. Et donc la mise  null ici est effectivement limite au scope de la fonction.

----------


## pip1000

Un singleton horrible!!!



```

```

Le premier qui parle fige le context, les suivant allez vous faire voir!
Je m'explique: 



```

```


Les singletons je les prfres comme ca:



```

```

----------


## ndrouard

Vu  plusieurs reprises, notamment une fois dans un template de magento :



```

```

Ca va pas faciliter la maintenance  ::calim2:: 


Mais le pire que j'ai vu, c'est quand mme un site qu'une grosse agence m'a refil pour le dbuguer et le terminer, o chaque page tait un imbroglio de PHP (avec des if() dont on ne trouvait plus la fin du bloc), SQL (avec des requtes kilomtriques de 3 ou 4 UNION), HTML ( base de <table>imbriqus), JS (gnr par dreamweaver), et un peu de CSS  droite  gauche, histoire de ...

----------


## sleepy2002

La notion de pire est  relativiser, c'est  l'apprciation de chacun et de son niveau d'exprience dans la programmation. 

On ne peut pas blmer un gamin de 14 ans crire (ou copier/coller) du PHP pour son site internet ou bien un "stagiaire" qui dbute en java ou autre langage. L'important est de les guider vers les bonnes pratiques.

Selon moi, en premier lieu, le pire code est celui qui ne correspond pas au but souhait (non conformit). 
En second lieu, vient la manire d'crire le besoin qui ne respecte pas les principes de base de l'algorithme, de la philosophie du langage et ses bonnes pratiques.

N'oublions pas que c'est en forgeant qu'on devient forgeron  :;):

----------


## Folken Laneck

Je ne peux pas justifier de nombreuses annes d'exprience, mais cela ne m'a pas empch d'en voir de belles.
Celle dont je me souviendrais longtemps, c'est un site dvelopp en PHP dans lequel sur  peine dix lignes on trouvait l'quivalent de ceci :



```

```

Pour l'injection SQL, je vous laisse choisir la mthode que vous prfrez  ::D:

----------


## Alain Defrance

Bonjour,




> Tout cela est faisable en une seule et simple ligne de Java (avec Integer.parseInt(String value) ).
> Mais le pire c'est que, en plus, la mthode de cette autre "crateur fou" ne fonctionne pas du tout. En Java, on ne peut pas faire value == "1" pour comparer sa valeur (il faut faire "1".equals(value) ).


Pas tout  fait. Ce qui est important je pense (et trs intrssant) c'est qu'un dbutant en viendra  crire ce genre de code mais de manire itrative. Il va se retrouver confront  un problme puis en rsoudre une partie etc jusqu'a avoir un code qui marche mais ... un peu dgeulasse. Avec le switch on voit clairement que le dbutant  perdu son objectif principal, et a trs certainement t confront au fait qu'en java un string ne passe pas dans un switch (bien videment mme avec un switch ce code reste inutil mais au final ce qui est dgeulasse c'est pas de recoder la roue mais de la recoder mal). Quand on est pas dans un context d'entreprise, recoder la roue est d'une richesse infinie. Pour contourner le problme des strings avec les switch je conseil de lire ce billet.

Par contre c'est faux de dire que == ne marche pas il a juste un comportement un peu spcial. Il ne compare pas les valeurs mais les adresses en mmoire. Le fait est que dans ce cas prci pour peu que l'on passe un litral  la mthode convert, le programme marchera normalement. En effet la JVM implmente le pattern flyweight qui construit un parc de donnes pour les littraux. De ce fait les littraux sont partags dans tous le programme. Puisqu'ils sont partags alors quand on fait "1" == "1", alors on compare les deux adresses, qui pointent vers la mme instance en mmoire, et qui du coup est gal. En fait on fait un test qui ne fait pas ce qu'on veut mais qui au final donnera le bon rsultat. Pour tre certain que le code marche il faudrait non pas utiliser value mais value.intern(). Pour plus de dtails pous pouvez lire ce billet.

Concernant le dbat je ne participerais pas au "cassage de noob". On y est tous pass, et ca sert  rien de les pointer du doigt. Je prfre voir quelqu'un qui cris un mauvais code que quelqu'un qui ne code pas.

----------


## Alain Defrance

Bonjour,




> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...


C'est une facon de cacher l'implmentation. Le fait de crer cette indirection n'est pas une mauvaise pratique au contraire. Ici on voit que ca ne sert  rien, mais ca vite de refactorer ton code une fois que tu auras des modifitations  faire au moment de la rcupration de tes champs post. A ce moment l tu va finir par faire pareil que lui pour factoriser ton code, sauf que tu l'auras pas prvu  l'avance. L au moins c'est tout prt, lui l'a prvu ...

----------


## Invit

J'en ai vu seulement quelques-uns du fait de ma courte exprience. Le plus marquant, il y a 2 ans, je devais reprendre une application dbute un an plus tt par un autre stagiaire, dveloppe en C++ .net. Application desktop adosse a une base de donnes, gestion de rapports, pas mal de lectures et mises a jour de la base. Le probleme c'est qu'a chaque requete faite a la base de donnes, mon prdcesseur avait simplement copie-colle les ~25 lignes de connexion a la base. C'est-a-dire qu'a chaque fois qu'il fallait rcuprer un champ de la base de donnes pour l'afficher, hop, on collait ce bout de code. Idem quand on le mettait a jour. Au final, je me retrouvais avec des fichiers de plusieurs milliers de lignes, dont les 25% taient des lignes identiques de connexion a la base  ::calim2::  ::calim2::  ::calim2::

----------


## metagoto

```
$ cat file | wc -l
```

 ::ccool::

----------


## argonath

> Alors moi le pire morceau de code que j'ai vu a t crit par une amie lorsque j'tais en BTS IG. C'tait du VB.
> 
> 
> 
> ```
> 
> ```


une faon esthtique de maintenir la boucle tant qu'on a pas esquiv 10 fois le if ?

----------


## Lung

> je doute que Delphi refuse de compiler..mais si tu le dis alors....
> Le code suivant 
> 
> 
> ```
> 
> ```
> 
> est accept par VB et en principe serait accepte dans n'importe quel langage par n'importe quel compilateur..
> en principe le compilateur ne fait pas d'analyse prdictive donc ce qui est correct smantiquement parlant passe parfaitement  la compilation


Le compilateur Delphi interdit la modification de la variable utilise par une boucle *for*.

----------


## meddle

Vu dans un programme en production en Java (et pas qu'une fois) :



```

```

Rponse du dveloppeur : j'ai lu un article sur le Web qui dit que c'est plus rapide de faire comme cela  ::D: 

Du mme dveloppeur, vu dans un javadoc :

/**
 * TODO : faire que a marche
 */

Vridique !

Laurent

----------


## Eikichi

Un petit bout de code Java vu il y a quelques temps...



```

```

Cration d'un itrateur  chaque tour de boucle, pourquoi pas... le rsultat est juste un peu monotone  ::mouarf::

----------


## Louis Griffont

Un truc une fois :



```

```

La variable tait de type Boolen ! Le pire tait qu'il y avait du code dans le _Else case_ !  ::roll::

----------


## el_slapper

> (.../...)
> N'oublions pas que c'est en forgeant qu'on devient forgeron


Exact. Le pire que j'ai vu a t fait par un informaticien, disons, improvis. C'est d'ailleurs le premier code professionnel sur lequel je suis tomb. J'ai vu mieux depuis, cel va sans dire.

contexte : une quipe d'homologation contient dans ses rangs une superbte en programmation qui fait plein de macros VB pour Excel qui facilitent grandement la vie de tout le monde. Puis la superbte se barre en mauvais termes, en effaant une partie de ses codes. Un homologateur, jamais form pour programmer, essaye de reprendre..... Il doit faire un traitement sur des lignes de tableau, mais c'est pas le mme suivant que la valeur est alpha ou numrique.

et a donne un truc du genre :



```

```

les traitements tant faits dans leur intgralit  chaque fois.....et tant toujours identiques. Mais a marchait! Quand on m'a demand d'ajouter quelques lignes, je me suis permis d'industrialiser tout a.....

Mais il est effectivement difficile de jeter la pierre  quelqu'un de non form, lch dans un contexte ou l'aide en ligne de VB pour Excel avait t dsactive, ou internet tait inaccessible, bref, ou l'auto-formation tait des plus dlicates.



*EDIT*

J'oubliais une autre horreur, celle-ci datant du temps ou le Cobol ne permettait pas de programmation structure, et ou seul le GO TO permettait de faire des embranchements. Ca donnait un truc du genre :



```

```

En bref, du pur code spaghetti, mais  l'poque ils n'avaient pas le choix. J'ai douill pour faire le reverse engineering.....

----------


## vintz72

> Je rigolais toujours en voyant ce genre de code jusqu' y  quelques mois o j'ai repris une application que j'ai dvelopp y  presque 1,5 ans maintenant et ou j'ai crit presque la mme chose, mais en pire...
> 
> 
> 
> ```
> 
> ```
> 
> Je me demande bien ce qui  pu me traverser l'esprit quand j'ai crit a! J'ai mme honte de le poster ce soir...


Ce genre de code s'explique avec les langages qui ne sont pas pourvu de directives de compilation. Par exemple en C, on fait un #if 0 #endif autour d'un bloc de code pour le dsactiver (temporairement). En Java, on fait un "if (0)"... Le truc, c'est quand on le ractive pour de bon, il faut faire le mnage plutt que laisser le "if (1)"...

----------


## Alain Defrance

> En Java, on fait un "if (0)"...


Compilation fail.

----------


## adiGuba

> Ce genre de code s'explique avec les langages qui ne sont pas pourvu de directives de compilation. Par exemple en C, on fait un #if 0 #endif autour d'un bloc de code pour le dsactiver (temporairement). En Java, on fait un "if (0)"... Le truc, c'est quand on le ractive pour de bon, il faut faire le mnage plutt que laisser le "if (1)"...


En Java ce serait plutt des *if(true)* ... mais je confirme que cela peut tre trs pratique pour activer/dsactiver rapidement un petit bout de code  :;): 

De plus cela n'impacte pas le code gnr :
Le if(false) sera compltement supprim du code gnr.La condition du if(true) sera supprim (inutile de l'valuer), mais son contenu sera bel et bien gnr dans le code (comme s'il n'y avait jamais eu de if)







Sinon, une chose qui me titille souvent en Java, mme si ce n'est pas vraiment une erreur grave : le fait de vouloir "initialiser" les objets avant de les utiliser. Par exemple :


```

```



a++

----------


## pseudocode

Le clbre convertisseur de chemin windows->unix en Java :



```

```


Dommage que les chaines ne soient pas mutables en Java.   ::aie::

----------


## kpouer

> J'ai vu aussi le  if(true) dans Mitaka, un logiciel astronomique de 3D temps rel ............


Ca serait pas tout simplement un gnrateur de code automatique qui aurait fait ca, comme pour physx ?
Par exemple le gnrateur de parseur JavaCC fait parfois des if (true).
C'est moche mais c'est limin par les compilateurs heureusement




> Je dis peut-tre une btise (faut pas m'en vouloir, parfois je suis crev aprs le boulot..) mais ce bout de code m'a l'air tout a fait fonctionnel.
> En Java les paramtres ne sont passs par valeur que pour les types primitifs, pour les objets c'est par rfrence.
> Ici donc c'est bien par rfrence que c'est pass.


Non, c'est une copie de la rfrence originale qui est passe, donc ca pointe bien sur le mme objet mais le passer  null ne va pas fermer le stream, et surtout l'appelant de cette mthode aura toujours sa rfrence vers le stream en question

Sinon le truc le plus moche que j'ai vu c'tait fait en php, le type devait a partir d'un serveur php rcuprer des fichiers sur un serveur linux via ftp.
Mais n'y arrivant pas, il a finalement dcid d'installer Samba sur le serveur linux et de mettre dans le code php son login/pass du domaine Windows de l'entreprise (sachant que bien sur le produit ne doit pas tourner chez nous mais chez les clients auxquels on vendra le soft  ::roll::  )

----------


## getz85

> Quelquefois ce "pire code" n'est pas trop mchant. Il relve juste du non sens :
> 
> 
> 
> ```
> 
> ```
> 
> Ou comment calculer simplement la longueur du tableau  partir de la longueur ("a.length") qu'on a ds le dpart...


C'est pas a qui m'a choqu dans ton code au dbut, c'est plutt le i++  ::mouarf:: 

 => "i undefined variable"  ::P:

----------


## Jonas0122

> Bonjour,
> 
> 
> 
> C'est une facon de cacher l'implmentation. Le fait de crer cette indirection n'est pas une mauvaise pratique au contraire. Ici on voit que ca ne sert  rien, mais ca vite de refactorer ton code une fois que tu auras des modifitations  faire au moment de la rcupration de tes champs post. A ce moment l tu va finir par faire pareil que lui pour factoriser ton code, sauf que tu l'auras pas prvu  l'avance. L au moins c'est tout prt, lui l'a prvu ...


Oui et non, on peux aussi traiter tous les POST avec un simple foreach sur cette variable mais bon, c'est comme dans tous les langages, ya 10 mille faons de faire..

Je pense juste que sans connaitre la totalit du programme on peux pas dire que c'est "un bout de code horrible", et aprs chacun sa faon de programmer, perso ca m'arrive de faire un extrait de la var $_POST pour obtenir des $p_nomduchamp (c'est toujours bon de gratter 4/5 caractres, quand ta 50 champs  trait ca fais la diff)

----------


## ThomasR

On voit souvent des codes du genre :



```

```

Alors que ceci quivaut  :



```

```

----------


## jefcrac

en 25 ans j'ai vu pas mal de choses mal crites mais j'en ai crit aussi pas mal


```

```



```

```

avec en plus 
modifier un program
compiler le program
a.out modification pas prise en compte
plus de 2 heures avant de comprendre l'utilit du PATH j'en suis pas fier

et le meilleur 
faire un code rcursif pour crire un fonction dos de suppressions des fichiers
compiler 
tester 
et me retrouver avec un disque vide  ::cry:: 

donc quand je vois des erreurs de code je ne jette pas la pierre (pierre) mais j'essaye d'expliquer l'incongruit du code.

----------


## Heimdal

Une chose me revient immdiatement  l'esprit.
Dans les mthodes de diffrentes classes, j'ai pu voir le blindage ultime:


```

```

Enfin bon, on a tous fait  un moment ou un autre des choses pourries... OSEF

----------


## Mac LAK

> Ca serait pas tout simplement un gnrateur de code automatique qui aurait fait ca, comme pour physx ?
> Par exemple le gnrateur de parseur JavaCC fait parfois des if (true).
> C'est moche mais c'est limin par les compilateurs heureusement


Yep, j'ai dj vu a aussi dans du code gnr  partir de templates, o on va laisser un test toujours faux / vrai aprs (ds)activation de certains modules pour viter un traitement du fichier un peu trop lourd  faire (= rechercher la fin du bloc notamment).

C'est pas trs joli en effet, mais si cela dcoule rellement d'une gnration automatique de code, c'est moins nuisible. Il faut alors plutt se poser la question de savoir pourquoi ils ne font pas travailler sur le template d'origine et/ou pourquoi ils modifient manuellement du code gnr...

Si par contre c'est du code 100% manuel, alors l, oui, c'est crade au possible... Sauf s'il y a du code mort laiss exprs pour la trace "historique" des volutions ou du debug : tous les langages ne possdent pas non plus de prprocesseur.

----------


## Jidefix

Ben personnellement j'ai honte de le dire mais le pire bout de code que j'aie jamais vu ben... je crois que c'est moi qui l'ai fait  ::D: 

Je l'ai remplac depuis mais en gros c'tait en java, je voulais reprsenter des donnes compliques, tries etc. et les envoyer  une jsp pour les reprsenter en html. Pour une raison qui m'chappe encore aujourd'hui crer une classe rpondant  mon besoin ne m'a mme pas effleur l'esprit...
Ca a fini en imbrication de HashMap TreeMap, HashSet, et TreeSet (oui oui les quatres),  environ 8 niveaux.
Ca marchait hein... enfin tant qu'on poussait pas trop les donnes  reprsenter :S

----------


## yodaime

Moi j'ai vu cette dclaration de variable :



```

```

Vridique !

----------


## pjv

Dans cet exemple Java, l'objet "service" est une instance du contrat d'interface d'un web service :




> Int ExitCode = service.getUneMethodeDeMonWebService(param1, param2, etc.).getExitCode();
> List<Class> listeObjets = service.getUneMethodeDeMonWebService(param1, param2, etc.).getListeObjets();
> String attribut1 = service.getUneMethodeDeMonWebService(param1, param2, etc.).getAttribut1(); 
> Long attribut2 = service.getUneMethodeDeMonWebService(param1, param2, etc.).getAttribut2();
> MaClasse attribut3 = service.getUneMethodeDeMonWebService(param1, param2, etc.).getAttribut3();
> ...


C'est performant !

----------


## Tofalu

A l'instant :



```

```

Aucune dclarationLa chane "Me.ABG" & X & ".value" est destine  tre comprise par magie  l'exectution comme la proprit d'un objet et non une chaineOn incrmente A et on teste X pour sortir de la boucle

 ::calim2::

----------


## phantomass

```

```

Dj une une classe de constante pour rfrencer des nombres entiers, c'est trs difficile d'y trouver un intrt.
Mais le pire est  venir . C'est l'usage de ces constantes dans le programme.


```

```

On remarquera l'usage mixte de constante et de nombre pour les indices du tableau.
Et ca continue de plus belle. 

```
monBean.setChampFoncctionnel("1".equals(valeur.substring(2, NombresConstantes.CONST_3)));
```

Dans une mme instruction, 3 manires de reprsenter un nombre.

Que s'est il pass dans la tte du dveloppeur ?

----------


## Npomucne

Il y a quelques temps, j'ai t appel pour modifier un programme en VBA (une application Access)
Manifestement, le mec qui avait cod voulait conomiser sur les lignes de code ;
et plutt que d'aller  la ligne pour chaque instruction, j'ai eu droit  :


```
Dim t As Date: Debug.Print "dbut": t = DateAdd("s", 10, Now()): While t > Now(): Wend: Debug.Print "fini"
```

Tous les modules taient crits comme a (la peur des espaces blancs sans doute  :8O: ). 
Le client tait tonn que je mette deux jours  dboguer un truc tout con  ::mouarf::

----------


## bubulemaster

En java :



```

```

On aurait pu sortir la dclaration de la variable sb de la boucle.
Et l'instancier deux fois de suite  ::?: 

Le classic :


```

```

Ca m'tonne pas qu'on dise que Java est lent quand on voit a  ::lol:: 

Ah, prcision, la personne tait programmeuse Java depuis 5 ans  ::calim2::

----------


## Nee

Moi j'ai vu quelque chose comme a en PHP, il fallait y penser  ::roll::  : 


```

```

----------


## Furikawari

> En java :
> 
> 
> 
> ```
> 
> ```
> 
> On aurait pu sortir la dclaration de la variable sb de la boucle.
> ...


Bof, le compilo optimise tout a.

----------


## Yacodo

Bonjour,

Des perles, ont n'en vois souvent, souvent marrantes.

En voila une pour moi :
Lors d'un stage(en seconde) dans le rseau informatique d'une mairie(je ne venais pas pour du PHP), lorsque mon maitre de stage a vu que je connaissais le PHP il  sauter sur l'occasion pour me faire dbugger une application rseau de gestion.

Le but du code tait de slectionner certaines personnes dans une liste grce  un statut... 
La boite  mis la cl sous la porte(ce que je comprends maintenant), et ne pouvait donc pas assurer la maintenance, et donc l'application ne slectionnait pas en fonction du critre.
Je vous laisse voir :


```

```

C'est assez marrant, ce que l'on peut faire pour ce compliquer la vie.

Yacodo

----------


## hermes1983

> Par contre c'est faux de dire que == ne marche pas il a juste un comportement un peu spcial. Il ne compare pas les valeurs mais les adresses en mmoire. Le fait est que dans ce cas prci pour peu que l'on passe un litral  la mthode convert, le programme marchera normalement. En effet la JVM implmente le pattern flyweight qui construit un parc de donnes pour les littraux. De ce fait les littraux sont partags dans tous le programme. Puisqu'ils sont partags alors quand on fait "1" == "1", alors on compare les deux adresses, qui pointent vers la mme instance en mmoire, et qui du coup est gal. En fait on fait un test qui ne fait pas ce qu'on veut mais qui au final donnera le bon rsultat. Pour tre certain que le code marche il faudrait non pas utiliser value mais value.intern(). Pour plus de dtails pous pouvez lire ce billet.


J'avais crit a une fois sans faire gaffe en Java, et je m'en suis rendu compte dans le debugger. Maintenant, voil pourquoi je me permets de faire un commentaire : le compilateur (Java 6) avait remplac le == par un appel  equals sans me le dire, et le watch du debugger que j'avais fait par copier/coller n'avait pas fait cette substitution. Il m'en a fallu du temps pour comprendre a...

----------


## bubulemaster

> Bof, le compilo optimise tout a.


Oui mais bon, a veut dire que la personne n'a pas vraiment compris le Java et mme la programmation.
Pour qu'un compilateur optimise, il faut qu'il y ait des programmeurs qui est compris la programmation et la programmation  la one again.

Pour me rattrap je me suis rappel d'un code comme a :


```

```

Que des variables  1 lettre, sympa a ! Mais bon, c'est vrai que la personne qui avait fait ce code tait un artiste  ::lol::

----------


## Faiche

```

```

----------


## hermes1983

Alors moi, je pense que le truc le plus incroyable a t de chercher un jour sous quelle condition je recevais la valeur "E000:R" via un socket TCP. Je suis tomb sur le code suivant :


```

```

 ce jour, je ne sais toujours pas quelle est la condition relle, mme si j'ai rsolu mon problme par un autre moyen  :;):

----------


## Pill_S

> Que des variables  1 lettre, sympa a ! Mais bon, c'est vrai que la personne qui avait fait ce code tait un artiste


Bof, moi a me choque pas, du moment que ce sont des variables locales... c'est mme plus clair je trouve...

Qui n'a jamais programm une boucle for avec un compteur "i"?

 :;):

----------


## fnobb

Une que j'aime bien  ::mouarf:: 


```

```

----------


## gjourdan

Dans mon ancienne quipe, il y avait un morceau de code qui nous a fait marr pendant longtemps et qui me fait marrer encore en y pensant  ::lol:: 

On bossait sur des interfaces graphiques SWING et il y avait une correction de bug qui consistait  griser un champ. La correction faite par le dveloppeur, a marchait correctement. Seulement, on a t intrigu par le gris qui tait lgrement diffrent que les autres champs. On est all voir dans le code et la fou rire gnral, a donn a :



```

```

----------


## Khleo

```

```

C'tait le seul moyen que j'avais pour lancer une requte ...

----------


## bubulemaster

Je viens de tomber  l'instant sur ce code :



```

```

Je pense qu'on peut lever l'exception JournalException directement non ?

----------


## jabbounet

une state machine avec 70 tats, et un bon paquet de transition entre ces derniers.

a maintenir dans un soft c'est le pied  ::aie::

----------


## grunt2000

Vu en COBOL: La vraie programmation squentielle.



```

```

----------


## LordBob

> Vu en COBOL: La vraie programmation squentielle.
> 
> 
> 
> ```
> 
> ```


je crois que l'on tient un des meilleurs code l ...
 ::lol::

----------


## CinePhil

> Il y a quelques temps, j'ai t appel pour modifier un programme en VBA (une application Access)
> Manifestement, le mec qui avait cod voulait conomiser sur les lignes de code ;
> et plutt que d'aller  la ligne pour chaque instruction, j'ai eu droit  :
> 
> 
> ```
> Dim t As Date: Debug.Print "dbut": t = DateAdd("s", 10, Now()): While t > Now(): Wend: Debug.Print "fini"
> ```
> 
> ...


J'ai commenc  tripatouiller du code au dbut des annes 1980, quand les processeurs taient en 8 bit et la mmoire vive de 1 kilo-octets (oui les p'tits jeunes, vous avez bien lu !  ::D:  ).

A l'poque, on programmait en Basic interprt et on utilisait souvent la ligne  multiples instructions spares par : parce que tout ce qui tait crit dans le programme allait dans la mmoire, notamment je crois me souvenir les numros de lignes et les commentaires. Du coup on conomisait les lignes et quand le programme (ou le bout de programme) fonctionnait, on supprimait les commentaires !

Je me souviens avoir pass quelques heures  traquer le moindre caractre inutile sur un programme pour qu'il tienne en mmoire !

Aujourd'hui c'est l'inverse ! 
Depuis que j'examine des programmes PHP faits par d'autres, je suis trs tonn de voir des paquets de require qui chargent des paramtres et des fonctions inutilement chargs ou lances dans le contexte o elles se trouvent.
Un exemple : OBM charge ds le dmarrage un tas de paramtres concernant par exemple le calendrier avant mme qu'on soit entr dans l'application. Et nous ne nous servons mme pas de la fonction de calendrier de ce logiciel !
Ce serait vraiment plus dur de charger les paramtres du calendrier seulement quand on veut utiliser cette fonction ?

Et quand dans un programme on a de l'objet, du procdural, des modules ne contenant que des fonctions, d'autres contenant du code actif et des fonctions qui ne seront pas forcment utilises dans le module o elles se trouvent, du mlange de Perl, PHP, HTML (avec ou sans echo), javascript, CSS... c'est galre pour s'y retrouver.

Tout a pour dire que l'extrait cit en tte de ce message vient peut-tre d'un dinosaure de l'informatique dans mon genre et qui a gard de mauvaises habitudes de sa jeunesse.  ::lol::

----------


## Bisnrs

Bon, c'est peut-tre pas le pire que j'ai pu voir, mais voici un exemple de code qui m'a t donn de voir :



```
formate_code(document.form_sites.ban_code_js_<?php echo $id_ban; ?>,'<scr'+'ipt language="javascript" type="text/javascript" src="<?php echo $chemin; ?>/ban.php?ban=<?php echo $id_ban; ?>&url='+escape(document.form_sites.site_url.value)<?php if (in_array("style",$parametres)) echo "+'&params=id_style%3D'+document.form_sites.choix_style.value"; if (in_array("MB directe",$parametres)) echo "+'&params=bg%3D'+document.form_sites.bg.value+'%26txt%3D'+document.form_sites.txt.value+'%26link%3D'+document.form_sites.link.value"; ?>+'"></scr'+'ipt>');
```

Une ligne de 547 caractres.

Mieux :



```
onclick="if(confirm('En cliquant sur OK vous ne supprimez que le sous-domaine \''+sous_domaine[f.choix_style.options[f.choix_style.selectedIndex].value]+'\'.\n(Le style \''+f.choix_style.options[f.choix_style.selectedIndex].text+'\' ne sera pas supprim?)\n\n/!\\ ATTENTION /!\\ \n les inscrits que vous avez avec cette marque blanche seront irr?m?diablement perdus !\n\n\nEtes-vous s?r ?')&&confirm('Etes-vous vraiment s?r de vouloir supprimer les marques blanches \''+sous_domaine[f.choix_style.options[f.choix_style.selectedIndex].value]+'\' et tous les inscrits que vous avez g?n?r?s avec celles-ci ?')){document.location='?page=delete_style&domaine='+f.choix_style.options[f.choix_style.selectedIndex].text}">
```

Une ligne de 713 caractres.

Je dois en avoir une qui traine de plus de 800 caractres mais je n'arrive pas  remettre la main dessus.


Sinon, le pire que j'ai pu voir, c'est des noms de variables/fonctions PHP avec des accents.

Ah non, que dis-je, c'tait juste pour me mettre dans le bain, aprs il a fallu que ce soit les noms de bases/tables/champs MySQL qui prennent tous les caractres spciaux et espaces imaginables.

----------


## gailuris

> ```
> 
> ```
> 
> Dj une une classe de constante pour rfrencer des nombres entiers, c'est trs difficile d'y trouver un intrt.
> Mais le pire est  venir . C'est l'usage de ces constantes dans le programme.
> 
> 
> ```
> ...


Bonjour, 

a m'a fait rire, j'ai eu le mme, mais j'ai eu l'explication, quand on utilise checkstyle (ou d'autres outils surement), on peut interdire l'utilisation de "magic number" (de nombres utiliss en dur, en toutes logique si j'utilise le nombre 32 dans un programme il a une signification et je peux donc lui crer une constante ayant un nom qui ait un sens) mais certains dveloppeurs ne comprenant pas pourquoi ils ont une erreur (ou un warning) et a qui on n'a pas expliqu les principes de bases de la qualit de codes font ce genre d'abbrations. 

C'est de la qualit pour faire plaisir  l'outil => on abouti  l'inverse d'un code de qualit.

----------


## jabbounet

vu en fortran77 (code que j'ai vite corrig quand je suis tomb dessus) des saut dans des tiquette  l'intrieur de blocs.

on me pardonnera la syntaxe a fait longtemps que je n'en ai pas fait


imaginez que votre code tombe sur un else sans le if associ.....




```

```

----------


## Npomucne

> Tout a pour dire que l'extrait cit en tte de ce message vient peut-tre d'un dinosaure de l'informatique dans mon genre et qui a gard de mauvaises habitudes de sa jeunesse.


D'aprs le client, il s'agit d'un programmeur "jeune" (<30 ans !)
qui a depuis migr au Vietnam pour monter sa bote de dveloppement l-bas  ::king:: 
Aux dernires nouvelles, il refuse d'assurer la maintenance  distance de son application. 
Je me demande bien pourquoi  ::mrgreen::

----------


## Tholude

[QUOTE=hermes1983;4765678]Alors moi, je pense que le truc le plus incroyable a t de chercher un jour sous quelle condition je recevais la valeur "E000:R" via un socket TCP. Je suis tomb sur le code suivant :


```

```

OUAHHHHHHHHHHHHHHHHHHHH Mon prfr !!
Ce que j'aime le plus, ce sont les commentaires de certaines conditions !!!! Totalement ouf !!!!!!

Pas mieux  ::):

----------


## Alain Defrance

> J'avais crit a une fois sans faire gaffe en Java, et je m'en suis rendu compte dans le debugger. Maintenant, voil pourquoi je me permets de faire un commentaire : le compilateur (Java 6) avait remplac le == par un appel  equals sans me le dire, et le watch du debugger que j'avais fait par copier/coller n'avait pas fait cette substitution. Il m'en a fallu du temps pour comprendre a...


Interessant comme exprience, mais est-tu sr de toi ? As-tu tenter de dcompiler ton .class afin de voir ce qu'il se passe ? En fait je suis peut-tre dans le faux mais j'ai jamais vu ce comportement  la compilation.

Si on prend :


```

```

Aprs dcompilation on obtient :


```

```

Bien videment ca renvoit true  ::): 

A noter que si dans le sout on fait un "a" == "a" sans variable intermdiaire, aprs la compilation on observera System.out.println(true);

----------


## bubulemaster

> Envoy par hermes1983
> 
> 
> Alors moi, je pense que le truc le plus incroyable a t de chercher un jour sous quelle condition je recevais la valeur "E000:R" via un socket TCP. Je suis tomb sur le code suivant :
> 
> 
> OUAHHHHHHHHHHHHHHHHHHHH Mon prfr !!
> Ce que j'aime le plus, ce sont les commentaires de certaines conditions !!!! Totalement ouf !!!!!!
> 
> Pas mieux


+1, il est gnial ce code !

----------


## meddle

Un de mes lves m'a prsent une application avec cette portion de C++ qui m'a fait rver :



```

```

C'est propre et efficace !

Laurent

----------


## jdeboer

> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...


A part le nom de la fonction (je l'aurai appell getParameter), je ne vois pas le problme. Je trouve cela justement lgant. Je ne suis pas expert PHP mais si un jour, on te dit que tu dois rcuprer les variables en GET et non plus en POST. Tu modifies uniquement ta fonction post (oui le nom n'est pas terrible). 



```

```

Et tu n'as pas besoin de remplacer tes 5000 $_POST, si tu n'avais pas utilis de fonction post. On peut aussi imaginer que tu veuilles faire un traitement particulier par la suite (que faire si la variable est null ou vide, tu peux alors faire un traitement gnrique).


Donc je trouve cela justement lgant meme si ca parait lourd. La personne qui a dvelopp a pens  l'volution future du produit.

----------


## Invit

Je rajouterai que si t'as des besoin de scurit (injection sql, xss et autre), tu peut ajouter tes rgles de scu  cet endroit.

A mon taf on avais ce genre de fonction, et ils ont dvelopp 5-6 ans sans savoir ce qu'tait l'injection sql. Un beau jour ce qui devait arriva : grosse injection de d'iframe dans nos champ texte  ::(:  on a russi a rcuprer la base et a se protger en 1 demi journe et on est sur que c'est bon.

----------


## phantomass

> Bonjour, 
> 
> a m'a fait rire, j'ai eu le mme, mais j'ai eu l'explication, quand on utilise checkstyle (ou d'autres outils surement), on peut interdire l'utilisation de "magic number" (de nombres utiliss en dur, en toutes logique si j'utilise le nombre 32 dans un programme il a une signification et je peux donc lui crer une constante ayant un nom qui ait un sens) mais certains dveloppeurs ne comprenant pas pourquoi ils ont une erreur (ou un warning) et a qui on n'a pas expliqu les principes de bases de la qualit de codes font ce genre d'abbrations. 
> 
> C'est de la qualit pour faire plaisir  l'outil => on abouti  l'inverse d'un code de qualit.


Effectivement, c'est trs vraisemblablement  cause de checkstyle que le dveloppeur a fait ce code car effectivement nous imposons des contraintes qualitatives bas sur cet outil.

----------


## kerflyn

Ce n'est pas un bout de code, mais imaginez:
Un code en Java avec pakages/classes/methods (normal quoi)Des classes longues et des mthodes longues (un classique)Tout est en static mme les rfrrences  ::calim2:: 

Dans ce cas et plus que jamais, il faut comprendre comment est-ce que l'interprteur Java fonctionne et  quel moment prcis il effectue tel ou tel action. Car on peut s'attendre dans ce cas  des NullPointerException en pagaille. Le dveloppeur (il a fait a tout seul) n'avait pas compris l'intrt de la programmation objet. Il en tait rest  Pascal et avait essay de retrouver l'environnement Pascal dans Java.

C'est vraiment horrible ! Comment peut-on faire un truc pareil ?

----------


## jabbounet

> Ce n'est pas un bout de code, mais imaginez:
> Un code en Java avec pakages/classes/methods (normal quoi)Des classes longues et des mthodes longues (un classique)Tout est en static mme les rfrrences 
> 
> Dans ce cas et plus que jamais, il faut comprendre comment est-ce que l'interprteur Java fonctionne et  quel moment prcis il effectue tel ou tel action. Car on peut s'attendre dans ce cas  des NullPointerException en pagaille. Le dveloppeur (il a fait a tout seul) n'avait pas compris l'intrt de la programmation objet. Il en tait rest  Pascal et avait essay de retrouver l'environnement Pascal dans Java.
> 
> C'est vraiment horrible ! Comment peut-on faire un truc pareil ?



clair comment as t'ont oser forcer un dveloppeur a faire du java, quel torture que de faire du java  ::lol:: ....

----------


## gmotw

Dans du code action script que je maintiens:


```

```

  ::koi::  
Je suis pas experte l dedans, mais c'est normal si je ne vois pas l'intrt?

Et sinon, j'avais vu de belles choses en java, mais mon esprit a effac de lui-mme les souvenirs pour viter les traumatismes.  ::aie::

----------


## dtrosset

Oh, juste un petit truc sympa, en C++, mais sans utiliser la librairie standard. Presque du C en fait.



```

```

Bien que fonctionnel et sans bug (j'espre en fait, car j'ai rcrit ici du code vieux de 15 ans environ) le produit est sorti avec a dedans.

Pour rajouter un objet sur une pile, en parcourt toute la pile et on ajoute l'objet  la fin. Pour le retirer, on parcourt  nouveau toute la pile, et on l'enlve. Ce programmeur n'avait pas du tout compris l'intrt des piles !

Heureusement qu'il n'y avait pas trop d'lments  empiler et dpiler ...

Didier

----------


## Mat.M

> Pour rajouter un objet sur une pile, en parcourt toute la pile et on ajoute l'objet  la fin. Pour le retirer, on parcourt  nouveau toute la pile, et on l'enlve. Ce programmeur n'avait pas du tout compris l'intrt des piles !
> 
> Heureusement qu'il n'y avait pas trop d'lments  empiler et dpiler ...
> 
> Didier


euuh je ne comprends pas ce que tu veux dire : tu veux dire que le programmeur aurait du utiliser un conteneur de la STL plutot que des listes chaines du C ?

----------


## Mat.M

> Le compilateur Delphi interdit la modification de la variable utilise par une boucle *for*.


ok merci pour l'info  ::D:

----------


## pseudocode

> euuh je ne comprends pas ce que tu veux dire : tu veux dire que le programmeur aurait du utiliser un conteneur de la STL plutot que des listes chaines du C ?


Je pense qu'il voulait dire que c'tait plus rapide d'ajouter/retirer l'element en dbut de liste, plutot que d'aller systematiquement  la fin.  ::P:

----------


## Mdinoc

Les deux, je pense. Une std::stack< Object, std::list<Object> > aurait fait une pile chane mieux gre...

----------


## galyathee

petite lecture ... si jamais personne ne l'a cit avant:
http://fr.wikibooks.org/wiki/Program...code_illisible

----------


## Invit

Un joli truc dans une vieille partie du systme, pour appeler un webservcie externe :

Post sur page asp => procedure stocke sql => procedure stocke clr => webservice interne (oui on s'auto appelle et vu que c'est dans 2 appli diffrentes, la requte http est faites  ::):  ) => webservice externe 

... quand tu connais pas le truc et que tu debuggue t'a l'impression de chasser le dahut.

----------


## Mdinoc

> petite lecture ... si jamais personne ne l'a cit avant:
> http://fr.wikibooks.org/wiki/Program...code_illisible


a a l'air sympa. Je connaissais How To Write Unmaintainable Code de Roedy Green, aussi.

----------


## Gunny

Un ami vient de me dire a sur msn :




> X dit:
> J'ai lu un test ya pas longtemps
> 
> X dit:
> Une fonction qui prend vrai ou faux en paramtre, si c'est vrai il met ok dans un string, si c'est faux ko, et aprs il compte le nombre de k qui suivent un o pour savoir si les tests ont tous russi.

----------


## BainE

change d ami et vite  ::aie::

----------


## kiwwi209

une trouve lors d'une revue de code cet aprs-midi en Java :



```

```

y en a chez qui il va falloir reprendre les bases de la gestion des exceptions...  ::roll::

----------


## Invit

> une trouve lors d'une revue de code cet aprs-midi en Java :
> 
> 
> 
> ```
> 
> ```
> 
> y en a chez qui il va falloir reprendre les bases de la gestion des exceptions...


En effet, aucun try-catch imbriqu dans le premier catch, au cas ou une exception soit leve... Honteux  ::mouarf::   ::mouarf::   ::mouarf::

----------


## jabbounet

> En effet, aucun try-catch imbriqu dans le premier catch, au cas ou une exception soit leve... Honteux


Du mme tonneau dans le mme fichier source 2 mthodes aux signatures et au  code identique (idem  l'octet prs) et au nom diffrent l'une au dessus de l'autre, les deux tant utilis un peu partout dans le code sans rgles prcises.

----------


## bho32

Un membre de mon quipe projet qui apporte ses modifications :



```

```

 ::ccool::

----------


## jabbounet

> Un membre de mon quipe projet qui apporte ses modifications :
> 
> 
> 
> ```
> 
> ```


il a l'avantage de ne pas planter, mme si c'est un peu bebte, ceci dit il serait bon de lui dire que le if / else ne sert a rien ici.

----------


## ronan99999

Je dteste les goto.... ici en c++


```

```


Avec toujours les mmes excuses:
 "Mais les exceptions a consomme trop de temps"
 "Le goto est propre, a vite d'avoir trop d'indentation" (autant que le nuclaire)

Je mettrais dans le mme sac les c-style cast....Et la  RTTI c'est fait pour dcorer!!!!!

Marre du C--.

ps: un peut nerver je viens de tomber la dessus. ::furax::

----------


## covao

L'effet ravageur d'une simple instruction de gestion d'une facture



```

```

 ::aie::

----------


## AnneCa

Un bel exemple en SQL. On a une table TABLE1 (Champ1, Champ2) o Champ2 est numrique. 


```

```

Une belle longue boucle alors qu'une requte suffit


```
UPDATE TABLE1 SET Champ2 = Champ2 +1
```

----------


## deadalnix

Aujourd'hui, j'en ai vu une belle !

Sur une appli web, il y a deux faon de se loguer. La faon classique et au autologin depuis un lien spcial.

Le programmeur qui s'tait occup de l'autologin avait simplement fait gr une formulaire de login prremplis (avec le pass en clair et tout) qui se soumet automatiquement vers la faon de se logguer n1.

----------


## apieum

> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...


Je pense pas que ce soit une mauvaise pratique. 
C'est plus simple d'crire post('prenom') que de taper un underscore et POST en majuscule, mais surtout, c'est un hook qui permet de modifier rapidement les variables post des 500 champs.

par exemple:
si tout d'un coup on dcide de n'avoir que des chaines en minuscule.


```

```

http://fr.wikipedia.org/wiki/Hook_(informatique)

----------


## OWickerman

Le genre de truc que je dteste en PHP, l'utilisation abusive des echo...


```

```

Cette page la tant simple, a va encore... J'en ai de pires :
Celui ci, par exemple, qui, non seulement abuse des echo, mais en plus essaie de sauvegarder des sauts de lignes....
Ah, oui, la technique des tableaux dans des tableaux est un truc de fourbe. On devrait pendre les gens qui osent faire a !


```

```

Pour infos, quand on m'a demand de finaliser le site, j'ai du remettre les pages au propre avant de comprendre ce qui s'y passait...

----------


## nicolofontana12

Il y'a certain code qui ne fait pas seulement pleurer, ni rire! Surtout lorsque ton chef de service le fait!

----------


## mixouille

Vu il y a peu de temps :



```

```

Le but tait peut-tre de faire un super.equals(), ce qui au moins aurait vit le plantage, bien qu'tant parfaitement inutile.

----------


## screetch

je travaille dans les jeux, et souvent on a un besoin de perf assez fort. Aussi, dans le temps (il y a un bail, avant l'arrive de la FPU) il existait des calculs un peu magiques pour approximer des oprations un peu complexes (je pense notemment a l'inverse de la racine carre de Carmack :


```

```

ce code est dsormais moins performant que l'original, car o a dsormais une FPU (et surtout des instructions SSE) et ce code force a passer par la mmoire, ce qui bloque le CPU, ce qui coute au final aujourd hui plus cher que l'opration originale. Enfin bon bref, a cette poque ce bout de code tait incroyable. 

On a aussi invent vers cette epoque les tables de cosinus, ou on prcalculait le cosinus de tous les angles que l'on mettait ensuite dans une table, pour ne pas avoir a faire l'opration.

et chez nous (pourtant, c'tait des _annes_ apres l'invention de la FPU et les CPU courraient dj a plus de 2GHz) pour acclerer, on avait aussi une table prcalcule, remplie comme suit


```

```

un tableau des puissances de deux, pour acclerer le jeu.

...

2 puissance x en entier se calcule en un cycle CPU  ::(:

----------


## deadalnix

J'en connais un qui ne connaissait pas bien les dcalages  ::D:

----------


## goofyto8

10 a$=inkey$
20 if a$ ="" then goto 10
30 print
40 end 
 ::mrgreen::

----------


## nicolofontana12

Souvent il est tres difficile d'etre chef de projet. Surtout si le chef lui meme essaye essaye de try  System.out.println(""); qu'est ce qu'on va mettre alors dans catch

----------


## Fredouille91

Il n'est pas si idiot que a ce code, au contraire.
Imaginons qu'un jour on doivent appliquer un traitement  toutes les valeurs postes (par ex,  un test d'injection SQL, une mise par dfaut  0 de valeurs numriques,...)...




> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...

----------


## Invit

A la fac j'ai t en binme sur un projet avec quelqu'un qui avait rcrit la fonction malloc, car celle de base n'tait pas assez "optimise".
Ca m'avait bien fait rire. 

Et puis dans une bote j'ai rencontr quelqu'un qui a crit a : 


```

```

On apprciera : 
- le fait de rcrire des fonctions standard
- le fait de les rcrire DEUX fois
- l'ordre des paramtres invers par rapport  la fonction standard
- cette magnifique faon d'crire un while dans la premire fonction

----------


## jpelaho

> J'en ai vu un pas mal en php, fait par le responsable dveloppement de ma bote :
> 
> 
> 
> ```
> 
> ```
> 
> Ce jour-l je me suis dis que finalement je n'tais pas le plus mauvais ...


Juste pour ragir par rapport  ce genre de code que je ne trouve pas si idiot que ca. Genre if(true) ou if(1). 

Il m'est dj arriv de faire ca dans mon code. La raison c'est qu'il ya effectivement un test qui doit tre mis  ce niveau, je fais le test mais il s'avre que ce nest pas le bon test alors je l'enlve mais sans supprimer l'instruction if (cela me permet de me rappeler cela plus tard en voyant un "if" qui n'a pas de sens dans le code). 

Bien entendu pour faire une release, il faut enlever le test ou le corriger. Mais ca peut souvent aider de laisser ca dans un code de faon momentan.

----------


## tuxlinuxien

Je suis en cole d'informatique, et aprs 3 mois de C, un gars m'a montr un bout de code qui ne fonctionnait pas.



```

```

Il s'est demand pourquoi tout le monde a rigol.

----------


## Louis Griffont

> Juste pour ragir par rapport  ce genre de code que je ne trouve pas si idiot que ca. Genre if(true) ou if(1). 
> 
> Il m'est dj arriv de faire ca dans mon code. La raison c'est qu'il ya effectivement un test qui doit tre mis  ce niveau, je fais le test mais il s'avre que ce nest pas le bon test alors je l'enlve mais sans supprimer l'instruction if (cela me permet de me rappeler cela plus tard en voyant un "if" qui n'a pas de sens dans le code). 
> 
> Bien entendu pour faire une release, il faut enlever le test ou le corriger. Mais ca peut souvent aider de laisser ca dans un code de faon momentan.


Je prfre, pour ma part, mettre le test en commentaire, et mme y ajouter d'autres commentaires afin de rappeler le pourquoi du comment on ne fait plus le test !  :;):

----------


## Daestrik

> A la fac j'ai t en binme sur un projet avec quelqu'un qui avait rcrit la fonction malloc, car celle de base n'tait pas assez "optimise".
> Ca m'avait bien fait rire.


C'est pas faux. Malloc est lent. De l'autre ct, il faut tre capable de le recoder...




> On apprciera : 
> - le fait de rcrire des fonctions standard
> - le fait de les rcrire DEUX fois
> - l'ordre des paramtres invers par rapport  la fonction standard
> - cette magnifique faon d'crire un while dans la premire fonction


La seule chose que je peux dfendre c'est le fait de rcrire des fonctions standards : certaines ont des dfauts (comme par exemple ne pas tester les pointeurs) ce qui est TRES gnant quand tu cherches un segfault que jamais tu n'irai chercher dans une fonction "officielle"  laquelle tu fais confiance.

----------


## jaffael

Un des bouts codes m'ayant fait le plus rire aprs reprise d'un soft, c'est un calcul de moyenne (en Pascal):



```

```

 :8O: 
ce qui est videment la mme chose (moyX:= (pointA.X + pointB.X)/2 ), seulement quand c'est rpt plusieurs fois (en X et en Y aussi), a devient vite trs lourd  lire.

avec des choses aussi du genre (o maval est un boolean)


```

```

----------


## jabbounet

> La seule chose que je peux dfendre c'est le fait de rcrire des fonctions standards : certaines ont des dfauts (comme par exemple ne pas tester les pointeurs) ce qui est TRES gnant quand tu cherches un segfault que jamais tu n'irai chercher dans une fonction "officielle"  laquelle tu fais confiance.


Il est souvent plus simple de les encapsuler et de contrler les paramtres plutt que de les rcrire.

----------


## Daestrik

> Il est souvent plus simple de les encapsuler et de contrler les paramtres plutt que de les rcrire.


Certes, mais dans le cas d'un strcpy a reste raisonnable.

----------


## Arnaud F.

Une fois j'ai eu droit  un super :



```
UPDATE champ1 = champ1 FROM uneTable
```


Je me suis toujours demand son utilit (surtout en dehors de toute transaction ...)

----------


## Mac LAK

> Je me suis toujours demand son utilit (surtout en dehors de toute transaction ...)


Dclencher un trigger et/ou une procdure stocke, peut-tre ?

----------


## Arnaud F.

> Dclencher un trigger et/ou une procdure stocke, peut-tre ?


J'ai vrifi, t'en fais pas, y a pas  ::D:

----------


## Mac LAK

> J'ai vrifi, t'en fais pas, y a pas


Alors on va dire qu' une poque lointaine, il y en a eu une, qu'elle a disparu mais pas le code de dclenchement... L'autre hypothse tant nettement insultante pour le codeur, c'est forcment la premire solution, n'est-ce pas ?  ::mouarf::

----------


## Tofalu

> Dclencher un trigger et/ou une procdure stocke, peut-tre ?


Peut tre aussi de vrifier que champ1 respecte toujours une contrainte ou bien de vrifier que le jeu d'enregistrements est updatable. Des raisons, on peut toujours en trouver  posterori, mais est ce qu'il y en avait une sur le moment ?  ::aie::

----------


## jabbounet

personellement je vais pencher pour l'hypothse de mac lak.

Ceci dit j'ai aussi vu des procdures stockes lancer des exception (Division par zro) pour sortir en cas d'erreur.

----------


## Mac LAK

> Ceci dit j'ai aussi vu des procdures stockes lancer des exception (Division par zro) pour sortir en cas d'erreur.


J'ai vu a aussi en C++ : des boucles casses par des leves d'exception volontaires au lieu d'un simple _break_... Ou des exceptions leves en traitement nominal (=  chaque appel), le code utile tant dans le _catch_ et la gestion des erreurs dans le _try_...

----------


## inconnu652000

if (test);
{
     code
}

C'est bte mais on peut mettre du temps  le voir

----------


## jabbounet

> if (test);
> {
>      code
> }
> 
> C'est bte mais on peut mettre du temps  le voir


c'est balot, perso je l'ai vu sur des boucles for



```

```

ou une variante 



```

```

comme quoi c'est une bonne habitude de mettre systmatiquement des accolades sur les boucles.

----------


## Invit

je suis tomb l dessus aujourd'hui... personnellement je trouve que a pique un peu les yeux. Le pire c'est que l'appli est bourr de truc du mme genre  ::cry:: 


```

```

----------


## Invit

> ou une variante 
> 
> 
> 
> ```
> 
> ```
> 
> comme quoi c'est une bonne habitude de mettre systmatiquement des accolades sur les boucles.


J'ai souvent croise a aussi il y a quelques mois, sur quelques lignes de code comme c'est le cas ici, c'est assez simple a voir, beaucoup moins quand c'est au milieu de pages et de pages de code du mme style (souvent mal indente forcement)... Moi qui ai l'habitude de toujours utiliser les accolades  ::):

----------


## deadalnix

> J'ai vu a aussi en C++ : des boucles casses par des leves d'exception volontaires au lieu d'un simple _break_... Ou des exceptions leves en traitement nominal (=  chaque appel), le code utile tant dans le _catch_ et la gestion des erreurs dans le _try_...


Il y a des gens qui en ont fait un style en java. La programmation par exceptions. Selon eux, c'est gnialissime, mais je suis pas franchement convaincu.

----------


## sunseb7

> Le genre de truc que je dteste en PHP, l'utilisation abusive des echo...
> 
> 
> ```
> 
> ```
> 
> Cette page la tant simple, a va encore... J'en ai de pires :
> Celui ci, par exemple, qui, non seulement abuse des echo, mais en plus essaie de sauvegarder des sauts de lignes....
> ...


Quelle solution lgante pour viter ce problme au fait ? Car c'est vrai qu'on se retrouve parfois vite avec beaucoup de "echo"...  ::D: 

Aprs pour ce qui est de mlanger traitement et HTML, c'est sr que c'est juste infernal  maintenir ensuite...

----------


## jabbounet

> Il y a des gens qui en ont fait un style en java. La programmation par exceptions. Selon eux, c'est gnialissime, mais je suis pas franchement convaincu.


moi aussi je ne suis pas convaincu

----------


## GanYoshi

> moi aussi je ne suis pas convaincu


Pareil.



> Quelle solution lgante pour viter ce problme au fait ? Car c'est vrai qu'on se retrouve parfois vite avec beaucoup de "echo"... 
> 
> Aprs pour ce qui est de mlanger traitement et HTML, c'est sr que c'est juste infernal  maintenir ensuite...


Je pense que la solution est d'enlever les "<?php ?>" et de mettre directement en html, quitte  mettre des <?php ?> pour les quelques variables  insrer.

----------


## deadalnix

> Je pense que la solution est d'enlever les "<?php ?>" et de mettre directement en html, quitte  mettre des <?php ?> pour les quelques variables  insrer.


Ou de faire des templates, comme font les gens civiliss qui n'ont pas oubli le concept de MVC sur le bord de la route.

----------


## r0d

Une toute frachement trouve (hier). Ce n'est pas ne bourde norme, mais a m'a tellement nerv que je vous la poste:


```

```

using namespace std dans un header (qui en plus va tre inclus partout dans l'appli), cela signifie que tous les fichiers sources vont se farcir le namespace std. Ce qui signifie que nulle part je n'aurai le droit de dclarer une variable qui existe dj dans la lib standard. Et le problme c'est qu'il y a quand-mme pas mal de variables dclare dans cette lib standard. On n'a donc pas le droit non plus d'utiliser des libs qui utilisent des variables dclare dans la lib standard.

Et comme il s'agit d'un projet dj bien avanc et assez imposant, la suppression de ce using namespace std va impliquer pas mal de modifs et de tests (une modif n'est jamais anodine)... et dans l'histoire, tout ce que j'ai gagn c'est la haine de mes collgues programmeurs  ::calim2::

----------


## Tofalu

> Une fois j'ai eu droit  un super :
> 
> 
> 
> ```
> UPDATE champ1 = champ1 FROM uneTable
> ```
> 
> 
> Je me suis toujours demand son utilit (surtout en dehors de toute transaction ...)


Et puis surtout, normalement c'est 

UPDATE <table> SET <champ>=X

Et non UPDATE FROM

On est pass tous  ct  ::oops::

----------


## fridobox

En java,

Je vois couramment des cast en classe fille pour appeler une mthode de la classe mre :


```

```

 l'appel : 


```

```

Polymor-quoi???  ::aie::

----------


## fridobox

Moins grave mais lourd, des classes qui se ressemblent, toutes portent une mthode update().

_ l'appel :_ 


```

```

Interface tu connais?
Ecouteur/cout ?  ::calim2::

----------


## inconnu652000

> En java,
> 
> Je vois couramment des cast en classe fille pour appeler une mthode de la classe mre :
> 
> 
> ```
> 
> ```
> 
> ...


Pas mal comme perle aussi. Mais bon peut tre ce sont des gens qui viennent du C++ qui savant pas que les mthodes sont virtuelles par dfaut en java ...

J'essaie de leur trouver des excuses, car je suis gentil  ::aie::

----------


## fridobox

Une perle : le stockage de this cast en classe mre :



```

```

En fait, c'est une tentative d'appeler la mthode mre sans qu'elle soit surcharge dans la classe fille  ::aie:: 

Droit  la palme d'or(dure) ?  ::ccool:: 

Le test si maman  != null est norme non?

----------


## fridobox

> Pas mal comme perle aussi. Mais bon peut tre ce sont des gens qui viennent du C++ qui savant pas que les mthodes sont virtuelles par dfaut en java ...
> 
> J'essaie de leur trouver des excuses, car je suis gentil


Malheureusement, ce sont des dveloppeurs java 100%  ::cry::

----------


## Alain Defrance

> Malheureusement, ce sont des dveloppeurs java 100%


Dveloppeur ou bidouilleur ?
 ::dehors::

----------


## deadalnix

100% Java 0% modlisation  ::D:

----------


## Alain Defrance

L quand mme  ce stade  ::triste:: , c'est triste de pas connaitre le compotement de son langage face  la polymorphie.

----------


## inconnu652000

> L quand mme  ce stade , c'est triste de pas connaitre le compotement de son langage face  la polymorphie.


Oui bon alors ne soyons pas dur !!!

Je me souviens avoir rinventer le principe des smaphores en C++ quand j'ai dbut normal je suis pas informaticien  la base donc je ne connaissais rien au multithreading ....
Le pire c'est que a a march !! sauf 2 ou 3 fois par mois lol vridique ! ils se sont arrach les cheveux avec mon "bug" ... 
Donc je me tais et je fais profil bas lol


 ::oops::

----------


## Alain Defrance

> Oui bon alors ne soyons pas dur !!!
> 
> Je me souviens avoir rinventer le principe des smaphores en C++ quand j'ai dbut normal je suis pas informaticien  la base donc je ne connaissais rien au multithreading ....
> Le pire c'est que a a march !! sauf 2 ou 3 fois par mois lol vridique ! ils se sont arrach les cheveux avec mon "bug" ... 
> Donc je me tais et je fais profil bas lol


Pour ma part j'ai galement rinvent la roue un bon nombre de fois  ::aie:: .

Mais bon l c'est une mconnaissance du langage en lui mme ca crain  ::roll:: .

----------


## r0d

Ca a dj t dit, ici et ailleurs, mais il est toujours bon de le rappeler:
Tout le monde fait des bourdes, c'est humain. L'important c'est de savoir s'en rendre compte - accepter les critiques, se remettre en question quand il y a des bugs, prendre le temps de lire sur le sujet (la doc, du bon code, les specs, developpez.com...), prendre le temps de discuter, bref, ne pas se jeter sur le code sans prendre un minimum de recul - et s'en souvenir pour ne plus reproduire ces erreurs.

Il y a quelqu'un qui a a dans sa signature,  peu de chose prs: "un homme fort n'est pas quelqu'un qui ne tombe jamais, mais quelqu'un qui sait se relever"

----------


## Jidefix

> Ca a dj t dit, ici et ailleurs, mais il est toujours bon de le rappeler:
> Tout le monde fait des bourdes, c'est humain. L'important c'est de savoir s'en rendre compte - accepter les critiques, se remettre en question quand il y a des bugs, prendre le temps de lire sur le sujet (la doc, du bon code, les specs, developpez.com...), prendre le temps de discuter, bref, ne pas se jeter sur le code sans prendre un minimum de recul - et s'en souvenir pour ne plus reproduire ces erreurs.
> 
> Il y a quelqu'un qui a a dans sa signature,  peu de chose prs: "un homme fort n'est pas quelqu'un qui ne tombe jamais, mais quelqu'un qui sait se relever"


Perso j'ai souvent vu des nouveaux projets qu'on confiait aux stagiaires pour pas dtourner des ressources.
Au fil du temps le projet, s'il marche pas trop mal, finit par tre couramment utilis, mais le mal est fait: c'est quand mme un stagiaire qui l'a fait, sans que personne ne fasse de relecture de code.
Va expliquer le besoin de repasser sur du code qui marchouille dans une grosse boite (je travaille dans une banque dont le logo devrait plus tre un mammouth qu'un cureuil je prcise)

Donc on se retrouve avec une montagne de code bizarre qui marche mais qui est incomprhensible et inmaintenable.


Allez un petit exemple pour la route une tite web-application, de la part de quelqu'un qui trouve que le javascript, c'est vachement mieux que l'HTML:


```

```

Avec le dtail de la fonction javascript**:


```

```

----------


## el_slapper

dans le mme style que a.....




> (.../...)
> Au fil du temps le projet, s'il marche pas trop mal, finit par tre couramment utilis, mais le mal est fait: c'est quand mme un stagiaire qui l'a fait, sans que personne ne fasse de relecture de code.
> Va expliquer le besoin de repasser sur du code qui marchouille dans une grosse boite (je travaille dans une banque dont le logo devrait plus tre un mammouth qu'un cureuil je prcise)
> 
> Donc on se retrouve avec une montagne de code bizarre qui marche mais qui est incomprhensible et inmaintenable.(.../...)


*Vu chez un diteur de logiciel, qui vend un pseudo-langage : la compilation a t faite par un stagiaire. Alors, l'utilisateur peut dfinir un type de donnes, une donne, une "rgle"(une ligne de code), des contenants divers......mais quand on compile,  chaque compilation d'lment, on revrifie tout en bloc. Donc si 500 donnes utilisent le mme type, le type en question est vrifi 500 fois. Et si chaque donne est utilise dans 9 rgles, le type de donne est vrifi 5000 fois. A chaque compil.  ::aie::  (mais il me semble qu'ils ont corrige  un moment ou  un autre).

*Vu dans une banque qui sponsorise le rugby : on demande au stagiaire de faire les statistiques de la nouvelle application(qui marche bien par ailleurs). 7 colonnes(dont une de total), une vingtaine de lignes(totaux, moyennes, variations mensuelles, etc.....). Il fait le tout en *une* requte SQL. videmment illisible, et qui de plus ralentit considrablement au fur et  mesure que le temps passe et que la base s'toffe. Au bout de 13 mois, le gestionnaire(moi) ne peut plus consulter les statistiques, la requte dpasse les 30 secondes qui dclenchent un _time-out_..... Je suis parti  ce moment l, en souhaitant bien du plaisir  mon successeur.

----------


## eldana

Travaillant en temps que developpeur dans le domaine de la tlvision sur IP, nous avons recemment reu d'un associ une API a tester.

En commencant  tester a (du php, javascript,...) on se rend compte que pas grand chose ne marche. 
On commence un peu a plucher le contenu des fichiers qui nous ont t fournis, et on tombe la dessus



```
$_SESSSION
```

faut admettre qu'avec 3 's' a ne fonctionne pas plus rapidement. Et moi qui pensait que des grosses boites qui codaient des APIs faisaient a bien, et bien la j'ai envie de dire "ou pas"...

----------


## inconnu652000

> Ca a dj t dit, ici et ailleurs, mais il est toujours bon de le rappeler:
> Tout le monde fait des bourdes, c'est humain. L'important c'est de savoir s'en rendre compte - accepter les critiques, se remettre en question quand il y a des bugs, prendre le temps de lire sur le sujet (la doc, du bon code, les specs, developpez.com...), prendre le temps de discuter, bref, ne pas se jeter sur le code sans prendre un minimum de recul - et s'en souvenir pour ne plus reproduire ces erreurs.
> 
> Il y a quelqu'un qui a a dans sa signature,  peu de chose prs: "un homme fort n'est pas quelqu'un qui ne tombe jamais, mais quelqu'un qui sait se relever"



ahhhhhh ohmmmmmm 

 ::aie::

----------


## Cincinnatus

Je me souviens d'une appli web ASP (l'ancien, pas .Net) que nous avions tudie pour en reprendre les principes dans une appli aux normes du jour.

Les requtes SQL taient gnres en javascript  la vole dans la page et faisaient une taille certaine...  ::aie::

----------


## publicStaticVoidMain

> En java,
> 
> Je vois couramment des cast en classe fille pour appeler une mthode de la classe mre :
> 
> 
> ```
> 
> ```
> 
> ...


JE vais peut etre dire une bourde mais je ne vois pas en quoi c'est un probleme?

----------


## publicStaticVoidMain

> JE vais peut etre dire une bourde mais je ne vois pas en quoi c'est un probleme?


Ah merde je vois pourquoi  ::aie:: . J'avais pas bien lu le code  ::mouarf::

----------


## deadalnix

```

```

Du bon javascript comme on les aimes ! Miam !

----------


## Alain Defrance

> ```
> 
> ```
> 
> Du bon javascript comme on les aimes ! Miam !


Huuuum de la bonne complxit cyclomatique comme on les aiment.
Ca va tre hyper cool  tester, ah oui c'est vrai ca se test pas le JS, ouf :p

----------


## GanYoshi

> Huuuum de la bonne complxit cyclomatique comme on les aiment.
> Ca va tre hyper cool  tester, ah oui c'est vrai ca se test pas le JS, ouf :p


 ::mouarf::  ::mouarf::  ::ccool::

----------


## fridobox

> Ah merde je vois pourquoi . J'avais pas bien lu le code


Ouf, j'ai zu peur.  ::mouarf::

----------


## DaesD

Pour ceux qui auront le courage, ca vaut le coup

En gros c'est une classe qui permet de calculer l'ecart en seconde entre deux date  ::): 

Plutot que d'utiliser une simple diffrence entre deux time() on finit avec une classe qui vrifie qu'on est pas en anne bissextile  ::): 



```

```

----------


## jabbounet

je ne code pas en java et n'en fait pas, mais il m'arrive d'en lire de temps en temps et parfois certaines choses arrivent  me choquer

Exemple:


```

```

je ne compte pas toutes les mthodes qui utilisent monB plutt que le mcanisme d'hritage
soit je n'ai rien compris  l'hritage en Java, soit j'ai peur....

----------


## adiGuba

> je ne compte pas toutes les mthodes qui utilisent monB plutt que le mcanisme d'hritage
> soit je n'ai rien compris  l'hritage en Java, soit j'ai peur....


Ce n'est pas de l'hritage, mais de la composition, et cela a des avantages non-ngligeables sur l'hritage !


Lorsqu'on utilise l'hritage, on est limit  une classe parente et  son implmentation.

La composition permet de rajouter une "fonctionnalit" sur un large type de classe, quelque soit leurs implmentations. Pour cela on utilise le type comme attribut en dlguant toutes les mthodes, puis en rajoutant notre fonctionnalit par dessus.

On retrouve souvent cela dans l'API standard, en particulier pour la gestion des flux (InputStream/Reader).


a++

----------


## screetch

tu as manque un truc adi je crois


```
class A extends B {
```

----------


## adiGuba

Non justement, c'est de l'hritage par composition.

L'intrt tant de pouvoir utiliser A comme un type B de manire totalement transparent :


```

```

 ::arrow::  On ajoute les fonctionnalits de "A"  trois classe de type "B" quelconques, sans que l'on ai  connaitre leurs types prcis.

Les deux dernires lignes sont impossible avec de l'hritage standard.


Comme je l'ai dit on trouve cela dans l'API standard :


```

```

GZipOutputStream et BufferedOutputStream hrite tout deux d'OutputStream , indirectement via FilterOutputStream qui effectue l'hritage par composition...

Avec de l'hritage standard, il aurait fallu multiplier les classes pour avoir le mme rsultat : GZIPFileOutputStream, BufferedFileOutputStream, GZIPBufferedFileOutputStream, etc.

Ici il suffit d'empiler les instances pour rajouter des fonctionnalits, quelque soit la classe d'origine :


```

```


Ce genre de chose est trs prsent dans l'API, mme si c'est souvent "cach" dans une mthode :


```
List<String> list = Collections.synchronizedList(new ArrayList<String>());
```

 ::arrow::  


```

```


a++

----------


## GanYoshi

En clair "hritage par composition" c'est c'est le pattern Strategy ?

En regardant le code initiale je pensais qu'il s'agissait du pattern Strategy, alors que tu semble dire d'aprs les exemples avec les streams qu'il s'agit d'un decorator. 
Bref c'est encore un peu flou ^-^' 
En tout cas merci pour ton explication !

----------


## adiGuba

> En clair "hritage par composition" c'est c'est le pattern Strategy ?
> 
> En regardant le code initiale je pensais qu'il s'agissait du pattern Strategy, alors que tu semble dire d'aprs les exemples avec les streams qu'il s'agit d'un decorator.


Oui c'est en effet le pattern Decorator. Je me mlange souvent dans les noms des patterns  ::aie:: 

a++

----------


## pseudocode

> Non justement, c'est de l'hritage par composition.


Sauf que, en l'occurrence, l'unique constructeur de A cre une instance de la classe B, et pas d'une classe fille. Donc c'est pas super utile.  ::?:

----------


## adiGuba

> Sauf que, en l'occurrence, l'unique constructeur de A cre une instance de la classe B, et pas d'une classe fille. Donc c'est pas super utile.


Oui je n'avais pas fait attention  ce dtail en me basant uniquement sur les appels de mthodes dlgus...

a++

----------


## jabbounet

> Ce n'est pas de l'hritage, mais de la composition, et cela a des avantages non-ngligeables sur l'hritage !
> 
> 
> Lorsqu'on utilise l'hritage, on est limit  une classe parente et  son implmentation.
> 
> La composition permet de rajouter une "fonctionnalit" sur un large type de classe, quelque soit leurs implmentations. Pour cela on utilise le type comme attribut en dlguant toutes les mthodes, puis en rajoutant notre fonctionnalit par dessus.
> 
> On retrouve souvent cela dans l'API standard, en particulier pour la gestion des flux (InputStream/Reader).
> 
> ...


Dans le code  en question (rel que j'avais sous les yeux) il hritait et faisait son agrgation en mme temps sans pour autant sembler tirer partie de l'un ou de l'autre, a se voyait au code implment qu'il ne maitrisait pas vraiment ces concepts.

----------


## jabbounet

> Envoy par pseudocode
> 
> Sauf que, en l'occurrence, l'unique constructeur de A cre une instance de la classe B, et pas d'une classe fille. Donc c'est pas super utile. 
> 
> 
> Oui je n'avais pas fait attention  ce dtail en me basant uniquement sur les appels de mthodes dlgus...
> 
> a++


effectivement c'tait ici le problme, entre autre  ::D:

----------


## Gouyon

Salut,

Ca ne tombe pas forcment dans cette rubrique cependant je me suis arrach les cheveux pendant pas mal de temps avec cette histoire. Donc j'utilise Visual studio 2005 et j'ai eu un problme avec la fonction sscanf. J'ai un code qui lit dans un fichier texte des heures au format HH:MM:SS et qui les traite ensuite. J'ai constat que dans certains cas le rsultat de mon traitement tait faux. Aprs pas mal deJ'ai fait des tests et j'ai trouv ceci



```

```

Donne un rsultat correcte  savoir H=5; M=2 et S=4
Par contre




```

```

Donne un rsultat faux  savoir H=5; M=0 et S=-858993460

Il semble que les chaine "08" et "09" pose problme.

Etonnant non  ::D:

----------


## Barsy

C'est parce que la fonction sscanf (que je ne connais pas) doit faire la conversion en octal et non en dcimal.

J'avais eu le mme problme en JavaScript. Lorsque je faisais un _parseInt(monString)_, a marchait toujours sauf pour 8 et 9. En fait, il fallait prciser _parseInt(monString, 10)_ pour que a marche.

----------


## adiGuba

> C'est parce que la fonction sscanf (que je ne connais pas) doit faire la conversion en octal et non en dcimal.


+1

Source : http://man.developpez.com/man3/scanf.3.php



> *i*    correspond  un entier ventuellement sign. Le pointeur suivant doit tre du type int *. L'entier est en base 16 (hxadcimal) s'il commence par `0x' ou `0X', en base 8 (octal) s'il commence par un `0', et en base 10 sinon. Seuls les caractres correspondants  la base concerne sont utiliss.


En clair 08 est considr comme de l'octal  :;): 

 ::arrow::  %02d serait plus appropri  :;): 

a++

----------


## Tellen

> C'est parce que la fonction sscanf (que je ne connais pas) doit faire la conversion en octal et non en dcimal.


Alors pourquoi les secondes affiche les 8 et les 9?

----------


## Mac LAK

> Alors pourquoi les secondes affiche les 8 et les 9?


Cela ne les affiche pas : le sscanf a plant sur les minutes, donc les secondes sont tout simplement non initialises : -858993460 (dcimal) correspond  0xCCCCCCCC en hexadcimal, qui est la valeur par dfaut des variables sous Visual Studio en mode Debug.

----------


## ILP

En Pascal, je viens de la trouver :


```

```

Euh...  :8O: 


```

```

C'est pas plus simple comme a ?

----------


## aepli

Bonjour,

C'est un peu HS, mais il y a quand mme eu un peu de code qui a t crit ...

Petite anecdote d'ingnieur systme ...
Dans le genre idiot, surtout quand c'est un consultant spcialiste GNU/Linux ( ces dire, hein) !

Je lui prpare une machine toute belle (il doit nous dvelopper un service), je passe une bonne heure  lui expliquer que ce n'est pas Ubuntu et qu'il existe d'autre distribution (dj l, j'ai des doutes ...).

Mais bon passons, c'est le lendemain o c'est le plus beau. Il m'appelle car il n'arrive pas  accder  la machine et me dit ceci:
"J'ai un peu scuris le systme, mais je crois que je me suis tromp et comme la commande cat ne fonctionnait plus, je l'ai rcrite". Un grand silence de votre serviteur c'est fait suivre  la fin de la phrase.  ::calim2:: 

Pour ceux qui n'utilise pas des environnement GNU/Linux, la commande cat fait partie des commandes de base. Autant vous dire tout de suite que ce brave spcialiste n'avait pas que cette commande qui ne fonctionnait pas. Il avait russit  me pourrir le systme comme jamais (mme ma soeur na jamais russi  faire aussi bien!).

Pour ne pas vous laisser sur votre fin ...  :;):  Je lui ai refait une installation propre et je lui ai ensuite expliqu  nouveau cet environnement. Cette fois ci, j'y ai pass la journe ...  ::aie:: 

Salutations.

PS: Je n'ai pas encore reu le code source ... Suis pas press  ::roll::

----------


## jabbounet

> Bonjour,
> 
> C'est un peu HS, mais il y a quand mme eu un peu de code qui a t crit ...
> 
> Petite anecdote d'ingnieur systme ...
> Dans le genre idiot, surtout quand c'est un consultant spcialiste GNU/Linux ( ces dire, hein) !
> 
> Je lui prpare une machine toute belle (il doit nous dvelopper un service), je passe une bonne heure  lui expliquer que ce n'est pas Ubuntu et qu'il existe d'autre distribution (dj l, j'ai des doutes ...).
> 
> ...


un vieux proverbe taoiste dit un truc dans le style
celui qui sait ne parle pas.

En gnral cela se vrifie aussi dans la pratique, j'ai vu passer beaucoup d'expert ou pretendu comme tel, et ceux qui connaissaient le mieux leur domaine etaient souvent ceux qui s'en "ventaient" ou qui ne se revendiquaient pas "expert" du dit domaine, bref ceux qui savaient rester humble sur le sujet.

----------


## Mac LAK

> En gnral cela se vrifie aussi dans la pratique, j'ai vu passer beaucoup d'expert ou pretendu comme tel, et ceux qui connaissaient le mieux leur domaine etaient souvent ceux qui s'en "ventaient" ou qui ne se revendiquaient pas "expert" du dit domaine, bref ceux qui savaient rester humble sur le sujet.


Tu as aussi l'ge qui joue : quand je vois passer un CV d'un prtendu "Expert C/C++" portant sur un type g de 22/23 ans avec six mois de stage comme seule exprience professionnelle, j'ai quand mme de srieuses crises de fou rire...  :;):  Tu as aussi la variante avec "Expert C/C++ _confirm_", avec dix ans d'exprience (dont neuf comme DBA, dv Java ou conception de sites Web) : l aussi, grosse rigolade en perspective...

C'est pareil dans tous les domaines : l'exprience significative reste le meilleur critre de jugement pour un expert.

----------


## deadalnix

> C'est pareil dans tous les domaines : l'exprience significative reste le meilleur critre de jugement pour un expert.


C'est un critre important, mais crois moi, il y a des gens qui passent 10 ans  faire les mmes erreurs car ils sont persuads qu'il sont des roxors.

----------


## JulienDuSud

> Tu as aussi l'ge qui joue : quand je vois passer un CV d'un prtendu "Expert C/C++" portant sur un type g de 22/23 ans avec six mois de stage comme seule exprience professionnelle, j'ai quand mme de srieuses crises de fou rire...  Tu as aussi la variante avec "Expert C/C++ _confirm_", avec dix ans d'exprience (dont neuf comme DBA, dv Java ou conception de sites Web) : l aussi, grosse rigolade en perspective...
> 
> C'est pareil dans tous les domaines : l'exprience significative reste le meilleur critre de jugement pour un expert.


Euh... Le C/C++ sont des languages, et la smantique / syntaxe d'un language est relativement aise  apprendre, et le nombre d'annes d'exprience n'est gnralement pas une bonne valeur pour la mesure de la matrise.

J'ai un ami de 22 ans et je pense tre correct en pensant qu'il est un expert du langage. Probablement pas de toutes les API qui existent sur le C++, mais il matrise vraiment le standard. 
Suffit d'aller faire un tour sur ##C++ sur Freenode pour s'apercevoir que les meilleurs ne sont gnralement pas les plus vieux / ceux qui ont le plus d'exprience professionelle.

Aprs, si pour toi un expert c'est celui qui sait pisser 100 lignes en moins d'une minute, alors on a pas la mme dfinition.

----------


## metagoto

> Euh... Le C/C++ sont des languages, et la smantique / syntaxe d'un language est relativement aise  apprendre, et le nombre d'annes d'exprience n'est gnralement pas une bonne valeur pour la mesure de la matrise.
> 
> J'ai un ami de 22 ans et je pense tre correct en pensant qu'il est un expert du langage. Probablement pas de toutes les API qui existent sur le C++, mais il matrise vraiment le standard. 
> Suffit d'aller faire un tour sur ##C++ sur Freenode pour s'apercevoir que les meilleurs ne sont gnralement pas les plus vieux / ceux qui ont le plus d'exprience professionelle.
> 
> Aprs, si pour toi un expert c'est celui qui sait pisser 100 lignes en moins d'une minute, alors on a pas la mme dfinition.


Tu as raison, il y a des "experts" de tous ages. Quoique, "expert jeune", quelque part, c'est un oxymore!
Cependant, maitriser le standard du C++ ne fait pas de la personne un expert C++ _productif_. Or, c'est ce genre de profile qui est gnralement recherch, non pas celui d'un philosophe.

----------


## jabbounet

> Aprs, si pour toi un expert c'est celui qui sait pisser 100 lignes en moins d'une minute, alors on a pas la mme dfinition.


en relisant ce qu'a lit mak, je ne crois pas que ce soit ce qu'il a dit, il a simplement dit que l'exprience significative dans un domaine est un critre de jugement valable.

Je le rejoins un peu sur ce point a condition de savoir la lire sur le CV, j'ai dj vu une personne avec un CV bourr de mission de quelques mois a droite a gauche et qui en fait s'tait fait jeter de clients en clients avant de se faire jeter par sa boite qui avait finit par ne plus trouver de client ou le caser.

----------


## Gouyon

> +1
> 
> Source : http://man.developpez.com/man3/scanf.3.php
> 
> En clair 08 est considr comme de l'octal 
> 
>  %02d serait plus appropri 
> 
> a++


Effectivement a marche comme a. Mais c'est vraiment un pige  C..

----------


## pseudocode

> Effectivement a marche comme a. Mais c'est vraiment un pige  C..


Mais c'est vraiment un pige *du* C.  ::D:

----------


## Mac LAK

> Aprs, si pour toi un expert c'est celui qui sait pisser 100 lignes en moins d'une minute, alors on a pas la mme dfinition.


Tu n'as pas compris. Non, ce n'est pas une question de vitesse de frappe, ni de grandes thories sur le langage ou le dernier design-pattern  la mode.
Un expert, c'est quelqu'un  qui tu vas demander une fonction, et va te rendre un code :Nickel ct commentaires, codage, normes de codage, documentation (la base, quoi...).Aura sorti en mme temps la doc (ou mieux, le programme) d'auto-test et de non-rgression.A dj prvu dans son code les possibles volutions de la fonction, ce qui permettra de ne pas tout pter pour rajouter quelque chose.A suffisamment vu de piges vicieux dans sa vie professionnelle pour envisager  peu prs tous les cas possibles d'volution...  ::mouarf:: Et plein d'autres trucs "normaux" pour une entreprise qui ne fait pas, justement, du pissage de code...  ::twisted:: 

Or, ceci ne s'apprend que par l'exprience : on ne l'enseigne pas  l'cole, et si personne ne te "force"  le faire, 99% des dvs amateurs n'en font pas la moiti. C'est pour cela qu'un dv avec peu d'exprience n'est pas un expert, parce qu'il faut le cadrer systmatiquement.
Cela n'a rien  voir avec le "talent" pour le langage ou pour l'informatique en gnral, c'est simplement que lorsque tu es jeune dbutant, tu es trs trs loin d'avoir vu la plupart des PAC (Piges A C..) courants.

----------


## chaplin

Le pire bout de code, je l'ai vu en RPG, 8 ou 9 boucles imbriques, le stagiaire tait dsoeuvr. Je lui avait conseill d'utiliser un stabylo pour s'y retrouver.

----------


## deadalnix

> Cela n'a rien  voir avec le "talent" pour le langage ou pour l'informatique en gnral, c'est simplement que lorsque tu es jeune dbutant, tu es trs trs loin d'avoir vu la plupart des PAC (Piges A C..) courants.


Je suis tout  fait d'accord sur ta dfinition de l'expert.

Mais si l'exprience est une donne importante la dedans, je maintiens - et j'en ai vu, donc je maintiens de connaissance de cause - qu'il y a des gens qui passent 10 ans  tomber  chaque fois dans les mmes piges  con et  ne pas avoir appris  les viter.

----------


## jabbounet

> Je suis tout  fait d'accord sur ta dfinition de l'expert.
> 
> Mais si l'exprience est une donne importante la dedans, je maintiens - et j'en ai vu, donc je maintiens de connaissance de cause - qu'il y a des gens qui passent 10 ans  tomber  chaque fois dans les mmes piges  con et  ne pas avoir appris  les viter.


et parfois on tombe sur les piges tendu par les autres  ::cry::  en rcuprant la lib ou le  soft developp par d'autres  ::D: , mais c'est un autre dbat

----------


## SteveOS

J'adore le sujet "Retrieving an accountId in the log" sur www.badprogramming.com.
O le programmeur rcupre l'accountId en parsant le fichier de log !

----------


## Alain Defrance

> Aura sorti en mme temps la doc (ou mieux, le programme) d'auto-test et de non-rgression.A dj prvu dans son code les possibles volutions de la fonction, ce qui permettra de ne pas tout pter pour rajouter quelque chose.A suffisamment vu de piges vicieux dans sa vie professionnelle pour envisager  peu prs tous les cas possibles d'volution... Et plein d'autres trucs "normaux" pour une entreprise qui ne fait pas, justement, du pissage de code...


C'est un peu light quand mme. Je connais beaucoup de personnes qui rpondent  ces critres et qui ne sont pas des experts. Avoir un code propre qui marche et continuera  marcher, je dirais que c'est le strict minimum (mme en fin de compte c'est plutt rare). En effet c'est l'entreprise qui apprend a, mais je dirais que l'expertise c'est la matrise d'un sujet en particulier. Pour moi un experts c'est quelqu'un qui matrise totalement une portion de techno. Expert JEE par exemple a veut rien dire, c'est tellement vaste que l'expert en question ne sera que trs peu pointu, or si on fait appel  un expert c'est pour avoir quelqu'un de solide. Un expert JPA par ex a a un sens, quelqu'un qui maitrise totalement la persistance c'est envisageable et ce sont ces derniers qui vont nous pondre de jolies (ou pas) JSR.
L'exprience ne fais pas tout, et malgr mon jeune ge, j'ai eu l'occasion de voir de sacres burnes en entreprise qui ont de l'exprience.

----------


## Mac LAK

> C'est un peu light quand mme. Je connais beaucoup de personnes qui rpondent  ces critres et qui ne sont pas des experts.


Pour reprendre un terme mathmatique, ce sont plutt des "conditions ncessaires mais non suffisantes".
Mais un dbutant possde rarement ces qualifications / notions... Ce qui est tout  fait normal d'ailleurs, ce n'est pas de l'anti-jeune primaire de ma part. Si les dbutants savaient tout, a se saurait depuis le temps, mme si certains croient tout savoir...  :;): 




> L'exprience ne fais pas tout, et malgr mon jeune ge, j'ai eu l'occasion de voir de sacres burnes en entreprise qui ont de l'exprience.


Bien entendu. Mais de mon ct, je n'ai jamais vu / rencontr de _vrai_ expert qui soit jeune... L'exprience ne fait certes pas tout, mais elle reste ncessaire pour pouvoir prtendre tre expert en quoi que ce soit.

----------


## Daestrik

> Bien entendu. Mais de mon ct, je n'ai jamais vu / rencontr de _vrai_ expert qui soit jeune... L'exprience ne fait certes pas tout, mais elle reste ncessaire pour pouvoir prtendre tre expert en quoi que ce soit.


Et encore, exprience et ge sont deux choses diffrentes. Un gars de 20 qui a toujours t passionn, qui a grandi parmi les ordis et qui code depuis qu'il a 10 ans peut avoir plus d'exprience qu'un autre de 30 ans qui a commenc  20 ans  la fac...

----------


## jabbounet

> Et encore, exprience et ge sont deux choses diffrentes. Un gars de 20 qui a toujours t passionn, qui a grandi parmi les ordis et qui code depuis qu'il a 10 ans peut avoir plus d'exprience qu'un autre de 30 ans qui a commenc  20 ans  la fac...


Il aura la comptence technique pour faire du dev propre dans tel ou tel langage la je n'ai aucun doute la dessus. mais qu'en sera t'il des aspects fonctionnel et mtiers? 

Pour avoir rouler ma bosse dans deux ou trois domaines sur dix ans mme si les langages sont les mme les aspects mtiers peuvent parfois diverger du tout au tout. 
L'informatique embarqu temps reel dans des systmes type avion/train/centrale nuclaire n'a pas grand chose  voir avec le SI d'un operateur de telphonie ou d'un acteur de l'industrie automobile. 

Mme si une partie des technos est equivalente voir identique les contraintes mtiers sont tellement divergente que de l'experience dans un domaines et une comprhension fine du mtier des personnes avec qui tu travaille peu vraiment apporter un plus dans les phases de conception/developpement/test d'applications et t'viter de pondre un truc inadapt qui ne sera pas ou peu utilis.

Maintenant on ne me fera pas croire qu'un jeune sorti d'cole aura une comprhension aussi fine de l'un des mtiers voqu que quelqu'un qui en a fait son mtier (sauf le cas de personnes qui ne comprennent rien et n'apprennent pas)  moins d'avoir fait une partie non ngligeable de sa formation au contact de personnes du dit mtier.

----------


## Alain Defrance

> Il aura la comptence technique pour faire du dev propre dans tel ou tel langage la je n'ai aucun doute la dessus. mais qu'en sera t'il des aspects fonctionnel et mtiers? 
> 
> Pour avoir rouler ma bosse dans deux ou trois domaines sur dix ans mme si les langages sont les mme les aspects mtiers peuvent parfois diverger du tout au tout. 
> L'informatique embarqu temps reel dans des systmes type avion/train/centrale nuclaire n'a pas grand chose  voir avec le SI d'un operateur de telphonie ou d'un acteur de l'industrie automobile. 
> 
> Mme si une partie des technos est equivalente voir identique les contraintes mtiers sont tellement divergente que de l'experience dans un domaines et une comprhension fine du mtier des personnes avec qui tu travaille peu vraiment apporter un plus dans les phases de conception/developpement/test d'applications et t'viter de pondre un truc inadapt qui ne sera pas ou peu utilis.
> 
> Maintenant on ne me fera pas croire qu'un jeune sorti d'cole aura une comprhension aussi fine de l'un des mtiers voqu que quelqu'un qui en a fait son mtier (sauf le cas de personnes qui ne comprennent rien et n'apprennent pas)  moins d'avoir fait une partie non ngligeable de sa formation au contact de personnes du dit mtier.


Oui je suis tout  fait d'accord, le mtier c'est le plus difficile  cerner. Enfin aprs on est vraiment concern par le mtier soit dans de petites boites, soit lorsqu'on s'oriente vers le fonctionnel. Et l le fonctionnel c'est un autre mtier, c'est plus dveloppeur, malheureusement en France on part du principe qu'un bon dveloppeur devra partir sur du fonctionnel ... dommage ...

----------


## Chico el guacamole

Bonjour  tous

   Il y a 2 ans, sur Lyon, dans une SSII, un jeune embauch qui eu pour mission de rcuprer en java une liste d'image jpeg dans un rpertoire.
comme il avait brillamment remarqu que les images pouvaient s'crire avec l'extension jpg ou JPG il a eu l'intelligence de griffoner sur un papier ce qu'il s'apprtait  faire : 'jpg, jpG, jPg, jPG, ....JPG'
construire un tableau pour valider les extensions, mais c'est naze !, mme dans un autre langage, on testerait les noms en minuscule.
j'en ri encore.

Je me rappelle que c'est cette mme personne qui ne sortait pas des boucles quand il avait trouv ce qu'il cherchait, a a m'nrve !
par exemple :


```

```

dans une boucle avec plus d'instruction lorsque l'on relit le code on se demande toujours pourquoi  ::): 

Enfin pour les chefs de projets de notre client principal de l'poque, la politique de cration des shells KSH tait de ne pas faire de fonctions, de ne pas factoriser le code, je vous laisse imaginer les copier/coller et ce que je pense de cette hrsie  ::):  

allez comme c'est vous une dernire dans ces scripts KSH :


```

```

j'ai peut-tre tort mais le exit et le else me semble redondant,  le code 'blablabla' et 'blablabla2' tant toujours xecuter ensemble  :;): 

le pire que j'ai fait ?
 mes dbuts, une parmi tant d'autres, une fonction de 600 lignes.
et vous ?

le pire que j'ai vu
un programme C en un fichier de 17000 lignes, rductible  2000 lignes si les rgles de factorisation simples avaient t faites et le code mort enlev.

je rends l'antenne 

a tcho

----------


## kpouer

> Tu as raison, il y a des "experts" de tous ages. Quoique, "expert jeune", quelque part, c'est un oxymore!


dans beaucoup de cas oui mais ca dpend aussi de l'age auquel une personne commence. Un exemple, le concepteur d'origine de jEdit a commenc le projet en 1998, il avait 14 ans, on peut considrer qu' 20 ans c'tait un expert java je pense vu la dure d'exprience et le projet

----------


## Alain Defrance

> dans beaucoup de cas oui mais ca dpend aussi de l'age auquel une personne commence. Un exemple, le concepteur d'origine de jEdit a commenc le projet en 1998, il avait 14 ans, on peut considrer qu' 20 ans c'tait un expert java je pense vu la dure d'exprience et le projet


Aprs faut se mfier. J'ai travaill sur un gros projet dans une SSII et ils avaient mis un expert Java de 19 piges sur le projet ... Et ben bonjour les dgts ... incroyable !
Paradoxalement il y a beaucoup d'experts reconnus, auteur de livre, d'une trentaine d'anne voir moins, donc expert  20 piges c'est chaud, mais bon a peut venir rapidement.

J'ai commenc  programmer vers 14 galement, je n'ai jamais arrter, j'ai maintenant suffisamment d'assurance pour aborder un projet gros sereinement mais je suis trs trs loin de me considrer comme expert ...
Penser qu'on sait tout ou que l'on matrise totalement un sujet c'est aussi bloquer notre propre progression ...

Par ailleurs il y a exprience et exprience. On peut travailler 20 ans sur des projets de merdes ou tu chie des vue/action toute la journe sans acqurir aucune expertise. Il y a des projets qui s'y prtent d'autres non.

----------


## kpouer

Oui c'est sur, mais quand aprs 6 ans de dev on arrive a 20 ans et qu'on a fait tout seul ou presque un projet pas vraiment grand public et pourtant utilis par 2 millions d'utilisateurs, on est quand mme un cas a part. D'ailleurs c'est marrant parce qu'il a compltement switch, ne fait plus de java, maintenant il est sur son propre langage de programmation

----------


## Alain Defrance

> Oui c'est sur, mais quand aprs 6 ans de dev on arrive a 20 ans et qu'on a fait tout seul ou presque un projet pas vraiment grand public et pourtant utilis par 2 millions d'utilisateurs, on est quand mme un cas a part. D'ailleurs c'est marrant parce qu'il a compltement switch, ne fait plus de java, maintenant il est sur son propre langage de programmation


Justement, travailler tout seul c'est diffrent de travailler  plusieurs ...
Ils s'appel comment ce langage ?

----------


## kpouer

C'est Factor :
http://factorcode.org/

Un langage vraiment bizarre mais c'est marrant, on peut vraiment faire plein de choses avec, de l'appli lourde ou web (d'ailleurs le site web lui mme est hberg par un serveur web programm en Factor avec le langage de scripting web de factor).
Bon je sais pas a quoi ca va aboutir au final mais je trouve que le dfi tait intrssant

----------


## covao

langage Brainfuck et Ook

 ::aie::

----------


## Alain Defrance

> Bon je sais pas a quoi ca va aboutir au final mais je trouve que le dfi tait intrssant


Probablement pas grand chose, mais en tous cas c'est toujours des dfis intressants et enrichissants.

----------


## Mac LAK

> Un gars de 20 qui a toujours t passionn, qui a grandi parmi les ordis et qui code depuis qu'il a 10 ans peut avoir plus d'exprience qu'un autre de 30 ans qui a commenc  20 ans  la fac...





> Un exemple, le concepteur d'origine de jEdit a commenc le projet en 1998, il avait 14 ans, on peut considrer qu' 20 ans c'tait un expert java je pense vu la dure d'exprience et le projet





> Oui c'est sur, mais quand aprs 6 ans de dev on arrive a 20 ans et qu'on a fait tout seul ou presque un projet pas vraiment grand public et pourtant utilis par 2 millions d'utilisateurs, on est quand mme un cas a part.


Arguments fallacieux : si on va par l,  35 ans, j'aurais 25 ans d'exprience dans l'informatique (ben oui, j'ai commenc  l'ge de 10 ans...), et j'tais expert avant mme ma majorit ??

Restons ralistes : il n'y a aucune commune mesure entre ce que je faisais avant mon entre dans le monde professionnel et ce que j'ai fait aprs. J'ai pourtant dvelopp des choses rellement complexes avant de commencer  bosser, y compris un modeleur / renderer 3D  une poque o l'acclration 3D n'existait que sur quelques rares cartes pro hors de prix.
Mais ce programme n'tait pas "pro" quoi qu'il en soit : il tait mal document, mal comment, mal dcoup, n'tait pas correctement prvu pour les volutions et n'avait pas subi le dixime des tests qu'il aurait d subir. Pourtant, " l'il", a en jetait un max !! Mais a ne change pas le fait que ce n'tait pas du boulot "propre", ni professionnel, et que a ne faisait absolument pas de moi un expert. Juste un gamin passionn qui se dbrouillait pas mal avec du code.

C'est pour cela que je parlais d'exprience *significative* : lorsque l'on fait a en dilettante et/ou en amateur, on ne se fixe pas le quart des contraintes que l'on a en entreprise. Or, c'est justement de savoir respecter ces contraintes qui fait qu'un boulot de dveloppement est directement utilisable professionnellement, ou pas.

----------


## jabbounet

> Bonjour  tous
> 
> 
> 
> ```
> 
> ```


il n'y a pas que le exit qui gne. si je ne me trompe pas la faon de compter le nombre d'argument aussi non?

----------


## Alain Defrance

> Arguments fallacieux : si on va par l,  35 ans, j'aurais 25 ans d'exprience dans l'informatique (ben oui, j'ai commenc  l'ge de 10 ans...), et j'tais expert avant mme ma majorit ??
> 
> Restons ralistes : il n'y a aucune commune mesure entre ce que je faisais avant mon entre dans le monde professionnel et ce que j'ai fait aprs. J'ai pourtant dvelopp des choses rellement complexes avant de commencer  bosser, y compris un modeleur / renderer 3D  une poque o l'acclration 3D n'existait que sur quelques rares cartes pro hors de prix.
> Mais ce programme n'tait pas "pro" quoi qu'il en soit : il tait mal document, mal comment, mal dcoup, n'tait pas correctement prvu pour les volutions et n'avait pas subi le dixime des tests qu'il aurait d subir. Pourtant, " l'il", a en jetait un max !! Mais a ne change pas le fait que ce n'tait pas du boulot "propre", ni professionnel, et que a ne faisait absolument pas de moi un expert. Juste un gamin passionn qui se dbrouillait pas mal avec du code.
> 
> C'est pour cela que je parlais d'exprience *significative* : lorsque l'on fait a en dilettante et/ou en amateur, on ne se fixe pas le quart des contraintes que l'on a en entreprise. Or, c'est justement de savoir respecter ces contraintes qui fait qu'un boulot de dveloppement est directement utilisable professionnellement, ou pas.


Ce qui me gne c'est que visiblement d'aprs toi un expert c'est quelqu'un qui a une attitude pro. Pour moi c'est quelqu'un qui maitrise totalement son domaine d'expertise. Des gens qui savent travailler en entreprise (test u, test d'intgration, doc, utilisation de forge, redaction fonctionnel, savoir lire une use case, diagramme, dcouper une application par lot, anticiper les priorites, tenir ses deadline, et j'en passe) il y en a des milliers. Mais des gens qui conaissent JEE en profondeur il y en a trs peu.
Je pense qu'il y a une csure norme entre un pro et un expert. Bien videment c'est li, on est pas confront a de gros systmes (plusieurs centaines de milliers de classes) dans un cadre personnel, et donc on ne peut pas tre confront  toute la complxit d'une grande application seul, ni aux contraintes du monde pro. Mais travailler seul n'empeche pas d'tre pointu, et c'est ce qui fait la diffrence entre un pro et un expert.

----------


## Mac LAK

> Je pense qu'il y a une csure norme entre un pro et un expert.


Pas pour moi. tre pro est,  mon sens, un impratif pour tre qualifi d'expert. Je te rappelle que l'antonyme de "professionnel", c'est "amateur"...  :;): 
Tel que je le vois (et l'ai vcu), un amateur (comprendre "dbutant", "stagiaire", "reconverti", etc.) doit tre gr, guid et encadr pour que son travail soit exploitable. Un professionnel, lui, est autonome.

Comment peux-tu considrer qu'un expert doive tre encadr, voire tenu par la main, pour rendre son travail utilisable ? Pour moi, c'est un non-sens. A quoi pourrait bien me servir un "expert" qui, mme s'il connait toute la tripaille interne de son domaine, n'est pas capable de s'interfacer avec les autres, de travailler en collaboration, ou pire : n'a jamais boss sur un projet qui pousse son domaine dans ses derniers retranchements ?

Parce que le cur du problme est l galement : en prenant ton exemple de JEE, est-ce que l'on peut considrer rellement comme expert quelqu'un qui n'a jamais rellement dploy une trs grosse application dans un environnement rel, et non plus dans un joli bac  sable idal construit exprs pour ?

Certes, il y a beaucoup de pros qui ne sont pas des experts, c'est un fait (on a tous un collgue dans le collimateur  ce sujet, je pense). Tout comme il y a beaucoup d'amateurs trs clairs. Mais tre expert, ce n'est pas ne matriser QUE la technique "pure", c'est aussi matriser l'UTILISATION et l'INTGRATION de ladite technique dans un environnement concret. Et pour a, tre professionnel est un impratif.

----------


## deadalnix

J'aurais envie de dire, a dpend expert en quoi.

Un expert, par dfinition, c'est quelqu'un de trs pointu dans son domaine. Il y a des domaines ou l'exprience en entreprise fait beaucoup (mais n'est pas suffisant comme dj dit). Si l'on parle d'un expert dans une technologie, son dploiement, son dveloppement, alors je ne peut que rejoindre Mac LAK.

Mais cela exclue des personnes que je qualifierais d'expertes. Par exemple, on peut tre expert sur des techniques de traitement du signal, de l'intelligence artificielle, etc . . . dans ces domaines, l'exprience et la connaissance priment sur la mthodologie, et peuvent donc tre acquise de faon extra professionnelles (bien que, ce soit  mon avis bien plus facile  acqurir de faon professionnelle).

----------


## Chico el guacamole

> il n'y a pas que le exit qui gne. si je ne me trompe pas la faon de compter le nombre d'argument aussi non?


tu marques un point  ::): , je l'ai crit de mmoire et c'est $? et non $*

de toutes manires je trouve que ces langages de scripts 'hiroglyphiques' ( j'entends par l utilisant des symboles  tout va :  ksh, perl, php ) ne me plaise pas. Je prfre quand mme des langages plus 'lisible', mais c'est un avis purement subjectif j'en conviens.

par contre je pense que mme dans un langage de script, l'utilisation de rgles simples de codage et une criture simple et ar ( viter de mettre 50000 instructions en une ligne par exemple ) permet un relecture et une maintenance plus aise.

Venant au dpart du monde PC, je me suis fait depuis 5 ans au monde Linux/unix et j'ai du mal  y revenir, je m'installe sur tous mes postes PC/Windows, la console msys ou les commandes unix pour la console DOS.

je crois que c'est un autre dbat, on s'loigne du sujet  ::): , mais a manque un langage de script simple et efficace multi-plateforme, non ?

----------


## Alain Defrance

> Parce que le cur du problme est l galement : en prenant ton exemple de JEE, est-ce que l'on peut considrer rellement comme expert quelqu'un qui n'a jamais rellement dploy une trs grosse application dans un environnement rel, et non plus dans un joli bac  sable idal construit exprs pour ?
> 
> Certes, il y a beaucoup de pros qui ne sont pas des experts, c'est un fait (on a tous un collgue dans le collimateur  ce sujet, je pense). Tout comme il y a beaucoup d'amateurs trs clairs. Mais tre expert, ce n'est pas ne matriser QUE la technique "pure", c'est aussi matriser l'UTILISATION et l'INTGRATION de ladite technique dans un environnement concret. Et pour a, tre professionnel est un impratif.


En fait je crois qu'on est d'accord, on a juste du mal  se mettre d'accord sur les termes. Je voulais dire que pour moi pro != expert. Mais l'exprience rel du terrain est une condition ncessaire mais pas suffisante  justifier un niveau d'expertise. Au final on est du mme avis  :8-):

----------


## Mac LAK

> En fait je crois qu'on est d'accord, on a juste du mal  se mettre d'accord sur les termes. Je voulais dire que pour moi pro != expert. Mais l'exprience rel du terrain est une condition ncessaire mais pas suffisante  justifier un niveau d'expertise. Au final on est du mme avis


Si, comme ton message le laisse penser, tu veux simplement prciser que tous les pros ne sont pas des experts, mais qu'un expert doit forcment avoir une exprience relle (donc, selon mes termes, tre un professionnel), alors oui, on est bien d'accord en effet.

----------


## stef13_fr

> Bonjour  tous
> 
>    Il y a 2 ans, sur Lyon, dans une SSII, un jeune embauch qui eu pour mission de rcuprer en java une liste d'image jpeg dans un rpertoire.
> comme il avait brillamment remarqu que les images pouvaient s'crire avec l'extension jpg ou JPG il a eu l'intelligence de griffoner sur un papier ce qu'il s'apprtait  faire : 'jpg, jpG, jPg, jPG, ....JPG'
> construire un tableau pour valider les extensions, mais c'est naze !, mme dans un autre langage, on testerait les noms en minuscule.
> j'en ri encore.
> 
> Je me rappelle que c'est cette mme personne qui ne sortait pas des boucles quand il avait trouv ce qu'il cherchait, a a m'nrve !
> par exemple :
> ...



Il faut que tu m'explique un peu quand tu dis "
Enfin pour les chefs de projets de notre client principal de l'poque, la politique de cration des shells KSH tait de ne pas faire de fonctions, de ne pas factoriser le code"
A mon avis, c'est vraiment anti productif et dans l'esprit compltement abrant. Ce qui m'tonne le plus, c'est que c'est une politique dfini par des chefs de projets. Y'a surement quelque chose que j'ai rat. Ils sont pay au Ko ? au nombre de ligne ?
Explique car a va m'empcher de dormir  :;):

----------


## Jidefix

> Il faut que tu m'explique un peu quand tu dis "
> Enfin pour les chefs de projets de notre client principal de l'poque, la politique de cration des shells KSH tait de ne pas faire de fonctions, de ne pas factoriser le code"
> A mon avis, c'est vraiment anti productif et dans l'esprit compltement abrant. Ce qui m'tonne le plus, c'est que c'est une politique dfini par des chefs de projets. Y'a surement quelque chose que j'ai rat. Ils sont pay au Ko ? au nombre de ligne ?
> Explique car a va m'empcher de dormir


A mon avis c'tait ironique  :;):

----------


## Chico el guacamole

> Il faut que tu m'explique ....Explique car a va m'empcher de dormir


J'ai un peu ironis mais pas tant que a,  la politique tait 'n'importe qui doit pouvoir intervenir sur le code mme la prod' et cela c'est traduit en 'faite du code ultrasimple, faite comme celui qui est pass avant vous' et comme c'tati du service et des missions  la petite semaine c'tait un beau foutoir  ::): 
exemple :


```
ls -lrt unfichier | cut -c8
```

pour rcuprer la taille d'un fichier
au lieu de 


```
wc -l unfichier
```

ou dans un shell/prg la phrase 


```
echo "blablabla avec paramtres...  `date +%....`" >> /rep1/rep2/rep3/rep4/ficlog.horodate
```

 rpte de 20  200 fois voire plus
au lieu de fabriquer une fonction ou bien englober un ensemble d'instruction


```

```

avc en plus aucune rcupration des erreurs ( 2>&1 ) dans les logs vu que le fichier de log  ne rcuprait que des echos

 ::):

----------


## ThomasR

```

```

Vous noterez l'utilisation de la regex, ca c'est de l'optimisation !

----------


## deadalnix

J'en ai fait un pas mal hier . . .

Une solution pour un client doit tre livre bientt. Bien sur, le mec s'en tant occup est partit en vacances. Et on s'aperoit qu'il y a un bug dans le script de migration des donnes. Du coup je suis mis sur l'affaire.

Aprs avoir pass pas mal de temps  tout dcortiquer, je ne trouve pas le bug (faut sire que je n'ai pas suivis le projet depuis le dbut donc je ne suis pas trs au fait).

Au final, j'ai rajout une tape dans le script qui consiste  corriger l'tape d'avant. Soit :

1/ Lire et insrer les donnes dans le nouveau systme (script buggu).
2/ Corriger les problmes dans les insertion de l'tape 1.

J'ai ajout la partie 2.

----------


## yan

mon premier bug que j'ai corrig dans ma carrire professionnel, sur une TMA sur un simulateur temps rel Infra Rouge C++ .
Dans le code de la formule de calcule du corps noire, donc la base de toute la simulation, j'ai trouv une constante qui ressemble  cela :


```

```

devinais ce que vaut *e* et pour quoi le resultat de cette fonction etait fausse?
 ::aie::

----------


## sigap

> J'en ai vu un pas mal en php, fait par le responsable dveloppement de ma bote :
> 
> 
> 
> ```
> 
> ```
> 
> Ce jour-l je me suis dis que finalement je n'tais pas le plus mauvais ...



 ::mouarf::  le pauvre ! il devait subir une cure de desintox pr ecrire du code pareil

----------


## lochnar

ligne 1: <?php mysql_query("SELECT... "); ?> ...

ce fichier n'tait pas inclus dans un autre, il est donc vident que sans la connexion  la bdd...  ::aie:: 
Et dire que ca venait de mon suprieur qui cherchait d'o venait son erreur depuis... 2h...  ::mouarf:: 

L'anecdote suivante n'est pas une erreur de programmation mais... bref je vous laisse en juger:
-"Mon script ne passe pas dans: while( $res = mysql_fetch_array($query_res) ), il ne semble y avoir aucun rsultat  la requte..."
-"Pourquoi tu fais pas un for?"
-"..." *dpit*

----------


## apieum

... contenait des trucs comme a :



```

```

A la diffrence que la classe c avait une dizaine de classes parentes parpilles dans diffrents fichiers sur un joli petit site corporate qui comptait pas loin d'une cinquantaine de fichiers.(pour une trs grosse socit spcialiste de l'lectronique et notamment des puces... mais je balancerai pas  ::roll::  ) 
Je me suis bien amus  le debugguer gratuitement. ::calim2:: 
Le pire c'est qu'ils n'avaient aucunes excuses: gros budgets, framework interne, tout en ajax ... bref ils taient expriments et reconnus comme des "experts".
Un peu trop peut-tre parce que a fonctionnait jusqu' ce que l'on mette  jour PHP.
 ::aie:: 

Bref, je voudrais pas relancer 


> Arguments fallacieux...


 et le dbat sur les "experts" mais l'exprience pour un dveloppeur a a quand mme beaucoup d'inconvnients.
Quand on bosse on a pas toujours le temps de se former et on fait pas mal d'impasses.
J'en ferai pas une rgle gnrale, mais en principe un bon dv a entre 3 et 6 ans d'exprience.
En de, il fait des erreurs par manque de savoirs, au del  cause de savoirs errons ou obsoltes.

----------


## Mac LAK

> En de, il fait des erreurs par manque de savoirs, au del  cause de savoirs errons ou obsoltes.


Entirement d'accord pour la premire clause. Pour la seconde, c'est l o l'on arrive dans le fait que tous les professionnels expriments ne sont pas forcment des experts... Et a ne fait pas d'un dv qui a 3  6 ans d'exprience un expert pour autant !  :;):

----------


## apieum

> Pour la seconde, c'est l o l'on arrive dans le fait que tous les professionnels expriments ne sont pas forcment des experts... Et a ne fait pas d'un dv qui a 3  6 ans d'exprience un expert pour autant !


  ::ccool:: 

Je voulais juste rajouter que le fait de se remettre en cause dans son mtier a plus de chance de faire d'un professionnel un expert, que la reconnaissance de son statut par ses pairs.
C'est pour cela qu'une exprience de 3  6 ans (tout dpend de des projets bien sur) peut faire d'un bon dveloppeur, un expert, car il n'est souvent pas reconnu  ce titre et se remet en cause pour y parvenir....
Comme je disais on ne peut pas en faire une rgle.  ::): 

Perso, j'ai commenc  faire mes premier bout de code il y a 20 ans. Je n'ai jamais travaill dans une socit, je n'ai pas de diplme en info... a ne m'a pas empch de crer ma socit d'info au dbut de cette anne et de m'arracher les cheveux jusqu' la tte quand je rcupre le travail des autres, ou que je dois corriger leurs bugs.

Je crois que *dans la srie des plus mauvais bout de code* que j'ai vu (du moins les plus nervants), ce sont des soit-disant "experts" en accessibilit (pour les sites web) qui les ont pondu.
J'ai tudi le HTML directement avec les guidelines du W3C et bluefish (diteur de texte avanc) et pour moi, l'habillage du site (le style) n'a rien  voir avec la mise en page (HTML) donc les images de l'habillage dpendent des styles CSS, les images des contenus de HTML. (a parait vident)

En matire d'accessibilit une image doit absolument avoir une proprit "alt" avec une petite description. Comme une bonne partie des gens qui font des sites web ont commenc  travailler avec dreamweaver (et des trucs inutiles dans le mme style) ils ne font pas la distinction entre le style et la mise en page.
Et j'ai trouv  maintes reprise des sites dit "accessibles" avec des balises img pour le style et une proprit alt="*"  ( * est vraiment une roue de secours) alors qu'il suffit de savoir faire du code HTML propre pour qu'un site soit presque totalement accessible.

Ce qui est particulirement nervant dans l'histoire c'est que ces prtendus experts profitent du handicap de certaines personnes pour vendre leurs prestations beaucoup plus chres et ne se proccupent absolument pas du fond du problme qui est de rendre le web accessible  tous. ::?: 


Bref on fait tous des erreurs mais je crois que c'est quand mme moins grave quand on fait son boulot en pensant aux autres.

Pour le fun :  ::): 
http://fae.cita.uiuc.edu/

----------


## Jidefix

Bon alors juste pour la petite histoire, j'ai t promu par ma SSII expert junior webmethods/java au bout d'un an de vie professionelle  :;): 
Moi je dit pas non m'enfin je le crie pas partout non plus (qu'est ce qu'ils m'ont mis au boulot...)  ::aie::

----------


## inconnu652000

> ligne 1: <?php mysql_query("SELECT... "); ?> ...
> 
> ce fichier n'tait pas inclus dans un autre, il est donc vident que sans la connexion  la bdd... 
> Et dire que ca venait de mon suprieur qui cherchait d'o venait son erreur depuis... 2h... 
> 
> L'anecdote suivante n'est pas une erreur de programmation mais... bref je vous laisse en juger:
> -"Mon script ne passe pas dans: while( $res = mysql_fetch_array($query_res) ), il ne semble y avoir aucun rsultat  la requte..."
> -"Pourquoi tu fais pas un for?"
> -"..." *dpit*


Voila exactement pourquoi je critique PHP !

Le langage n'est pas architectur pour du MVC ou MVC2. Donc c'est la porte ouverte  toutes les fentres  ::aie::

----------


## yan

> Bon alors juste pour la petite histoire, j'ai t promu par ma SSII expert junior webmethods/java au bout d'un an de vie professionelle 
> Moi je dit pas non m'enfin je le crie pas partout non plus (qu'est ce qu'ils m'ont mis au boulot...)


en SSII tu deviens expert aprs 2J sur un techno normalement  ::koi::

----------


## Jidefix

> en SSII tu deviens expert aprs 2J sur un techno normalement


C'est vrai mais officiellement a se fait pendant les entretiens annuels, pas avant  :;): 
Remarque ils ont bien essay de me vendre comme architecte il y a quelques mois  ::D:  (bon on m'a pas pris et franchement je peux pas leur donner tort)

----------


## adiGuba

> Bon alors juste pour la petite histoire, j'ai t promu par ma SSII expert junior webmethods/java au bout d'un an de vie professionelle


J'ai vu pire : au bout de 3 mois,  peine sortie de la priode d'essai ! C'est tomb sur ma collgue de bureau. La chef vient la voir :
" Dis tu connais XML ? "" Heu... Oui un peu pourquoi ? "" Trs bien, tu serais notre expert XML aprs de ******* _(trs gros client que je ne citerais pas)_ "
Aprs elle se baladait partout avec un bouquin XML pour le feuilleter lorsqu'elle avait un peu de temps....  ::aie:: 


a++

----------


## Mac LAK

> en SSII tu deviens expert aprs 2J sur un techno normalement


Voire moins...
_- Tu connais PHP ?
- J'en ai entendu parler.
- Tu es donc expert PHP, je le met sur ton CV.
- Heu... J'ai jamais boss rellement avec, moi !
- Bah, tu sais programmer, non ?
- Oui, mais en Lisp / C / Ada / Cobol / Fortran (rayer la mention inutile) !
- C'est pareil, c'est de l'informatique. On a une mission de 6 mois  Trouland sur du dv PHP, on te positionne dessus. On compte sur toi, tu seras seul sur le projet.
- ...._


_EDIT : Grill, je ne suis pas le seul  avoir dj vu a, on dirait..._  ::mouarf::

----------


## metagoto

> Voire moins...
> _- Tu connais PHP ?
> - J'en ai entendu parler.
> - Tu es donc expert PHP, je le met sur ton CV.
> - Heu... J'ai jamais boss rellement avec, moi !
> - Bah, tu sais programmer, non ?
> - Oui, mais en Lisp / C / Ada / Cobol / Fortran (rayer la mention inutile) !
> - C'est pareil, c'est de l'informatique. On a une mission de 6 mois  Trouland sur du dv PHP, on te positionne dessus. On compte sur toi, tu seras seul sur le projet.
> - ...._


Des fois je me dis que je devrai me lancer dans l'informatique  ::mrgreen::

----------


## inconnu652000

> J'ai vu pire : au bout de 3 mois,  peine sortie de la priode d'essai ! C'est tomb sur ma collgue de bureau. La chef vient la voir :
> " Dis tu connais XML ? "" Heu... Oui un peu pourquoi ? "" Trs bien, tu serais notre expert XML aprs de ******* _(trs gros client que je ne citerais pas)_ "
> Aprs elle se baladait partout avec un bouquin XML pour le feuilleter lorsqu'elle avait un peu de temps.... 
> 
> 
> a++


Je crois que cette histoire a t vcu par la moiti des collaborateurs en SSII !
J'y ai eu droit aussi ! J'ai fait du xslt sans savoir ce que voulait trop dire schma xml ...
J'ai dut tout apprendre en mme temps que la ralisation.
Pour xml a va, si doit faire une appli web cruciale oupsss

----------


## jabbounet

> Voire moins...
> _- Tu connais PHP ?
> - J'en ai entendu parler.
> - Tu es donc expert PHP, je le met sur ton CV.
> - Heu... J'ai jamais boss rellement avec, moi !
> - Bah, tu sais programmer, non ?
> - Oui, mais en Lisp / C / Ada / Cobol / Fortran (rayer la mention inutile) !
> - C'est pareil, c'est de l'informatique. On a une mission de 6 mois  Trouland sur du dv PHP, on te positionne dessus. On compte sur toi, tu seras seul sur le projet.
> - ...._
> ...


dj vu, mais la ou j'tais  en SSII on se badigeonnais de poudre magique en rptant 3 fois le nom de la techno

----------


## yan

> dj vu, mais la ou j'tais  en SSII on se badigeonnais de poudre magique en rptant 3 fois le nom de la techno


http://www.poudreverte.org/

----------


## el_slapper

C'tait pas aussi violent pour moi, mais....."tus a dj boss sous AS/400? Non. Tu sais programmer en RPG? Ah bon, c'est un langage? Tu commences ici et maintenant, ntre forfait est en retard, et on compte sur toi. Ah, et comme on ne savait pas qui on allait prendre, tu t'appelleras Alexandre Machin pour quelques jours.....sans quoi tu n'aurais pas eu de matriel!".

A noter le coup du faux nom, un peu escroc, mais trs efficace dans les environnements ou une demande de machine met une semaine  se concrtiser.

----------


## Boojum

Personnellement, ce que je reproche le plus  un dveloppeur, ce n'est pas de faire des boulettes, a arrive (j'aurais tendance  davantage reprocher  leurs responsables de ne pas les avoir assez encadrs). C'est de ne pas tester ce qu'il fait, parce que l c'est carrment un manque de conscience professionnelle.

Un petit exemple de code PL/SQL, ralis par un gars qui bossait depuis un an sur la mme application (J2EE et normment de PL/SQL)... Syntaxe peut-tre approximative, PL/SQL n'est pas ma tasse de th. Etonnamment, a n'a jamais march. Plus tonnant encore, a n'a t dcouvert qu' la mise en production, aprs que la maintenance soit passe chez nous.



> SELECT COUNT(*) INTO v_count FROM table WHERE /* des conditions */;
> IF count != -1 THEN
>     RETURN code_erreur;
> END IF;


Quelques petits bouts que j'ai pu voir aussi :



> if (machin.equals(null)) { ...





> List result = new ArrayList();
> for(int i = 0; i<myList.size(); i++) {
>     result.add(myList.get(i));
>     if (/* je sais plus quels critres */) {
>         result.remove(myList.get(i));
>     }
> }


J'ai galement eu droit  un superbe bloc d'une centaine de lignes, dont je n'ai jamais t compltement sr de ce qu'il faisait. Aprs tests et tude algorithmique, il me semblait bien que la rponse tait "absolument rien" (parcours de listes et de maps en tous sens avec ajouts et suppressions pour revenir au final  l'tat initial). Faute de temps pour vraiment vrifier, j'ai mis un commentaire pour signaler le fait. Je suis sr qu'il y est encore aujourd'hui.

En vrac, dans la catgorie style pourri, je demande la JSP d'environ 9000 lignes avec davantage de code Java que de balises. Dans la catgorie "incomptent roi du monde", je connais un "expert technique" (c'est son titre officiel) qui explique que la mutualisation de code c'est mal : si il y a un bug dans une fonction rutilise, on va le retrouver partout...

----------


## Legarsdelouest

Au passage, une que j'ai trouve dans le code d'un ami :




```

```

No comment  ::mrgreen::

----------


## jabbounet

> En vrac, dans la catgorie style pourri, je demande la JSP d'environ 9000 lignes avec davantage de code Java que de balises. Dans la catgorie "incomptent roi du monde", je connais un "expert technique" (c'est son titre officiel) qui explique que la mutualisation de code c'est mal : si il y a un bug dans une fonction rutilise, on va le retrouver partout...


Il oubli que de factoriser fait qu'il y'a moins de lignes a maintenir et donc peu rendre la tache de maintenance moins difficile. 
Si le bug est dans un des algorithme qui n'est pas "mutualis" on le retrouve dans toutes les implmentations de l'algorithme et qu'il faut donc le corriger partout (risque d'oubli), alors que si c'est factoris dans une fonction dont le nom permet de comprendre clairement ce que cela fait il n'y a qu'une seul et unique correction  faire.

Personnellement je pense que factoriser correctement son code limite normment de dgats et que c'est l'une des bases de la programmation.

----------


## Jidefix

> Personnellement je pense que factoriser correctement son code limite normment de dgats et que c'est l'une des bases de la programmation.


Je pense pas que tu aie beaucoup de monde  convaincre ici  :;):

----------


## Alain Defrance

> Il oubli que de factoriser fait qu'il y'a moins de lignes a maintenir et donc peu rendre la tache de maintenance moins difficile. 
> Si le bug est dans un des algorithme qui n'est pas "mutualis" on le retrouve dans toutes les implmentations de l'algorithme et qu'il faut donc le corriger partout (risque d'oubli), alors que si c'est factoris dans une fonction dont le nom permet de comprendre clairement ce que cela fait il n'y a qu'une seul et unique correction  faire.
> 
> Personnellement je pense que factoriser correctement son code limite normment de dgats et que c'est l'une des bases de la programmation.


Ca sent le vcu  ::mouarf::

----------


## ThomasR

> Au passage, une que j'ai trouve dans le code d'un ami :
> 
> 
> 
> 
> ```
> 
> ```
> 
> No comment


J'imagine que dans les instructions doit y avoir une condition o il ajoute 1, sinon c'est boucle infinie.

----------


## Legarsdelouest

C'est bien une boucle infinie qui est l . Et je crois que j'ai du faire la mme faute la toute premire fois que j'ai commenc  coder  ::mrgreen:: 

Ah nostalgie.......

----------


## kpouer

> Bon alors juste pour la petite histoire, j'ai t promu par ma SSII expert junior webmethods/java au bout d'un an de vie professionelle 
> Moi je dit pas non m'enfin je le crie pas partout non plus (qu'est ce qu'ils m'ont mis au boulot...)


ah expert junior, ils sont marrant quand mme les SSII pour inventer des non-sens, soit on est expert soit on est junior

----------


## Jidefix

> ah expert junior, ils sont marrant quand mme les SSII pour inventer des non-sens, soit on est expert soit on est junior


Ben en gros faut interprter le "expert" comme un "a dej travaill sur" et le junior comme un "mais pas trop longtemps donc soyez gentil avec lui"  ::D:

----------


## deadalnix

> Personnellement je pense que factoriser correctement son code limite normment de dgats et que c'est l'une des bases de la programmation.


J'irais bien plus loin : si tu as deux bouts de code qui ont des similarits, c'est que ta conception est foireuse.

J'ajouterais que non seulement le code dupliqu est  corriger partout en cas de bugs (et il y a risque d'oubli) mais que plus le code est utilis, et dans des cas diffrents, et plus les bugs seront trouvs rapidement et corrig rapidement.

Moins le code est excut, et plus il y aura des problmes dedans.

----------


## Pill_S

Dans l'absolu ok, mais dans la vraie vie c'est rarement comme a.

Mme avec les meilleures intentions du monde, je me demande quel projet peut se vanter d'tre parfaitement implment... Ils ont tous des dfauts, il faut faire la diffrence entre les dfauts graves qui auront des consquences  long terme, et les dfauts mineurs...

La plupart des dfauts sont souvent lis  l'historique d'une application... Les premires versions sont toujours impecs niveau architecture, puis au fur et  mesure des changements/volutions de specs, les cots de refactoring seraient trop importants, alors on dgrade la qualit structurelle pour amliorer la qualit fonctionnelle...

C'est toujours facile de critiquer un code. C'est beaucoup plus dur de reprendre un projet en se disant "ok il a son vcu, il a ses dfauts, faut bien vivre avec et malgr tout je dois faire mon boulot". Ne pas confondre duplicata de code et code moisi....

 :;):

----------


## ThomasR

> C'est bien une boucle infinie qui est l . Et je crois que j'ai du faire la mme faute la toute premire fois que j'ai commenc  coder 
> 
> Ah nostalgie.......


Dur dur, rendu  ce stade faut reprendre les bases, ou les continuer  ::aie:: 

Mais bon, c'est avec des erreurs comme  qu'on apprend, l'important c'est d'avoir assimil pourquoi cette erreur et comment la rsoudre.

----------


## Legarsdelouest

Exactement, je n'aurai pas dit mieux

Et que celui qui n'a jamais cod une application sans avoir de problmes lors des tests me jettent la premire pierre  ::aie::

----------


## el_slapper

> Exactement, je n'aurai pas dit mieux
> 
> Et que celui qui n'a jamais cod une application sans avoir de problmes lors des tests me jettent la premire pierre


j'irais plus loin : si du premier coup la compil passe impec, je trouve a louche. Et si en plus je ne trouve pas d'erreur fonctionnelle  l'excution, c'est qu'il y a baleine sous gravillon.....

----------


## Legarsdelouest

> Et si en plus je ne trouve pas d'erreur fonctionnelle  l'excution, c'est qu'il y a baleine sous gravillon.....


Je mets 20/20 pour l'expression  ::roi::

----------


## Sbastien Cosson

Moi qui ne suis pas DU TOUT comme vous tous dveloppeur professionnel, certaines de vos interventions me laissent un rien rveur...

Dans la catgorie un rien banale (et dj voque dans ce fil) , je reste toujours tonn de lire des choses comme


```
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { ... }
```

dans des pages comme
http://php.net/manual/fr/function.fgetcsv.php

Exemple videmment repris partout...
 ::aie::

----------


## metagoto

> ```
> while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { ... }
> ```


Quel est le problme ?

----------


## Sbastien Cosson

Ne serait-ce pas plus simple d'crire :


```
while ($data = fgetcsv($handle, 1000, ",")) { ... }
```

???

----------


## Pill_S

> Ne serait-ce pas plus simple d'crire :
> 
> 
> ```
> while ($data = fgetcsv($handle, 1000, ",")) { ... }
> ```
> 
> ???


ce n'est pas pareil...

!== est un test d'galit et de type, pas seulement d'galit, donc rien de choquant

----------


## deadalnix

Dans le premier cas, il faut que $data vaille false pour s'arrter.

Dans l'autre, la boucle peut s'arrter si $data vaut "", 0 ou tout autre valeur qui sera caste en false pour effectuer le test.

----------


## Just Modeste

J'ai droit  des trucs du genre :


```

```

----------


## Invit

> J'ai droit  des trucs du genre :
> 
> 
> ```
> 
> ```


c'est vrai que c'est moche mais c'est amusant de faire un max de choses en 1 ligne 

ex :



```
elc = string.Join(";", Array.ConvertAll<char, string>(elc.ToCharArray(), new Converter<char, string>(delegate(char un_char) { return un_char.ToString(); })));
```

pour insrer un ; entre chaques caractre de elc  ::):

----------


## Pill_S

> Je suis tomb sur a rcemment, sur une application payante :
> 
> (fichier inclus sur toutes les pages)
> 
> 
> ```
> 
> ```
> 
> ...


trs franchement je comprend pas o est le problme... ok c'est pas le meilleur code du monde mais il n'y a ni faute grave ni erreur syntaxique ni quoi que ce soit

----------


## metagoto

> trs franchement je comprend pas o est le problme... ok c'est pas le meilleur code du monde mais il n'y a ni faute grave ni erreur syntaxique ni quoi que ce soit


La faute grave serait la scurit. Le code est calamiteux de ce point de vue l

----------


## 3uclide

j'ai moi mme fait un truc du genre



```

```

Y a un truc que je n'avais pas encore compris :o

----------


## Mdinoc

Ben quoi? C'est une faon parfaitement OK de faire quelque chose deux fois...

----------


## jabbounet

> Ben quoi? C'est une faon parfaitement OK de faire quelque chose deux fois...


je suis d'accord a vite un copier coller d'un code, et en plus tu peux te servir de l'indice pour subtilement modifier le traitement sur la seconde passe

----------


## tresorunikin

Un grand dveloppeur de sites webs (sous macromedia) mais un jour, devant le Bloc note  il ns a vraiement mis d'accord qu'il tait fou avec ces lignes!


```

```

Comme c'est surieux de colorer le titre d'une page!

----------


## Alain Defrance

> Un grand dveloppeur de sites webs (sous macromedia) mais un jour, devant le Bloc note  il ns a vraiement mis d'accord qu'il tait fou avec ces lignes!
> 
> 
> ```
> 
> ```
> 
> Comme c'est surieux de colorer le titre d'une page!


Rho faudrait lui expliquer ce que c'est de la validation XML  ::mrgreen::

----------


## ILP

> Rho faudrait lui expliquer ce que c'est de la validation XML


D'un point de vue XML, ce qu'il a crit est correct en "standalone". Mais du point de vue HTML ou xHTML, c'est l'horreur  ::aie:: .

----------


## jabbounet

> D'un point de vue XML, ce qu'il a crit est correct en "standalone". Mais du point de vue HTML ou xHTML, c'est l'horreur .


d'un certain cot si j'ai bien compris ce dveloppeur a l'habitude d'utiliser un outils pour gnrer ses pages. il est probable qu'il n'ai pas regard le code (gnr) de prs depuis longtemps d'o son erreur. Comme quoi savoir comment marche son outil de travail et ce qu'il y'a en dessous peu aider dans les cas extrme ou tu te retrouve en slip a coder au bloc note  ne pas faire certaines erreurs..

----------


## spidermario

Mais tout de mme, colorer le titre en rouge,  quoi pensait-il ?  ::aie:: 

Esprait-il obtenir a ?

----------


## Haegemonia

Oh moi j'en ai une pas mal....



```

```

Un pote travaillait sur un projet utilisant une fonction de hachage... Il l'ecrit et se rend compte que quelque soit la valeur... elle retournait 0 tout le temps... Et 1 Heure aprs on arrive dans la salle, on le voit enerv un max, et on lui dit :

Ben c'est logique  ::aie:: 

Vous avez vu pourquoi  ::mouarf::

----------


## jabbounet

> Oh moi j'en ai une pas mal....
> 
> 
> 
> ```
> 
> ```


cela s'appelle une faute d'tourderie..... un oeil neuf la voit facilement le gars qui l'a dvelopp se fait avoir par son cerveau qui ne veux pas voire la connerie dans le fichier car ce dernier pense que le code est comme il est dans la tte.....

mine de rien elle font souvent perdre du temps celles l  ::mouarf::

----------


## dvdbly

> J'ai boss avec un presta tellement nul que je sais pas trop quel bout de code choisir.
> 
> J'ai eu droit  celui-ci, plutt pas mal : 
> 
> Dans une page de traitement d'un formulaire : 
> 
> 
> 
> ```
> ...


Perso, j'y vois un intrt certes attnu par le chercher/remplacer :
en cas de modification du nom du tableau, on ne le change qu'une fois sans risque d'oublier une affectation dans un include quelconque... si j'ai bien compris.

----------


## othebault

*Mode squentiel en Pascal*



```

```

J'ai suppos que c'tait conu pour distraire le mainteneur...

J'ai trouv aussi quelques techniques que l'on pourrait qualifier, comme dire, de "diffrentes" : 

*Exemple 1 : Qu'est ce qu'une variable ?*

Une procdure longue (300 lignes environs) qui au dbut du traitement stocke un premier rsultat dans un champ d'une table de paramtres d'un SGBD.
Jusque l, tout va presque bien.
Quelques dizaines de lignes plus loin, la mme procdure lit la valeur de ce champ, pour effectuer un nouveau traitement.

Passons sur le fait que cette procdure tait monstrueuse. Le plus drle (??) c'est que ce paramtre en SGBD n'tait utilis que dans cette procdure.

 :8O: 

*Exemple 2 : Comment faire un ping en delphi 3 sur win 9x ?*

1 - ouvrir un fichier texte en criture
2 - dans ce fichier crire le source d'un batch qui va appeler la commande ping "adresse" > resultat.txt
3 - lancer le batch par createprocess
4 - charger le fichier resultat.txt
5 - interprter correctement le texte de resultat.txt

Tout a au lieu d'utiliser la fonction qui va bien dans icmp.dll

----------


## Arnaud F.

Vu rcemment :



```

```


Code qui pourrait tout simplement s'crire



```

```


 ::calim2::

----------


## Mdinoc

Wow, le retour du for-case paradigm!

----------


## GoTrUnKo

```

```



Question : "mon script a une erreur ?" 


J'en ai encore des frissons  :8O:

----------


## spidermario

Il a cru utiliser un langage fonctionnel  ::aie::  (pour parler de ce que je connais, dans OCaml, Erlang et Haskell, les if/then/else et l'quivalent des switch renvoient bien une valeur)

----------


## yobuntu

> *Mode squentiel en Pascal*
> 
> 
> 
> ```
> 
> ```
> 
> J'ai suppos que c'tait conu pour distraire le mainteneur...


Notez que c'est pas si con, (en delphi je sais pas mais en C a pourrait limite avoir une utilit de programmer comme a)




```

```

devrait sortir un truc genre
123456789234567893456789456789567896789789899

J'en vois pas vraiment l'utilit mais en tout cas c'est pas pareil que d'crire tout  la suite

----------


## Mac LAK

> (en delphi je sais pas mais en C a pourrait limite avoir une utilit de programmer comme a)


Delphi / Pascal ne permet pas de continuer sur le _case_ suivant : si tu prfres, le _break_ est tacite et obligatoire... Dans ce langage prcis, a n'a donc pas de sens rel.
En C, cela pourrait ventuellement avoir un intrt d'un point de vue obscurcissement de code, mais d'un point de vue fonctionnel, j'ai des doutes...  :;):

----------


## Amethyste

il y a quelques annes je bossais en binme avec un gars responsable de la partie base de donnes et des DAL de l'appli.

Une de ses fonctions ne marchant pas je lui envoie une liste de user case  dboguer.

Le gars ne s'est pas dmont, il a mis le code de la DAL en commentaire et test chaque cas de tests pour retourner le rsultat attendu.

le pire est lorsqu'il m'a sortit qu'il avait fait a parce que la proc stoc ne marchait pas!!!?????  ::ccool:: 



Ce jour l j'ai compris pourquoi dans les tours on ne peut pas ouvrir les fentres.


Dans le mme genre le chef de projet lui demande de renommer une table. Il le fait et laisse en l'tat les procs stocs.   ::roll:: 

Ben oui, on lui avait pas demand de les modifier galement....



et une dernire.
Un collgue plutt dveloppeur ASP. On l'envoi en entretient chez un client. Entretien qui tourne court trs vite, le client voulait un dveloppeur JSP.

le vendeur: ben c'est juste une lettre qui change!

Ca c'est sr!

----------


## heero

y'a quelques semaines j'ai eu droit a :



```
strcat(str, "\0");
```


j'en suis rest bouche be...

----------


## ThomasR

> y'a quelques semaines j'ai eu droit a :
> 
> 
> 
> ```
> strcat(str, "\0");
> ```
> 
> 
> j'en suis rest bouche be...


Bonsoir, 

D'aprs wikipdia, ca a un sens, c'est pour crer une *null-terminated string*




> Today the character has much more significance in C and its derivatives and in many data formats, where it serves as a reserved character used to signify the end of a string[2], often called a null-terminated string[3]. This allows the string to be any length with only the overhead of one byte, while the alternative of storing a count requires either a string length limit of 255 or an overhead of more than one byte.


_Aujourd'hui le caractre (i.e : nul caracter) a plus de signification en C et ses drivs et ce dans plusieurs formats de donnes, lorsqu'il est par exemple utilis en tant que caractre rserv dans une chaine de caractre pour en signifier la fin, c'est le nul-terminated caracter.
Cela permet d'avoir une chaine de n'importe quelle longueur avec une entte d'un octet, alors que les alternatives pour stocker un compte (?) 	requirent une chaine d'une longueur maximale de 255 caractres ou une entte de plus de un octet._

Ne connaissant que trop peu C je pourrais pas t'en dire plus.

----------


## Mac LAK

> D'aprs wikipdia, ca a un sens, c'est pour crer une *null-terminated string*


Non, cela n'a pas de sens... Car strcat va chercher, *d'abord*, le zro terminal de la chane de destination (_str_ ici), pour *ensuite* copier l'intgralit de la deuxime chane (ici, une chane vide, donc). Si _str_ ne possde pas de zro terminal, tu iras jardiner dans la mmoire.

Au final, a se rsume ... un NOP ou un plantage.

----------


## deadalnix

Oui, voila.

Ou bien la chaine fini par un caractre nul, et  ce moment la a ne sert  rien, ou bien elle ne fini pas par un caractre nul, et la tu fout ta mmoire en vrac, avec divers effets imprvisibles  la clef.

----------


## megahertz77

> Je dis que le code suivant (qui peut etre tester dans plusieurs langages) ne fait rien, on me dit que la rponse est superficielle
> 
> 
> 
> ```
> 
> ```
> 
> Quelle serait la vrai reponse(peut-etre celle, profonde)


par exemple en vb, mme si c'est pas trs propre, les 3 formes suivantes sont quivalentes et fonctionnent : 


```

```

quant au While/Wend (valide en VB6), il est encore possible de sortir d'une telle boucle avec un antique Goto suite  ::ccool::  ^^ (code plutt vintage)



```

```

ou encore moins propre (mais toujours valide), un exit sub, exit function.

----------


## spidermario

> Je dis que le code suivant (qui peut etre tester dans plusieurs langages) ne fait rien, on me dit que la reponse est superficielle
> 
> 
> 
> ```
> 
> ```
> 
> Quelle serait la vrai reponse(peut-etre celle, profonde)


g++ avec les optimisations actives vire tout a, donc a priori a ne fait effectivement rien.

----------


## Mac LAK

> g++ avec les optimisations actives vire tout a, donc a priori a ne fait effectivement rien.


Mais a peut aussi te permettre, en debug, de crer une instruction NOP, et de pouvoir poser un point d'arrt dessus... Je me suis dj servi de a pour avoir un point d'arrt sur une clause "else" - normalement inexistante - , c'est nettement moins violent (et dfinitif !) qu'une assertion.

----------


## deadalnix

De la mme faon, chez moi, on vire les assertions en mode release, elle ne sont vrifies qu'en dbug.

----------


## Mac LAK

> De la mme faon, chez moi, on vire les assertions en mode release, elle ne sont vrifies qu'en dbug.


Bien sr, mais par dfaut, une assertion arrte le programme... Un BP sur un NOP permet de continuer.
Les cas d'utilisation sont certes rares, mais le jour o c'est ncessaire, t'es content de connatre l'astuce.

----------


## Arzar

Vu dans du code C :


```
strcpy_(str1, str2);
```

strcpy_  ?  ::aie:: 
J'ai aussitt cherch dans les sources la dfinition de cette bte curieuse et suis tomb sur :


```

```

OK  ::fou::

----------


## spidermario

C'est de l'arnaque en plus, elle ne renvoie rien au lieu d'un char*.

----------


## Invit

J'ai une fois rencontr:




> if (condition)
>    ; 
> else {
>    faireQuelqueChose();
> }


Le mec en question avait t un dveloppeur clef d'une bote o je suis pass, il tait trs productif et leur a fait gagner beaucoup d'argent.

Par contre il ne connaissait pas l'oprateur !, il a laiss des montagnes de code inmaintenables en copie-collant les bugs dans diffrents projets.

----------


## ugo188

Le pire que j'ai vu tait pendant un projet que je devais raliser  deux.
Un style de jeux avec vaisseaux en C.
Mon binome, ne comprennait apparement rien  ce qu'il faisait.
Ou alors j'ai manqu quelque chose en C.



```

```

Bref il dessinait le vaissau dans la structure. Je sais pas  quoi il pensait.
Moi je suis rest bouche be...

Edit: Je me rappelle plus du dessin, mais le rendu l'a cras. Pardon.

----------


## lilouille

je suis un peu honteux quand mme ...

for (int i = 0; i < 10; i++)
      for (int j = 0; j < 10; i++)



dit tonton pourquoi il boucle ?

----------


## C_edd

Plusieurs applications commerciales, "scurises", que mon collgue et moi mme sommes chargs de maintenir, et  l'occasion d'y ajouter de nouvelles fonctionnalits.

voici un exemple type du code dont sont constitus ces applications  :

fichier index.php :




> echo'
> <div id="auth2_2" style="position:absolute; left:350px; top:250px;
> z-index:2;">
> 
> <form name="FormAuth">
> 
> Mot de passe:<input type="password" name="password" size="40"
> OnKeyUp="go_auth(this.value)" value="">
> 
> ...


je vous laisse deviner ce qu'il ce passe lorsque l'on appelle directement le fichier index2.php.

en prime, voici le rsultat lorsque l'on lit le code source depuis le navigateur :




> document.FormAuth.password.focus(); 
> 
> function go_auth(vv){ 
> 
> if(vv=="test23") 
> 
> setTimeout("window.location='index2.php'",1); 
> 
> }


Aujourd'hui, on m'a demand d'installer "a" pour un client.

La direction ne veux pas entendre parler de "refonte" des applications au point que nous envisageons srieusement de prendre du temps en cachette histoire de corriger ce qui peut l'tre.

La direction considre qu'une semaine est un dlai suffisant pour une application, de l'analyse jusqu' la mise en prod, le tout en tant charg d'assurer la maintenance matrielle chez un autre client. (avez vous dj essay de programmer avec un tlphone sonnant tous les quarts d'heure pour des histoires d'imprimantes ou de mot de passe oubli ?)

Lorsque nous parlons de scurit, on nous rpond qu'il est peu probable que quelqu'un s'amuse  hacker le serveur.

Une des mthodes de travail utilis est de demander une nouvelle application. La base : une vague ide crite sur un papier brouillon tenant en deux ligne. Puis une fois la chose manipulable par le demandeur, celui-ci s'en sert de base pour demander de nouvelles fonctionnalits. (le rsultat : on jette tout, et on recommence)

Nous sommes dsespr. A l'aide.

Ps : y'a t-il une section de soutien psychologique sur le forum ?

----------


## deadalnix

> Ps : y'a t-il une section de soutien psychologique sur le forum ?


EMACS propose cette fonctionnalit dans le menu d'aide.

----------


## jabbounet

> EMACS propose cette fonctionnalit dans le menu d'aide.


M-x doctor pour ceux que a intresse.

----------


## Invit(e)

> Lorsque nous parlons de scurit, on nous rpond qu'il est peu probable que quelqu'un s'amuse  hacker le serveur.


C'est qui le client final ?

----------


## C_edd

Une trs grosse entreprise, connus par tous. (Ce qui est sans doute le plus dsolant)

----------


## Alain Defrance

> Plusieurs applications commerciales, "scurises", que mon collgue et moi mme sommes chargs de maintenir, et  l'occasion d'y ajouter de nouvelles fonctionnalits.
> 
> voici un exemple type du code dont sont constitus ces applications  :
> 
> fichier index.php :
> 
> 
> 
> je vous laisse deviner ce qu'il ce passe lorsque l'on appelle directement le fichier index2.php.
> ...


Faut changer de boite XD

----------


## Tholude

> La direction considre qu'une semaine est un dlai suffisant pour une application, de l'analyse jusqu' la mise en prod, le tout en tant charg d'assurer la maintenance matrielle chez un autre client. (avez vous dj essay de programmer avec un tlphone sonnant tous les quarts d'heure pour des histoires d'imprimantes ou de mot de passe oubli ?)


Tiens on a du bosser dans la mme boite !!!  ::D: 
Heureusement je suis parti.... j'aurai fini dingue !! Dans mon cas, il faut rajouter les perscutions permanentes et les critiques  tout va, genre "on ne fait que de la merde"... ben oui mais en mme temps on avait des conditions de m****. Depuis c'est marrant mais je m'clate sur de vrais et beaux projets...

MDR et avec toute ma solidarit !!

----------


## LinkerError

Je profite de ce post pour faire une petite parenthse :

quand dans un fichier .cpp .php .java .js je voit ca :



```

```

Certains dveloppeurs m'expliquent que ca permet d'activer / desactiver du code rapidement. 

Comme ils sont nouveaux, je leur donne l'astuce suivante qui marche en C++ (pas en C) en Java , en php, et en javascript.



```

```

en ajoutant ou en enlevant un slash sur la premire ligne on peut commenter / dcommenter  le bloc de code.

Mais une fois c'etait un quadra qui se prennait pour un cador, qui laissait entendre  mes collgues que j'tais un incapable. Alors je me suis un peut foutus de sa gueule en lui proposant la structure suivante :



```

```


bon ensuite passons aux petit bout de code exquis, qu'un dveloppeur un peut fatigu m'a fournit :



```

```

NB: si vous incluez jquery dans une page html et ce bout de code vous devriez pouvoir le voir fonctionner

Pour vous ressituer un peut le contexte on avait une liste de commandes dans une page web et un lien supprimer pour chaque commange. On a eu l'audasse, de demander au prestataire de rajouter un message de confirmation avant de suprimmer dfinitivement la commande. Bien sur il nous a pourris la gueule et a pleur toutes les larmes de son corps parceque ce n'tait pas dans le cahier des charge. Non mais c'est vrai ca ! Qu'est ce qui nous a pris de demander ca ! C'est pas parcequ'on lache 200k a une socit comme Ajilon pour une application qu'on peut demander ca ! ( oui oui vous avez bien lu deux cent mille euros )

Comme je suis masochiste ( et responsable de ce que font nos prestataires ) j'ai dchiffr ce code miraculeux. 

Et voici sans plus attendre les explications du code qui sont le fruit d'une longue quette spirituelle. Une quette qui consistait  comprendre ce qu'un dveloppeur sous-pay et dopp au guronsan avait pondu au beau milieu de la nuit.

A savoir si vous ne connaissez pas jquery :

Ce qui est un avantage comme un inconvnient avec jquery et les fontions anonymes ; c'est qu'on peut tout faire en une seule ligne.

$('#msg_warning-container') c'est une fonction jquery qui recherche tous les lments dont l'id est msg-warning-container ( jusque l tout va bien )
cette fonction nous retourne une liste avec un lment (c'est un cas particulier car l'id est unique)

la mthode html('...') permet de changer le contenu html de chaque balise de la liste et retourne la dite liste 

la mthode bind('click',function(e){...}) rajoute un event handler qui intercepte l'vnement click sur chaque lments de la liste et retourne la liste

la mthode hasClass('null') retourne true si un des lments de la liste correspond au slcteur css .null

si indpendemment chacune de ces mthodes peut s'avrer trs utile en js le chainage des mthodes rend le code inbitable ( un ligne de 1057 caractres soit a peu prs 1.03 ko ).

Maintenant interressons nous au event handler :

il regarde quel est la balise qui a recu l'vnement click (e.target.id)
si c'est de div OUI ... (e.target.id == 'msg-warning-button-yes' )
il change la variable globale  clicked_after_confirm_28 et dclenche l'venement click sur le lien : $('$link-suppress-28').click() . 
sinon il efface le contenu du dic qui contient le message d'avertissement : $('#msg-warning-container').html('')

examinons le code du onclick="" : 

si la variable globale clicked_after_confirm_28 est vrai alors il change l'url de la fenetre avec la valeur de l'attribut href ( je vous expliquerais cette manoeuvre ) sinon il execute tout un merdier.

Maintenant procdons par ordre chronologique pour comprendre ce que fait ce medrier:

Etape 1 je clique sur le lien cliquez ici :

le navigateur dclenche le javascript plac dans l'attribut onclick=""
clicked_after_confirm_28 est  false on va dans la partie du else :

_PUT*!# mais quel merdier ! (j'ai dj dis ? non ?)_

on voit un return mais on sait pas trop ce qu'il retourne

on rcupre avec jquery la balise div avec l'id msg-warning-container
on affecte le contenu html ( 4 div avec : le message de message de confirmation , le lien vers le dtail de la commande , le bouton non , le bouton oui )
on lui rajoute un event handler
et on regarde si a balise  la classe null et comme ce n'est pas le cas ca retourne false ; 


comme le javascript plac dans l'attribut onclick="" retourne false le navigateur ne va pas sur la page suppress.php?id=28

_C'est bon tout le monde arrive  suivre ?_

Ensuite Etape 2 on clique sur non :

l'vnement est rcupr par le handler
le handler regarde quelle balise a t cliqu 
comme c'est non le handler efface le contenu de la div avec l'id msg-warning-container

Enfin Etape 2 (bis) on clique sur oui
l'vnement est rcupr par le handler
le handler regarde quelle balise a t cliqu 
comme c'est oui le handler passe la variable globale clicked_after_confirm_28  true et dclenche l'venement on click du lien 
cette fois ci le code plac dans onclick="" execute window.location = this.href ce qui a pour effet d'aller sur la page supress.php?id=28

Alors vous me demandez pourquoi faire window.location = this.href en javascript alors que les liens normaux s'en passent trs bien ?

rponse du dveloppeur :




> Ben ! je croyais que $('$link-suppress-28').click() faisait comme si on avait cliqu sur le lien mais en fait ca dclenche juste onclick="". Comme je pouvais pas tout recoder ben j'ai mis ca.

----------


## jabbounet

> Comme ils sont nouveaux, je leur donne l'astuce suivante qui marche en C++ (pas en C) en Java , en php, et en javascript.


en C tu peux jouer avec des #ifdef, ensuite en fonctions des defines de compilation ton code est actif ou pas.

Exemple bateau


```

```

a utiliser avec parcimonie, car quand ces blocs se multiplient (avec des define diffrents) on finit par de plus savoir ce qui est excut ou pas

----------


## spidermario

noter que Kate colore un bloc  #if 0 ... #endif  comme un commentaire  ::):

----------


## Tholude

> bon ensuite passons aux petit bout de code exquis, qu'un dveloppeur un peut fatigu m'a fournit :
> 
> 
> 
> ```
> 
> ```


J'ai dj vot, mais dans le genre code inbitable, in-maintenable et affreux il est pas mal non plus, allez je le mets second dans mon best of !!

----------


## adiGuba

> Je profite de ce post pour faire une petite parenthse :
> 
> quand dans un fichier .cpp .php .java .js je voit ca :
> 
> 
> 
> ```
> 
> ```
> ...


En ce qui concerne Java il est bien plus pratique d'utiliser le *if(true/false)* :
Comme il s'agit d'une constante, le *if* n'existera plus aprs la compilation.
En clair le *if(true){ }* est remplac par un bloc de code, et le *if(false) {}* sera tout simplement supprim.La mise en commentaire de code avec /* et */ peut tre gnante avec certains EDIs lors de la rorganisation du code, qui rajoute un " * " devant toutes les lignes.On peut activer le code en un seul endroit, voir mme utiliser une constante static pour activer/dsactiver d'un coup plusieurs codes. Ce qui se rapproche un peu de la compilation conditionnelle du C...

a++

----------


## el_slapper

Je ncroposte un peu pour citer un code sur lequel un de mes collgues vient de tomber (en tentant de fiabiliser une srie de programmes):



```

```

Sans rien entre les redim  :8O: 

Fatalement, le _subscript_ est _out of range_.....

----------


## cfranco

J'ai eu un gars qui a battu certains records au niveau programmation cryptique... quasiment un obfusctateur  lui tout seul.


On programme en Java, mais  la base, le gars s'obstine  programmer en procdural avec des classes contenant plusieurs dizaines de grosses procdures (qui peuvent facilement faire une centaine de ligne chacune, voir plus), avec pour chaque procdure au moins 5  10 paramtres diffrents, et dont la plupart de ces paramtres ne servent  rien (plus utiliss, ou bien ils sont l uniquement pour tre re-transfrs  une autre procdure...)

Donc a donne des trucs du genre :



```

```

Vous noterez en prime l'ordre assez alatoire des paramtres, qui change d'une mthode  une autre, avec des types pris un peu au pif, et le fin du fin, un paramtre pour transmettre la valeur de Math.PI "parce que a va ralentir si on appelle cette fonction dans chaque mthode".  ::roll:: 

Bien sr, on l'engueule... mais il s'en fout royalement, sa rponse typique : "de quoi vous vous plaignez, mes formules sont bonnes, a tourne. Et j'en ai rien  foutre de vos histoires d'informatique, pourquoi je me casserais la tte avec a, j'ai pas l'intention de faire de la programmation toute ma vie moi...".

L-dessus, on met en place un systme qui analyse le code et dtecte comme suspicieux toute mthode qui a beaucoup de paramtres. Et l le gars il ne se dmonte pas, il se met  faire a : (attention, a pique les yeux...)



```

```


Il a t  peine surpris qu'on ne lui propose pas de CDI...

----------


## lornac_a

```

```

Je sais pas jusqu'ou il serait alle, on l'a coupe a ce moment la!!!! ::lol::

----------


## spidermario

On croirait que les dbutants pensent que certaines choses comme  return i;  sont interdites  ::calim2::

----------


## The_SpaceFox

Une fois j'ai d faire de la rtro-ingnrie de code (ah, le dveloppement sans specs...) sur de l'antique Progress 4GL (maintenant OpenEdge ABL), modifi des dizaines de fois par des gens qui n'y connaissaient rien (forcment, un langage pareil) et qui n'avaient pas le temps de ne serait-ce que *relire* ce qu'ils faisaient.

Et a donne des choses gniales avec les copier-coller, comme par exemple :



```
ASSIGN a = a.
```

Ou, beaucoup plus vicieux :



```

```

Sauf que fonction1() renvoie fonction2(), qui elle renvoie fonction3a() ou fonction3b(), et que cette dernire renvoie fonction4().

Et que dans ce bazar (pour rester poli) :
- fonction3a() renvoie toujours FAUX,
- fonction4() renvoie une opration boolenne de 15 lignes qui aprs vrification est quivalente  ... FAUX.

Ca donne des choses gniales dans l'open-space aprs 
_"Ca vous parat normal si je vous dit qu'en fait le cas "machin" ne peut pas tre gr, parce qu'on ne peut jamais y accder ?
- Ah. C'est possible. Le client ne s'est jamais plaint, alors on ne s'est jamais poss la question..."_


--

Ca c'tait ce que j'ai vu dans le taff, mais j'allais oublier le meilleur du meilleur, le fin du fin, un type crois sur le Site.

*Vue gnrale* : on a un dbutant total en PHP/MySQL, qui n'a mme pas lu le dbut du premier tutoriel PHP pour commencer  apprendre, qui veut que les membres lui crachent un script qui fonctionne direct et qui prtend faire des efforts et lire ce qu'on lui crit.

Cas 1 : Gestion d'un tournoi, structure de la base de donnes (oui, toute la base est une seule table) :


```

```

Dbut du fichier PHP de la page principale :


```

```


Mais il y a mieux ! 

Cas 2 : Monsieur veut faire un systme de pagination. Les gens essaient de comprendre ce qu'il veut, et  la page 5 du topic (5 pages !) voici ce qu'il poste :



> Voil je code que j'ai fait vis  vis des instructions de Zazou, mais je pense qu'il y a des choses  modifier :
> 
> 
> ```
> 
> ```

----------


## Arnaud F.

J'ai vu un code pas mal cette semaine (en SQL), c'tait quelque chose du genre (le code tait encore bien plus horrible  lire) :

Entre : @annee (int), @nb_jours (int)



```

```


Plus de 200 lignes de code en tout, et tout a pour crire a :


```

```


 ::calim2::

----------


## TheDrev

Dans une classe java, j'ai vu une fonction de 14 000 lignes.

----------


## spidermario

Automatiquement gnres ?  ::mrgreen:: 



```

```

----------


## cfranco

> Dans une classe java, j'ai vu une fonction de 14 000 lignes.


Ah, pas mal en effet... Aprs, tout dpend de la longueur des lignes aussi. Parce que si on va par l, a peut facilement se transformer en une fonction d'une seule ligne  :;): 

Moi j'ai dj connu quelqu'un qui a russi  dpasser les limites de taille pour une fonction Java, et de beaucoup, avec du code gnr  partir d'un fichier Excel. Il ne savait pas programmer une lecture de fichier (ne serait-ce qu'aprs conversion en CSV...), donc il a tout simplement fait des tonnes de CONCAT dans Excel pour que Excel lui gnre des dclarations de tableaux Java comme il faut  partir de son tableau de donnes, et copier-coller dans un fichier java... Et comme a ne compilait pas parce que la mthode tait trop grosse, il l'a saucissonn en plusieurs mthodes chanes les unes aux autres.

Au final, a donne un code source pour la classe java qui frlait 1Mo tout de mme.

----------


## kpouer

Ah oui pas mal, moi j'en ai une de 366ko mais c'est un parseur gnr avec JavaCC qui n'est pas avare en ligne de code superflues

----------


## argonath

Aujourd'hui, je dois intgrer quelques classes java d'un collgue dans le projet global.

au milieu je trouve cette perle "OuiNon.java"



```

```

boolens... premire leon de tout cours d'info non ?

----------


## dams78

Question bte qui m'est arrive la semaine dernire (un peu dans le mme style), comment convertir true/false en oui/non, pour l'afficher? J'ai t oblig de faire un test if machin return oui sinon non

----------


## Mac LAK

> Question bte qui m'est arrive la semaine dernire (un peu dans le mme style), comment convertir true/false en oui/non, pour l'afficher? J'ai t oblig de faire un test if machin return oui sinon non


En C ou en C++, j'utilise un oprateur ternaire pour ma part.
En Delphi, j'utilise un tableau constant de chanes indic par un boolen.

----------


## TropMDR

> Question bte qui m'est arrive la semaine dernire (un peu dans le mme style), comment convertir true/false en oui/non, pour l'afficher? J'ai t oblig de faire un test if machin return oui sinon non




```
let string_of_bool b = if b then "vrai" else "faux"
```

pourquoi tu cherches plus simples ?

----------


## dams78

c'tait par curiosit, on ne pense pas toujours  la meilleure solution

----------


## gmotw

a dpend aussi du contexte. Si c'est pour un gros bouzin, un fichier properties avec le reste de l'internationalisation, sinon le classique  varBool?"oui":"non"

----------


## sloshy

*Vu rcement dans une app*:



```

```

je crois qu'il debug encore aujourd'hui ...

*Une autre plus pernicieuse:*


```

```

(php qui vrifie pas le typage :p)

Dans les deux cas, c'est ralis par "des experts" senior avec beaucoup d'anne de boite.

----------


## TropMDR

> ```
> 
> ```


Si dans les blabla, il y a des tests, a s'appelle des fonctions mutuellement rcursive, et a n'a jamais t du code "horrible".

Aprs si dans les deux cas a appelle systmatiquement l'autre fonction et que a fait quelque chose aprs le retour de l'autre fonction, y a moyen que ce soit un beau bug. De l  appeler a un code horrible...

----------


## jpelaho

> En ce qui concerne Java il est bien plus pratique d'utiliser le *if(true/false)* :
> Comme il s'agit d'une constante, le *if* n'existera plus aprs la compilation.
> En clair le *if(true){ }* est remplac par un bloc de code, et le *if(false) {}* sera tout simplement supprim.



Est ce que ceci est valable pour C# et .NET ?

----------


## Thierry B.

> Aujourd'hui, je dois intgrer quelques classes java d'un collgue dans le projet global.
> 
> au milieu je trouve cette perle "OuiNon.java"
> 
> 
> 
> ```
> 
> ```
> ...


a me rappelle dans une de mes anciennes botes : une table sql "tb_ouinon" ne contenant que deux champs ("oui" et "non" vous l'aurez compris)...

 ::D:

----------


## Jidefix

> Ca me rappelle dans une de mes anciennes botes : une table sql "tb_ouinon" ne contenant que deux champs ("oui" et "non" vous l'aurez compris)...


C'est volutif: tu peux rajouter aprs coup "Peut-tre", "ne sait pas", "n'a pas compris la question"  :;): 

edit: ah oui mais en fait pour rester propre il faudrait renommer la table...  ::aie::

----------


## adiGuba

> Est ce que ceci est valable pour C# et .NET ?


Il y a de forte chance (au niveau du compilateur ce n'est pas vraiment difficile  implmenter) mais je ne peux pas l'affirmer car je ne connais pas vraiment le langage.

a++

----------


## lollancf37

> en java, fait par un 'expert' sur une appli que j'ai dbogu il y a deux ans.
> 
> Tellement norme que je m'en rappelle encore, a donnait  peu prs a :
> 
> 
> 
> ```
> 
> ```


T'es srieux ?

----------


## lollancf37

> Quand j'ai repris un projet sous C++ builder j'ai dcouvert dans chaque fonction du projet des dclarations de la forme :
> 
> 
> ```
> 
> ```
> 
> 
> 
> ...


Sa c'est tres tres fort lol

----------


## lollancf37

> Ce code l peut apparaitre assez naturellement dans deux situations... 
> 
> 1- en prvision d'un second cas, pour en marquer la place... (normalement il faudrait mettre un commentaire, quand mme), ou pour pouvoir facilement liminer la boucle ( if(0) )
> 2- aprs la suppression d'un else, un jour de presse, pour viter des conflits de noms avec des variables locales au if()...
> 
> Ce n'est pas gracieux gracieux, mais comme a disparait  la compilation, et que a ne pose aucun problme de comprhension...
> 
> Francois


Je me posais aussi des questions dessus, merci  toi !

----------


## cedric190985

"Hello World" en C/C++, Java, Python, Perl, FreePascal
ce micro bout de code annonait pour moi une souffrance de plusieurs heures.....
Cedric

----------


## doc malkovich

Sous Unix / Kornshell un


```
P_BDD=rien
```

pour indiquer que la variable est vide ...
Et derrire comme la gestion des variables est bien foutue, on retrouve un appel  

```
sqlplus rien/rien@rien
```

 dans les logs ...

----------


## OKOCHA_10

```

```

----------


## The_SpaceFox

```
if (!(objet.getPropriete() != null)) {
```



```

```

(C'est du java et c'tait pas les mmes noms mais l'ide est l).

Dvelopp par un prestataire expriment, sur un code from scratch...
On s'est demand lors de la revue de code, s'il tait vraiment tordu, s'il s'est loup dans un copier / coller, ou s'il l'avait fait exprs (hypothse du codeur double pay par la concurrence).

Entre a, l'indentation alatoire, le manque total de commentaires et l'utilisation du modle objet qui donnait l'impression qu'il n'avait jamais fait que du C avant de venir... son code est un bijou du genre.

Il a t remerci depuis, a vous tonne ?

----------


## ThomasR

> Il a t remerci depuis, a vous tonne ?


Si c'est pour des fautes rptes et grave oui, si c'est pour des fragments de code comme ci-dessus qui sont par ailleurs fonctionnels, je trouve  abusif.
Vous auriez p _lui montrer le chemin_  :;):

----------


## The_SpaceFox

"Remerci" = "son contrat tait arriv  chance et n'a pas t renouvel contrairement  ce qui avait t prvu au dbut" dans ce cas prcis.

Sur un projet de redveloppement total d'appli, on ne fait pas appel  un prestataire expriment (avec le salaire qui va avec) pour qu'il nous ponde un truc qui a le mme dfaut que la version d'origine, i.e. impossible  maintenir et sous-optimis.

----------


## Alain Defrance

Et alors, le troisime redveloppement de l'application arrive pour quand ?  ::aie::

----------


## Der Drachen

Quelque chose qui m'a toujours impression c'est l'API Win32 :



```

```


On a des mots cls en C... La faut qu'on m'explique le but.

----------


## stardeath

> Quelque chose qui m'a toujours impression c'est l'API Win32 :
> 
> 
> 
> ```
> 
> ```
> 
> 
> On a des mots cls en C... La faut qu'on m'explique le but.


juste le fait que quand on change d'architecture, la taille des types primitifs peut changer, et il n'y a pas que win32 qui fait a.
De plus il n'y a pas de boolen en c. il n'y a que le void que j'expliquerai par le fait d'avoir une casse identique aux autres types.

----------


## Der Drachen

Ah oui effectivement, a peut paratre plus correct comme a. N'empche que a fait quand mme bizzare quand on le voit pour la premire fois.  ::aie::

----------


## stardeath

> Ah oui effectivement, a peut paratre plus correct comme a. N'empche que a fait quand mme bizzare quand on le voit pour la premire fois.


c'est clair, mais c'est une bonne pratique pour viter pas mal de problme.

----------


## jabbounet

> Ah oui effectivement, a peut paratre plus correct comme a. N'empche que a fait quand mme bizzare quand on le voit pour la premire fois.


c'est que les raisons de ce retypage ne doivent plus tre expliques quand on enseigne le C (si on l'enseigne encore), car effectivement on la rencontre dans pas mal d'appli en C.

----------


## gl

> juste le fait que quand on change d'architecture, la taille des types primitifs peut changer, et il n'y a pas que win32 qui fait a.
> De plus il n'y a pas de boolen en c. il n'y a que le void que j'expliquerai par le fait d'avoir une casse identique aux autres types.


Si ce n'est qu'ici, je ne vois pas en quoi la taille des types intervient. FLOAT n'a pas plus d'information de taille que float.
Gnralement, c'est plutt des noms du style de int8 que l'on trouve dans ce cas de figure.

Concernant les boolens, j'apporterais juste une petite prcision : il n'existait effectivement pas dans la premire version de la norme mais a t introduit dans la version C99. Donc si, il existe un type boolen en C depuis maintenant un peu plus de 10 ans.

----------


## stardeath

L'information de taille n'est pas si importante en soit dans beaucoup de cas de figure, a commence  en avoir ds qu'on joue sur les alignements et les transferts par exemple vers le gpu ( mon avis en tout cas).

Si demain je dcide que mon FLOAT devienne un double, et si le code est bien fait, le fait que a prenne 2 fois plus de place sera totalement transparent.

Aprs pour le c99, le problme c'est que jusqu' peu, le seul compilateur facile d'accs le supportant tait gcc; et c'est surtout que win32 existe depuis plus longtemps que c99.

----------


## gl

> L'information de taille n'est pas si importante en soit dans beaucoup de cas de figure, a commence  en avoir ds qu'on joue sur les alignements et les transferts par exemple vers le gpu ( mon avis en tout cas).
> 
> Si demain je dcide que mon FLOAT devienne un double, et si le code est bien fait, le fait que a prenne 2 fois plus de place sera totalement transparent.


Oui la plupart du temps la taille relle n'a que peu d'importance, nous sommes d'accord. Mais lorsqu'elle en a, je vois l'intrt d'utiliser un tel define (ou, sur un compilateur le supportant, d'utiliser les types  taille fixe).

L'utilisation d'un define pour masquer le type rel sans apporter d'autres informations (taille, smantique particulire ou autre) pour pouvoir changer un jour le type au cas o, je n'y crois pas pour plusieurs raisons :
Dj la modification va impacter absolument tout le code et pas uniquement celui pour lequel tu as besoin de changer.Si le code est bien fait, le changement du type sans passer par un define est tout autant transparent et surtout plus localis.




> Aprs pour le c99, le problme c'est que jusqu' peu, le seul compilateur facile d'accs le supportant tait gcc; et c'est surtout que win32 existe depuis plus longtemps que c99.


Tout  fait d'accord pour la raison historique de l'existence de BOOL dans win32 (et dans bien d'autres bibliothques d'ailleurs). Je n'apportais qu'une prcision au passage, ce n'tait absolument pas une remise en cause de l'utilisation d'un type boolen spcifique  win32.

Au passage, gcc n'est toujours pas conforme C99 (cf Status of C99 features in GCC 4.5) mme si la liste des fonctionnalits supportes est dj importante.

----------


## jabbounet

> L'information de taille n'est pas si importante en soit dans beaucoup de cas de figure, a commence  en avoir ds qu'on joue sur les alignements et les transferts par exemple vers le gpu ( mon avis en tout cas).
> 
> Si demain je dcide que mon FLOAT devienne un double, et si le code est bien fait, le fait que a prenne 2 fois plus de place sera totalement transparent.
> 
> Aprs pour le c99, le problme c'est que jusqu' peu, le seul compilateur facile d'accs le supportant tait gcc; et c'est surtout que win32 existe depuis plus longtemps que c99.


C'est utile quand ton appli doit pouvoir tourner sur des architectures diffrentes et qu'elles doivent communiquer entre elles au passage.
genre un appli sur un 8086 32 bits qui doit communiquer avec son homologue sur 68000. le fichier contenant les redfinitions est adapt aux deux architectures et faire en sorte qu'elles soient compatibles entre elles.

Mais bon ce genre de problmatique se retrouve plus dans certains secteurs embarqus que dans les applications de tous les jours. 


> L'information de taille n'est pas si importante en soit dans beaucoup de cas de figure, a commence  en avoir ds qu'on joue sur les alignements et les transferts par exemple vers le gpu ( mon avis en tout cas).
> 
> Si demain je dcide que mon FLOAT devienne un double, et si le code est bien fait, le fait que a prenne 2 fois plus de place sera totalement transparent.
> 
> Aprs pour le c99, le problme c'est que jusqu' peu, le seul compilateur facile d'accs le supportant tait gcc; et c'est surtout que win32 existe depuis plus longtemps que c99.


C'est utile quand ton appli doit pouvoir tourner sur des architectures diffrentes et qu'elles doivent communiquer entre elles au passage.
genre un appli sur un 8086 32 bits qui doit communiquer avec son homologue sur 68000. le fichier contenant les redfinitions est adapt aux deux architectures et faire en sorte qu'elles soient compatibles entre elles.

Mais bon ce genre de problmatique se retrouve plus dans certains secteurs embarqus que dans les applications de tous les jours.

----------


## stardeath

> Oui la plupart du temps la taille relle n'a que peu d'importance, nous sommes d'accord. Mais lorsqu'elle en a, je vois l'intrt d'utiliser un tel define (ou, sur un compilateur le supportant, d'utiliser les types  taille fixe).
> 
> L'utilisation d'un define pour masquer le type rel sans apporter d'autres informations (taille, smantique particulire ou autre) pour pouvoir changer un jour le type au cas o, je n'y crois pas pour plusieurs raisons :
> Dj la modification va impacter absolument tout le code et pas uniquement celui pour lequel tu as besoin de changer.Si le code est bien fait, le changement du type sans passer par un define est tout autant transparent et surtout plus localis.


je pense justement que c'tait le but que a soit global et bourrin XD
(et vu le nombre de define dissimuls un peu partout, une de plus ou de moins ><)
je vois pas trop par contre ce que tu appelles "type  taille fixe", tu parles des uint16_t et autre?





> Tout  fait d'accord pour la raison historique de l'existence de BOOL dans win32 (et dans bien d'autres bibliothques d'ailleurs). Je n'apportais qu'une prcision au passage, ce n'tait absolument pas une remise en cause de l'utilisation d'un type boolen spcifique  win32.
> 
> Au passage, gcc n'est toujours pas conforme C99 (cf Status of C99 features in GCC 4.5) mme si la liste des fonctionnalits supportes est dj importante.


c'tait juste pour apporter une info supplmentaire comme toi quoi ^^, par contre je savais pas que gcc n'est pas conforme c99.

----------


## gl

> je vois pas trop par contre ce que tu appelles "type  taille fixe", tu parles des uint16_t et autre?


Oui.




> par contre je savais pas que gcc n'est pas conforme c99.


D'un autre ct, il n'y a pas beaucoup de compilateur qui soit 100% conforme C99 ( vrai dire, je n'en vois aucun). Et le support dans gcc s'amliore de version en version.

----------


## Vespasien

Je n'ai plus le code sous les yeux (Dieu merci) et je serais incapable de le r-crire. D'ailleurs je ne l'ai jamais compris pour la simple et bonne raison qu'il s'agissait d'une fonction de 12 000 lignes!
Oui, 12 000 lignes. Des copier coller avec quelques conditions ici et l. Une interdiction de le fragmenter en plusieurs fonctions. Il y avait une dizaine d'arguments  la fonction dont aucun n'tait videment comment.

----------


## user25

Non le pire de tous c'est... moi !  ::ccool:: 

Dans mes dbuts je n'avais peur de rien  ::D: 

Quand je dbutais dans les sockets Windows, je voulais crer un serveur multi-clients. Voil le code qui aurait d me permettre d'accepter 65535 connections :

Fichier *Socket.h* gnr avec un script ms-dos :



```

```

...
...
*Jusqu' SOCKET _s65535=NULL;*

Fichier *Thread.h* gnr avec un script ms-dos :



```

```

...
...
*jusqu' DWORD WINAPI Thread65535(LPVOID p)*

Fichier *main.cpp* :



```

```

 - Je savais pas que *winsock2.h* est dj inclus dans *windows.h*
 - Je savais pas si avec le maximum de mmoire que l'on peut mettre dans un PC peut tenir avec autant de threads
 - Je connaissais que les tableaux de *CHAR*
 - Je savais pas caster
 - J'tais fou  ::aie:: 

Et en plus au dbut j'allais crire les 65535 lignes de SOCKET _s1=NULL;...  la main !  ::mrgreen::

----------


## el_slapper

> (.../...)
> 
> Et en plus au dbut j'allais crire les 65535 lignes de SOCKET _s1=NULL;...  la main !


mmmh,  3 secondes la ligne, a fait juste, 1996605 secondes, ou 54,6 heures de frappe sans erreur. Bonjour la myxomatose.(mais j'ai moi aussi  mon actif quelques trucs pas trs rationels, alors je ne jette pas la pierre).

----------


## jabbounet

> mmmh,  3 secondes la ligne, a fait juste, 1996605 secondes, ou 54,6 heures de frappe sans erreur. Bonjour la myxomatose.(mais j'ai moi aussi  mon actif quelques trucs pas trs rationels, alors je ne jette pas la pierre).


il a fait un script pour le gnrer, mais bon effectivement on a tous dbut un jour......

----------


## gl

> Une interdiction de le fragmenter en plusieurs fonctions.


Par curiosit, peux-tu donner la raison de cette interdiction ?

----------


## Heinekin

Salut  tous! 

Je me devais de vous faire partager la joie que j'ai eu  reprendre un projet d'intranet "dvelopp" en php pour un grand groupe , arret en 2005...

Tout le code est contenu dans index.php (24300 lignes), voici un petit extrait, o le dveloppeur mlange PHP / Javascript : 


```

```

 ::calim2::

----------


## Alain Defrance

24k lignes c'est pas norme pour un intranet oO

Je comprends les "" autour de dvelopp

----------


## The_SpaceFox

En Java, "quelqu'un" a voulu faire une mthode pour convertir un java.sql.Timestamp en java.util.Date.

a me donne cette... chose :



```

```

Sauf que le code de java.sql.Timestamp me dit :


```

```

Ben ouais.
Timestamp hrite de Date. Donc Timestamp _est_ une date.
La mthode super complique de plus haut ne sert en fait  rien...

----------


## Barsy

> 24k lignes c'est pas norme pour un intranet oO
> 
> Je comprends les "" autour de dvelopp


Mais 24k lignes dans un seul fichier... surtout quand le php est mlang  du javascript et du HTML. Pour peu que le code ne soit pas comment, c'est trs difficile  reprendre. Parfois, il est plus efficace de repartir  zro sur des bases saines.

----------


## Invit

Je viens de tomber dessus, et vous devinerez jamais o je l'ai trouv !



```

```

----------


## kpouer

Euh a premiere vue ca me parrait pas choquant, c'est juste une astuce pour pallier au manque du mot clef abstract ou virtual non ?

----------


## Flowers

MDR 
norme les bouts de code java Oo
OMG, dire que a existe a Oo

Franchement  ::x:  *shocked*

----------


## Arnaud F.

Vu ce matin.

Accrochez-vous bien (les commentaires ont t rajout par moi pour vous servir  ::aie:: ):



```

```


Tout a pour crire :


```

```


Pourquoi faire simple quand on peut faire compliqu?  ::mrgreen::

----------


## ILP

Je viens de le trouver :  ::(: 


```

```


Je prcise quand mme que la variable *majConfirme* n'est pas utilise plus loin dans le code.

----------


## Invit(e)

Dans le mme genre il y a longtemps, trs longtemps, dans une entreprise lointaine, trs lointaine: 



```

```

Car ajouter un point d'exclamation et deux parenthses pouvait changer le fonctionnement (ou ralentir le programme, je ne sais plus)

Tiens, encore une autre : 



```

```

----------


## spidermario

Peut-tre qu'valuer ‘A’ cause des effets de bord et que le dernier bloc doit tre excut si A vaut successivement faux puis vrai ?  ::roll:: 

Ou peut-tre, comme c'est plus probable, le dernier bloc ne sert  rien  ::mouarf::

----------


## dvdbly

> Peut-tre qu'valuer A cause des effets de bord et que le dernier bloc doit tre excut si A vaut successivement faux puis vrai ?


Aucune chance : les conditions suivant la condition valide sont ignores par dfinition, mme si le bloc activ modifie la valeur de A ; les conditions suivant une condition ignore testent la mme valeur de A, puisqu'aucun bloc n'aura pu la modifier !

----------


## gmotw

Moi je trouve a trs intelligent. Et oui! Le code est dj prt lorsque dans un futur proche, on se rendra compte que le boolean peut avoir une troisime valeur, qui n'est ni A ni non A. Ce codeur est un visionnaire.  ::aie::

----------


## dvdbly

> Moi je trouve a trs intelligent. Et oui! Le code est dj prt lorsque dans un futur proche, on se rendra compte que le boolean peut avoir une troisime valeur, qui n'est ni A ni non A. Ce codeur est un visionnaire.


a doit tre ce qu'on appelle de logique floue... mais alors trs floue !
Ou alors pour les tats quantiques superposs ?

----------


## minnesota

> a doit tre ce qu'on appelle de logique floue... mais alors trs floue !
> Ou alors pour les tats quantiques superposs ?


Oui, absolument ! Et pour preuve :

Le code en question  permis de faire un voyage dans l'espace et dans le temps...




> *Dans le mme genre il y a longtemps, trs longtemps, dans une entreprise lointaine, trs lointaine:* 
> 
> 
> 
> ```
> 
> ```
> 
> Car ajouter un point d'exclamation et deux parenthses pouvait changer le fonctionnement (ou ralentir le programme, je ne sais plus)
> ...

----------


## spidermario

> Aucune chance : les conditions suivant la condition valide sont ignores par dfinition, mme si le bloc activ modifie la valeur de A ; les conditions suivant une condition ignore testent la mme valeur de A, puisqu'aucun bloc n'aura pu la modifier !


Sauf si “A” est une simplification dans la mention par mabu du code initial et qu'il s'agissait originellement d'une fonction.

C'est  cette situation que je pensais, pas  sa modification dans un des blocs qui est, bien entendu, impossible dans le cas d'un tel chemin.

----------


## CedricMocquillon

en mme temps c'est parfois justifi: http://www.boost.org/doc/libs/1_43_0...html#id1906921

----------


## dvdbly

> Sauf si A est une simplification dans la mention par mabu du code initial et qu'il s'agissait originellement d'une fonction.
> 
> C'est  cette situation que je pensais, pas  sa modification dans un des blocs qui est, bien entendu, impossible dans le cas d'un tel chemin.


Tu penses  quelque chose comme cela :


```

```

?

J'avais conclu (peut-tre un peu vite) que la formulation "une_fonction()", "une_autre_fonction()", etc. impliquait que "A" ne pouvait se rfrer qu' une variable !

----------


## dvdbly

> en mme temps c'est parfois justifi: http://www.boost.org/doc/libs/1_43_0...html#id1906921


Moi, au-del de deux boules, je ne joue plus...

Cela dit, c'est intressant.

----------


## CedricMocquillon

C'est sr au premier abord a parait un peu bizarre surtout hors contexte, mais les tribools ont leur utilit (je m'en sers actuellement pour un client)

----------


## dvdbly

> C'est sr au premier abord a parait un peu bizarre surtout hors contexte, mais les tribools ont leur utilit (je m'en sers actuellement pour un client)



Peux-tu prciser le contexte dans lequel tu les emploies ?

----------


## hegros

Cela ressemble au CheckBox  3 tats. 



```

```

----------


## jabbounet

> Peux-tu prciser le contexte dans lequel tu les emploies ?



a peut servir dans des cas d'automatisme ou de  systme embarqu, quand par exemple tu veux savoir si une porte automatique est ouverte ou ferme.

On peut imaginer que ouverte = true, ferm = false, et entre les deux (en train de s'ouvrir ou de se fermer) = indtermin.

De manire plus gnrale cela interviens aussi dans les cas de logique floue et/ou de logique ternaire, ou ton systme doit prendre des dcisions en ayant  sa disposition des informations incompltes ou incohrentes.

http://fr.wikipedia.org/wiki/Logique_floue
http://fr.wikipedia.org/wiki/Logique_ternaire

----------


## Invit(e)

> Sauf si A est une simplification dans la mention par mabu du code initial et qu'il s'agissait originellement d'une fonction.


Voici des prcisions.

A, tait un tat boolen qui ne changeait pas, mais je saurai plus dire sur quoi a portait.

Par curiosit, j'ai d aller voir un jour le code de la dernire fonction.... Il valait 
mieux ne jamais y passer (ouf !)

----------


## dams78

> Moi je trouve a trs intelligent. Et oui! Le code est dj prt lorsque dans un futur proche, on se rendra compte que le boolean peut avoir une troisime valeur, qui n'est ni A ni non A. Ce codeur est un visionnaire.


Le cerveau fminin...

----------


## ThomasR

> a peut servir dans des cas d'automatisme ou de systme embarqu, quand par exemple tu veux savoir si une porte automatique est ouverte ou ferme.
> 
> On peut imaginer que ouverte = true, ferm = false, et entre les deux (en train de s'ouvrir ou de se fermer) = indtermin.


Dans ce cas tu ne reprsentes plus l'information "est ferme" mais plutt une information d'tat de la porte, ce qui se traduirait par une numration. De plus, il te faudrait non pas 3 mais 4 tats car il faut savoir si la porte s'ouvre, ou se ferme : 



```

```

----------


## spidermario

Ou est immobile entre les deux.

----------


## hegros

L'exemple de la porte n'est pas trop bon je trouve. 

L'information est forcment binaire soit la porte est ouverte soit elle est ferme. Si elle est en fermeture c'est qu'elle est ouverte et si elle est en ouverture c'est qu'elle est ferme.

Si elle est entre-ouverte alors elle est ouverte !

Le seul cas o l'on ne peut pas savoir si elle est ouverte ou ferme c'est quand les dtecteurs d'ouverture et de fermeture ne marchent pas.

----------


## jabbounet

> L'exemple de la porte n'est pas trop bon je trouve. 
> 
> L'information est forcment binaire soit la porte est ouverte soit elle est ferme. Si elle est en fermeture c'est qu'elle est ouverte et si elle est en ouverture c'est qu'elle est ferme.
> 
> Si elle est entre-ouverte alors elle est ouverte !
> 
> Le seul cas o l'on ne peut pas savoir si elle est ouverte ou ferme c'est quand les dtecteurs d'ouverture et de fermeture ne marchent pas.


lol, bien sr que la ralit est un peu plus compliqu, j'ai juste pris une image que tout le monde pouvait comprendre.

----------


## minnesota

> lol, bien sr que la ralit est un peu plus compliqu, j'ai juste pris une image que tout le monde pouvait comprendre.


Dsol d'enfoncer le clou jabbounet, mais avec une image que tout le monde ne peut pas comprendre, a donnerait quoi ?

Merci.

----------


## jabbounet

> Dsol d'enfoncer le clou jabbounet, mais avec une image que tout le monde ne peut pas comprendre, a donnerait quoi ?
> 
> Merci.


une espce d'usine a gaz, quoique avec un tribool c'est compliqu  faire....

Ceci-dit le problme de la porte peut se compliquer quand cette porte fait partie d'un systme ou la suret de fonctionnement est importante (genre train) et qu'a la place d'un seul capteur tu en as plusieurs  grer pour savoir si ta porte est ouverte, ferme, ou autre chose. ce serait dommage qu'a cause d'un unique capteur dfaillant le train se mette  rouler portes ouvertes.

----------


## hegros

> Ceci-dit le problme de la porte peut se compliquer quand cette porte fait partie d'un systme ou la suret de fonctionnement est importante (genre train) et qu'a la place d'un seul capteur tu en as plusieurs  grer pour savoir si ta porte est ouverte, ferme, ou autre chose. ce serait dommage qu'a cause d'un unique capteur dfaillant le train se mette  rouler portes ouvertes.


Oui cela peut vite devenir compliqu (c'est pour cela que l'exemple n'est pas forcment bon, je prfre le mien avec une checkbox  3 tats  ::mrgreen:: ) d'ailleurs il est possible d'imaginer d'utiliser des capteurs analogiques plutt que numriques.


Sinon pour la scurit de ce que j'en ai vu en pratique c'est que les capteurs sont monts en parallles. Du coup cela revient  tester 2 capteurs plutt qu'un.


Avec des capteurs normalement ferms (on utilise en gnral des normalement ferms pour la scurit c'est  dire un signal continuellement  1):




```

```

----------


## minnesota

Ben pour moi au-del d'un boolen c'est un entier, je vois pas l'intrt du tribool, et d'ailleurs a devrait mme pas s'appeler tribool.

----------


## hegros

> Ben pour moi au-del d'un boolen c'est un entier, je vois pas l'intrt du tribool, et d'ailleurs a devrait mme pas s'appeler tribool.


Peut-tre que t'y vois pas l'intrt mais cela existe. Ce n'est pas vraiment un entier en fait je pense que le troisime tat est obtenu avec la valeur nulle. nulle tant ni true ni false..

----------


## minnesota

> Ce n'est pas vraiment un entier en fait je pense que le troisime tat est obtenu avec la valeur nulle. nulle tant ni true ni false..


La logique boolenne c'est que tout ce qui est diffrent de 0 c'est true, si c'est 0 c'est false.

Mais bon  ::roll::

----------


## hegros

> La logique boolenne c'est que tout ce qui est diffrent de 0 c'est true, si c'est 0 c'est false.
> 
> Mais bon


Oui tu n'as pas tort c'est ce que l'on apprend en langage c...

Mais bon cela existe quand mme il y a mme une table de vrit  ::mrgreen::

----------


## minnesota

Merci hegros.  ::D:

----------


## Mdinoc

Mais comment gre-t-on l'tat file not found?

----------


## jabbounet

> La logique boolenne c'est que tout ce qui est diffrent de 0 c'est true, si c'est 0 c'est false.
> 
> Mais bon


avec ce type de boolen on sort du cadre de l'algbre de bool pour rentrer dans un autre concept mathmatique.

Maintenant on peut aussi considrer qu'un boolen est un cas particulier d'enum, si ce n'est que l'enum sera gr avec un entier alors qu'un bit suffit pour le boolen.





> Sinon pour la scurit de ce que j'en ai vu en pratique c'est que les capteurs sont monts en parallles. Du coup cela revient  tester 2 capteurs plutt qu'un


oui, il y'a souvent plus d'un capteur dans ces cas l.

Il faut aussi grer le fait que la porte doit tre verrouille/bloque/... (verrou / verrin hydraulique / ...) en plus d'tre ferme, ce serait dommage qu'un passager ouvre la porte quand on roule....

----------


## hegros

> Il faut aussi grer le fait que la porte doit tre verrouille/bloque/... (verrou / verrin hydraulique / ...) en plus d'tre ferme, ce serait dommage qu'un passager ouvre la porte quand on roule....


Oui c'est sr l'informatique n'est pas une scurit fiable et suffisante  ce niveau, c'est la mcanique qui est la dernire soupape de scurit.(moins d'effet de bord)

----------


## Jipt

> (...) Mais bon cela existe quand mme il y a mme une table de vrit


Euh, ce type d'lectronique a t invent pour pouvoir mettre en parallle sur un mme bus plusieurs circuits,
qui peuvent ainsi  causer  chacun  leur tour.
Rien  voir avec le dfinition de Wiki,


> (...) indiquant un tat ambigu de non-validit dans la sortie.


a permet juste au circuit d'tre prsent dans le reste de l'lectronique, ou pas : quand il est prsent il  cause  boolean (0 ou 1), quand il est absent (sortie haute impdance) il est absent, il ne cause pas, il n'y a pas d'tat ambigu.

----------


## unknow0

> a permet juste au circuit d'tre prsent dans le reste de l'lectronique, ou pas : quand il est prsent il  cause  boolean (0 ou 1), quand il est absent (sortie haute impdance) il est absent, il ne cause pas, il n'y a pas d'tat ambigu.


sauf que s'il est seul ou que toutes les sorties sont en haute impdance tu as quoi en sortie un 0 ou un 1? tu as juste une belle antenne soit un tat bien ambigu non?

----------


## Jipt

Non, je ne vois pas a comme a, moi : quand un circuit est en tat  haute impdance , il n'est pas prsent dans la logique du systme.
Mais ce n'est pas de son fait ! C'est le systme qui dcide (et donc qui  sait ) quel circuit cause  tel ou tel instant.
Le circuit va alors causer boolean en fonction de l'tat de ses entres (et de son schma interne) et c'est tout.

Dit autrement, lorsque le systme va dsactiver un circuit, il n'a aucune raison d'aller tester ensuite l'tat de ses sorties.

Pour reprendre l'exemple de la Checkbox, 


```

```

----------


## unknow0

> Non, je ne vois pas a comme a, moi : quand un circuit est en tat  haute impdance , il n'est pas prsent dans la logique du systme.


oui justement c'est pour cela qu'on se retrouve avec un tat ambigu pour la suite sauf si on a mis des rsistences de pull-up/pull-down ce qu'on fait toujours donc bon ..

----------


## hegros

> Euh, ce type d'lectronique a t invent pour pouvoir mettre en parallle sur un mme bus plusieurs circuits,
> qui peuvent ainsi  causer  chacun  leur tour.
> Rien  voir avec le dfinition de Wiki,


Cet article est une bauche et je t'invite  aller y apporter les corrections ncessaires si tu penses en avoir la comptence  ::mrgreen:: 

De plus ce n'est pas non plus le meilleur exemple pour expliquer le tribool je le reconnais et d'autre part on se moque de savoir pourquoi le composant a t invent c'est simplement pour faire une analogie sur une variable boolenne qui prend 3 tats 0,1 ou indtermin. 





> a permet juste au circuit d'tre prsent dans le reste de l'lectronique, ou pas : quand il est prsent il  cause  boolean (0 ou 1), quand il est absent (sortie haute impdance) il est absent, il ne cause pas, il n'y a pas d'tat ambigu.


Je ne vois pas ce qui te gne, tu as bien 3 tats  partir du moment o l'on considre la haute impdance comme un tat. Quand tu es en haute impdance tu ne peux ni dire que la valeur boolenne est 1 ou 0 alors quelle est sa valeur ? Elle est soit indtermin soit ambigu dans les 2 cas en informatique cela  un sens(peut-tre pas en lectronique)

Pour info ton exemple avec la checkbox est erron. En effet mme si une checkbox n'est pas enabled tu peux connatre et modifier son tat.

----------


## Jipt

> (...) Quand tu es en haute impdance tu ne peux ni dire que la valeur boolenne est 1 ou 0 alors quelle est sa valeur ? (..)


Quand la sortie est en haute impdance, c'est comme si le circuit n'tait pas l, alors sa valeur, 0 ou 1 (qui existe en interne au circuit ! C'est la sortie qui est "dsactive" par la logique du systme), on s'en tamponne un peu !

----------


## unknow0

> Quand la sortie est en haute impdance, c'est comme si le circuit n'tait pas l, alors sa valeur, 0 ou 1 (qui existe en interne au circuit ! C'est la sortie qui est "dsactive" par la logique du systme), on s'en tamponne un peu !


heu.. on s'en tamponne pas forcment en fonction de ce qu'il y a derrire !
en gnral on met en rsistance de pull-up/down pour forcer l'tat a 1/0 quand on a cet tat indtermin.

----------


## hegros

> Quand la sortie est en haute impdance, c'est comme si le circuit n'tait pas l, alors sa valeur, 0 ou 1 (qui existe en interne au circuit ! C'est la sortie qui est "dsactive" par la logique du systme), on s'en tamponne un peu !


Tu devrais lire ce qu'crit unknow0 qui est probablement plus cal que moi en lectronique

On ne s'en moque pas forcment, en fait cela dpend de ce qu'il y a derrire. Si j'ai besoin de raliser un traitement particulier quand le circuit est dsactiv cela est utile.



```

```

----------


## Jipt

> en gnral on met en rsistance de pull-up/down pour forcer l'tat a 1/0 quand on a cette tat indtermine.


Non non non ! Si tu mets une rsistance pour forcer  0 ou 1, tu vas donc avoir 0 ou 1, ton circuit va "causer" alors que le contrleur de circuit est cens l'avoir dsactiv !
Le but de la manip c'est de pouvoir mettre plusieurs circuits en parallle sur un mme bus, mais il n'y en a qu'UN seul qui cause  l'instant T, sous le contrle d'un circuit matre (pilot par la logique gnrale du bazar).

Ou alors, quand tu parles d'tat indtermin, tu parles de la transition 0->1 ou 1->0, qui ne peut pas tre instantane, on est bien d'accord. Mais ce problme existait AVANT l'invention des circuits  sortie tri-state, et a toujours t rgl par un petit dlai par rapport  l'horloge principale, ie, le circuit qui doit lire ("recevoir" serait mieux) les donnes va attendre un chouchouille avant de valider ce qui est prsent sur le bus de donnes.

----------


## unknow0

> Non non non ! Si tu mets une rsistance pour forcer  0 ou 1, tu vas donc avoir 0 ou 1, ton circuit va "causer" alors que le contrleur de circuit est sens l'avoir dsactiv !


justement quand personne parle il faut bien mettre un tat sinon on a du bruit .. aprs le reste peut trs bien s'en accommoder .. ou pas.
a dpend de ce que l'on fait.




> Le but de la manip c'est de pouvoir mettre plusieurs circuits en parallle sur un mme bus, mais il n'y en a qu'UN seul qui cause  l'instant T, sous le contrle d'un circuit matre (pilot par la logique gnrale du bazar).


oui mais dans le cas ou personne "parle" .. a un tat indtermine.




> Ou alors, quand tu parles d'tat indtermin, tu parles de la transition 0->1 ou 1->0, qui ne peut pas tre instantane, on est bien d'accord. Mais ce problme existait AVANT l'invention des circuits  sortie tri-state, et a toujours t rgl par un petit dlai par rapport  l'horloge principale, ie, le circuit qui doit lire ("recevoir" serait mieux) les donnes va attendre un chouchouille avant de valider ce qui est prsent sur le bus de donnes.


et les circuits ne sont pas forcment cadencs sur une horloge mais travail en temps relle ..

Ce dont tu parles n'est qu'un cas particulier.
Mais en gnral on s'arrange toujours pour enlever les tats indtermins ou qu'il arrive  un moment ou on se fiche de son tat.

----------


## Jipt

> (...) Pour info ton exemple avec la checkbox est erron. En effet mme si une checkbox n'est pas enabled tu peux connatre et modifier son tat.


Okay, dsol, je viens de tester (j'avais pas de machine avec un IDE quand j'ai post), et franchement, a, je l'aurais jamais cru ! L'a fallu que je teste, dis donc !
Connatre son tat je veux bien (et encore...), mais pouvoir le modifier, a alors !
Bon, c'est pas du vrai "disabled" au sens lectronique, a,  ::lol:: 

Alors en fait, on cause de logique ternaire, l ; pas la mme chose qu'une logique binaire  + enabled ou pas,  :;):

----------


## jabbounet

> Okay, dsol, je viens de tester (j'avais pas de machine avec un IDE quand j'ai post), et franchement, a, je l'aurais jamais cru ! L'a fallu que je teste, dis donc !
> Connatre son tat je veux bien (et encore...), mais pouvoir le modifier, a alors !
> Bon, c'est pas du vrai "disabled" au sens lectronique, a,


Disons que c'est dsactiv au niveau de l'interface utilisateur, pas au niveau du programmeur.

Cela te permet de modifier l'tat de ta checkbox sans que tu risques un clique souris malencontreux de l'utilisateur qui viendrait changer l'tat pile poil entre le moment ou tu modifies ta checkbox et celui ou tu la dsactives.




> Alors en fait, on cause de logique ternaire, l ; pas la mme chose qu'une logique binaire  + enabled ou pas,


Et potentiellement on peut driver sur la logique floue aprs  ::D: , mais bon si on part dans ce sens on s'loigne franchement du dbat original, cela n'est pas pour me dplaire  ::):

----------


## cassy

un magnifique bout de code en perl


```

```

----------


## Lyche

Et bien voil, je porte ma contribution.. ceci provient d'un site en ASP 3.0 (oui c'est super vieux  ::aie:: ) et je suis tomb, entre autre, sur ce code  ::cfou:: 



```

```

----------


## mioux

Un bon bout de code en ASP 3 qui nous a fait tirer les cheveux plus d'une fois

Comme il n'y a pas de commentaires multi lignes (et qu'en plus le fichier est interprt au fur et  mesure), un collgue met



```

```

_notez l'indentation, il ne l'augmente pas dans son If_

Sauf que quand on "dbuggue", on cherche par exemple la requte qui fait a, ou le morceau de code qui affiche tel textbox.

Et l on fait un ctrl+s, on prend le premier rsultat, on fait des modifs, on regarde le rsultat, pas de changement... et videmment pas de dbugger, sinon a serait trop facile.

Jusqu' ce qu'on se dcide  mettre un 


```

```


et qu'on passe au travers...

Heureusement on n'a plus beaucoup d'applis en ASP 3

Mais bon on lui en veut pas, a doit tre son code le moins propre, tout le reste est nickel  ::lol::

----------


## dvdbly

... sur lequel je viens de tomber et d valoir un petit moment de solitude  son auteur :



```

```

L'outil ne permet pas d'indenter : il faut indenter dans un diteur externe et copier-coller, puis retirer les tabulations et les retours-charriot que l'outil ne comprend pas !

Si la largeur d'affichage tombe juste, cette formule est correctement aligne et se vrifie relativement aisment... mais ce n'est pas le cas dans la bote de saisie dudit outil, comme reproduit  peu prs ci-dessus ; et encore, l, on voit toute la formule d'un coup, alors que ce n'est pas le cas dans l'outil !

Au lieu de :


```

```

----------


## JiBDoublev

Pour mon premier post, je vais vous donner cette perle:



```
My.Company.Some.FullName.Proxy.ADataContract refresh = SomeUsefulHelperObj.GetInstance().BackupFunctionNameRefresh != null && SomeUsefulHelperObj.GetInstance().BackupFunctionNameRefresh.WorkingDate != DateTime.MinValue ? SomeUsefulHelperObj.GetInstance().BackupMonitoringRefresh : SomeUsefulHelperObj.GetInstance().MonitoringRefresh;
```

La taille originale du code avant que je le rende anonyme est de 377 caractres. 
Le tout en une ligne... Ca m'a pris 5 minutes pour me rendre compte que c'tait un oprateur ternaire...Et tout le code est comme a...   ::cry::

----------


## linkthehero

```

```

Microsoft ne connait pas NOT 
http://msdn.microsoft.com/fr-fr/libr...(v=VS.80).aspx

----------


## Barsy

crire "if (mavariable == false) {...}" n'est pas une erreur de codage.

Certaines normes de qualit de code imposent cette criture mme si elle est plus verbeuse que "if (!mavariable)".

----------


## el_slapper

> crire "if (mavariable == false) {...}" n'est pas une erreur de codage.
> 
> Certaines normes de qualit de code imposent cette criture mme si elle est plus verbeuse que "if (!mavariable)".


L'ternel dbat entre verbosit et lisibilit.....je suis du cot des verbeux(noooon, pas la tte!!!!! ::aie:: ).

Sinon, un exemple de code infernal : une horreur  l'ancienne, sur l'avant dernier post de la premire page. 



```

```

Pour ceux qui ne connaissent pas cobol, un point ferme tous les IF ouverts, et les flemmards remplacent plusieurs END-IF par un seul point, donnant ce genre d'horreur. Et les '*' mettent le code en commentaire, donc le point qui servait de END-IF aux 4 premiers IF. Et donc, le code tombe dans la dernire partie ou il ne devrait pas(ou le devrait-il? Impossible  savoir).

----------


## spidermario

> crire "if (mavariable == false) {...}" n'est pas une erreur de codage.
> 
> Certaines normes de qualit de code imposent cette criture mme si elle est plus verbeuse que "if (!mavariable)".


Qu’en est-il de “if(not mavariable) { ... }” (criture possible en C++) ?

----------


## Barsy

> Quen est-il de if(not mavariable) { ... } (criture possible en C++) ?


Comment a ? 

Peut importe ce qu'il est possible ou pas de faire, tout est permis tant que l'on crit un code comment et lisible.

Ce que je voulais prciser ci-dessus, c'est que dans certaines normes de codages, il est impos d'crire en clair "== true" ou "== false". Donc l'erreur signal ici n'en est pas vraiment une.

----------


## jabbounet

dans la catgorie truc pas tres propre, je vois des mthodes a plus de 10 paramtres, je trouve dj que 5 c'est beaucoup en gnral, des state machines avec plus de 40 tats, ....

----------


## Deathless1

J'ouvre un bout de code , et la surprise il y a prs de 60 appelle d'une fonction *echo_bis*.
30 sec aprs, je dcouvre ce qui vaudra le prochain Darwin award! ::ccool:: 

 ::hola::  ::hola:: 


```

```

Mais pourquoi ?
Dj de base , on fait comment pour echo une 'chaine' et un 'apres' sans dfinir de avant ? 

Je propose un hack de la fonction avec :


```
  echo_bis($chaine.$apres) ;
```

C'est quand la touche 'point' ne marche plus en faite, tu utilises cette fonction !

----------


## Matthieu Brucher

> sauf que s'il est seul ou que toutes les sorties sont en haute impdance tu as quoi en sortie un 0 ou un 1? tu as juste une belle antenne soit un tat bien ambigu non?


Ca dpend. Dans certain cas, tu as un rappel  1, dans d'autres  0.

----------


## Thierry B.

> J'ouvre un bout de code , et la surprise il y a prs de 60 appelle d'une fonction *echo_bis*.
> 30 sec aprs, je dcouvre ce qui vaudra le prochain Darwin award!
> 
> 
> 
> 
> ```
> 
> ```
> ...


comme ceci par exemple :



```
echo_bis($chaine, null, $apres);
```

a ne rend pas la fonction plus utile pour autant certes  ::aie::

----------


## crazyday

> J'en ai vu un pas mal en php, fait par le responsable dveloppement de ma bote :
> 
> 
> 
> ```
> 
> ```
> 
> Ce jour-l je me suis dis que finalement je n'tais pas le plus mauvais ...


Voici un mp que j'ai reu en raction  mon post




> Bonjour
> 
> Je fais suivre  votre commentaire ici : ici.
> 
> C'est simple : c'est juste que cette personne a voulu forcer  un moment la condition pour voir ce que a donnait, et qu'il a oubli de remettre le bon test. Ca ne veut absolument pas dire qu'il est mauvais. Par contre, votre message montre surtout clairement que vous n'avez aucune exprience en dveloppement, ou pas assez pour viter de critiquer ce genre de faute tout  fait pardonnable.
> 
> Cordialement,
> 
> Un (humble) chef de projet / *et* / dveloppeur



Pour reprendre Acropole, je dirai que le if (true) n'est pas trs pro surtout venant de personnes censs avoir de l'exprience.

Dans le code que je dcrivais il n'y avais rien dans la condition if mais uniquement dans le else, du coup je ne vois pas vraiment le rsultat que l'on peut chercher en forant la condition.
Par ailleurs, je trouve qu'il est plus intressant de rpondre au test pour vrifier ce que le code qui suit donne, plutt que le court-circuiter.

Maintenant ce qui me fait jubiler dans le mp, c'est qu'un chef de projet, qui est galement dveloppeur, trouve que ceci est une faute pardonnable et en conclut que je n'ai pas ou trs peu d'exprience en dveloppement. Etant galement chef de projet, je vais donc conseiller  mon quipe de dveloppement d'effectuer de tels tests pour devenir de bons dveloppeurs. Quant  moi je vais tudier la question d'une reconversion vers un mtier ou je saurais acqurir une belle exprience et ainsi la faire profiter comme l'a fait cette gentil personne  mon gard.

Merci beaucoup d'avoir gay mon vendredi aprs-midi

----------


## Mdinoc

Plutt que pardonnable, j'aurais plutt dit "non-spectaculaire". Le genre de truc si banal que a serait indigne du Daily WTF, quoi...

----------


## Thierry B.

> Plutt que pardonnable, j'aurais plutt dit "non-spectaculaire". Le genre de truc si banal que a serait indigne du Daily WTF, quoi...


Pas mieux.

C'est un classique des vieux codes bien crados des annes 90-2000...

----------


## zecreator

Des vraies perles ! Certaines que j'ai d commettre  mes dbuts. Et  part le code des autres, vous n'en auriez pas retrouvs  vous qui seraient dans le style.

Il m'arrive de retomber sur quelques vieux bouts de codes  moi, a me fait bien marrer  ::):

----------


## Deathless1

Haa  la suite de mes remarques sur echo_bis()
On a eu une belle remarque de mon Rgis , 
qui a dit je cite ' Si a te gne tant que a , tu nous fais un Crtl+F , et tu remplaces par echo_bis($debut.$chaine.$fin). Si tu Juges a plus opti !'

Qui a une corde ? Sur paris de prfrence !

Hayhay et oui Rgis fait du Php

----------


## jfrag

en PHP :



```

```

magnifique le switch de la mort qui tue !!!!!!!!

----------


## JiBDoublev

Je viens de tomber sur un bout amusant...



```

```

Je me demande combien de fois je vais boucler...

----------


## Mdinoc

S'il y avait eu un *yield* avant le *return*, ce code aurait un sens.

----------


## Barsy

ou un "continue;"...

----------


## jabbounet

Dans la mme veine vu en java et en c++....



```

```

vive les traces que l'on ne vois jamais  ::):

----------


## Mdinoc

C'est  a que servent les try-finally et les destructeurs. ::):

----------


## Barsy

Sous Visual Studio, il souligne le code qui se retrouve aprs un return ou un break. a vite ce genre d'erreur.

----------


## GanYoshi

> Sous Visual Studio, il souligne le code qui se retrouve aprs un return ou un break. a vite ce genre d'erreur.


En java a ne compile mme pas et a te balance un unreachable code  la tronche.  ::lol::

----------


## jabbounet

> En java a ne compile mme pas et a te balance un unreachable code  la tronche.


parfois certaines personne oublie de compiler avant de comiter  ::aie:: 




> Sous Visual Studio, il souligne le code qui se retrouve aprs un return ou un break. a vite ce genre d'erreur.


Gcc aussi quand tu active les bons warning....

----------


## JiBDoublev

> S'il y avait eu un *yield* avant le *return*, ce code aurait un sens.


Il n'y avait q'un commentaire:


```
//Il n'y aura jamais qu'un seul lment dans le tableau...
```

<Sarcasme> C'est vrai que c'est plus lisible une boucle de ce style plutt que "element[0]"</Sarcasme>

----------


## Amnsix

Salut  tous ! Je ne rsiste pas  poster ce code ici. Le fichier dont il est tir fait pas loin de 10000 lignes ! La fonction elle-mme dans les 950 lignes. Elle est rcursive et l'auteur adore le goto (pourquoi pas aprs tout).
J'apprcie particulirement l'init des boucles for() totalement inutile  ::ccool:: 

En attendant, le pauvre gars charg de grer ce code commence  srieusement perdre ses cheveux !


```

```

----------


## Matthieu Brucher

Punaise, je viens de trouver certaines dj exposes ici, mais en Python :


```

```

Il y en a d'autres, mais par exemple la fonction min existe dj en Python...

----------


## fredop

> les variables sont passes par copie de la valeur


Est ce une gnralit  propos de Java ou spcifique  l'exmple ?
Car si c'est le cas un, je suis en dsaccord.

Cela impliquerait qu'un objet uniquement pass en paramtre n'est jamais modifiable dans la mthode comme cela est possible en C avec la notion de pointeur.


Donc ce qui s'amuse  faire des codes du genre  car l'objet  subit un traitement le modifiant:



```

```

n'ont pas compris comment sont traits les paramtres en Java.

Le return est inutile  sauf quelques cas (objets immuables comme l'objet LocalDate de l'api JodaTime que je recommande vivement par ailleurs...)

----------


## GanYoshi

> Est ce une gnralit  propos de Java ou spcifique  l'exmple ?
> Car si c'est le cas un, je suis en dsaccord.


En java c'est une gnralit, toutes les variables sont passes par copie de leur valeur. 




> Cela impliquerait qu'un objet uniquement pass en paramtre n'est jamais modifiable dans la mthode comme cela est possible en C avec la notion de pointeur.


On ne peut donc pas passer un objet en paramtre. 
On passe une copie de la rfrence  cette objet, donc on peut ensuite faire des modifications sur cette objet, mais toute rasignation de la copie de la rfrence  l'objet est sans effet sur la rfrence initiale.  


Donc ce qui s'amuse  faire des codes du genre  car l'objet  subit un traitement le modifiant:




> ```
> 
> ```
> 
> n'ont pas compris comment sont traits les paramtres en Java.
> Le return est inutile  sauf quelques cas (objets immuables comme l'objet LocalDate de l'api JodaTime que je recommande vivement par ailleurs...)


C'est en effet inutile si ta variable "object" ne pointe pas vers un nouvel object. 
Aprs je sais pas quel est la meilleur solution en terme de visibilit.

----------


## Invit

Cette technique permet de faire des choses du style



```
FaireEncoreAutreChose(FareAutreChose(mafonction(monObjet)))
```

Plutot que 



```

```

Ce pattern  un nom et est vachement utilis pour les requte NHibernate par exemple ou la majorit des fonction retourne this

----------


## GanYoshi

> ...


Oh j'y avait pas pens merci de l'info !  ::ccool::

----------


## Invit

j'ai trouv comment a s'appelle : "Fluent interface"

http://en.wikipedia.org/wiki/Fluent_interface#C.23

----------


## hegros

> Cette technique permet de faire des choses du style
> 
> 
> 
> ```
> FaireEncoreAutreChose(FareAutreChose(mafonction(monObjet)))
> ```
> 
> Plutot que 
> ...


C'est justement ce genre de code qu'il ne faut pas faire.

D'ailleurs puisque tu parles de pattern, c'est le pattern de responsabilit 'Protection des variations' ou plus connu peut-tre sous le nom 'Ne parlez pas aux inconnus' qui me fait penser  cela.

le code me fait aussi penser au pattern dcorateur mais pouss  l'extrme et mal utilis


Bref, ton premier bout de code (pattern hibernate lol) est sale, je prfre de loin retrouver le second code

----------


## Mdinoc

Pourtant, en C++ c'est courant (sauf qu'il y a des points ou des chevrons  la place des appels imbriqus).

----------


## GanYoshi

> C'est justement ce genre de code qu'il ne faut pas faire.
> 
> D'ailleurs puisque tu parles de pattern, c'est le pattern de responsabilit 'Protection des variations' ou plus connu peut-tre sous le nom 'Ne parlez pas aux inconnus' qui me fait penser  cela.
> 
> le code me fait aussi penser au pattern dcorateur mais pouss  l'extrme et mal utilis
> 
> 
> Bref, ton premier bout de code (pattern hibernate lol) est sale, je prfre de loin retrouver le second code


Je vois pas en quoi le premier code parle plus aux inconnus que le second, c'est juste appeler plusieurs mthode sur un seul et mme objet, quel est le problme ?

----------


## Barsy

> Je vois pas en quoi le premier code parle plus aux inconnus que le second, c'est juste appeler plusieurs mthode sur un seul et mme objet, quel est le problme ?


C'est juste trs moche  lire. Quand je dois reprendre le travail de quelqu'un d'autre, j'apprcie que le code soit crit de faon claire et are.

Sinon, on pourrait tout aussi bien crire tout son code sur une seule et mme ligne en sparant les instruction par des ';'. O est le problme ?  ::aie::

----------


## Invit

> pattern hibernate lol


J'ai pas dit pattern nhibernate j'ai di que c'est un pattern que nhibernate utilise.

Du style pour les criteria a va donner



```

```

Je suis pas sur des noms des fonctions, mais en gros c'est a. C'est largement plus lisible que



```

```

Je fait entirement confiance au dveloppeur de hibernate pour ne pas faire un truc si ridicule que a. En plus ce pattern permet de faire les deux, donc si tu veux tu peut ajouter des retour a la ligne.

----------


## el_slapper

> C'est juste trs moche  lire. Quand je dois reprendre le travail de quelqu'un d'autre, j'apprcie que le code soit crit de faon claire et are.
> 
> Sinon, on pourrait tout aussi bien crire tout son code sur une seule et mme ligne en sparant les instruction par des ';'. O est le problme ?


voire faire de l'APL et faire une mga-instruction qui comprend le programme en entier. Et ensuite,  la relecture, comprendre pourquoi plus personne ne fait d'APL, surtout comme a.  ::aie::

----------


## hegros

> J'ai pas dit pattern nhibernate j'ai di que c'est un pattern que nhibernate utilise.[
> 
> Du style pour les criteria a va donner
> 
> 
> 
> ```
> 
> ```



C'est justement ce genre de code qui ne respecte pas le pattern de la protection des variations(parlez  des inconnus)qui se rsume  enchaner les . derrires les retours de mthodes d'objets.



```
UnObject.UneMethode(param1,param2).UneMethode(param2,param1).Etc();
```





> Je suis pas sur des noms des fonctions, mais en gros c'est a. C'est largement plus lisible que
> 
> 
> 
> ```
> 
> ```


Effectivement mais moi j'crirais



```

```

Donc soit ton code est une limitation de ton framework tiers ou plutt qu'il n'est pas envelopper ou encapsuler dans une api ou alors il faut peut tre faire un effort de conception.





> Je fait entirement confiance au dveloppeur de hibernate pour ne pas faire un truc si ridicule que a. En plus ce pattern permet de faire les deux, donc si tu veux tu peut ajouter des retour a la ligne.


Je ne connais pas l'api de hibernate.On retrouve aussi cela ailleurs(Linq par exemple) mais il n'est pas question de faire confiance ou pas puisqu'un langage objet permet de toute faon de briser la protection des variations parce que c'est un peu le principe d'appeler des mthodes sur des objets, un compilateur ne peut pas t'en empcher c'est ridicule mme le super compilateur C++. 




> Je vois pas en quoi le premier code parle plus aux inconnus que le second, c'est juste appeler plusieurs mthode sur un seul et mme objet, quel est le problme ?


En fait le premier code ressemble plus  du code procdural que du code objet si on parle de celui-ci 



```
FaireEncoreAutreChose(FareAutreChose(mafonction(monObjet)))
```

Tu remarqueras que l'exemple qui nous est donn avec hibernate est diffrent sur la forme mais y ressemble car en fait cela revient  crire pour simplifier  



```
mafonction(monObjet).FareAutreChose().FaireEncoreAutreChose();
```

----------


## psychadelic

Je prends juste le fil ici, et j'ai pas le courage de lire les n pages prcdentes.
donc dsol s'il y a redite.

je devais faire une maintenance sur un projet un peu dlirant
code en vb ,  base SQL Serveur

genre grosse compta, avec possibilit d'adaptation dynamique (la compta c'est jamais fig)

sauf que la structure SQL elle, tait compltement fige.

Pour malgr tout obtenir une certaine souplessse, les concepteurs de cette usine  gaz avaient cr une table de structure des donnes, et plusieurs tables multi champs texte pour contenir les donnes.
genre:
 Table01 = [champ1, champ2.....  champ99]
 Table02 = [champ1, champ2.....  champ99]
 Table03 = [champ1, champ2.....  champ99]
...
 Table99 = [champ1, champ2.....  champ99]

et bien sur la table "Structure"
t_struc = [NoTable, LibellTable, NbChampsUtiles ... etc

une autre table dans le mme genre permettait de connaitre pour chacun des champs leur nom, leur typage ( pas mal de cast et de convert dans le code )

Visiblement ils devaient ignorer les simples requtes SQL comme Create / ALTER Table; que toutes les bases SQL conservent la trace des schmas des tables et de leurs colonnes ( SELECT table_name FROM information_schema.tables pour SQL serveur)...
et qu'il n'tait pas interdit d'utiliser ses informations dans le code pour grer leur interface...

Je me suis toujours demand comment ils avaient pu en arriver la, et  quel point ils avaient du en baver pour russir  boucler ce projet.

----------


## user25

```

```

 ::|:  Je voyais pas pourquoi le thread ne dmarrait pas...

----------


## tomtom83

Un magnifique code pour sparer la partie entire et la partie dcimale en c#  afin d'afficher un temps avec 3 chiffres pour les millisecondes :


```

```

C'est pas beau a ? Une convertion en string puis un split sur la virgule !
Je travaille sur un xp franais et a m'a pris un bon moment pour comprendre pourquoi l'appli ne fonctionnait pas correctement sur windaube embedded en anglais. H oui sur un os en angliche quand on convertit un double en string a met un . pas une virgule...
remplac en une ligne par miniseconde=String.Format("{0:000}", (valeur - minute * 60 - seconde) * 1000);

----------


## Khoyo

Oblig de citer l'IOCCC...
http://www.de.ioccc.org/years.html

ex: 


> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
> 
> #define _			;double
> #define void			x,x
> #define case(break,default)	break[O]:default[O]:
> #define switch(bool) 		;for(;x<bool;
> #define do(if,else)		inIine(else)>int##if?
> ...

----------


## ThomasR

> Oblig de citer l'IOCCC...
> http://www.de.ioccc.org/years.html
> 
> ex:


Haha, excelent, c'est des artistes : http://www.de.ioccc.org/2004/newbern.c

----------


## jabbounet

> Oblig de citer l'IOCCC...
> http://www.de.ioccc.org/years.html
> 
> ex:


a existe encore ce concours?  ::D: 
Mais bon c'est peu tre limite hors sujet je pense que l'on parle de code utilis dans le cadre du boulot.

je me souviens d'un sapin de noel, contenant du code c....

----------


## 6-MarViN

J'ai trouv ce code dans un dans un de mes projets fait par un de mes binmes en C


```

```

----------


## Barsy

Ce matin, dans le projet que je suis en train de reprendre, je suis tomb sur ce code :



```

```


Le code ci-dessus permet de retourner la valeur absolue d'un entier, efficace non ?  ::lol::

----------


## Bluedeep

> Le code ci-dessus permet de retourner la valeur absolue d'un entier, efficace non ?


Ouch  ::aie::  c'est du lourd.

Ou alors, le gars est pay  la ligne de code ? (mal, j'espre  ::mouarf:: ).

----------


## Bluedeep

> remplac en une ligne par miniseconde=String.Format("{0:000}", (valeur - minute * 60 - seconde) * 1000);


La correction ne valant pas beaucoup plus cher que le code critiqu, puisqu'elle dmontre l'gal ignorance du TimeSpan.

----------


## Volgaan

> Non, en Java tout est par valeur... Tu passes une copie de la rfrence d'un objet, ce qui te permet de modifier les champs de cet objet mais en aucun cas sa rfrence. Et donc la mise  null ici est effectivement limite au scope de la fonction.


Ah oui  ce sujet, j'aimerais savoir s'il se passe la mme chose en C# ? Je me suis justement pos la question il y a peu de temps.

----------


## Mdinoc

Le passage par rfrence est support en C#, mais possde une syntaxe spcifique.

Donc,  moins que tu l'utilises explicitement, c'est la mme chose qu'en Java.

----------


## el_slapper

> Le passage par rfrence est support en C#, mais possde une syntaxe spcifique.
> 
> Donc,  moins que tu l'utilises explicitement, c'est la mme chose qu'en Java.


de vieux langages comme COBOL ou VB passent par dfaut par rfrence(mais pas le C). Je suppose que sur les langages "modernes" on prconise la sparation des donnes par dfaut.

----------


## sybil

Moi c'est une des pires choses que j'ai entendu par un dev web:
"Oui ici on utilise que des liens absolus"

----------


## Bluedeep

> de vieux langages comme COBOL ou VB passent par dfaut par rfrence(mais pas le C). Je suppose que sur les langages "modernes" on prconise la sparation des donnes par dfaut.


C'est surtout qu'il est difficile de se passer d'un mcanisme de passage par rfrence quand on ne dispose pas de la possibilit d'isoler les valeurs dans une classe (cas des langages non objet comme VB mais aussi Pascal et C) alors que dans le cadre d'un langage objet, il est toujours possible de contourner cette ncessit par l'ajout d'une classe supplmentaire.

----------


## Invit

> Moi c'est une des pires choses que j'ai entendu par un dev web:
> "Oui ici on utilise que des liens absolus"


Quel est le problme ?

----------


## transgohan

> Quel est le problme ?


Dmnages ton application sur un autre serveur ou changes le nom de domaine et tu vas vite comprendre la btise.
C'est comme d'indiquer lorsque tu fais une commande l'adresse de ton ancien logement. Tu risques pas d'tre livr.  ::mouarf::

----------


## Barsy

> Quel est le problme ?


a impose d'avoir sur la machine de dev une arborescence de dossier identique  la prod.

Or, dans mon cas, j'ai plusieurs projets que j'ai dans un rpertoire "Dveloppement" qui est li  un contrleur de sources. Et chacun de mes projets ne va pas sur le mme serveur de prod  l'arrive. Donc il m'est impossible de respecter une arborescence quelconque ( moins d'avoir une machine par projet...).
Et pour ce qui est des liens, ils sont du type "http://localhost:XXXX" sur mon serveur de dev, ce qui est bien videmment diffrent en prod.

Sinon, il existe une technique souvent utilise pour utiliser des liens/chemins absolus. C'est de mettre la racine du chemin/lien dans un fichier de configuration qui change selon l'environnement.

----------


## Invit

Suffit de mettre ton nom de domaine en config (voir plusieurs : un pour les pages, un pour les fichiers statiques) et tout est rgl.

Comme a si un jour il te prends la bonne ide de mettre tes images sur un serveur externe fait pour renvoyer des fichier statique (en gros t'enlve tout ce qui est inutile, tu monte les cache, tu booste ton disque dur), ben ta modif prend 4 sec, pas 2 semaines.
Si t'a envie que ton site soit rfrenc,  tu vas faire de l'url rewriting, et pour ce faire il te faut avoir une arborescence d'url ct client qui est diffrente de l'arborescence ct serveur et dans ces cas la les url absolu sont essentielle.

Donc si tu dtermine a comme la plus grosse c.....e entendue par un dveloppeur web, tu as beaucoup, beaucoup de chance.

----------


## kain_tn

http://thedailywtf.com/Articles/Tril...-Language.aspx  :8O: 



```

```

----------


## Invit

C'est un des beau codeSOD , SQL + HTML + javascript = Separation of Concern

----------


## inconnu652000

> C'est un des beau codeSOD , SQL + HTML + javascript = Separation of Concern


J'ai dja fait java + javascript + html : j'ai vu que c'est la m****
J'ai aussi rinventer les smaphores  ma sauce pour synchroniser des threads. Synchroniser des threads avec des smaphores "maison" en variable globales, malin !!


 ::aie::  ils se sont arracher les cheuveux pour dbuguer.

C'tait il y a bien longtemps !

----------


## le y@m's

Trouv  l'instant :


```

```

 ::calim2::

----------


## transgohan

Ahah j'ai trouv le mme genre il y a pas longtemps, je l'ai plus sous la main mais c'tait du genre :


```

```


Cela dit... Je vois pas tellement le rapport entre un code de m*rde et la leve d'une exception...
Car le code merdique en question c'est justement ce morceau, le fait de ne pas grer les exceptions.  ::mouarf::

----------


## Jidefix

> Ahah j'ai trouv le mme genre il y a pas longtemps, je l'ai plus sous la main mais c'tait du genre :
> 
> 
> ```
> 
> ```
> 
> Cela dit... Je vois pas tellement le rapport entre un code de m*rde et la leve d'une exception...
> Car le code merdique en question c'est justement ce morceau, le fait de ne pas grer les exceptions.


Moi je vois bien le truc: une exception genre NullPointerException pas forcment gnante qui sort de temps en temps, assez souvent pour masquer le problme mais pas suffisamment pour passer du temps  le rsoudre  ::):

----------


## transgohan

Cela n'existe pas en PHP les NullPointerException, mea culpa pour le code j'ai fait un bte copier/coller du prcdent et j'ai laiss le type de variable qui n'apparait pas dans ce langage...

----------


## Rayek

Je suis tomb sur le code suivant dans une application ralise par une autre personne que je dois maintenir



```

```

----------


## kolodz

Voici comment on vrifie les codes postaux sur le site que je maintiens :


```
select * from code_posteau
```

Le rsultat de la requte est utilis pour pour faire ceci :


```
if(array_key_exists($codepostal,$list))
```


tant donn la lenteur d'affichage du site associ, il a t dcid de mettre en cache le rsultat de la requte...

La personne qui a produit ce code tait pay plus cher que moi.
Et avait les droits daccs  toutes les machines.

3 semaines que j'ai vue l'erreur, j'ai toujours pas eu le droit de faire la modification sur la prod.  ::ccool:: 

Cordialement,
Patrick Kolodziejczyk.

----------


## Paul TOTH

> Voici comment on vrifie les codes postaux sur le site que je maintiens :
> 
> 
> ```
> select * from code_posteau
> ```
> 
> Le rsultat de la requte est utilis pour pour faire ceci :
> 
> ...


tient...personnellement j'aurais faut un "SELECT COUNT(*) FROM code_posteau WHERE code = '$codepostal' "...mais peut-tre as-tu une srie de CP  vrifier  ::):

----------


## kolodz

J'ai fait un


```
select * FROM code_posteau WHERE code = '$codepostal' limite 1
```

Il y a peut-tre mieux, mais a reste plus propre.

----------


## Charvalos

T'es vraiment oblig de mettre le LIMIT ?

Normalement, il ne peut pas y avoir plusieurs mme codes postaux non ?

----------


## kolodz

Soit le code postal existe, soit il n'existe pas.
Je ne vais pas m'amuser  parcourir l'ensemble des code postaux de France, si j'ai la rponse  la premire ligne.
C'est une table  62000 entres...

Edit : Notre base a une entre pour chaque ville d'un code postal.

----------


## Bebel

> T'es vraiment oblig de mettre le LIMIT ?
> 
> Normalement, il ne peut pas y avoir plusieurs mme codes postaux non ?


C'est possible. Regarde par exemple le 31140, il correspond a 3/4 villes.

----------


## Paul TOTH

> C'est possible. Regarde par exemple le 31140, il correspond a 3/4 villes.


et souvent 97400 n'existe pas  ::):  j'tais le mois dernier  Paris pour envoyer un colis...le soft me demande mon adresse, mon code postal tait refus, j'ai du pu passer par le guichet  ::):

----------


## le y@m's

```

```

Pourquoi faire simple quand on peut faire compliqu...

----------


## Deadpool

> ```
> 
> ```
> 
> Pourquoi faire simple quand on peut faire compliqu...


Ah oui, l il a t le chercher loin son nom de classe.  ::mouarf::

----------


## Mdinoc

Minute, que contient la stacktrace pendant une init de variables statiques, en fait?

----------


## le y@m's

> Minute, que contient la stacktrace pendant une init de variables statiques, en fait?


La premire ligne de la stacktrace correspond  l o est instancier l'exception. Donc cela revient  recuprer la classe dans laquelle est crit ce bout de code (que le contexte soit statique ou pas)  :;): .
En fait c'est une manire complique et mga crado (cration d'une exception avec toute la stacktrace derrire  ::roll:: ) de faire MaClass.class.getName().
La cration "usuelle" d'un logger tant donc :


```
private static Logger LOG = Logger.getLogger(MaClass.class.getName());
```

----------


## Jidefix

Oui mais le truc de l'exception tu peux le copier/coller dans toutes les classes, tandis que


```
MaClass.class.getName()
```

Tu es oblig de le modifier  chaque fois, et donc de risquer un violent claquage de doigt.  ::aie:: 

Tout a pour finir de toute faon dans l'appender par dfaut dans la majorit des applis...

_(les templates de classe? c'est quoi a?)_

----------


## kolodz

Pas forcement si stupide...
Si tu renomme la classe avec un IDE, il te fera le changement aussi l...

----------


## YannPeniguel

Excusez moi, je dtre, mais j'ai immdiatement pens  ce vieux topic quand j'ai vu ceci :


```
if (diffDateTaux !=0 && diffDateTaux<1)
```

----------


## BenoitM

> Excusez moi, je dtre, mais j'ai immdiatement pens  ce vieux topic quand j'ai vu ceci :
> 
> 
> ```
> if (diffDateTaux !=0 && diffDateTaux<1)
> ```


Pourtant ca peut avoir une certaine logique
Eviter une division par 0  :;):

----------


## Simara1170

Tout beau tout frais sous delphi:


```

```

Et merci d'tre pass hein -_-'

----------


## Barsy

> Pourtant ca peut avoir une certaine logique
> Eviter une division par 0


Oui, si l'objet n'est pas un entier, a peut en effet. D'o l'intrt de mettre un commentaire pour viter que celui qui reprend le code ne soit surpris.

----------

