Dans quelle mesure est-il important que vous connaissiez la norme C ++?


11

J'ai essayé de chercher, mais je n'ai pas vu une question similaire (que ce soit ma terminologie de recherche était incorrecte - si c'est le cas, n'hésitez pas à fermer).

Je suis un fervent utilisateur de SO, et je remarque qu'il y a beaucoup de références au standard C ++ dans les discussions et les réponses - et je dois admettre que je n'ai jamais lu ce document particulier, le langage me fait mal aux yeux ... Donc , la question est, un développeur C ++ peut-il vraiment coder pour vivre sans jamais avoir lu ce document? Est-ce vraiment important pour nous, simples mortels qui ne sont pas dans le métier d'écrire des compilateurs?


La persistance des questions auxquelles on répond avec de brèves citations de la norme devrait être une preuve suffisante que sa lecture n'est pas une condition préalable à l'utilisation de la langue ... (à condition que vous ayez un endroit où vous tourner lorsque vous êtes coincé)
Shog9

Réponses:


16

Non - vous pouvez très bien vous en passer sans ça

Cependant, vous aurez une compréhension beaucoup plus profonde si vous prenez le temps de l'apprendre. Suivez peut-être les références de ces questions qui vous dérangent et apprenez un petit morceau à la fois.


8

Si vous voulez discuter de la sémantique et du standard du langage, le standard est très important. (Je ne veux pas dire cela de manière totalement péjorative.) Si vous voulez simplement faire le travail dans la langue (vs sur la langue), alors c'est beaucoup moins le cas.

La norme peut faire une référence décente à la bibliothèque standard (pas tellement pour la langue elle-même) une fois que vous vous y sentez un peu à l'aise, mais j'hésite à recommander qu'elle soit utilisée de cette façon. La plupart des gens semblent faire mieux avec d'autres matériaux. Cela dit, je me tourne le plus souvent vers la norme lorsque j'ai besoin de rechercher quelque chose sur stdlib.

Cependant, la lecture des ébauches et des documents du comité est un moyen de se tenir au courant de C ++ 0x - en fait, l'un des rares moyens actuellement.

Pour SO et d'autres forums, j'hésite à citer la norme, sauf lorsqu'il semble que l'affiche en bénéficierait clairement et définitivement - peut-être qu'ils l'ont demandé ou que je pense qu'ils l'attendent implicitement. Dans la plupart des cas, et en particulier avec les programmeurs débutants en C ++, le citer ne semble généralement pas beaucoup aider.


Si quelqu'un veut savoir ce que la langue doit faire, la norme est inestimable. S'ils veulent savoir pourquoi le compilateur fait quelque chose, c'est souvent très utile. Pour d'autres questions, pas tant.
David Thornley

1
@DavidThornley: Il est difficile de juger après si longtemps habitué à lire la norme moi-même, mais il semble que la plupart des gens trouvent les textes tels que TC ++ PL plus accessibles même pour savoir ce que la langue devrait faire.
Fred Nurk

1
@Fred Nurk: Presque tout est plus accessible que le standard. Je voulais dire pour répondre à des questions sur SO et similaires, et je n'étais pas clair à ce sujet. Cela ajoute un peu d'autorité lorsque les gens citent cplusplus.com et d'autres sources.
David Thornley

@DavidThornley: Je citerai très rarement des sites comme ça (cplusplus.com en particulier a trop de problèmes à mon goût), mais pour la plupart des affiches sur SO, elles semblent aussi plus utiles, même avec des erreurs, que la norme - et étant facilement disponible en ligne est, malheureusement, une grande partie de cela.
Fred Nurk

@Fred, c'est intéressant à savoir, j'ai toujours pensé que cplusplus était une bonne référence (l'inconvénient est leur source de publicité - ce qui est très inapproprié!), Maintenant je vais devoir me rappeler de croiser la référence avec la référence sgi.
Nim

6

Vous devriez l'avoir disponible pour référence mais je pense que personne d'autre que ses auteurs n'a lu le tout ... s'ils l'ont fait (ils travaillent en groupes se concentrant sur des domaines, donc j'en doute un peu).

La raison pour laquelle vous devriez l'avoir à disposition est que, parfois, une question sur l'exactitude du code ne peut être répondue qu'en se référant à la norme.


3
Dans la plupart des situations, vous n'en avez pas besoin. Ce dont vous avez besoin est traité dans d'autres livres. Ce n'est que lorsque vous arrivez à ces cas d'angle ou que vous n'avez jamais utilisé de coins de la langue que vous devez vérifier la définition dans la norme (et il existe généralement une alternative à l'utilisation des cas d'angle dans la langue). Laissez le standard aux développeurs du compilateur et le développeur général peut s'entendre avec d'autres textes non formels.
Martin York

2

Il est probablement plus important que vous sachiez où se trouve la norme et que vous sachiez quand chercher.

Si rien d'autre, vous devez vérifier périodiquement pour vous assurer que vous adhérez à la dernière version et que votre code ne dérive pas.


2

Dans une grande équipe, vous devriez généralement avoir une personne (mais généralement pas plus) qui connaît la norme au moins raisonnablement bien, afin qu'elle puisse faire des choses comme régler des arguments / questions sur des choses comme la conformité d'un code particulier aux exigences de la norme.

En réalité, cependant, ces réponses doivent être tempérées par le jugement et l'expérience. La norme (actuelle) dit qu'il exports'agit d'un mot-clé et indique ce qu'il fait. En réalité, cela ne fonctionne tout simplement pas de cette façon avec la plupart des compilateurs. De même, dans de nombreux cas, si trois personnes sont en désaccord sur un code particulier et ce que la norme pourrait en dire, cela peut être un signe que le code peut avoir besoin d'être réécrit pour être plus simple.

Dans le même temps, la plupart des équipes travailleront la plupart du temps sur une seule plate-forme, et avoir une norme (et une personne qui la connaît au moins raisonnablement) pour vérifier que ce que vous faites n'est pas trop étroitement lié à cette plate-forme peut certainement sois utile.


Le "pas plus" est probablement important - à moins que vous ne vouliez des arguments entre les experts sur la façon d'interpréter la norme <g>
Steve314

2

Je gagne mon pain en tant que développeur C ++ depuis environ 4 ans au total, sans avoir lu la norme. En fait, pendant les deux premières années environ, je n'ai même pas lu grand-chose d'autre que C ++ Primer de Stan Lippman et des articles MSDN. Il est donc possible - en fait, je crains que la plupart des personnes qui produisent du code C ++ n'aient même pas lu des travaux fondamentaux comme Effective C ++ et al. que je n'ai moi-même découvert que plus tard.

À mon humble avis, pour être un bon développeur C ++, il faut comprendre la logique interne du ou des langages (comme le note Scott Meyers, le C ++ est d'environ 4 langages différents) et les idiomes et pièges courants, et être prêt à toujours en savoir plus. La lecture des discussions sur SO peut en apprendre beaucoup sur les cas d'angle où, à son tour, il peut être utile de lire les parties pertinentes de la norme, si quelqu'un veut vraiment creuser plus profondément. Mais la lecture de l'ensemble est probablement rarement nécessaire pour la plupart d'entre nous.


Bon point qu'il y a des livres essentiels qui sont beaucoup plus essentiels (pour la plupart des programmeurs qui n'écrivent pas de compilateurs) que la norme. +1 - mais il y a un bon nombre de livres "essentiels".
Steve314

@ Steve314, en effet - commencer à les énumérer n'aiderait cependant pas à répondre à cette question spécifique. Mais j'ai ajouté un lien vers le fil de discussion sur SO maintenant.
Péter Török

@ Péter - belle touche, mais mon point non déclaré était qu'aucun des livres "essentiels" n'est vraiment essentiel. La plupart des programmeurs C ++ auraient dû lire plusieurs titres de cette liste, mais tous ? Peu probable. Même si vous l'avez fait, je doute que vous puissiez vraiment conserver toutes ces connaissances. "Efficace C ++" est sur ma liste de non-lecture pour le moment, donc je le compte évidemment comme un livre essentiel moins qu'essentiel.
Steve314

@ Steve314, je ne voulais pas dire qu'il fallait lire tout cela - je ne l'ai pas fait non plus, et j'ai lu certains d'entre eux mais je n'ai pas été impressionné par :-) Il y a aussi un certain chevauchement entre certains d'entre eux, donc c'est un question de goût personnel et de chance que le développeur rencontre en premier et / ou celui qu'il qualifie d '«essentiel». Je crois que l'important est qu'il y a des idiomes communs qui sont bons à suivre, et des pièges communs à éviter, et il faut en savoir plus sur la plupart d'entre eux, et la façon la moins douloureuse de les apprendre est de (certains de) ces livres .
Péter Török

Bien sûr, je ne saurai pas à quel point c'est essentiel avant de l' avoir lu.
Steve314

1

«Connaître la norme» est une question de degré et ne signifie pas nécessairement mémoriser le document original.

Un document de normes est conçu pour faire autorité - pas nécessairement accessible. Il existe de nombreuses sources supprimées en une seule étape qui sont beaucoup plus accessibles. Certes, il y a un peu de chuchotements chinois là-dedans, mais c'est rarement un gros problème - certainement au niveau supprimé en une seule étape.

Divulgation complète - je dois dire ceci - je n'ai jamais lu la norme. Bien que je ferai probablement l'effort d'obtenir le document C ++ 0x complet une fois finalisé.

EDIT bien sûr si Stroustrup publie une nouvelle édition de "The C ++ Programming Language", je peux me contenter de cela.


1

Lorsque je programmais en C ++, je me référais souvent au langage standard pour obtenir des informations sur les fonctions de bibliothèque standard. La bibliothèque standard C ++ est assez grande, et j'ai trouvé que le standard de langage était la source la plus pratique.


1
Oh vraiment? Je trouve toujours les ressources en ligne comme cplusplus indispensables dans ce sens ...
Nim

1

J'aurais juré avoir déjà répondu à cette question, mais je ne la trouve pas. Fondamentalement, C ++ est différent de Java en ce qu'il est destiné à avoir des trous dans la spécification que d'autres spécifications de plate-forme peuvent combler (par exemple POSIX, ou la spécification ABI de votre architecture, ou votre compilateur). Ainsi, lorsque vous répondez à des questions sur des sites comme StackOverflow, il est courant de faire apparaître la spécification pour indiquer que le simple fait que quelque chose fonctionne sur un compilateur n'implique pas qu'il fonctionne partout. En d'autres termes, une grande partie de la raison de référencer des spécifications particulières lorsque vous travaillez avec C ++ est de clarifier exactement la portabilité d'une utilisation particulière du langage.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.