OVH Cloud OVH Cloud

La différence entre un bon et un mauvais programmeur...

105 réponses
Avatar
korchkidu
Le mauvais programmeur, il code, il compile, il exécute et ca plante.
Le bon programmeur, il code, il compile, il exécute, ca plante mais
c'est un bon programmeur...;)
Plus serieusement, je vois souvent "bons programmeurs" ou "mauvais
programmeurs". Comme je sais qu'il y a surement parmi vous des gens qui
doivent decider si quelqu'un est un bon ou un mauvais programmeur, je
serais curieux de connaitre les criteres sur lesquels vous vous bases
pour decider de ca dans le cas du C++. Par exemple, lors d'un entretien,
qu'est ce qui peut faire gagner des points et qu'est ce qui peut en
faire perdre...
Je precise que je n'ai aucunement l'intention (enfin j'espere, on ne
sait jamais ce qu peut nous arriver....) de passer ce genre d'entretien
dans un avenir proche, c'est juste une question de curiosite.

Merci pour vos commentaires,
K.
PS: merci de rester assez "haut-niveau" pour eviter que la discussion ne
degenere...;)

10 réponses

Avatar
Gabriel Dos Reis
"Olivier Azeau" writes:

[...]

| Pour reprendre une analogie connue, si le cout d'un crash test
| automobile était tres faible et sa mise en oeuvre tres rapide, les
| constructeurs automobiles ne passeraient pas des mois a concevoir un
| véhicule sur papier et a faire des simulations numériques : tous les
| jours, ils construiraient un prototype grandeur nature en 5 minutes et
| l'enverraient contre le mur pour voir s'il tient le coup.
| L'énorme avantage que nous avons en faisant du logiciel, c'est que ce
| crash test rapide et a faible cout, nous l'avons : ca s'appelle du code
| et des tests et cela suffit pour justifier un faible temps passé "sur
| le papier" et une construction de prototype exécutable au cours de la
| conception.


Là je ne suis pas d'accord. Il est peut-être ton cas que le crash test
te coûte peu cher, mais il faudrait se garder d'en faire un
généralité. Le crash test que j'ai vu dans plusieurs projets
consiste en pusieurs batteries de tests, coûtant très chers et mettant
en oeuvre beaucoup de ressources (humaines et matérielles). On ne
s'amuse pas en faire toutes les 5 minutes.

-- Gaby
Avatar
Olivier Azeau
Gabriel Dos Reis wrote:
"Olivier Azeau" writes:

[...]

| Pour reprendre une analogie connue, si le cout d'un crash test
| automobile était tres faible et sa mise en oeuvre tres rapide, les
| constructeurs automobiles ne passeraient pas des mois a concevoir
un

| véhicule sur papier et a faire des simulations numériques : tous
les

| jours, ils construiraient un prototype grandeur nature en 5 minutes
et

| l'enverraient contre le mur pour voir s'il tient le coup.
| L'énorme avantage que nous avons en faisant du logiciel, c'est que
ce

| crash test rapide et a faible cout, nous l'avons : ca s'appelle du
code

| et des tests et cela suffit pour justifier un faible temps passé
"sur

| le papier" et une construction de prototype exécutable au cours de
la

| conception.


Là je ne suis pas d'accord. Il est peut-être ton cas que le crash
test

te coûte peu cher, mais il faudrait se garder d'en faire un
généralité. Le crash test que j'ai vu dans plusieurs projets
consiste en pusieurs batteries de tests, coûtant très chers et
mettant

en oeuvre beaucoup de ressources (humaines et matérielles). On ne
s'amuse pas en faire toutes les 5 minutes.


Effectivement si on prend la totalité d'une appli, l'ensemble des
batteries de tests ne se fait généralement pas en 5 minutes.
Disons que la bonne analogie aurait été le test de résistance d'une
partie du véhicule (aile avant gauche, chassis, etc.) qui :
- peut se faire en beaucoup moins de temps et pour moins cher dans tous
les projets
- rend plus ou moins inutile le crash test global en cas d'échec
- permet une adaptation locale de la conception beaucoup plus
rapidement que s'il fallait attendre le véhicule entier.

Avatar
Olivier Azeau
Gabriel Dos Reis wrote:
"Olivier Azeau" writes:

[...]

| Pour reprendre une analogie connue, si le cout d'un crash test
| automobile était tres faible et sa mise en oeuvre tres rapide, les
| constructeurs automobiles ne passeraient pas des mois a concevoir
un

| véhicule sur papier et a faire des simulations numériques : tous
les

| jours, ils construiraient un prototype grandeur nature en 5 minutes
et

| l'enverraient contre le mur pour voir s'il tient le coup.
| L'énorme avantage que nous avons en faisant du logiciel, c'est que
ce

| crash test rapide et a faible cout, nous l'avons : ca s'appelle du
code

| et des tests et cela suffit pour justifier un faible temps passé
"sur

| le papier" et une construction de prototype exécutable au cours de
la

| conception.


Là je ne suis pas d'accord. Il est peut-être ton cas que le crash
test

te coûte peu cher, mais il faudrait se garder d'en faire un
généralité. Le crash test que j'ai vu dans plusieurs projets
consiste en pusieurs batteries de tests, coûtant très chers et
mettant

en oeuvre beaucoup de ressources (humaines et matérielles). On ne
s'amuse pas en faire toutes les 5 minutes.


Effectivement si on prend la totalité d'une appli, l'ensemble des
batteries de tests ne se fait généralement pas en 5 minutes.
Disons que la bonne analogie aurait été le test de résistance d'une
partie du véhicule (aile avant gauche, chassis, etc.) qui :
- peut se faire en beaucoup moins de temps et pour moins cher dans tous
les projets
- rend plus ou moins inutile le crash test global en cas d'échec
- permet une adaptation locale de la conception beaucoup plus
rapidement que s'il fallait attendre le véhicule entier.

Avatar
Pierre Maurette
Pierre Maurette wrote:
[...]

Vous faites un concours de banalités ? Je peux jouer ?
Voilà, c'est la réponse d'un "mauvais programmeur". Pour faire plaisir
à K. Ahausse ;-).



Ah ! non ! c'est un peu court, jeune homme !
On pouvait dire... Oh ! Dieu !... bien des choses en somme...
En variant le ton, -par exemple, tenez
Agressif : "Moi, monsieur, si j'étais si mauvais,
Personne n'accepterait que je programmasse !"
Amical : "Mais mon gars, tu codes comme une godasse
Va donc lire 'Programmez en Assembleur' !"
Descriptif : "C'est un coredump !.. c'est un bug !... c'est une erreur !
Que dis-je, c'est une erreur ?... Une ERREUR majuscules !"
Curieux : "Cela vous plait-il d'être si ridicule ?
...
http://mapage.noos.fr/echolalie/neznez.htm

"Et les Pyrénées chantent au vent d'Espagne"
--
Pierre


Avatar
James Kanze
Michel Michaud wrote:
Dans le message
,


Si je régarde autour de moi, au moins un tiers des
développeurs ont une fenêtre ouverte sur Google en
permanence. Comme par hazard, les plus competents sont tous
dans ce tiers-là.



Par curiosité, tu dirais qu'ils sont compétents grâce (entre
autres) à leur fenêtre sur Google ou bien c'est plutôt qu'ils
peuvent se permettre une fenêtre sur Google puisque tout le
monde sait qu'ils sont compétents ?


L'un n'exclut pas l'autre. Mais je crois que le deuxième prime.
Les chefs savent qu'ils peuvent compter sur eux. Pour la reste,
c'est égal.

Et c'est Google pour Usenet ou comme engin de recherche ?


C'est assez souvent Google Groups. Mais là aussi, l'un n'exclut
pas l'autre, et souvent, pour les types de problèmes qu'on a,
c'est une recherche dans les groupes.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
Fabien LE LEZ
On 31 Jan 2005 08:05:57 -0800, "Olivier Azeau" :

Par exemple, [12h46 ; 13h01].
Si les 2 bornes de l'intervalle sont incluses, cela fait 16 minutes ;-)



Non.


--
;-)


Avatar
kanze
Olivier Azeau wrote:
wrote:
Quant à quand il faut passer au codage, ça dépend évidemment
un peu du projet. Dans des grands projets, c'est assez
tardifs, parce que revenir en arrière sur la conception même
d'une classe coûte cher, s'il implique des modifications
chez tous les autres programmeurs. Mais même dans les cas
les plus simples, il vaut bien mieux avoir précisé
exactement ce que doit faire la classe, et les pré- et
post-conditions de ses fonctions, avant de commencer le
codage.


Je ne souscris pas a cette notion de "revenir sur la
conception coute cher"


C'est cependant mésurable.

car, tot ou tard, il faudra revenir sur la conception
(typiquement parce qu'il faudra rajouter des fonctionnalités)
et la ca coutera encore plus cher.


Pourquoi ? Si la première conception a été bien faite, on
pourrait en ajouter des fonctionalités sans problèmes. Ce qu'il
ne faut pas, c'est d'en changer.

En fait cela est directement lié au taux de révision des
spécifications : plus les changements sont fréquents, plus on
a interet a se mettre dans une facon de travailler ou les
retours sur la conception ne coutent pas cher.


Les itérations doivent être rapprochées. Même si les
spécifications sont assez stables. Ça ne veut pas dire qu'on ne
fait pas la conception, ni qu'on ne documente pas ce qu'on fait.

Pour ce qui est de quand passer au code, pour moi la réponse
est : des que j'ai un bout de conception suffisamment défini
pour l'exprimer sous forme de code et qui va donc me permetrre
de mettre ma conception a l'epreuve en lui donnant une
execution reelle et non plus sous forme de diagrammes de
sequence.


Et comment sais-tu quand on y arrive ? La seule façon, c'est
d'en parler avec les collègues. Ce qui suppose une
documentation.

[snip]
-- Comme outil de génération des en-têtes. Dans ce cas-là,
on avait même déclarer nos en-têtes comme des fichiers
dérivés (au sens de ClearCase), et non comme des sources. La
source était les diagrammes Rose. C'était un gros projet, et
les développeurs n'avait pas le droit de toucher aux
en-têtes sans autorisation particulière. (C'est un peu
normal, s'il y a cents autres personnes qui dépendent de tes
en-têtes.)


Si 100 personnes dépendent directement des entetes au sein
d'un meme projet, effectivement, il y a un probleme


C'était le cas dans un des projets où j'ai travaillé. (En fait,
on était arrivé à 174 à un moment.) Dans d'autres, j'ai
travaillé quasiment tout seul. Mais je n'ai pas changé ma façon
de travailler pour autant. Parce que j'ai constaté que ce que je
faisais pour les autres cent programmeurs m'aidaient moi-aussi.

En fait, la plupart des technologies de processus dont je me
sers ont été développées pour des systèmes critiques, où le
moindre erreur n'est pas acceptable. Le but du processus,
c'était constamment de réduire le taux d'erreurs, coût que coût.
Et on les a introduit la première fois que je les ai vu
précisement pour ça -- la qualité n'avait pas de prix. Imagine
notre surprise alors quand on a découvert que le prix du
développement s'était baissé aussi -- la qualité est gratuite.

En fait, je crois que ça ne tient que jusqu'un certain niveau,
et quand on veut atteindre les extrèmes de qualité -- moins
d'une erreur par million de lignes de code, par exemple, le prix
se rémet à grimper. Mais jusqu'à environ une erreur pour cent
mille lignes de code, tout ce que tu fais pour améliorer la
qualité (introduction des revues de conception et de code, par
exemple) réduit le coût total.

mais, a mon avis, le probleme n'est plus de savoir si on a
fait de la conception avant d'écrire le code... Il est plutot
de savoir pourquoi ces entetes-la n'ont pas été séparées dans
un projet a part entiere...


Ils l´etaient, en quelque sort. Qu'est-ce que ça change ?

[snip]

-- Dans le dernier projet qu'on a fait, on s'en est servi
pour toute la génération. J'avoue que j'en étais un peu
scéptique au début, mais à la fin, j'étais ravi de ne pas
avoir à constamment répéter dans le .cc toute la partie
définition qu'il y avait dans le .hh. Je crois que cette
techinique serait difficile à gérer dans un grand projet ;
il faut une certaine dicipline dans l'édition des fichiers
générés (où il faut évidemment ajouter le code des
fonctions). Mais c'est de loin la solution que je trouve la
plus agréable pour des petits projets. Tu exprimes en UML ce
qui s'exprime le mieux en UML, et en C++ ce qui s'exprime le
mieux en UML. Prèsque, parce que la définition des détails
des fonctions pouvait être un peu pénible, avec
l'enchaînement des menus, etc. Mais ça restait dans
l'acceptable, et toujours plus facile que l'alternatif de
les écrire à la main. (Et n'oublie pas que je suis un des
virtuoses des éditeurs classiques, pour écrire des choses à
la main.)


J'ai connu ce cas la ou on avait poussé jusqu'a utiliser les
stereotypes UML pour qualifier les classes et les associations
et générer le C++ correspondant au travers d'un add-in Rose
fait maison mais le principal blocage fut la discipline
imposée par ce genre de process (l'autre moitié de l'équipe
n'a pas adhéré a la méthode pour diverses raisons) ce qui
depuis me laisse penser qu'une telle facon de faire est
généralement trop paralysante.


Je ne comprends pas : la dicipline est trop paralysante ? Je
trouve que l'idée de se lévèrager sur des stéréotypes l'idéale.
Moi, je ne démande que de développer de cette façon.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
Gabriel Dos Reis wrote:
writes:

[...]

| > Il y a d'autres possibilités, comme de dire tout
| > simplement que Rose n'est pas un bon outil pour faire de
| > la conception ou communiquer dessus.

| Certes. Mais alors, tu te sers de quoi ? Rose m'emballe pas
| dans tous ses détails, mais j'arrive à m'en servir. Et faute
| d'autres choses... C'est toujours mieux que de faire ses
| dessins UML sur papier.

j'utilise pas UML.


À bon ? Et tu développe des applications de taille ?

J'utilise le tableau noir de BS.


On peut y faire de l'UML aussi. Évidemment, à condition de ne
rien faire qui vaut la peine de garder:-).

Sérieusement, je suppose que tu parles des sessions de
« brainstorming », parce que la persistence du tableau noir
n'est pas particulièrement bonne.

Quand je suis seul, j'utilise un papier et un crayon.


Que tu gardes soigneusement quelque part, j'espère, pourque tes
idées ne se perdent pas, et qu'elles puissent servir aux autres.

Je ne connais pas la contexte universitaire ; j'imagine que dans
la récherche, il y a effectivement beaucoup d'idées qu'on jette
par la suite. Mais moi, on me paie cher pour mes idées, et le
client s'estimera lesé si elles se perdaient comme ça.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
korchkidu
Il me semble que la conception est au centre du concept du bon
programmeur d'apres vos reactions.
Mais n'y a t'il pas des concepts importants du C++ qui pour vous sont
indispensables (matriser parfaitement les templates, RAII et tous les
termes compliques que je ne connais pas qui vont avec...)?

K.
Avatar
kanze
Olivier Azeau wrote:
James Kanze wrote:
Olivier Azeau wrote:
Pour moi, il est clair que le meilleur moyen pour le
commun des développeurs d'arriver au code qui implémente
le plus simplement possible les fonctionnalités voulues
c'est de naviguer en permanence entre conception, code et
test.


Je ne dis pas que dans un très petit projet, on peut changer
de châpeau assez fréquemment. Mais les activités doivent
rester distinctes.


Tout dépend ce que l'on entend par distinctes - et je crois
que les divergences de points de vues résident dans ce point.
Si c'est pour dire : "il faut faire de la conception et ne pas coder
sans avoir un minimum réfléchi a un ensemble de classes et la facon
dont elles interagissent", tout le monde sera probablement d'accord.


En effet, il me semble dire une vérité évidente, et ça
m'étonnait qu'on ne peut pas être d'accord.

Si c'est pour dire : "il faut avoir une vision assez complete
du systeme sous formes de schemas de classes, de sequence,
etc. avant d'écire du code",


Disons qu'il faut quand même avoir une bonne idée de ce que la
classe que tu vas écrire doit faire. Le C++ n'est pas le
meilleur langage de conception. Ceci dit, pour des cas les plus
simples, il se peut qu'un commentaire sur la rôle et les
responsibilités de la classe suffit ; d'après mon expérience, de
tels cas se limitent vraiement aux niveaux les plus bas. (Je
n'ai pas fait un diagramme UML pour écrire mes classes
pré-standard String et ArrayOf, par exemple.)

j'ai vu plusieurs fois des équipes passer du temps a peaufiner
une conception avec une phase de conception dédiée et, a
chaque fois, l'équipe a trop tardé a écrire du code.


Est-ce qu'on peut trop tardé à écrire du code ? En général, plus
on rétard à écrire du code, plus le projet est fini vite.

L'écriture de code permet a toute conception, aussi bonne soit
elle, de se confronter a la réalité de ce que va etre le
logiciel.


L'expérience aussi. C'est vrai qu'il faut éviter les équipes
conception dont les membres n'écrivent plus du tout de code
(encore que je connais des boîtes où ça semble marcher). Mais je
n'ai jamais eu trop de problème à faire de la conception
d'abord, et de coder après.

Pour reprendre une analogie connue, si le cout d'un crash test
automobile était tres faible et sa mise en oeuvre tres rapide,
les constructeurs automobiles ne passeraient pas des mois a
concevoir un véhicule sur papier et a faire des simulations
numériques : tous les jours, ils construiraient un prototype
grandeur nature en 5 minutes et l'enverraient contre le mur
pour voir s'il tient le coup.


Et ça leur avancerait à quoi ? À savoir ce qu'ils ont fait
n'était pas juste ?

Ça ressemble un peu l'histoire des millions de singes qui
tappent au hazard au clavier, pour écrire Shakespeare.

L'énorme avantage que nous avons en faisant du logiciel, c'est
que ce crash test rapide et a faible cout, nous l'avons : ca
s'appelle du code et des tests et cela suffit pour justifier
un faible temps passé "sur le papier" et une construction de
prototype exécutable au cours de la conception.


Le problème, chez nous, c'est que ce n'est pas toujours évident
quand ça « crashe ». Un programme peut bien semblait
fonctionner, mais comporter des erreurs graves quand même.

(et je connais même des personnes qui disent que
l'écriture des tests doit venir avant celle du code mais
ceci est une autre histoire...)


C'est une des modes, aujourd'hui:-). Mais ils disent en fait
que les tests, c'est la documentation de la conception --
donc toujours qu'il faut d'abord la conception.


Ils disent aussi que les tests sont écrits au fur et a mesure
du code en itérations tres rapprochées -- ce qui revient a
dire : un petit bout de conception/test-un petit bout de
codage-un petit bout de conception/test-un petit bout de
codage-un petit bout de conception/test-un petit bout de
codage-...


Personne n'a rien dit contre des itérations rapprochées. Tout ce
qu'on discute, c'est comment faire une itération.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34