# Le club des professionnels en informatique > La taverne du Club : Humour et divers > Humour Informatique >  Un code n'est pas crit pour tre optimal mais d'abord pour rpondre  ses besoins

## Victor Vincent

*Un code n'est pas crit pour tre optimal mais d'abord pour rpondre  ses besoins,*
*illustration par six profils de dveloppeurs sur une suite de Fibonacci*

Pour les professionnels du domaine du dveloppement logiciel, crire du bon code ncessite de respecter certaines rgles, certaines conventions, certaines bonnes pratiques. Un code qui est mal document voire pas du tout, un code qui n'est pas modulaire est souvent considr par le commun des programmeurs comme tant du mauvais code. Cependant, dans bien des situations, ces critres se voient tre relgus au second plan. Aussi, voici six profils de dveloppeurs qui ont crit des codes pour grer une suite de Fibonacci.

*Dveloppeur 1 : L'tudiant dbutant*

Le premier de la liste est le dbutant en programmation, pour le meilleur code qui puisse tre est un code rcursif. Il applique ce que le prof lui a appris en classe. Son code n'est pas destin  d'autres programmeurs et peut tre lui mme ne va jamais le rutiliser. Il  ne se fatigue donc pas  commenter son code ou  produire de la doc.


*Dveloppeur 2: Le programmeur au Hackaton*

Pour lui l'objectif c'est de russir  faire une bonne dmo. Il se contente d'une simple structure conditionnelle pour s'assurer que son code prend en compte tout ce qui tait prvu dans le cadre de sa dmo; de toute faon ce n'est pas le code qui intresse le public ou le jury mais plutt le rsultat qui s'affiche  l'cran.


*Dveloppeur 3: le programmeur dans une startup*

Le troisime type de dveloppeur quant  lui est indcis dans son code, il hsite encore quant au fichier devant contenir code. La plus grande partie de son code est  crire, un jour peut tre, si l'entreprise fait long feu. Il a autant de TODO dans son code que de nouvelles ides qui lui passent par la tte. Il ne va pas se fatiguer  les implmenter avant d'obtenir le premier financement de qui voudrait bien croire et financer son projet.


*Dveloppeur 4: le programmeur dans une grande compagnie*

Le quatrime est un parano du code bien document et tout aussi customis. Il prend le soin de dcrire la moindre variable utilise dans le code et surtout veille  utiliser ses propres types redfinis pour plus de scurit. Il s'assure ainsi que personne ne pourra rutiliser son code ailleurs que dans sa boite mais aussi et surtout il montre  son chef qu'il est un bon petit disciple qui respecte toutes les rgles.


*Dveloppeur 5: le programmeur Docteur en Maths*

L'avant dernier de la liste lui, est un pro des fonctions, son code doit tre le plus modulaire possible. Il veut que son code reflte toutes les tapes de son raisonnement quant il rsolvait le problme dans son brouillon. Il crit donc des fonctions pour chaque partie ou sous partie, pour la lisibilit, c'est dj a.


*Dveloppeur 6: Tom le chat*

Il se moque de la suite de Fibonacci et de tous les problmes qui peuvent proccuper les autres programmeurs. Il se contente lui de faire en sorte de garder ses chatons ensemble. Il ne connait qu'un seul commentaire quel que soit la portion de code qu'il veut commenter, et pourtant il n'est pas le pire programmeur de la liste.



```

```


Source : Imgur

*Et vous ?*

 ::fleche::  Selon vous, quel est le meilleur code prsent par ces 6 profils de dveloppeurs ?

 ::fleche::  Pensez-vous qu'un code se doit avant tout de rpondre  un besoin ? 

*Voir aussi*

 ::fleche::   Forum Humour Informatique

 ::fleche::  la Rubrique Humour

----------


## Auteur

Tu as oubli de post le code du chat (le plus important de tous quand mme)  ::calim2::  ?

----------


## Victor Vincent

> Tu as oubli de post le code du chat (le plus important de tous quand mme)  ?


En fait je ne peux ajouter que 5 images apparemment, le code du chat est la 6me image.
Mais je confirme, c'est le plus important en effet  ::D:   ::D:   ::D:

----------


## Auteur

Par contre, je crois qu'il y a une petite erreur :


```
int KITTENS_OF_THE_WORLD
```

ce n'est pas plutt un unsigned long?  ::aie::

----------


## Haseo86

Mouais... l'ide est amusante, mais les commentaires sont assez condescendants, c'est dommage.

----------


## Jipt

> Un code n'est pas crit pour tre optimal mais d'abord pour rpondre  *ses* besoins


Un code a des besoins qui lui sont propres ? Je serais curieux de savoir lesquels...

----------


## LSMetag

C'est marrant comme article ^^

Alors, mme si je suis un dveloppeur expriment, ayant travaill dans plusieurs grosses botes, je suis plutt comme l' "tudiant dbutant" du premier exemple.
J'essaie toujours d'avoir le moins de code possible, pour favoriser la lisibilit, et par feignantise aussi. Par contre, je commente pas mal et surtout, je rflchis (parfois trop je l'admets) ^^.

Il m'arrive rarement de mettre des propositions dans le code, car les dcideurs ne codent pas.

J'essaie aussi de dcomposer le code le plus possible, pour structurer et ventuellement rutiliser, mais je ne suis pas maniaque non plus  ce niveau l.

Donc en gros : 

*1) et 5), mais en modr. Efficace pour l'volutivit et la maintenabilit. Par contre, ce n'est pas forcment le plus productif. Mais bon, en informatique, les 35h on ne connat pas.*

----------


## DonQuiche

Je ne suis pas fan de Haskell mais il a des atouts indniables... 



```

```

----------


## emazoyer

En effet toutes les mthodes proposes sont en O(en).
Ce qui est cher pay.

Les codes prcdents demandent 2.269.806.339 appels  fibonacci pour calculer fibonacci(45)=1134903170.
Cet algorithme en demande 87 (pour le mme rsultat, il va de soi).
C'est la Mmosation.



```

```

Quand  l'occupation mmoire :
fibonacci(164)=7278316983633677837,fibonacci(165) dpasse un entier sign sur 64 bits,
donc au plus nous pouvons calculer 164 valeurs.
Un tableau de 164 long n'est pas cher pay  :;): .
Nous pouvons aussi remplir tout au dbut le tableau des 164 valeurs (325 appels) puis avoir un temps de calcul en O(1) pour le reste du temps.

----------


## fcharton2

> Je ne suis pas fan de Haskell mais il a des atouts indniables... 
> 
> 
> 
> ```
> 
> ```


A la syntaxe prs, c'est quasiment le mme code que l'tudiant dbutant (si on le nettoie un tout petit peu), non? 

Pour le docteur en maths, on peut faire nettement mieux que la formule de Binet. Les termes de la suite de fibonacci sont les coefficients du dveloppement en srie entire de x / (1-x-x^2). En J, c'est 5 oprateurs...



```
(%-.-*:)t.
```

Ca se lit "inverse de (%) 1-x (-.) - (-) x^2 ( x: ) en Taylor (t.)"

@emazoyer : la formule de Binet (la solution du docteur en maths de l'exemple, si on oublie le calcul de la multiplication et de la puissance comme des additions dguises...), n'est pas exponentielle, mais O(1): on crit Fib(n)= floor(Phi^n/sqrt(5)), (en pratique il n'y a pas besoin de la seconde partie de la formule) et a coute tout au plus une exponentielle. C'est plus rapide qu'un calcul direct avec mmoisation (qui est O(n))

Francois

----------


## emazoyer

@fcharton2
Tout  fait, mea culpa, j'ai oubli l'option prof de math dans ma remarque.

Math : O(1).
Mmosation simple : O(n)
Mmosation  l'initialisation : 325 appels  l'intialisation puis 1 opration pour chaque appel (difficile de faire mieux  ::D: ).

Je voulais simple indiquer que tout appel conscutifs  des mthodes utilisant les mmes calculs devrait interpeler tout informaticien.
Dans ma vie d'informaticien j'ai amlior un export d'une heure en export de 2 mn en transformant une mthode en O(n3) en O(n).
Et sans modifier l'algorithme en soi (cas du mathmaticien), simplement en vitant l'oubli des valeurs dj calcules.

----------


## moi62100

Une version avec mmosation en Haskell pourrait tre:



```

```

----------


## fcharton2

> Je voulais simple indiquer que tout appel conscutifs  des mthodes utilisant les mmes calculs devrait interpeler tout informaticien.


Tout  fait d'accord... En gnral, quand une fonction est dfinie par une rcurrence, le seul cas o il est intressant de la calculer de manire btement rcursive (ie sans conserver les calculs intermdiaires), c'est quand la rcurrence ne fait intervenir qu'un terme f(n)= H(f(n-k)). Ds qu'on a plus d'un facteur (comme ici f(n)=f(n-1)+f(n-2), deux termes...), le calcul rcursif devient draisonnable. Et ce n'est pas de l'optimisation prmature : pour peu qu'on calcule une valeur un peu leve, l'algorithme naf a toutes les chances de ne pas fonctionner du tout (soit qu'il fera exploser la pile, soit parce que le temps deviendra draisonnable). 

Note au passage qu'ici, il n'est pas ncessaire de garder en mmoire toutes les valeurs passes. Les deux dernires suffisent. Plus gnralement, si la rcurrence fait intervenir des termes n-1, ... n-k, k termes suffisent. L encore, si on avait  calculer de grandes valeurs de la suite, cela ferait une diffrence. 

Francois

----------


## DonQuiche

> A la syntaxe prs, c'est quasiment le mme code que l'tudiant dbutant (si on le nettoie un tout petit peu), non?


Oui, c'est quivalent. Haskell a simplement une trs lgante syntaxe pour a. Pour ce cas-ci je ne pense pas qu'on puisse faire plus simple.

----------


## MikeRowSoft

> *Et vous ?*
> 
>  Selon vous, quel est le meilleur code prsent par ces 6 profils de dveloppeurs ?
> 
>  Pensez-vous qu'un code se doit avant tout de rpondre  un besoin ?


Aucuns codes ici prsent n'est le meilleur.

Oui, il faut rpondre  un besoin, mme humoristique.

----------


## foetus

> Oui, c'est quivalent. Haskell a simplement une trs lgante syntaxe pour a. Pour ce cas-ci je ne pense pas qu'on puisse faire plus simple.


En langage listing (Prolog) ou interprt (Lisp, SML) le code est quasi similaire  ::mrgreen::

----------


## Traroth2

Je ne vois pas de contradiction entre rpondre  un besoin donn et tre optimis. Il va de soi que l'optimisation se dtermine en fonction du contexte.

En l'occurrence, difficile de faire plus optimis que le code de hackathon, qui retourne en dur les valeurs d'une suite de Fibonacci. Par contre, c'est difficile  appliquer dans un contexte d'utilisation rel. En ralit, cette approche quivaut  la mmosation, mais un cran plus loin encore : c'est l'tre humain qui fait le calcul initial. Ou pour le dire autrement : la mmosation reprend le principe du code "hackathon", mais le rend exploitable dans un cas gnral, tout en conservant (quasiment) l'optimisation des perfs.

----------


## LSMetag

> Tout  fait d'accord... En gnral, quand une fonction est dfinie par une rcurrence, le seul cas o il est intressant de la calculer de manire btement rcursive (ie sans conserver les calculs intermdiaires), c'est quand la rcurrence ne fait intervenir qu'un terme f(n)= H(f(n-k)). Ds qu'on a plus d'un facteur (comme ici f(n)=f(n-1)+f(n-2), deux termes...), le calcul rcursif devient draisonnable. Et ce n'est pas de l'optimisation prmature : pour peu qu'on calcule une valeur un peu leve, l'algorithme naf a toutes les chances de ne pas fonctionner du tout (soit qu'il fera exploser la pile, soit parce que le temps deviendra draisonnable). 
> 
> Note au passage qu'ici, il n'est pas ncessaire de garder en mmoire toutes les valeurs passes. Les deux dernires suffisent. Plus gnralement, si la rcurrence fait intervenir des termes n-1, ... n-k, k termes suffisent. L encore, si on avait  calculer de grandes valeurs de la suite, cela ferait une diffrence. 
> 
> Francois


Merci pour la petite piqure de rappel. Pour moi, la mmosation tombe sous le sens (je ne connaissais pas le nom par contre), et je l'ai toujours pratique. Il faut juste veiller  ne pas saturer la mmoire.
Pour la complexit, il faudra peut-tre que je rapprenne  la calculer. Je fais tout  l'instinct pour le moment.

----------


## ranzoken

Il ne faut pas oubli que le dveloppeur ne fait pas tout le temps ce qu'il a envie.
Ayant pass par les case tudiant -> Grosse Boite -> SS2I

tudiant : Faux, personnellement mes profs m'ont appris  code sur papier et  commenter 
mais tant novice et "con", je n'en voyais pas l'utilit, et je suis encore novice  ::): 

Dans les Grosses Boites : on as souvent le temps de factoriss, de redfinir ses classes, d'implmenter de la gnricit ...

Quant-au SS2I : les clients demandes un produit fonctionnel pour pas cher, donc faut s'adapter 


C'est ce que j'ai pu apprendre de mes diffrentes boites.

----------


## Programming-Z

Je commente jamais mon code dans le sens o j'effectue un nommage trs prcis des variables/classes/fonctions. 

A partir de l le commenter chaque ligne est assez ridicule.  ::D:

----------


## 4sStylZ

Je suis le developpeur qui vas google Best php fibonnaci algorythm et qui vas la commenter, l'indenter, et la couvrir de quelques tests.  ::mrgreen::

----------


## eulbobo

Il manque le code du dveloppeur en SSII



```

```

Avec l'ajout de 250Mo de jar dans le classpath

----------


## Artemus24

Salut  tous.




> Selon vous, quel est le meilleur code prsent par ces 6 profils de dveloppeurs ?


Le meilleur code, selon moi, est celui qui est lisible. Trop de commentaire nuit  sa lisibilit.
Un commentaire est ncessaire quand le code ne suffit pas  comprendre ce qu'il fait.
De plus, le code doit tre concis, sans fioriture, juste l'essentiel, mais doit rpondre  l'usage que l'on va en faire.

J'ai donc une prfrence pour "Dveloppeur 1 : L'tudiant dbutant".

Celui de "Dveloppeur 2: Le programmeur au Hackaton" ne rpond pas  la fonctionnalit demande.
Car si on demande que faut 'getFibonnaciNumber(10)', il ne saura pas donner la solution.

Celui de "Dveloppeur 3: le programmeur dans une startup" surcharge avec trop de commentaire les explications de sa fonction.

Celui de "Dveloppeur 4: le programmeur dans une grande compagnie", les noms des variables sont trop longs  crire. C'est sujet  des erreurs.

Celui de "Dveloppeur 5: le programmeur Docteur en Maths" complexifie  outrance, sans que cela corresponde  un besoin rel.

Celui de "Dveloppeur 6: Tom le chat" son code est incomprhensible !
C'est le plus mauvais exemple de ce qu'il ne faut pas faire.




> Pensez-vous qu'un code se doit avant tout de rpondre  un besoin ?


1) Un code doit tre lisible !
2) Pas des astuces connues que du seul programmeur. Il doit tre comprhensible par quelqu'un qui a la connaissance du langage.
3) Il doit rpondre aux contraintes du dveloppement (programmation structure, modulaire, POO, rutilisable, rentrance ...), voire la mthodologie utilis dans l'entreprise.
4) Il doit rpondre  des besoins fonctionnelles (traiter tous les cas).
5) Il doit tre performant et occup le moins de place en occupation mmoire.
6) Il doit tre facilement maintenable.

Maintenant, je ne sais  qui s'adresse l'utilisation de ce code consacr  Fibonacci.
Un mathmaticien n'a rien  voir avec un dbutant en informatique. Et pour faire quel genre de calcul ?
Juste pour dmontrer l'usage de la rcursivit ou bien pour faire des calculs de haut niveau ?
Car sachant que la pile servant  grer la rcursivit est frquemment limit  255, il est dans ce cas de figure impossible de calculer une valeur de la fonction Fibonacci au del de 255.

@+

----------


## CoderInTheDark

Cest un peu un marronnier ce poste ^^
Faire un bon code ou tre un bon dveloppeur, a revient souvent ces derniers temps.

Moi je suis faignant.
Je n'ai plus envie de faire du travail dorfvre, comme  mes dbuts, quand je faisais de l'assembleur sur Amiga et qui fallait optimiser  mort.

Maintenant c'est contreproductif de bosser comme a.
Peut-tre sur les projets personnels, je peux finasser.

En informatique de gestion tu es souvent amen  casser ce que tu as  fait il y  a 3 mois
Alors je vais  lessentiel.
Mais a ne veut pas dire que je fais du mauvais code, je ne veux pas me casser la tte pour rien.
Je fais de la modularit surtout pour mconomiser de lcriture, et de la maintenance
Mais au boulot ce nest pas moi, qui ai le dernier mot pour la factorisation.
Et tant mieux, si tout le monde ajoutait des fonctions de son propre chef, le workspace serait pollu.

Alors o suis-je, o vais-je qui suis tre ou ne pas tre un bon codeur telle est la question ^^

----------


## Hotelsavecvue

Un code clair, concis et bien document, a existe aussi hein :p

----------


## esired

> En effet toutes les mthodes proposes sont en O(en).
> Ce qui est cher pay.
> 
> Les codes prcdents demandent 2.269.806.339 appels  fibonacci pour calculer fibonacci(45)=1134903170.
> Cet algorithme en demande 87 (pour le mme rsultat, il va de soi).
> C'est la Mmosation.
> ...


Il me semble que tu as oubli le titre de l'article...  :;):

----------


## Bousk

> Celui de "Dveloppeur 2: Le programmeur au Hackaton" ne rpond pas  la fonctionnalit demande.
> Car si on demande que faut 'getFibonnaciNumber(10)', il ne saura pas donner la solution.


Si justement, il rpond pile poil  ce que le hackaton lui demande.
Pourquoi faire plus compliqu si tout ce que ton code demande sera le rsultat entre n=0 et 7 ?

----------


## Sunchaser

> Un code n'est pas crit pour tre optimal mais d'abord pour rpondre  ses besoins


Un code pour rpondre  un besoin ? ... 


```

```

!
 ::aie:: 

Bon, je suis malade, j'ai la fivre, etc,etc ..  faut m'excuser

----------


## Invit

> Pour les professionnels ... grer une suite de Fibonacci.


C'est pas en avril d'habitude les poissons d'avril ?

----------


## Auteur

> J'ai donc une prfrence pour "Dveloppeur 1 : L'tudiant dbutant".


 Bof, trop classique manque d'originalit dans le code. 0/20




> Celui de "Dveloppeur 2: Le programmeur au Hackaton" ne rpond pas  la fonctionnalit demande.


 il a rpondu  la problmatique.. bon, d'accord, dans une certaine limite  ::aie:: 




> Celui de "Dveloppeur 3: le programmeur dans une startup" surcharge avec trop de commentaire les explications de sa fonction.


 Aprs, on nous reproche de ne pas faire de doc. Bon l, certes, ce ne sont que des TODO mais au moins on sait ce que fait (ou ne fait pas) son code  ::aie:: 




> Celui de "Dveloppeur 4: le programmeur dans une grande compagnie", les noms des variables sont trop longs  crire. C'est sujet  des erreurs.


 C'est du Chateaubriand et puis avec l'autocompltion, il est facile de retrouver les noms de variables  ::mrgreen:: 




> Celui de "Dveloppeur 5: le programmeur Docteur en Maths" complexifie  outrance, sans que cela corresponde  un besoin rel.


 Si cela rpond  un besoin : celui du docteur en maths. D'ailleurs il n'y a qu'eux qui le comprennent, c'est l'essentiel.




> Celui de "Dveloppeur 6: Tom le chat" son code est incomprhensible ! C'est le plus mauvais exemple de ce qu'il ne faut pas faire.


 Au contraire, c'est parfait ! On voit l tout le gnie des chats, c'est simplement magnifique, fantastique, merveilleux ! C'est poustouflant, tonnifiant, bouleversifiant !


 ::dehors::

----------


## CodeurPlusPlus

Il y a aussi la version itrative toute simple et la version recursive terminale. Elles ne sont pas en O(1), certes, mais en O(n) et les dbutants savent les crire (ok, pour la version rcursive terminale faut pas tre compltement stupide non plus).

----------


## e-ric

Salut  tous 

CodeurPlusPlus: tu me piques l'ide...

Aucune des solutions ne me convient mme si j'ai trouv la solution 4 assez amusante et hlas possible, j'ai malheureusement dj vu des choses pareilles, cela doit paratre technique. Au final, on ne sait pas ce que le code fait au premier coup d'oeil, les mainteneurs devront tre patients.

L'exemple est "scolaire", la rcursivit est intressante quand elle est pertinente et pratique. Ici, tout faux, le code est inefficace, la mmosation apporte une optimisation mais consomme de la mmoire, enfin, vous le savez tous.

La solution itrative est plus efficace, tout aussi concise et simple  comprendre mme si elle est loigne de la solution mathmatique. Soit en Python:


```

```

En plus, cette solution est facile  implmenter dans tout langage impratif, ce qui n'est pas toujours le cas avec la rcursivit.

Sur le fond de la question, cela dpend aussi de l'environnement professionnel : outils  disposition, niveau techniques des quipes, normes locales. Cela n'empche pas quand mme de chercher une certaine optimalit...

Cdlt

----------


## worm83

La premire fois que l'on m'a demand d'crire la suite de Fibonacci en Java, je l'ai crite en itratif, je comprenais pas pourquoi contrairement aux autres je n'avais pas la fameuse "Stack Overflow" que l'on devait constater pour un n>14 en TP, et pourquoi mes scores de performance taient totalement diffrents de ceux attendus.  ::mrgreen::

----------


## Iradrille

> ```
> 
> ```


Encore un truc qui me drange en Python (bien que la forme x, y = 1, 2 soit pratique).
Niveau ordre d'excution a donne quoi ?


```

```

Sinon la solution itrative, c'est la solution "vidente" non ? Enfin de ce que je me rappelle des cours de maths, c'est comme a que la suite tait dfinie.

----------


## e-ric

Salut,

Le plus logiquement du monde : valuation des valeurs du t-uple de la partie droite de l'affectation PUIS copie des valeurs dans les variables de la partie gauche.

Ce n'est une squence d'instructions dguise, sinon on aurait le type de problme que tu voques, ce qui rendrait ce genre de construction beaucoup moins attrayante.
Rien n'empche cependant de dcomposer cette affectation "double" en 2 affectations simples.

Cdlt

----------


## foetus

> Le plus logiquement du monde


 ::mouarf::  L'oprateur virgule en C est un gros panneau "Alerte Danger"  ::mouarf::  : l'valuation expression par expression, se fait de droite  gauche, et l'expression la plus  gauche est retourne


Ou un truc comme cela  ::wow:: 


dit: Iradrille officiant souvent dans la section C/ C++, il a des mcanismes/ habitudes/ tics automatiques/ ...  ::mouarf::

----------


## Artemus24

Salut  tous.

Pour solutionner ceci : 


```
x, y = y, x + y
```

il faut faire :


```

```

Par contre les deux solutions proposes ne fonctionnent pas du tout !
Pourquoi ? Car il manque une tape afin de ne pas venir craser une valeur (le x ou le y) lors de la premire affectation.
Donc : 

```

```

donne :
--> x = y (le x a t cras par la valeur de y).
--> y = 2*y

De mme pour : 

```

```

donne : 

--> y = x + y (le y a t cras par la valeur de x+y).
--> x = x + y

@+

----------


## e-ric

Salut

Tout cela montre bien l'intrt des tuples.

Bon WE  tous

Cdlt

----------


## pierre++

> ... qui ont crit des codes pour grer une suite de Fibonacci.


Heu, moi en premier je demande au client: qu'est ce que vous entendez par "grer" une suite de Fibonacci. Mais bon ,c'est moi  :;):

----------


## renoo

> En effet toutes les mthodes proposes sont en O(en).
> Ce qui est cher pay.
> 
> Les codes prcdents demandent 2.269.806.339 appels  fibonacci pour calculer fibonacci(45)=1134903170.
> Cet algorithme en demande 87 (pour le mme rsultat, il va de soi).
> C'est la Mmosation.
> 
> 
> 
> ...


A ce jeu l, on peut encore gagner beaucoup.  Fibonacci c'est une exponentielle de matrice c'est trs clair avec ton code. 
Fibo(n + 1) = A.Fibo(n) donc Fibo(n) = A^n.Fibo(0).  (je note ^ la puissance)

Et pour calculer A^n on calcule A^1, A^2, A^4, A^8,... et ensuite on fait les produits qu'il faut pour trouver A^n.... cela est utile si n est grand (et donc que l'on utilise des grands entiers pour la gestion des nombres). On passe alors de n  log(n).

----------


## pcdwarf

le code est fait pour rpondre a un besoin, certes, mais le code reflte aussi la pense de son crateur.
Quel que soit le domaine, il y a toujours eu des amoureux des belles mcaniques bien structures et des bricolos qui ne s'intressent qu'au fait que a marche le plus tt possible.

Il en faut pour tout les gouts et toutes les situations. Je ne vois pas pourquoi il y aurait des rgles.

----------


## baos!

J'aime bien le code "hackaton"  ::mouarf:: 

J'ai fait cet exercice il y a qq mois (en utilisant Java et les BigInteger, donc, pas limit  fibonnacci(164)), en utilisant aucune des mthodes dcrites.

*Premier algo*, c'est celui qu'on fait naturellement, " la main". On connait fibo(0) et fibo(1), puis, via une simple boucle *for*, on calcule fibo(2), fibo(3) ... jusqu' fibo(n) recherch. Ici, on calcule chaque valeur entre 1 et N une seule fois; et comme,  chaque calcule, seules les 2 dernires valeurs sont utiles; je n'utilise qu'un tableau de 3 lments. A chaque tape, le dernier lment calcul devient le n-1, l'ancien n-1 devient n-2 et le rsultat du calcul passe dans l'ancien n-2 (a fait une fonction de calcul d'indice relatif entre le fibo et la tableau un peu complexe, mais c'est trs conomique.

Le *second algo* part sur la remarque que :
fibo(n) = *fibo(n-1)*fibo(1) + fibo(n-2)*fibo(0)* = fibo(n-2)*fibo(1) + fibo(n-3)*fibo(1) + fibo(n-2)*fibo(0) = *fibo(n-2)*fibo(2) + fibo(n-3)*fibo(1)*
On voit facilement, par rcursivit, que :
*fibo(2*n) = fibo(n) + fibo(n-1)
fibo(2*n + 1) = fibo(n) * (fibo(n+1) + fibo(n-1))*Du coup, en codant simplement ce systme rcursif avec un mcanisme de "Mmoisation" (une simple Map), on ne calcule qu'environ log2(n) lments.

Pour info, 
fibo(1440) = 39148665084314713611487939879536073000884287539729085016573824046902113615010632646259788823155802905194474577
2829337376406678858402406939880042845977014235081189477072987319401028174973366140751380465125202666913528379206343180700
4225506814702922160621247026028619389629299722842113162285992338142080
calcul en presque 6 millisecondes pour le premier algo et 2 millisecondes pour le second.

----------


## ericlm128

Je trouve le code du 'Dveloppeur 3' le plus simple et lisible en commentant uniquement le fonctionnement.

Aprs a dpend du besoin :
- peut tre faut il grer une exception pour 'n < 0'
- Peut tre faut il optimiser le code a dpend des appels possibles

----------


## ChristianRoberge

Il y a un type de programmeur qui a t oublier. Je l'appelle l'illusionniste.  premire vue son code semble bien document et semble suivre les "rgles" de l'art. Mais quand on prend le temps de bien analyser ce qui est fait rellement, on s'aperoit que la documentation est insipide et ne fait que dcrire des banalit, que son code n'utilise pas les algorithmes appropri pour rsoudre adquatement les problmes et le plus grave, toutes les endroits critiques qui exigeaient un commentaire sont carrment absent pour que personne autre l'auteur puisse comprendre le problme.
Cela semble irrel, mais cette personne que j'ai connu, a travaill 3 ans dans la mme compagnie que moi et il a eu les flicitations de la part de la direction pour son respect des directives et la quantit de code produit durant pratiquement toutes ses annes. Fort de cette notorit, il s'est trouv un trs bon poste dans une autre bote! De notre cot, son code a t retir ou rcrit aprs son dpart parce qu'il avait trop de lacune. Du grand art!

----------


## kilroyFR

Pour moi le meilleur code est celui qui :
1/ fais le boulot
2/ est maintenable par n'importe qui (meme celui qui ne connait pas les trucs et astuces d'un langage)

Trop souvent les nouveaux developpeurs se perdent dans les syntaxes d'un langage ou essaient de placer les dernieres syntaxes (qui permettent d'ecrire en 2 lignes de codes ce qu'on faisait avant en 3). Resultat : tout le monde ne pouvant pas toujours etre au fait des dernieres evolutions, la maintenance en est plus penible (peut meme en degouter certains). J'ai lu du code ecrit en C/C++ ou tout etait condens pour optmiser le nb d'operations a un point ou c'etait indechiffrable. Idem pour du code C# Linq/lambda expressions (alors que de betes instructions conditionnelles auraient ete comprhensibles de tous).

----------


## el_slapper

> Il y a un type de programmeur qui a t oublier. Je l'appelle l'illusionniste.  premire vue son code semble bien document et semble suivre les "rgles" de l'art. Mais quand on prend le temps de bien analyser ce qui est fait rellement, on s'aperoit que la documentation est insipide et ne fait que dcrire des banalit, que son code n'utilise pas les algorithmes appropri pour rsoudre adquatement les problmes et le plus grave, toutes les endroits critiques qui exigeaient un commentaire sont carrment absent pour que personne autre l'auteur puisse comprendre le problme.
> Cela semble irrel, mais cette personne que j'ai connu, a travaill 3 ans dans la mme compagnie que moi et il a eu les flicitations de la part de la direction pour son respect des directives et la quantit de code produit durant pratiquement toutes ses annes. Fort de cette notorit, il s'est trouv un trs bon poste dans une autre bote! De notre cot, son code a t retir ou rcrit aprs son dpart parce qu'il avait trop de lacune. Du grand art!


Je n'ai vu a qu'une seule et unique fois. Mais c'tait impressionnant. L'ancienne m'avait prvenu(et avait prvenu la direction aussi) : le code semblait "alatoire". Je l'ouvre, surprise, c'est mignon, bien indent, avec des noms de variables nickel, une dcoupe en morceaux logiques et semblant bien dcoups... Sauf qu'une fois plong dans l'algorithmique proprement dite, a n'avait plus aucun sens. Les commentaires permettaient de savoir qu'on avait une entre et une sortie, mais pas ce qu'on en faisait. Les donnes subissaient des oprations arbitraires, sans queue ni tte. Toujours joliment, avec des noms de variable impeccables - mais qui trs vite ne correspondaient plus  la ralit.

----------


## e-ric

@kilroyFR
A nuancer, j'acquiesce en partie cet avis, le n'importe qui prte  tout et n'importe quoi. Prciser dveloppeur professionnel serait  mon sens plus justifi. Je ne ferai pas le boulot d'un mdecin, alors pourquoi un quidam foutrait ses pattes dans le code. Quant  la connaissance des trucs et astuces, pareil, on est quand mme censs en connatre une partie, ce n'est pas toujours contournable sauf  se contenter d'un code scolaire. Mais il vrai que l'abus en toute chose est mauvais, le code doit tre cohrent avec le problme  rsoudre.

En outre, la formation continue (l je rve) devrait thoriquement pallier ces lacunes, mais encore faudrait-il que les entreprises jouent le jeu. 

@el slapper
Visiblement, la forme prvaut sur le fond, c'est une tendance actuelle.
Tant qu'il y a des pompiers pour que cela tourne, cela ne changera pas. On a dj tent de m'imposer des normes de codage inutiles et encombrantes, je me suis amus  pousser un exemple au paroxysme, c'est toujours amusant, bte mais amusant. C'est parfois la seule faon de se faire entendre en tant que dveloppeur, c'est bien connu, on est trop cons, nous les dveloppeurs.

Cdlt

----------


## el_slapper

> (.../...)@el slapper
> Visiblement, la forme prvaut sur le fond, c'est une tendance actuelle.
> Tant qu'il y a des pompiers pour que cela tourne, cela ne changera pas. On a dj tent de m'imposer des normes de codage inutiles et encombrantes, je me suis amus  pousser un exemple au paroxysme, c'est toujours amusant, bte mais amusant. C'est parfois la seule faon de se faire entendre en tant que dveloppeur, c'est bien connu, on est trop cons, nous les dveloppeurs.(.../...)


La forme, a compte aussi. Je ne sais pas quelle est ton exprience, mais j'ai maintenu - et mme refondu, du code qui avait 36 ans d'ge(72-08). Les normes de codage encombrantes, certaines sont stupides, certes. Mais quand tu as 1500 programmes  analyser(pour mettre en place des tests automatique de batches), et que TOUS ont la mme superstructure :



```

```

Et avec en plus des normes d'appellations des sous-paragraphes, qui fait que les traitements d'erreur sont toujours en 90000, les lectures de base en 70000, etc.... Ben je peux te dire que le mec qui, 20 ans auparavant, a fait chier ses programmeurs pour avoir a partout, il vient de te sauver la vie en divisant par deux ton temps d'analyse. Et pas qu' toi.

Aprs, a ne veut pas dire que le programme marche bien. C'est videmment trs insuffisant pour assurer le succs d'un projet. Mais a fait gagner en productivit de manire impressionnante. Mon exprience  moi, c'est qu'un codage moins fut, mais plus standard, est  favoriser. Mme si on se trimballe 20 lignes de plus. Parce que le mainteneur sera chez lui dans ses pantoufles au premier coup d'il. Et pourra ignorer la forme - qu'il connait par cur - pour se concentrer sur le fond.

----------


## e-ric

Salut,

Il est vrai que des normes peuvent aider, cela devrait mme tre leur fondement, mais il faut qu'elles soient pertinentes et qu'elles autorisent parfois  sortir du cadre.

J'ai une exprience mitige des normes, les personnes qui les dictent n'ont pas toujours la capacit  le faire et recopient parfois btement ce qui se passe ailleurs, j'ai dj vu des cas. Je donne un exemple que je trouve caricatural, dans Delphi, quasiment tous les fichiers de code sont des units, eh bien, il y a un malin qui a eu l'ide gniale de les prfixer par la lettre U (U pour unit), le contenu informatifs d'une telle convention laisse  dsirer car cela n'est pas diffrenciant. Et quantit d'quipes ont repris  l'unisson une telle convention, pour dire qu'elles adoptaient une norme de codage. C'est une notation mettant en vidence les fichiers qui ne sont pas des units qu'il faudrait plutt mettre en place. Mais  ct de cela, cela ne gne personne de ne pas protger les blocs de code qui le mritent ou de comparer deux nombres en virgule flottante directement.

Cela explique ma mfiance pour les normes, notamment quand elles insistent trop sur la syntaxe.

Par exemple, la notation hongroise, belle calamit, M$ en sait quelque chose bien qu'il en soit le promoteur, on nomme une variable avec un prfixe dnotant un type prcis. Puis quelques mois plus tard on change le type de la variable sans bien sr la renommer, on introduit une irrgularit qui fera le "bonheur" du dveloppeur futur faisant trop confiance  la norme, surtout si c'est un prestataires dbarqu sur le projet car il y a une urgence. Bonjour le gain de temps.

El Slapper, tu as en grande partie raison (tu parles par exprience) mais  condition que les dveloppeurs jouent le jeu avec un minimum de srieux et d'intelligence.

Cdlt

----------


## Invit

il y a quelques annes, quand j'tais dveloppeur, j'avais rdig les rgles et nomenclatures de codage avec un collgue sur un gros projet.
Quelle surprise de dcouvrir quelques semaines plus tard aprs la livraison de ce document que la seule personne de l'quipe  s'asseoir allgrement sur ces rgles taient justement mon collgue qui avait co-rdiges celles-ci !  ::weird::  (du niveau : variable1, variable2...)

----------


## DonQuiche

> J'ai une exprience mitige des normes, les personnes qui les dictent n'ont pas toujours la capacit  le faire et recopient parfois btement ce qui se passe ailleurs, j'ai dj vu des cas. Je donne un exemple que je trouve caricatural, dans Delphi, quasiment tous les fichiers de code sont des units, eh bien, il y a un malin qui a eu l'ide gniale de les prfixer par la lettre U (U pour unit), le contenu informatifs d'une telle convention laisse  dsirer car cela n'est pas diffrenciant. Et quantit d'quipes ont repris  l'unisson une telle convention, pour dire qu'elles adoptaient une norme de codage. C'est une notation mettant en vidence les fichiers qui ne sont pas des units qu'il faudrait plutt mettre en place. Mais  ct de cela, cela ne gne personne de ne pas protger les blocs de code qui le mritent ou de comparer deux nombres en virgule flottante directement.
> 
> Cela explique ma mfiance pour les normes, notamment quand elles insistent trop sur la syntaxe.


Outre les mauvaises normes, j'ai surtout une aversion pour la surnomarliasation. Si la convention occupe plus de quelques lignes, a sent le poisson.

----------


## Artemus24

Salut  tous.

L'intrt d'une mthodologie, c'est de faire en sorte que tous les membres d'une quipe dveloppe de la mme faon.
Elle ne doit pas tre contraignante, mais doit faciliter sa mise en place.
Quand tu te poses trop de questions sur son application, c'est qu'il y a un problme.
Combien de fois aussi, on continue d'appliquer une rgle qui ne sert plus  rien.

Ayant fait beaucoup de cobol, les normes du dveloppement ont un sens.
Mais passer  un autre langage, je ne voie plus trop l'intrt de continuer  les appliquer. Par exemple, en cobol, on prfixe les champs :
--> cste- : pour les constantes.
--> date- : pour les dates.
--> tete- : pour les en-ttes des tats.
--> line- : pour la ligne courante.
...
C'est pratique pour le cobol, mais sans intrt ailleurs. Pourquoi ? Car il n'existe pas de type en Cobol. On a les computational et c'est tout.

@+

----------

