Olivier Azeau wrote:Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que je ne
connais pas) ou on sépare les travaux d'analyse, de conception
et de codage sur des activités tellement distinctes qu'on
emploie des personnes différentes pour les réaliser.
Ce n'est pas nécessairement une question de personnel différent,
une personne peut porter (et porte, en général) plusieurs
châpeaux. Et la façon la plus sûre de ne pas faire une
conception rigueureuse, c'est de ne pas la séparer du codage. Au
minimum (et seulement dans des choses très simple), on écrit
d'abord la définition de la classe, avec la declaration des
fonctions publiques, les invariantes, et les pré- et
post-conditions des fonctions, avant d'ouvrir les sources dans
l'éditeur. Dès que les choses deviennent le moindre petit peu
compliquées, on commence par des diagrammes de classe et des
scénarios ; seulement quand on est sûr de son coup, on se met à
écrire du « code ».
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.Evidemment, commencer par faire quelques schemas de conception
pour éprouver quelques idées en les soumettant aux collegues
est une bonne chose mais vouloir définir toutes ses classes
sur le papier avant de passer au code n'est en général qu'une
perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et il y
en a certainement d'autres. Est-ce qu'il existe une boîte
aujourd'hui qui ne s'en sert pas ?
Et ce pour une raison simple : un travail de développement est
une activité fortement itérative ou l'on navigue en permanence
entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans chaque
itération -- conception et définition de ce qu'on veut faire
d'abord, puis validation du concepte, puis codage et tests.
Le code propre et lisible, on ne l'obtient jamais en sortant
directement d'une conception, mais en l'ayant travaillé
pendant un certain temps qui passe par des aller-retours avec
la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
Olivier Azeau wrote:
Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que je ne
connais pas) ou on sépare les travaux d'analyse, de conception
et de codage sur des activités tellement distinctes qu'on
emploie des personnes différentes pour les réaliser.
Ce n'est pas nécessairement une question de personnel différent,
une personne peut porter (et porte, en général) plusieurs
châpeaux. Et la façon la plus sûre de ne pas faire une
conception rigueureuse, c'est de ne pas la séparer du codage. Au
minimum (et seulement dans des choses très simple), on écrit
d'abord la définition de la classe, avec la declaration des
fonctions publiques, les invariantes, et les pré- et
post-conditions des fonctions, avant d'ouvrir les sources dans
l'éditeur. Dès que les choses deviennent le moindre petit peu
compliquées, on commence par des diagrammes de classe et des
scénarios ; seulement quand on est sûr de son coup, on se met à
écrire du « code ».
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.
Evidemment, commencer par faire quelques schemas de conception
pour éprouver quelques idées en les soumettant aux collegues
est une bonne chose mais vouloir définir toutes ses classes
sur le papier avant de passer au code n'est en général qu'une
perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et il y
en a certainement d'autres. Est-ce qu'il existe une boîte
aujourd'hui qui ne s'en sert pas ?
Et ce pour une raison simple : un travail de développement est
une activité fortement itérative ou l'on navigue en permanence
entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans chaque
itération -- conception et définition de ce qu'on veut faire
d'abord, puis validation du concepte, puis codage et tests.
Le code propre et lisible, on ne l'obtient jamais en sortant
directement d'une conception, mais en l'ayant travaillé
pendant un certain temps qui passe par des aller-retours avec
la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
Olivier Azeau wrote:Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que je ne
connais pas) ou on sépare les travaux d'analyse, de conception
et de codage sur des activités tellement distinctes qu'on
emploie des personnes différentes pour les réaliser.
Ce n'est pas nécessairement une question de personnel différent,
une personne peut porter (et porte, en général) plusieurs
châpeaux. Et la façon la plus sûre de ne pas faire une
conception rigueureuse, c'est de ne pas la séparer du codage. Au
minimum (et seulement dans des choses très simple), on écrit
d'abord la définition de la classe, avec la declaration des
fonctions publiques, les invariantes, et les pré- et
post-conditions des fonctions, avant d'ouvrir les sources dans
l'éditeur. Dès que les choses deviennent le moindre petit peu
compliquées, on commence par des diagrammes de classe et des
scénarios ; seulement quand on est sûr de son coup, on se met à
écrire du « code ».
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.Evidemment, commencer par faire quelques schemas de conception
pour éprouver quelques idées en les soumettant aux collegues
est une bonne chose mais vouloir définir toutes ses classes
sur le papier avant de passer au code n'est en général qu'une
perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et il y
en a certainement d'autres. Est-ce qu'il existe une boîte
aujourd'hui qui ne s'en sert pas ?
Et ce pour une raison simple : un travail de développement est
une activité fortement itérative ou l'on navigue en permanence
entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans chaque
itération -- conception et définition de ce qu'on veut faire
d'abord, puis validation du concepte, puis codage et tests.
Le code propre et lisible, on ne l'obtient jamais en sortant
directement d'une conception, mais en l'ayant travaillé
pendant un certain temps qui passe par des aller-retours avec
la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
une réponse
qu'il faut coder bêtement, si on a bien dit que c'est parce
qu'on a reflechi sur ce qu'on avait à coder avant, marquera des
points positifs.
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
une réponse
qu'il faut coder bêtement, si on a bien dit que c'est parce
qu'on a reflechi sur ce qu'on avait à coder avant, marquera des
points positifs.
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
une réponse
qu'il faut coder bêtement, si on a bien dit que c'est parce
qu'on a reflechi sur ce qu'on avait à coder avant, marquera des
points positifs.
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
Olivier Azeau wrote:Fabien LE LEZ wrote:On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
:Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il réfléchit,
il réfléchit, il réfléchit, il réfléchit, il code, ça compile
du premier coup (sauf fautes de frappe), et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il réfléchit
autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal de
boîtes où j'ai travaillé, il était pratiquement interdit de
commencer le codage sans une revue de la conception avant.
Olivier Azeau wrote:
Fabien LE LEZ wrote:
On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
<korch_ki_du@yahoo.fr>:
Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il réfléchit,
il réfléchit, il réfléchit, il réfléchit, il code, ça compile
du premier coup (sauf fautes de frappe), et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il réfléchit
autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal de
boîtes où j'ai travaillé, il était pratiquement interdit de
commencer le codage sans une revue de la conception avant.
Olivier Azeau wrote:Fabien LE LEZ wrote:On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
:Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il réfléchit,
il réfléchit, il réfléchit, il réfléchit, il code, ça compile
du premier coup (sauf fautes de frappe), et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il réfléchit
autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal de
boîtes où j'ai travaillé, il était pratiquement interdit de
commencer le codage sans une revue de la conception avant.
James Kanze wrote:
Olivier Azeau wrote:Fabien LE LEZ wrote:
On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
:
Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il
réfléchit, il réfléchit, il réfléchit, il réfléchit, il
code, ça compile du premier coup (sauf fautes de frappe),
et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il
réfléchit autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal
de boîtes où j'ai travaillé, il était pratiquement interdit
de commencer le codage sans une revue de la conception avant.
Une fois on m'a imposé de travailler comme cela. Une seule...
Dans ces boites, le patron explique-t-il pourquoi il exige
cela ? (autrement que par "la patron a toujours raison")
James Kanze wrote:
Olivier Azeau wrote:
Fabien LE LEZ wrote:
On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
<korch_ki_du@yahoo.fr>:
Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il
réfléchit, il réfléchit, il réfléchit, il réfléchit, il
code, ça compile du premier coup (sauf fautes de frappe),
et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il
réfléchit autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal
de boîtes où j'ai travaillé, il était pratiquement interdit
de commencer le codage sans une revue de la conception avant.
Une fois on m'a imposé de travailler comme cela. Une seule...
Dans ces boites, le patron explique-t-il pourquoi il exige
cela ? (autrement que par "la patron a toujours raison")
James Kanze wrote:
Olivier Azeau wrote:Fabien LE LEZ wrote:
On Thu, 27 Jan 2005 15:59:05 +0100, korchkidu
:
Le bon programmeur, il code, il compile, il exécute, ca
plante mais c'est un bon programmeur...;)
Le bon programmeur, il réfléchit, il réfléchit, il
réfléchit, il réfléchit, il réfléchit, il réfléchit, il
code, ça compile du premier coup (sauf fautes de frappe),
et ça ne plante pas.
Tu as oublié : il sait expliquer a son patron pourquoi il
réfléchit autant ;-)
De plus en plus, c'est son patron qui l'exige. Dans pas mal
de boîtes où j'ai travaillé, il était pratiquement interdit
de commencer le codage sans une revue de la conception avant.
Une fois on m'a imposé de travailler comme cela. Une seule...
Dans ces boites, le patron explique-t-il pourquoi il exige
cela ? (autrement que par "la patron a toujours raison")
James Kanze wrote:
Olivier Azeau wrote:Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que
je ne connais pas) ou on sépare les travaux d'analyse, de
conception et de codage sur des activités tellement
distinctes qu'on emploie des personnes différentes pour
les réaliser.
Ce n'est pas nécessairement une question de personnel
différent, une personne peut porter (et porte, en général)
plusieurs châpeaux. Et la façon la plus sûre de ne pas faire
une conception rigueureuse, c'est de ne pas la séparer du
codage. Au minimum (et seulement dans des choses très
simple), on écrit d'abord la définition de la classe, avec la
declaration des fonctions publiques, les invariantes, et les
pré- et post-conditions des fonctions, avant d'ouvrir les
sources dans l'éditeur. Dès que les choses deviennent le
moindre petit peu compliquées, on commence par des diagrammes
de classe et des scénarios ; seulement quand on est sûr de
son coup, on se met à écrire du « code ».
C'est un dogme ou y-a-t-il une bonne justification ?
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.
Evidemment, commencer par faire quelques schemas de
conception pour éprouver quelques idées en les soumettant
aux collegues est une bonne chose mais vouloir définir
toutes ses classes sur le papier avant de passer au code
n'est en général qu'une perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et
il y en a certainement d'autres. Est-ce qu'il existe une
boîte aujourd'hui qui ne s'en sert pas ?
"sur le papier" n'était qu'une façon de formuler les choses.
J'aurais pu tout aussi bien dire :
Vouloir définir toutes ses classes avec Rose avant de passer
au code n'est en général qu'une perte de temps.
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Et ce pour une raison simple : un travail de développement
est une activité fortement itérative ou l'on navigue en
permanence entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans
chaque itération -- conception et définition de ce qu'on veut
faire d'abord, puis validation du concepte, puis codage et
tests.
Je ne parle pas de process itératif avec un waterfall par
itération. Je parle de l'activité du développeur devant son
écran. Je ne connais personne qui soit capable d'écrire toutes
ses classes dans une phase de conception sans écrire une ligne
de code puis dans un deuxième temps d'écrire son code sans
rajouter une classe ou déplacer des responsabilités entre les
classes.
Il existe surement des "êtres supérieurs" dont les neurones
sont connectées en forme de diagramme de classe ou de séquence
mais chez le commun des développeurs, la conception est
raffinée pendant le codage.
C'est pour cela que je parle d'*activité* itérative : la
meilleure productivité chez la plupart des développeurs est
obtenue avec quelque chose comme (sur une période de quelques
heures) :
- Je réfléchis à une ébauche de conception avec les classes
principales
- Je code ces classes
- J'écris un test
- Je reviens sur le code des classes
- Je fais passer le test
- J'avance dans ma conception en rajoutant un comportement à mes classes
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
- Je pense à une simplification de code : je l'essaye en modifiant le
code
- Je fais passer le test
- Je me rends compte que la conception pourrait être plus claire en
rajoutant une classe : je la rajoute
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
.....
Dans plusieurs cas, j'ai constaté une bonne efficacité avec un
tel comportement, et ce quel que soit l'effort porté sur la
phase de conception initiale...
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.
(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...)
J'ajouterais que la productivité maximale est obtenue en
rajoutant à tout ça des discussions avec les collègues pour
avoir du feedback sur les choix effectués.
Le code propre et lisible, on ne l'obtient jamais en
sortant directement d'une conception, mais en l'ayant
travaillé pendant un certain temps qui passe par des
aller-retours avec la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
C'est bien pour cela qu'il faut suffisamment le re-travailler
pour le rendre à nouveau lisible !
James Kanze wrote:
Olivier Azeau wrote:
Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que
je ne connais pas) ou on sépare les travaux d'analyse, de
conception et de codage sur des activités tellement
distinctes qu'on emploie des personnes différentes pour
les réaliser.
Ce n'est pas nécessairement une question de personnel
différent, une personne peut porter (et porte, en général)
plusieurs châpeaux. Et la façon la plus sûre de ne pas faire
une conception rigueureuse, c'est de ne pas la séparer du
codage. Au minimum (et seulement dans des choses très
simple), on écrit d'abord la définition de la classe, avec la
declaration des fonctions publiques, les invariantes, et les
pré- et post-conditions des fonctions, avant d'ouvrir les
sources dans l'éditeur. Dès que les choses deviennent le
moindre petit peu compliquées, on commence par des diagrammes
de classe et des scénarios ; seulement quand on est sûr de
son coup, on se met à écrire du « code ».
C'est un dogme ou y-a-t-il une bonne justification ?
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.
Evidemment, commencer par faire quelques schemas de
conception pour éprouver quelques idées en les soumettant
aux collegues est une bonne chose mais vouloir définir
toutes ses classes sur le papier avant de passer au code
n'est en général qu'une perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et
il y en a certainement d'autres. Est-ce qu'il existe une
boîte aujourd'hui qui ne s'en sert pas ?
"sur le papier" n'était qu'une façon de formuler les choses.
J'aurais pu tout aussi bien dire :
Vouloir définir toutes ses classes avec Rose avant de passer
au code n'est en général qu'une perte de temps.
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Et ce pour une raison simple : un travail de développement
est une activité fortement itérative ou l'on navigue en
permanence entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans
chaque itération -- conception et définition de ce qu'on veut
faire d'abord, puis validation du concepte, puis codage et
tests.
Je ne parle pas de process itératif avec un waterfall par
itération. Je parle de l'activité du développeur devant son
écran. Je ne connais personne qui soit capable d'écrire toutes
ses classes dans une phase de conception sans écrire une ligne
de code puis dans un deuxième temps d'écrire son code sans
rajouter une classe ou déplacer des responsabilités entre les
classes.
Il existe surement des "êtres supérieurs" dont les neurones
sont connectées en forme de diagramme de classe ou de séquence
mais chez le commun des développeurs, la conception est
raffinée pendant le codage.
C'est pour cela que je parle d'*activité* itérative : la
meilleure productivité chez la plupart des développeurs est
obtenue avec quelque chose comme (sur une période de quelques
heures) :
- Je réfléchis à une ébauche de conception avec les classes
principales
- Je code ces classes
- J'écris un test
- Je reviens sur le code des classes
- Je fais passer le test
- J'avance dans ma conception en rajoutant un comportement à mes classes
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
- Je pense à une simplification de code : je l'essaye en modifiant le
code
- Je fais passer le test
- Je me rends compte que la conception pourrait être plus claire en
rajoutant une classe : je la rajoute
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
.....
Dans plusieurs cas, j'ai constaté une bonne efficacité avec un
tel comportement, et ce quel que soit l'effort porté sur la
phase de conception initiale...
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.
(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...)
J'ajouterais que la productivité maximale est obtenue en
rajoutant à tout ça des discussions avec les collègues pour
avoir du feedback sur les choix effectués.
Le code propre et lisible, on ne l'obtient jamais en
sortant directement d'une conception, mais en l'ayant
travaillé pendant un certain temps qui passe par des
aller-retours avec la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
C'est bien pour cela qu'il faut suffisamment le re-travailler
pour le rendre à nouveau lisible !
James Kanze wrote:
Olivier Azeau wrote:Justement non, le codage ne doit pas etre une "simple
formalité". C'est peut-etre vrai dans des contextes (que
je ne connais pas) ou on sépare les travaux d'analyse, de
conception et de codage sur des activités tellement
distinctes qu'on emploie des personnes différentes pour
les réaliser.
Ce n'est pas nécessairement une question de personnel
différent, une personne peut porter (et porte, en général)
plusieurs châpeaux. Et la façon la plus sûre de ne pas faire
une conception rigueureuse, c'est de ne pas la séparer du
codage. Au minimum (et seulement dans des choses très
simple), on écrit d'abord la définition de la classe, avec la
declaration des fonctions publiques, les invariantes, et les
pré- et post-conditions des fonctions, avant d'ouvrir les
sources dans l'éditeur. Dès que les choses deviennent le
moindre petit peu compliquées, on commence par des diagrammes
de classe et des scénarios ; seulement quand on est sûr de
son coup, on se met à écrire du « code ».
C'est un dogme ou y-a-t-il une bonne justification ?
En C++, une telle séparation entre conception et codage ne
marche pas.
Elle se pratique couramment, tu veux dire. En fait, je n'ai
jamais vu du bon code écrit autrement.
Evidemment, commencer par faire quelques schemas de
conception pour éprouver quelques idées en les soumettant
aux collegues est une bonne chose mais vouloir définir
toutes ses classes sur le papier avant de passer au code
n'est en général qu'une perte de temps.
Qui travaille sur papier ? Il y a Rose, il y a Together, et
il y en a certainement d'autres. Est-ce qu'il existe une
boîte aujourd'hui qui ne s'en sert pas ?
"sur le papier" n'était qu'une façon de formuler les choses.
J'aurais pu tout aussi bien dire :
Vouloir définir toutes ses classes avec Rose avant de passer
au code n'est en général qu'une perte de temps.
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Et ce pour une raison simple : un travail de développement
est une activité fortement itérative ou l'on navigue en
permanence entre conception, codage et test.
Il peut y avoir des développements itératifs, tout dépend du
contexte. Mais même itératif, on suit la même schéma dans
chaque itération -- conception et définition de ce qu'on veut
faire d'abord, puis validation du concepte, puis codage et
tests.
Je ne parle pas de process itératif avec un waterfall par
itération. Je parle de l'activité du développeur devant son
écran. Je ne connais personne qui soit capable d'écrire toutes
ses classes dans une phase de conception sans écrire une ligne
de code puis dans un deuxième temps d'écrire son code sans
rajouter une classe ou déplacer des responsabilités entre les
classes.
Il existe surement des "êtres supérieurs" dont les neurones
sont connectées en forme de diagramme de classe ou de séquence
mais chez le commun des développeurs, la conception est
raffinée pendant le codage.
C'est pour cela que je parle d'*activité* itérative : la
meilleure productivité chez la plupart des développeurs est
obtenue avec quelque chose comme (sur une période de quelques
heures) :
- Je réfléchis à une ébauche de conception avec les classes
principales
- Je code ces classes
- J'écris un test
- Je reviens sur le code des classes
- Je fais passer le test
- J'avance dans ma conception en rajoutant un comportement à mes classes
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
- Je pense à une simplification de code : je l'essaye en modifiant le
code
- Je fais passer le test
- Je me rends compte que la conception pourrait être plus claire en
rajoutant une classe : je la rajoute
- Je modifie mon test en conséquence
- J'adapte mon code
- Je fais passer le test
.....
Dans plusieurs cas, j'ai constaté une bonne efficacité avec un
tel comportement, et ce quel que soit l'effort porté sur la
phase de conception initiale...
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.
(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...)
J'ajouterais que la productivité maximale est obtenue en
rajoutant à tout ça des discussions avec les collègues pour
avoir du feedback sur les choix effectués.
Le code propre et lisible, on ne l'obtient jamais en
sortant directement d'une conception, mais en l'ayant
travaillé pendant un certain temps qui passe par des
aller-retours avec la conception.
Le code ne devient jamais plus lisible suite à des
modifications. Au plus, on espère qu'il ne devient pas moins
lisible.
C'est bien pour cela qu'il faut suffisamment le re-travailler
pour le rendre à nouveau lisible !
James Kanze wrote:
une réponse qu'il faut coder bêtement, si on a bien dit que
c'est parce qu'on a reflechi sur ce qu'on avait à coder
avant, marquera des points positifs.
Pas si c'est moi qui fait passer l'entretien ;-) (mais formulé
comme ça il n'y aura pas non plus de points négatifs)
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
Il est évident qu'il ne faut pas commencer du code sans savoir
ce que l'on doit faire mais ça c'est du niveau des
spécifications.
Ce qui est tout à fait acceptable, et même souhaitable, c'est
de commencer à écrire du code sans savoir complètement
*comment* on va le faire, c'est à dire sans savoir à quoi
ressembleront les classes et les relations entre classes que
l'on aura à la fin du codage.
James Kanze wrote:
une réponse qu'il faut coder bêtement, si on a bien dit que
c'est parce qu'on a reflechi sur ce qu'on avait à coder
avant, marquera des points positifs.
Pas si c'est moi qui fait passer l'entretien ;-) (mais formulé
comme ça il n'y aura pas non plus de points négatifs)
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
Il est évident qu'il ne faut pas commencer du code sans savoir
ce que l'on doit faire mais ça c'est du niveau des
spécifications.
Ce qui est tout à fait acceptable, et même souhaitable, c'est
de commencer à écrire du code sans savoir complètement
*comment* on va le faire, c'est à dire sans savoir à quoi
ressembleront les classes et les relations entre classes que
l'on aura à la fin du codage.
James Kanze wrote:
une réponse qu'il faut coder bêtement, si on a bien dit que
c'est parce qu'on a reflechi sur ce qu'on avait à coder
avant, marquera des points positifs.
Pas si c'est moi qui fait passer l'entretien ;-) (mais formulé
comme ça il n'y aura pas non plus de points négatifs)
Celui qui veut sauter la phase de conception, et qui se met à
écrire du code sans savoir réelement ce qu'il doit faire, n'a
rien compris au développement dans un milieu industriel ou
commercial. De même quelqu'un qui ne prise pas la simplicité
dans son code.
Il est évident qu'il ne faut pas commencer du code sans savoir
ce que l'on doit faire mais ça c'est du niveau des
spécifications.
Ce qui est tout à fait acceptable, et même souhaitable, c'est
de commencer à écrire du code sans savoir complètement
*comment* on va le faire, c'est à dire sans savoir à quoi
ressembleront les classes et les relations entre classes que
l'on aura à la fin du codage.
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Je ne connais pas ton projet, mais je peux dire que je l'ai vu
marcher de façon extrèmement efficace à plus 'une occasion.
Chaque fois qu'on s'est servi de Rose, pour dire.
Je ne suis pas sûr comprendre la position que tu argues. Est-ce
que tu essaies de dire que la conception ne sert à rien, et
qu'il vaut mieux écrire des classes sans savoir leur rôle dans
l'application, et les fonctions sans savoir exactement ce
qu'elles doivent faire, ou est-ce que tu argues qu'il faut
simplement éviter à tout prix de communiquer ces informations
aux autres ?
Mais pour revenir à Rose ou Together : comment discutes-tu de la
conception sans l'avoir définie ? Sur un support que les autres
puissent lire ?
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Je ne connais pas ton projet, mais je peux dire que je l'ai vu
marcher de façon extrèmement efficace à plus 'une occasion.
Chaque fois qu'on s'est servi de Rose, pour dire.
Je ne suis pas sûr comprendre la position que tu argues. Est-ce
que tu essaies de dire que la conception ne sert à rien, et
qu'il vaut mieux écrire des classes sans savoir leur rôle dans
l'application, et les fonctions sans savoir exactement ce
qu'elles doivent faire, ou est-ce que tu argues qu'il faut
simplement éviter à tout prix de communiquer ces informations
aux autres ?
Mais pour revenir à Rose ou Together : comment discutes-tu de la
conception sans l'avoir définie ? Sur un support que les autres
puissent lire ?
J'ai déjà donné sur projet où j'avais fortement influencé une
méthode de travail "toutes les interfaces publiques décrites
sous Rose et le code de ces interfaces généré automatiquement
en C++" Non seulement je ne suggèrerai plus ce genre de choses
mais je botterais le derrière de toute personne qui le
suggèrerait dans le cadre d'un projet auquel je participe !
Je ne connais pas ton projet, mais je peux dire que je l'ai vu
marcher de façon extrèmement efficace à plus 'une occasion.
Chaque fois qu'on s'est servi de Rose, pour dire.
Je ne suis pas sûr comprendre la position que tu argues. Est-ce
que tu essaies de dire que la conception ne sert à rien, et
qu'il vaut mieux écrire des classes sans savoir leur rôle dans
l'application, et les fonctions sans savoir exactement ce
qu'elles doivent faire, ou est-ce que tu argues qu'il faut
simplement éviter à tout prix de communiquer ces informations
aux autres ?
Mais pour revenir à Rose ou Together : comment discutes-tu de la
conception sans l'avoir définie ? Sur un support que les autres
puissent lire ?
Dans un grand projet, c'est trivialement faux. Une fois que j'ai
figé l'interface de ma classe, je ne peux plus y toucher, parce
que la modifier imposerait des modifications chez tous les
collègues qui s'en servent. Mais même dans les petits projets,
c'est préférable d'éviter des modifications qui impactent
partout.
Dans un grand projet, c'est trivialement faux. Une fois que j'ai
figé l'interface de ma classe, je ne peux plus y toucher, parce
que la modifier imposerait des modifications chez tous les
collègues qui s'en servent. Mais même dans les petits projets,
c'est préférable d'éviter des modifications qui impactent
partout.
Dans un grand projet, c'est trivialement faux. Une fois que j'ai
figé l'interface de ma classe, je ne peux plus y toucher, parce
que la modifier imposerait des modifications chez tous les
collègues qui s'en servent. Mais même dans les petits projets,
c'est préférable d'éviter des modifications qui impactent
partout.
pour moi, commenter correctement son code c'est ceci :
commenter le code sans le paraphraser, de telle sorte que si l'on
enlève toutes les lignes de code d'une fonction, on puisse lire
l'algorithme grâce aux commentaires.
par "sans le paraphraser", j'entends :
PAS BON :
/* mettre 42 dans le champ reponse de question */
question.reponse = 42;
BON :
/* initialiser la recherche de la question fondamentale sur la vie
l'univers et le reste */
question.reponse = 42;
pour moi, commenter correctement son code c'est ceci :
commenter le code sans le paraphraser, de telle sorte que si l'on
enlève toutes les lignes de code d'une fonction, on puisse lire
l'algorithme grâce aux commentaires.
par "sans le paraphraser", j'entends :
PAS BON :
/* mettre 42 dans le champ reponse de question */
question.reponse = 42;
BON :
/* initialiser la recherche de la question fondamentale sur la vie
l'univers et le reste */
question.reponse = 42;
pour moi, commenter correctement son code c'est ceci :
commenter le code sans le paraphraser, de telle sorte que si l'on
enlève toutes les lignes de code d'une fonction, on puisse lire
l'algorithme grâce aux commentaires.
par "sans le paraphraser", j'entends :
PAS BON :
/* mettre 42 dans le champ reponse de question */
question.reponse = 42;
BON :
/* initialiser la recherche de la question fondamentale sur la vie
l'univers et le reste */
question.reponse = 42;
Je préfère
std::vector<std::string> split
(std::string const &text, char separateur= ',');
Je préfère
std::vector<std::string> split
(std::string const &text, char separateur= ',');
Je préfère
std::vector<std::string> split
(std::string const &text, char separateur= ',');