Quelles parties de Code Complete n'ont pas résisté à l'épreuve du temps? [fermé]

14

Je regardais Code Complete sur l'étagère, pensant: "En dehors du mois de l'homme mythique, cela pourrait être l'un des rares livres de génie logiciel du marché de masse à résister à l'épreuve du temps." Pour cette raison, je pense à me lancer pour le relire.

Je suis curieux - quelqu'un d'autre a-t-il récemment relu? J'ai donc, avez-vous vu quelque chose qu'il s'est vraiment trompé?

Ce n'est pas une attaque, et pas une demande de critique de livre - je suis plus intéressé par les idées qui ont changé au fil des ans.

Et s'il vous plaît - aucun commentaire sur, "Demarco / Spewak / Zachman a résisté à l'épreuve du temps ..." Je suis particulièrement intéressé par Code Complete en raison de l'étendue du terrain qu'il couvre et de l'ampleur de son impact sur le terrain.

MathAttack
la source
1
Un réexamen rapide de celui-ci m'a rappelé des ennuis où le texte semble contredire les exemples, et différentes parties du livre conseillent des choses différentes. En dehors de cela, cela semble encore assez bon.
Izkata
@Izkata - exemples?
MathAttack
Ajouté comme réponse
Izkata
1
Bonne question, récemment, je me demandais si je devais le relire moi-même. Je me demande s'il y a des plans pour une nouvelle édition?
Antonio2011a
2
J'ai étudié Code Complete (2e édition) l'été dernier et rien n'y semblait obsolète. Sauf s'il y aura des changements radicaux inattendus dans le développement de logiciels, je pense que je me sentirais en sécurité de recommander ce livre dans au moins cinq ans.
moucher

Réponses:

11

Code Complete couvre de nombreux concepts intemporels tels que:

  • forte cohésion
  • couplage lâche
  • bons noms de routine
  • programmation défensive
  • code auto-documenté
  • critiques de logiciels
  • tests unitaires

qui sont certainement pertinentes aujourd'hui.

Certains des concepts défendus dans CC sont désormais appliqués syntaxiquement dans les nouveaux langages, par exemple C # ne permet pas de définir des variables dans des sous-étendues d'une manière qui cache une définition super-étendue.

D'autres concepts, tels que la notation hongroise pour les noms de variables, ont été abandonnés dans la programmation traditionnelle (bien que quiconque travaille toujours avec l'API Win32 soutienne avec véhémence qu'ils sont bien vivants). Néanmoins, le véritable concept derrière la convention de dénomination des variables est de transmettre le sens nécessaire et de clarifier le code, des concepts qui selon moi sont également intemporels.

Tout compte fait, d'après ce dont je me souviens (et un rapide coup d'œil à l'intérieur de ma vénérable copie de CC), je dirais que cela vaut certainement la peine d'être examiné.

Je ne pense pas, cependant, que cela remonte à la nature vraiment intemporelle du Mois de l'homme mythique. MMM aborde les questions de qui fait le travail, comment et pourquoi le fait-il; ainsi que les coûts et la complexité des communications (humaines). MMM aborde des questions qui sont fondamentales pour tout ce que nous faisons. CC, en comparaison, se concentre sur les questions pratiques et pragmatiques de la façon dont nous le faisons. Autrement dit, si un projet est en retard et qu'un gestionnaire décide d'ajouter 100 personnes à l'équipe, l'écriture d'un code compréhensible ne fera pas vraiment de différence.

CC ne traite pas vraiment des problèmes importants qui affligent notre industrie; mais il fournit une bonne base pour rechercher le meilleur résultat dans une situation souvent impossible.

Je les considérerais certainement comme une lecture indispensable pour tous ceux qui se soucient du développement de logiciels; et je recommanderais de relire MM chaque fois que vous avez besoin d'un recyclage. CC mérite d'être relu si vous dirigez une équipe de développement, définissez des normes de groupe ou formez de nouveaux développeurs; en dehors de cela, je trouve personnellement que j'ai depuis longtemps intériorisé le matériel dans CC et que je le pratique quotidiennement.

Des espoirs qui aident. Ils sont certainement deux de mes préférés.

Robert Altman
la source
Je devrais peut-être créer un Q similaire pour MM. Brooks a peut-être eu plus facile depuis qu'il a écrit un livre de gestion.
MathAttack
CC n'aborde-t-il pas la question de «qui fait le travail» dans le chapitre 33: Caractère personnel?
mg1075
4

Dans l'ensemble, le livre est toujours bon. Cependant, j'ai quelques petits problèmes avec cela:

  • Chapitre 17 ( « Structures de contrôle inhabituelles ») fait des déclarations de garde de mention que le retour d'une fonction au début, mais les exemples donnés au chapitre 15 sur « si » déclarations conseiller contre les déclarations de garde. (Clauses de garde appelées / retours précoces dans le livre)
  • L'exemple de la section 14.2 semble se contredire. Il donne d'abord un exemple de "mauvais" code, et comment le rendre "bon". Il indique ensuite que, lors du regroupement d'énoncés connexes, soit par données, soit par similitude de tâche, il serait "bon". Le "mauvais" exemple devrait alors également être considéré comme "bon" - et, je pense, beaucoup plus facile à lire que le "bon" exemple, car toutes les données sont calculées au même rythme - il y a moins d'état à tenir dans votre tête .
  • Chapitre 23, Débogage, où les instructions d'impression sont vilipendées dans une puce. Bien que je convienne qu'ils ne devraient pas être le seul outil, ils sont extrêmement utiles pour réduire la plage de code où le bogue se produit. Saupoudrez-en un peu partout pour voir où les données ne sont pas soudainement ce que vous attendez, donne un bon point de départ pour le débogage, selon le code avec lequel vous travaillez.

J'ai un vague souvenir d'un autre impliquant des arguments de fonction, mais je ne le trouve pas pour le moment. C'était peut-être un autre livre.

Izkata
la source
6
Ouais, il avait tort à propos des déclarations imprimées à l'époque et il a toujours tort maintenant. Face à un bug dans un emplacement inconnu, les impressions et les journaux sont généralement mon outil de choix.
Loren Pechtel