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

Algorithmes et structures de données Discussion :

Pourquoi notre propre code nous est-t-il incompréhensible ?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 194
    Par défaut Pourquoi notre propre code nous est-t-il incompréhensible ?
    Pourquoi notre propre code nous est-il incompréhensible ?
    Un développeur se penche sur la question et identifie six problèmes

    Tous les développeurs se sont posé un jour cette question : « pourquoi je n’arrive pas à comprendre ce bout de code ? Pourtant, c’est moi qui l’avais écrit quelques mois auparavant ! ». Le pire, c’est que parfois même en lisant les commentaires on ne comprend pas, et ça arrive si souvent qu’on se demanderait dans ces cas-là si notre intelligence s’est dégradée ou si au moment d’écrire ce code nous étions possédés par une entité intellectuelle supérieure.

    Stephen Young, un développeur, designer et blogueur, a écrit récemment sur ce sujet qu’on devrait apprendre à éparpiller les miettes de pain derrière nous lorsqu’on écrit un code source pour pouvoir retrouver notre chemin lorsqu’on y revient. Oui, mais comment ?

    Selon lui, il existerait 6 problèmes qui font que notre programme -si clair et élégant- ressemblera à du charabia lorsqu’on le relira quelques mois plus tard :
    1. Les modèles mentaux trop complexes : un programme est une solution à un problème du monde réel, lorsqu’on veut trouver cette solution on doit d’abord former un modèle du problème, puis un modèle de la solution (que Stephen Young appelle modèle sémantique) avant de passer au code. Il faudra donc veiller à ne pas sauter directement du problème à la solution sans former de modèles. Aussi, il faudra veiller à simplifier ces modèles autant que possible, car « les problèmes que nous tentons de résoudre sont suffisamment complexes. On ne doit pas ajouter à cela plus de complexité ».
    2. La mauvaise traduction du modèle mental : cette traduction « syntaxique » vise à transformer le modèle sémantique en code source. Le problème est qu’il est facile de traduire ce code lorsque le modèle sémantique est fraîchement cartographié dans notre tête, mais lorsqu’on y revient plus tard, ceci n’est pas aussi évident.
      Pour éviter les problèmes syntaxiques, il faudra veiller à bien choisir les noms des variables, fonctions et arguments pour qu’on puisse facilement comprendre leurs rôles. Aussi il faudra veiller que les noms des modules et classes soient autant que possible proches du modèle sémantique. De plus, il faudra que chaque classe ait un seul but : « je finis souvent par réécrire une classe parce que j’ai du mal à lui donner un nom assez court qui décrit tout ce qu'elle fait », assure Young.
      Quant aux commentaires, ils sont utiles si on n’en abuse pas, ils doivent décrire pourquoi vous avez eu à faire quelque chose et non pas comment vous l’avez fait.
    3. Pas assez de regroupement : lorsqu’on programme, on remarque qu’on a souvent besoin de répéter un nombre de choses plusieurs fois, c’est pour ça qu’il existe maintenant plusieurs Design Pattern, des fonctions standard et des bibliothèques qui sont très utiles dans le sens où « on n’a plus besoin de penser à la façon dont le code fait quelque chose, mais plutôt se concentrer sur ce qu'il fait ».
    4. Utilisation obscure de vos bouts de code : « lorsque vous revenez plus tard à votre code source, il est souvent très difficile de reconstituer toutes les utilisations prévues de vos classes et méthodes. Généralement, ceci est dû aux différents usages qui sont dispersés dans tout le reste de votre programme », écrit Young. Une des solutions à ce problème, selon lui, est de disposer d’un ensemble complet de cas de tests qui permettent d’avoir une image complète du code et de comment l’utiliser.
    5. Pas de chemin clair entre les différents modèles : ce chemin qui relie l’objectif de votre programme, au modèle sémantique puis au modèle syntaxique (code) doit être aussi simple que possible. « Parfois, il est préférable de choisir une structure de classe particulière ou un algorithme non pas pour son élégance, mais pour sa capacité à relier les différents modèles d’une façon claire et naturelle ».
    6. Inventer des algorithmes : « dans presque tous les cas, il existe des algorithmes qui peuvent être mis ensemble pour résoudre votre problème ». Programmer consiste donc à choisir des algorithmes existants dans la bonne combinaison pour résoudre un problème. Selon lui, « si vous inventez de nouveaux algorithmes, c’est soit que vous ne connaissez pas le bon algorithme à employer, soit vous travaillez sur une thèse de doctorat ».

    Pour conclure, Young conseille de fournir autant d'indices que possible afin de permettre à quiconque regardant votre code de recréer le même modèle sémantique que vous aviez à l'origine dans l'esprit. « Cela paraît simple, mais en réalité c’est très difficile de faire bien ».

    Source : Medium

    Et vous ?

    Êtes-vous d’accord avec Stephen Young sur ces six points ?

    Quel problème aimeriez-vous ajouter/modifier ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 377
    Par défaut
    Quel soulagement d'actuellement travailler sur ma thèse de doctorat !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Par défaut
    Ca résume la philosophie de la programmation objet

    Les modèles mentaux trop complexes : la programmation objet permet de réduire la complexité unitaire de chaque "modèle" en limitant les dépendances (par opposition au modulaire)

    La mauvaise traduction du modèle mental : le principe de la moindre surprise du Ruby On Rails est un très bon exemple (j'ai plus le terme exact en tête)

    Pas assez de regroupement : deux lignes de code copiée-collées-modifiées plus de deux fois, ou une ligne répétée 3-4 fois est la manifestation d'une faute de conception en programmation "idéale". Ces "fautes" peuvent être justifiées bien sûr, donc commentées.

    Utilisation obscure de vos bouts de code : ça rejoint le point précédent

    Pas de chemin clair entre les différents modèles : là pour le coup je suis pas trop d'accord. Le besoin de comprendre un processus en détail et dans son ensemble implique souvent un trop grandes dépendance entre les "modèles". Un système maintenable est un système qu'on n'a pas besoin de comprendre dans sa globalité, "qui appelle qui" etc. C'est une raison pour lesquelles je pense que le "MVVM" de microsoft est une aberration de conception en comparaison au MVC.

    Inventer des algorithmes : écrire un algorithme se traduit inévitablement par un warning "complexité cyclomatique" dans checkstyle . Ecrire un algorithme pour encoder un truc, sérialiser, interpréter, ok. Mais c'est pas de la programmation objet, c'est du modulaire.

    Bref, il a écrit une manière très intéressante d'expliquer les fondements de l'objet !

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Washmid Voir le message
    Ca résume la philosophie de la programmation objet

    Les modèles mentaux trop complexes : la programmation objet permet de réduire la complexité unitaire de chaque "modèle" en limitant les dépendances (par opposition au modulaire)

    La mauvaise traduction du modèle mental : le principe de la moindre surprise du Ruby On Rails est un très bon exemple (j'ai plus le terme exact en tête)

    Pas assez de regroupement : deux lignes de code copiée-collées-modifiées plus de deux fois, ou une ligne répétée 3-4 fois est la manifestation d'une faute de conception en programmation "idéale". Ces "fautes" peuvent être justifiées bien sûr, donc commentées.

    Utilisation obscure de vos bouts de code : ça rejoint le point précédent

    Pas de chemin clair entre les différents modèles : là pour le coup je suis pas trop d'accord. Le besoin de comprendre un processus en détail et dans son ensemble implique souvent un trop grandes dépendance entre les "modèles". Un système maintenable est un système qu'on n'a pas besoin de comprendre dans sa globalité, "qui appelle qui" etc. C'est une raison pour lesquelles je pense que le "MVVM" de microsoft est une aberration de conception en comparaison au MVC.

    Inventer des algorithmes : écrire un algorithme se traduit inévitablement par un warning "complexité cyclomatique" dans checkstyle . Ecrire un algorithme pour encoder un truc, sérialiser, interpréter, ok. Mais c'est pas de la programmation objet, c'est du modulaire.

    Bref, il a écrit une manière très intéressante d'expliquer les fondements de l'objet !
    Et ça c'est un ramassis de tout ce qui est idiot dans le soutien aveugle à la programmation objet...

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    2 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 2 161
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Et ça c'est un ramassis de tout ce qui est idiot dans le soutien aveugle à la programmation objet...
    Ceci est une tautologie
    Un soutien aveugle à quoique ce soit est forcément idiot

    De même, cette remarque sans aucune argumentation n'apporte strictement rien au débat

    Je ne suis pas forcément en phase avec l'ensemble du post de Washmid mais de là à le qualifier d'aveugle et d'idiot
    D'autant plus que tout n'est pas spécifique aux langages objets. Certains points sont tout aussi valable pour le procédural.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Tu veux que je commente ??

    Allons-y...

    1. En ce qui concerne la référence aux langages objets, c'est justement ce que dit le posteur en question :

      Citation Envoyé par Washmid Voir le message
      Ca résume la philosophie de la programmation objet
      ..
      Bref, il a écrit une manière très intéressante d'expliquer les fondements de l'objet !
      que je critique...


    2. Secondo,

      Citation Envoyé par Washmid Voir le message
      Les modèles mentaux trop complexes : la programmation objet permet de réduire la complexité unitaire de chaque "modèle" en limitant les dépendances (par opposition au modulaire)
      Ah oui ???? Pourtant quand on regarde des applis en C++ ou Java, je ne voit pas moins de complexité.. ni moins de dépendances, voire le contraire..

      Car la limitation des dépendances se fait par des "classes" propres, et je suis au regret pour Washmid de lui apprendre que la notion d'objet, de classes, etc n'est pas propre aux LANGAGES objets, mais existe depuis plus de 40 ans en procédural, que ce soit en C, Fortran, etc etc.. (X11 est à base d'objets, mais écrit en C, comme C++)

      C'est le principe de la CONCEPTION orientée objet, pas des langages..

      Et quand on voit les dépendances de tout programme C++ de bonne taille avec Boost par exemple, son "argument" prend l'eau... Ou dans n'importe quelle compliation d'un programme complexe, qu'il soit en Java ou en C++...


      Citation Envoyé par Washmid Voir le message
      La mauvaise traduction du modèle mental : le principe de la moindre surprise du Ruby On Rails est un très bon exemple (j'ai plus le terme exact en tête)
      Et quand on va sur le forum ALM et qu'on regarde la partie "architecture" ou "modèles", on s'aperçoit que cette "mauvaise traduction" est extrêmement répandue..... Simplement pace que justement il y a mille et une façons de concevoir quelque chose, de le découper, et que la logique de l'un n'est pas forcément la logique de l'autre... Et qu'avoir un "modèle mental" n'est même pas significatif.. Encore faut-il qu'il soit bon... Quant à le traduire, dans n'importe quel langage, ça prend une rigueur...


      Citation Envoyé par Washmid Voir le message
      Pas assez de regroupement : deux lignes de code copiée-collées-modifiées plus de deux fois, ou une ligne répétée 3-4 fois est la manifestation d'une faute de conception en programmation "idéale". Ces "fautes" peuvent être justifiées bien sûr, donc commentées.
      Voui, ben ça dépend fortement.... Parce que avoir les 2 mêmes lignes de code, mais appliquées à des choses différentes, vont être plus simples à comprendre telles quelles que si on a regroupé sous quelque chose qui oblige quand on relit le code à aller chercher dans tel ou tel autre module ce que fait cette "fonction", "classe", "méthode", etc, qui aura alors forcément un nom générique pas forcément adapté au contexte précis...


      Citation Envoyé par Washmid Voir le message
      Pas de chemin clair entre les différents modèles : là pour le coup je suis pas trop d'accord. Le besoin de comprendre un processus en détail et dans son ensemble implique souvent un trop grandes dépendance entre les "modèles". Un système maintenable est un système qu'on n'a pas besoin de comprendre dans sa globalité, "qui appelle qui" etc. C'est une raison pour lesquelles je pense que le "MVVM" de microsoft est une aberration de conception en comparaison au MVC.
      Tout ceci est un charabia incompréhensiible.. Sur quoi se base-t-il pour dire : "Le besoin de comprendre un processus en détail et dans son ensemble implique souvent un trop grandes dépendance entre les "modèles"" ?? ou encore plus fort : "Un système maintenable est un système qu'on n'a pas besoin de comprendre dans sa globalité" ???? Quel est le rapport ??? ou la justification ???

      Et en quoi le MVC est-il un modèle "universel" et "compréhensible par tout le monde", en dehors de ceux qui l'ont appris ????

      En quoi un sytème maintenable est-il défini par le fait qu'on ne comprend pas sa globalité ???



      Citation Envoyé par Washmid Voir le message
      inventer des algorithmes : écrire un algorithme se traduit inévitablement par un warning "complexité cyclomatique" dans checkstyle . Ecrire un algorithme pour encoder un truc, sérialiser, interpréter, ok. Mais c'est pas de la programmation objet, c'est du modulaire.
      Encore une fois, sur quoi se base-t-il pour affirmer "écrire un algorithme se traduit inévitablement par un warning "complexité cyclomatique"" ??? Ou encore plus fort : "Mais c'est pas de la programmation objet, c'est du modulaire" ??

      Ce monsieur n'a sans doute jamais fait de maths, ou d'algorithmes réellement complexes... En quoi est-ce modulaire ou objet ou quoi que ce soit en rapport avec un modèle de programmation ???? Un algorithme est un algorithme, une suite d'opérations logiques pour partant d'un départ arriver à un résultat...

      Quel est le rapport avec de la programmation objet ??? En quoi une programmation objet devrait-elle se passer "d'algorithme" ????



    Sans parler de son introduction et conclusion cités au début de ce post... C'est hors sujet.. Tout ce que dit le bloggeur, c'est rappeler des règles de bases, qui lui semblent essentielles.. On peut en discuter, mais elles ne dépendent pas, ni ne soutiennent, une quelcquonque manière / un quelconque paradigme de programmation....


    C'est en ça que je dis et maintiens que c'est idiot comme réflexion...

  7. #7
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    J'ai tendance à diminuer le nombre de commentaire pour augmenter la nomination clair de mes variables et fonctions.
    N'ayant donc pas l'habitude de lire de commentaire, mon esprit arrive sans soucis à retrouver ma logique bien à moi dans mes programmes ^^
    (surtout que vu le temps que j'ai passé dessus, ça a aussi du me marquer)

    Par contre le dernier point je comprends pas : Je suis donc en train depuis le début de mon contrat dans mon entreprise de faire le travail d'un futur docteur avec un diplôme de technicien ? J'ai du mal à y croire.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Par défaut
    Moi non plus je ne suis pas fondamentalement d’accord avec le dernier point (ou alors je n’ai pas saisi le sens du propos). Peut-être que 9 fois sur 10 la roue existe, ça je peux l’admettre, mais de là à décréter que si on invente un algorithme c’est forcément qu’on ne connait pas le bon algorithme à employer, je ne suis pas du tout convaincu.

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 126
    Par défaut
    Il m'arrive de reprendre le code de vieux projets personnels en ayant fait une pause de plusieurs années, et je ne les trouve jamais incompréhensible. La plupart du temps ma réaction est "tien ça c'est pas propre, j'aurais du le faire comme ça". J'ai tendance à essayer de soigner mon code, est comme Uranne-jimmy je limite le nombre de commentaire; je pense qu'une bonne pratique est d'utiliser les commentaires uniquement pour clarifier l'intention (le "pourquoi"), et de clarifier le "comment" en utilisant une nomenclature descriptive des variables, fonctions, objets, etc.

    Après dans un cadre pro je tombe parfois sur de tels torchons que ça ne m'étonnerais pas que leurs auteurs les trouves eux même incompréhensible au moment de leurs écritures...

  10. #10
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    2 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 2 161
    Par défaut
    Cet article est simplement un rappel de quelques bonnes pratiques de conception et de développement dont une piqûre de rappel régulière est nécessaire même avec l'expérience.
    Rien de révolutionnaire en soit.

    Personnellement, ne pas comprendre mon propre code m'arrivait surtout lors de mes études où j'avais tendance à beaucoup développer la nuit (aidé par des cocktails détonnant )...
    Par la suite, ça devient tout de même nettement plus rare.

    Désormais, je suis plus surpris par le manque de perf ou la consommation mémoire excessive de mon code.
    En effet, lorsque je suis concentré sur une fonctionnalité, je me focalise sur la simplicité du code, sa robustesse, sa modularité et le métier, surtout le métier même...
    Ce n'est qu'en seconde lecture, quelques semaines après une fois le recule pris, que je constate les évolutions à mettre en place pour améliorer les perf. (et là je rage contre moi-même car à chaque fois cela me paraît évident et que je ne comprends pas comment j'ai pu passer à côté lors du premier jet...)

    Développer est une tâche complexe avec énormément de paramètres à prendre en compte.
    Dans un monde idéal, on ferait la conception en 3 temps avec une pause à chaque fois et le développeur ne serait pas celui qui effectue la conception afin d'avoir une regard critique impartiale sur celle-ci.
    Malheureusement, le rythme des projets ne le permet pas...

  11. #11
    Membre éprouvé Avatar de AoCannaille
    Inscrit en
    Juin 2009
    Messages
    1 456
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1 456
    Par défaut
    Citation Envoyé par Saverok Voir le message

    Désormais, je suis plus surpris par le manque de perf ou la consommation mémoire excessive de mon code.
    En effet, lorsque je suis concentré sur une fonctionnalité, je me focalise sur la simplicité du code, sa robustesse, sa modularité et le métier, surtout le métier même...
    Ce n'est qu'en seconde lecture, quelques semaines après une fois le recule pris, que je constate les évolutions à mettre en place pour améliorer les perf. (et là je rage contre moi-même car à chaque fois cela me paraît évident et que je ne comprends pas comment j'ai pu passer à côté lors du premier jet...)
    C'est tout a fait normal, Knuth (qui n'est pas juste 'un développeur qui se penche sur une question') nous met en garde contre les optimisations prématurées et résume les étapes de l'algorithmie comme cela :
    1. Make it work.
    2. Make it right.
    3. Make it fast.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut algo
    Inventer des algorithmes : « dans presque tous les cas, il existe des algorithmes qui peuvent être mis ensemble pour résoudre votre problème ». Programmer consiste donc à choisir des algorithmes existants dans la bonne combinaison pour résoudre un problème. Selon lui, « si vous inventez de nouveaux algorithmes, c’est soit que vous ne connaissez pas le bon algorithme à employer, soit vous travaillez sur une thèse de doctorat ».
    Contrairement à certains, je suis assez d'accord avec ça.

    Je pense que vous n'avez peut-être pas saisi ce qu'il a voulu dire ici.

    Peut-être peut-on reformuler comme ceci : "demandez-vous combien de fois vous avez écrit du code pour répondre à un besoin d'une manière qui n'a jamais été utilisée par personne depuis que la programmation existe".

    A moins que vous travailliez dans des domaines "relativement récents" ou très pointus tels que le traitement de l'image, la programmation parallèle, l'intelligence artificielle...

  13. #13
    Membre éclairé Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 545
    Par défaut
    Citation Envoyé par temoanatini Voir le message
    Contrairement à certains, je suis assez d'accord avec ça.

    Je pense que vous n'avez peut-être pas saisi ce qu'il a voulu dire ici.

    Peut-être peut-on reformuler comme ceci : "demandez-vous combien de fois vous avez écrit du code pour répondre à un besoin d'une manière qui n'a jamais été utilisée par personne depuis que la programmation existe".

    A moins que vous travailliez dans des domaines "relativement récents" ou très pointus tels que le traitement de l'image, la programmation parallèle, l'intelligence artificielle...

    Dans certains domaines spécifiques (transport, etc) ,
    le développeur est fortement axé métier et est amené à concevoir ses propres algorithmes pour répondre à une problématique particulière ( changement de loi, moteur de calcul , etc).

    Les algorithmes standard ( parcours de graphe etc.) restent déjà établis mais leur utilisation conjointe donne un algorithme global qui n'existe probablement pas...
    Les propriétés mathématiques restent connues (statistiques, etc), mais c'est l'axe métier qui sera considéré comme un algorithme à part.

  14. #14
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Par défaut
    Citation Envoyé par temoanatini Voir le message
    A moins que vous travailliez dans des domaines "relativement récents" ou très pointus tels que le traitement de l'image, la programmation parallèle, l'intelligence artificielle...
    C’est le "à moins" qui fait que je ne suis pas d’accord avec l’auteur sur sa dernière affirmation.

    J’ai bossé pendant quelques années avec un docteur en informatique spécialisé en traitement d’image, et je peux t’assurer que les problématique sur lesquelles on bossait (enfin, surtout lui, moi je me "contentais" de transformer ses délires mathématiques en algo et de rendre le tout exploitable) avaient peu de chance d’être résolues après un simple état de l’art.

    Mais encore une fois, je suis conscient que 9 fois sur 10 l’algo qu’on écrit n’est qu’un agrégat d’algos "standards".

  15. #15
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Amine Horseman Voir le message
    « je finis souvent par réécrire une classe parce que j’ai du mal à lui donner un nom assez court qui décrit tout ce qu'elle fait », assure Young.
    Et ben c'est que t'as pas assez de classes. Réécrire la classe ne sert à rien. Pour que le code soit lisible il faut qu'il soit court et qu'il se concentre à faire une chose à la fois. Un nom de classe de 15 bornes de long indique que la classe doit être splittée en plusieurs classes plus petites.

    Citation Envoyé par Amine Horseman Voir le message
    Quant aux commentaires, ils sont utiles si on n’en abuse pas, ils doivent décrire pourquoi vous avez eu à faire quelque chose et non pas comment vous l’avez fait.
    Le plus important c'est d'avoir des tests unitaires qui servent de documentation au code. Cette documentation étant vivante (puisque vous exécutez vos tests avant chaque commit) vous avez l'assurance qu'elle est à jour, et quelle est up-to-date.
    Dans ces conditions les commentaires deviennent pratiquement inutiles.

  16. #16
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Billets dans le blog
    43
    Par défaut
    Ce qu'affirme le bloggueur est peut-être intéressant, mais cela manque sérieusement d'exemples et de preuves à l'appui.
    Sans doute à étayer pour rendre l'article vraiment exploitable.

    Concernant le problème plus général de la lisibilité du code, par soi-même ou par d'autres, beaucoup a déjà été écrit à ce sujet.
    On pourrait citer parmi de nombreux conseils possibles les suivants :
    * Evitez le hacking en utilisant les subtilités d'un langage pour coder en un minimum de caractères (je pense par exemple à l'opérateur ternaire ? : parfois utilisé à tord et à travers. Le moins et souvent l'ennemi du mieux.
    * Evitez la verbosité excessive des commentaires où le code est noyé. Quand on a plus de commentaires que de code, c'est qu'il y a sans doute un problème.
    * Adopter un style de codage stable, consistant et s'y tenir, du moins sur un projet donné. Le bon usage de l'indentation pourtant le B-A-BA d'un code lisible n'est pas toujours respecté en 2014 et bientôt 2015...
    * Réutilisez les bibliothèques et frameworks existant plutôt que de réinventer la roue. Ceux-ci auront toujours plus de chance d'être mieux documentés et testés que votre propre création.
    * Etc.
    Tutoriels et FAQ TypeScript

  17. #17
    Membre extrêmement actif
    Avatar de Chauve souris
    Homme Profil pro
    amateur (éclairé ?)
    Inscrit en
    Novembre 2005
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Paraguay

    Informations professionnelles :
    Activité : amateur (éclairé ?)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 186
    Par défaut
    Blanchi sous le harnois par la programmation C et C++, j'ai pris l'habitude d'écrire des fonctions petites et de les documenter (avec un joli pavé avant contenant description, conditions d'entrée, conditions de sortie et tests internes). Le problème n'est pas mes neurones sénescents, mais le fichu Visual Studio qui refuse de compiler ce qui a été écrit avec les versions précédentes (pas très éloignées dans le temps, d'ailleurs).

  18. #18
    Invité de passage
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 1
    Par défaut
    Oserais-je ajouter quelques considérations personnelles ? Euh… ouais, en fait :
    1. Les modèles mentaux trop complexes : Le sempiternel manque d’analyse, couplé effectivement à un manque de simplification. Quand on ne va pas jusqu’au bout, jusqu’à la bonne atomicité, ça se paye toujours, à plus ou moins longue échéance.
    2. La mauvaise traduction du modèle mental : absolument d’accord avec tout là-dedans. Et surtout mille fois oui, quand on commente on n’explique pas ce qu’on fait (qui doit normalement être compréhensible en respectant un minimum de règles d’écriture) mais POURQUOI ON L’A FAIT !
    3. Pas assez de regroupement : la factorisation c’est la vie
    4. Utilisation obscure de vos bouts de code : ça c’est sûr, dans certains cas il est même nécessaire de commencer par l’implémentation de ces tests. La question à se poser dans ce cas passe de « comment je vais le faire » à « comment je vais l’utiliser ». Quand on cherche à y répondre on se retrouve contraint à instrumenter son code par tous les moyens à sa disposition. C’est toujours ça de pris pour l’avenir. Retour au point 1.
    5. Pas de chemin clair entre les différents modèles : ça c’est entre autres le problème récurrent du choix entre une implémentation « algo-centrée » (par exemple une bonne grosse machine d’états) et une implémentation « data-centrée » (par exemple des tables de hashage spécialisées et auto-suffisantes). Au bout de toutes ces années j’ai la sensation qu’en ce domaine tout est une question d’expérience. Il n’y a pas de recette miracle hormis être excessivement rigoureux dans sa manière de concevoir. Et ce coup-ci retour au point 2...
    6. Inventer des algorithmes : oui, en règle générale tout a souvent déjà été fait. Mis à part ceux qui bossent sur des trucs vraiment pointus en R&D, participer à la réalisation d’un projet industriel en entreprise consiste à savoir quoi ré-utiliser.
    7. Pour conclure, un petit avis personnel : le code écrit par un développeur employé dans une entreprise appartient à cette entreprise. Point. Il doit donc être en permanence accessible et compréhensible par tout le monde. Ce qui débouche automatiquement sur la prise en compte de toutes les considérations précédentes.

  19. #19
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par Amine Horseman Voir le message
    Êtes-vous d’accord avec Stephen Young sur ces six points ?
    Justement j'évoquais les questions de "modèle mentale" il n'y a pas plus tard qu'il y a deux jours Mais pas sous ses termes, que je trouve bien choisi !

    Citation Envoyé par Amine Horseman Voir le message
    Quel problème aimeriez-vous ajouter/modifier ?
    A mon avis c'est plus une question de précisions que de nouveaux points. Il parle des différents types de modèle mais n'évoque pas leur "niveau" ou le point de vue sur celui-ci. Dans toutes les approches systémiques ou "orienté modèle". On aborde toujours une notion de point de vue. Je pense que c'est important de le noter.



    Citation Envoyé par grinchisator Voir le message
    1. Les modèles mentaux trop complexes : Le sempiternel manque d’analyse, couplé effectivement à un manque de simplification. Quand on ne va pas jusqu’au bout, jusqu’à la bonne atomicité, ça se paye toujours, à plus ou moins longue échéance.
    3. Pas assez de regroupement : la factorisation c’est la vie
    Une granularité trop fine tend à rendre le modèle mentale trop complexe en augmentant :
    • le niveau d'abstraction,
    • la profondeur (voir pire le nombre de dimension) du modèle,
    • la taille du modèle.

    Je suis pas toujours pour mais comme dirait l'autre YAGNI (mais avant tout KISS).

    Citation Envoyé par grinchisator Voir le message
    2. La mauvaise traduction du modèle mental : absolument d’accord avec tout là-dedans. Et surtout mille fois oui, quand on commente on n’explique pas ce qu’on fait (qui doit normalement être compréhensible en respectant un minimum de règles d’écriture) mais POURQUOI ON L’A FAIT !
    Ca m'arrive d'utilisez quelques constructions non-triviales mais qui font gagner plusieurs dizaines lignes de code. Et finalement, un petit commentaire du style // Avance jusqu'au suivant permet de grandement simplifier la reconstruction modèle mentale que s'il fallait relire 10-20 lignes de code. De manière générale, je préfère introduite une méthode dont le nom indique clairement ce que je fais mais des fois il y a trop :
    • de contexte,
    • de variables modifiées (Java ne gère pas les paramètres "out"),
    • petites méthodes dans la classe.


    Citation Envoyé par grinchisator Voir le message
    4. Utilisation obscure de vos bouts de code : ça c’est sûr, dans certains cas il est même nécessaire de commencer par l’implémentation de ces tests. La question à se poser dans ce cas passe de « comment je vais le faire » à « comment je vais l’utiliser ». Quand on cherche à y répondre on se retrouve contraint à instrumenter son code par tous les moyens à sa disposition. C’est toujours ça de pris pour l’avenir. Retour au point 1.
    Avant de faire un test pour décrire le comment je vais l'utiliser, il m'arrive d'utiliser du pseudo code. Ca me permet d'avoir un modèle mentale relativement abstrait mais proche du code. Après c'est peut-être la faute à un langage au possibilité limitée (Java).

    Citation Envoyé par grinchisator Voir le message
    5. Pas de chemin clair entre les différents modèles : ça c’est entre autres le problème récurrent du choix entre une implémentation « algo-centrée » (par exemple une bonne grosse machine d’états) et une implémentation « data-centrée » (par exemple des tables de hashage spécialisées et auto-suffisantes). Au bout de toutes ces années j’ai la sensation qu’en ce domaine tout est une question d’expérience. Il n’y a pas de recette miracle hormis être excessivement rigoureux dans sa manière de concevoir. Et ce coup-ci retour au point 2...
    Excellents exemples. Mais au-delà du choix pour une fonctionnalité donnée, il faut aussi se poser la question de la cohérence "Est-ce que je dois utiliser toujours la même approche partout ?". Cela facilite la compréhension globale (ou plutôt disons moyenne) mais risque de rendre certaines fonctionnalités complexes (complexité localisée cependant), même si ces exceptions représentent/manipulent des concepts similaires ...

    Citation Envoyé par grinchisator Voir le message
    6. Inventer des algorithmes : oui, en règle générale tout a souvent déjà été fait. Mis à part ceux qui bossent sur des trucs vraiment pointus en R&D, participer à la réalisation d’un projet industriel en entreprise consiste à savoir quoi ré-utiliser.
    7. Pour conclure, un petit avis personnel : le code écrit par un développeur employé dans une entreprise appartient à cette entreprise. Point. Il doit donc être en permanence accessible et compréhensible par tout le monde. Ce qui débouche automatiquement sur la prise en compte de toutes les considérations précédentes.
    Le problème c'est qu'en entreprise tu tombes sur des gens aux parcours très différents. Certains n'ayant suivis par exemple aucun cursus en développement informatique en dehors d'un stage de reconversion. Certains identifieront très facilement les algo utilisés (divide&conquer, greedy, depth-first, backtracking, etc.) ce qui facilitera également leur modèle mentale tandis que pour d'autres ce sera un ramassis de code pondu par un geek fou.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  20. #20
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut
    Par contre le dernier point je comprends pas : Je suis donc en train depuis le début de mon contrat dans mon entreprise de faire le travail d'un futur docteur avec un diplôme de technicien ? J'ai du mal à y croire.
    plains toi! Moi je fait un travail de technicien avec un diplôme de docteur!

Discussions similaires

  1. [Article] Pourquoi générer le code JavaScript est une fausse bonne idée
    Par sekaijin dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/01/2015, 22h14
  2. Réponses: 4
    Dernier message: 04/06/2009, 09h51
  3. ce code n'est pas correct, pourquoi?
    Par laurent.w dans le forum Access
    Réponses: 2
    Dernier message: 14/12/2006, 14h11
  4. [JavaDOC] Ajouter notre propre javadoc dans Eclipse
    Par redzone dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/01/2004, 10h06

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