IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débats sur le développement - Le Best Of Discussion :

Qu'est-ce qu'un code "propre" selon vous ?


Sujet :

Débats sur le développement - Le Best Of

  1. #61
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    C'est le genre de question ou il y a pas de réponse claire.
    C'est comme dire si un livre est bien écrit.
    De quoi parle t-on ?
    Un livre peut être bien écrit mais l'histoire est mal monté et incompréhensible.

    Pour le code c'est pareille. Vous pouvez faire du très beau code ou c'est bien aéré, indenté comme un dieux, etc. Mais au final vous vous prenez au charme du code mais vous comprenez pas ce que ça fait exactement parce que c'est complètement tordu.
    Pour moi un code propre c'est un code assez claire pour comprendre au premier ou second coup d'œil ce qu'il fait.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  2. #62
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Pour la définition de propre :
    http://www.cnrtl.fr/definition/propre (pour mieux comprendre ma première réponse).

    Et je crois vraiment que c'est la seule bonne réponse à cette question, qui est très mal formulée .

    Pour le reste, un code de qualité, c'est un code qui, pour chaque fonction, définit son contrat, pour chaque boucle, déclare son ou ses variants, pour chaque objet, ses invariants.

    Une fois qu'on a ça le reste vient en général avec (allez garantir une postcondition sur une fonction de 300 lignes, allez définir des contrats sur une conception foireuse, etc...)

  3. #63
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Qu'est ce que c'est que du code qui n'est pas propre ?

  4. #64
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    pas d'instruction GOTO dans les programmes
    la programmation objet va naturellement dans le sens d'un code plus "propre"
    Pour moi, un programme est un moyen de dire à un processeur ce que je veux qu'il fasse. Même s'il écrit dans un langage plus évolué, le programmeur devra toujours avoir à l'esprit le code machine que son compilateur produira, afin d'utiliser de manière optimale les spécificités de son hardware. Or il y a dans le code machine de mon ordinateur une instruction qui est la traduction littérale du GOTO; celui-ci doit donc exister dans le langage de programmation que j'utilise. D'autre part, je n'ai jamais trouvé, dans la documentation des processeurs que j'ai utilisés, la moindre allusion à un code machine orienté objet.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #65
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Pour moi, un programme est un moyen de dire à un processeur ce que je veux qu'il fasse.
    Oui, comme tout le monde ici j'espère.

    Citation Envoyé par FR119492 Voir le message
    Même s'il écrit dans un langage plus évolué, le programmeur devra toujours avoir à l'esprit le code machine que son compilateur produira, afin d'utiliser de manière optimale les spécificités de son hardware.
    D'une part, cette remarque relève de l'informatique industrielle, mais n'a pas lieu d'être dans l'informatique de gestion (qui flotte dans l'air ambiant de ce forum). En informatique de gestion, plus on se concentre sur le métier en masquant la technique, mieux c'est (alors un GOTO ou un décalage de bit ...). D'autre part, en 2009, les compilateurs font les optimisations à notre place, même en info industrielle je pense

    Citation Envoyé par FR119492 Voir le message
    Or il y a dans le code machine de mon ordinateur une instruction qui est la traduction littérale du GOTO; celui-ci doit donc exister dans le langage de programmation que j'utilise.
    C'est tout l'inverse des efforts entrepris ces 20 dernières années pour créer des langages plus structurés et à plus haut niveau d'abstraction.

    Citation Envoyé par FR119492 Voir le message
    D'autre part, je n'ai jamais trouvé, dans la documentation des processeurs que j'ai utilisés, la moindre allusion à un code machine orienté objet.
    Jean-Marc Blanc
    Forcément, c'est le principe même de la remarque précédente.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  6. #66
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Citation Envoyé par Hephaistos007
    Citation Envoyé par FR119492
    Même s'il écrit dans un langage plus évolué, le programmeur devra toujours avoir à l'esprit le code machine que son compilateur produira, afin d'utiliser de manière optimale les spécificités de son hardware.
    D'une part, cette remarque relève de l'informatique industrielle, mais n'a pas lieu d'être dans l'informatique de gestion (qui flotte dans l'air ambiant de ce forum). En informatique de gestion, plus on se concentre sur le métier en masquant la technique, mieux c'est ...
    Ce passage là devrait à mon avis relevé d'un topic à part entière, car il oppose la virtualisation au "hardware". D'ailleurs, .NET et JVM montrent l'exemple dans l'idée d'être indépendant de la machine, sauf certains SGBDR qui font exceptions à la règle (curieusement).

  7. #67
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Points : 1 276
    Points
    1 276
    Par défaut
    oui, et j'ajouterais une notion à ce qui est dit,
    a mes yeux un code propre contient des méthodes qui ont
    un seul point d'entrée ... (par définition)
    et un seul point de sortie... (pas de plusieurs "return" en plein milieu),

    mais cela rejoint l'idée : "bonne lisibilité"
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  8. #68
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par benji_dv Voir le message
    oui, et j'ajouterais une notion à ce qui est dit,
    a mes yeux un code propre contient des méthodes qui ont
    un seul point d'entrée ... (par définition)
    et un seul point de sortie... (pas de plusieurs "return" en plein milieu),

    mais cela rejoint l'idée : "bonne lisibilité"
    Dans un langage objet, la lisibilité fait qu'on ne va surtout pas se forcer à avoir un seul point de sortie.

  9. #69
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    un seul point de sortie... (pas de plusieurs "return" en plein milieu),
    Au contraire, avoir plusieurs points de sortie améliore la lisibilité (sinon, on se paluche des blocs imbriqués dans tous les sens, et je ne compte pas le nombre de fois où j'ai vu la variable retour de la fonction changer 5 ou 6 fois de valeur avant le return final...). Ca a par contre d'autres problèmes, selon les langages (en fait, dans les langages sans destructeur et sans garbage collector, c'est rapidement catastrophique en terme de gestion de mémoire).

  10. #70
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Dans un langage objet, la lisibilité fait qu'on ne va surtout pas se forcer à avoir un seul point de sortie.
    Je ne vois pas pourquoi !
    Lorsque tu te trouves dans le corps d'une méthode, il n'y a plus beaucoup de différences avec une procédure classique, non objet.

    Objet ou pas objet, les problèmes sont les mêmes :
    - Tu as une méthode qui fait un traitement.
    - Tu as besoin de la modifier pour ajouter un truc en plus, tu vas à la fin et tu ajoutes ton code.
    - Sauf qu'il y avait un return plus haut et ton code n'est pas exécuté...

  11. #71
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Pour moi, un code propre a une définition "objective" et une définition "subjective".

    - Pour la partie "objective", je dirais qu'un code est propre s'il se conforme toujours aux mêmes règles de structuration et d'écriture. C'est à dire qu'il y a une "logique" de découpage et de codage tout au long du code. Bref, qu'il y a une certaine constance ou uniformité dans le programme.

    Par exemple des conventions de nommage, de présentation, des design patterns, des templates de code, ...

    - Pour la partie "subjective", dans mon cas cela signifie que je suis d'accord (ou au moins habitué) aux règles qui sont utilisées.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #72
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    en 2009, les compilateurs font les optimisations à notre place
    Ah! si seulement ...

    des efforts entrepris ces 20 dernières années pour créer des langages plus structurés et à plus haut niveau d'abstraction.
    Malheureusement! Dans mon métier, on travaille dans le concret.

    Pour moi, on doit considérer deux critères:
    • Critère absolu: Le programme doit être lisible et bien documenté, afin qu'une personne autre que l'auteur puisse le comprendre et, cas échéant le modifier sans difficultés majeures.
    • Critère relatif: Un programme est plus propre qu'un autre si, sur le même matériel, il accomplit les mêmes tâches en moins de temps (test du chronomètre).


    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  13. #73
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    (.../...)
    Pour moi, on doit considérer deux critères:
    • Critère absolu: Le programme doit être lisible et bien documenté, afin qu'une personne autre que l'auteur puisse le comprendre et, cas échéant le modifier sans difficultés majeures.
    • Critère relatif: Un programme est plus propre qu'un autre si, sur le même matériel, il accomplit les mêmes tâches en moins de temps (test du chronomètre).
    Comme disait Einstein, tout est relatif. En informatique de gestion, j'ai à refondre des boucles gérées avec des GO TO. Je les remplace par des boucles PERFORM VARYING(boucles for pour les non cobolistes). J'ignore si c'est plus performant ou moins performant. Ce que je sais, c'est que les programmeurs d'aujourd'hui ne savent pas lire un code plein de GO TO, alors que les "anciens" (on en a pas mal), eux, trouvent ça plus facile. Comme ils sont amenés à partir en retraite, on éradique leurs gotos, parait-il très lisibles, mais auxquels nous jeunots ne comprenons goutte.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  14. #74
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Critère relatif: Un programme est plus propre qu'un autre si, sur le même matériel, il accomplit les mêmes tâches en moins de temps (test du chronomètre).
    ??

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double invSqrt(double x) {
    	double xhalf = 0.5 * x; 
    	long i = Double.doubleToRawLongBits(x);
    	i = 0x5FE6EB50C7B537AAL - (i>>1); 
    	x = Double.longBitsToDouble(i);
    	x = x * (1.5 - xhalf*x*x); 
    	return x; 
    }

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double invSqrt(double x) { return 1 / Math.sqrt(x); }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #75
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    - Sauf qu'il y avait un return plus haut et ton code n'est pas exécuté...
    Justement, avec des objets, ce genre de choses est effectué automatiquement (cf le principe RAII).

  16. #76
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut ok
    Un code propre est un code où lorsqu'on enlève le code, il ne reste que des lignes de commentaires parlant et explicites retraçant les SF et/ou le CDC !

    si il ne reste rien, c'est un code sale !

  17. #77
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Michael REMY Voir le message
    Un code propre est un code où lorsqu'on enlève le code, il ne reste que des lignes de commentaires parlant et explicites retraçant les SF et/ou le CDC !

    si il ne reste rien, c'est un code sale !
    Pas tout à fait d'accord non plus. Le code doit être une documentation à lui tout seul. De nombreux développeurs reconnus pour leur demande de code propre écrivent le moins de commentaires possible. A partir du moment où une fonction a un nom explicite quant à ce qu'elle fait, qu'elle est courte et que le code fait ce que le nom indique, pourquoi ajouter des commentaires ?

  18. #78
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Justement, avec des objets, ce genre de choses est effectué automatiquement (cf le principe RAII).
    Je ne vois pas le rapport. Je ne parlais pas de nettoyage...

  19. #79
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Dans ce cas, on va reprendre ton message original :
    Objet ou pas objet, les problèmes sont les mêmes :
    - Tu as une méthode qui fait un traitement.
    - Tu as besoin de la modifier pour ajouter un truc en plus, tu vas à la fin et tu ajoutes ton code.
    - Sauf qu'il y avait un return plus haut et ton code n'est pas exécuté...
    Tu dois ajouter un truc en plus ? Tu refactores, pour que ton code reste propre.
    Cela doit être appelé quoiqu'il arrive à la fin de la fonction ? OK, RAII. Et je ne parle pas de nettoyage.

  20. #80
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    Je ne peux pas tenir plus longtemps... je le crierai le je pouvais !

    Une bible est sortie... J'éspére que ce sera pas le seul livre... J'éspére qu'il sera le père de milliers de livres...

    A lire impérativement Coder Proprement de de Robert C.Martin.

    Et pourquoi pas un blog/site Web ?

Discussions similaires

  1. Qu'est ce que cela veux dire un "code propre" selon-vous ?
    Par kagura dans le forum Général Conception Web
    Réponses: 45
    Dernier message: 09/02/2016, 14h22
  2. [Tableaux] Retour chariot pour un code HTML propre
    Par beastman007 dans le forum Langage
    Réponses: 10
    Dernier message: 09/03/2006, 17h43
  3. Code CSS propre
    Par keawee dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/10/2005, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo