OVH Cloud OVH Cloud

Quels bouquins achetter ?

89 réponses
Avatar
Marc Boyer
Bon, je me décide enfin à compléter ma collection de bouquins
C++, histoire de pas poster ici à chaque fois que je redécouvre
la roue et que je me demande s'il vaut mieux lui mettre 8 ou 9
côtés.

Que me conseilleriez vous (vous qui voyez passer mes questions)?
J'ai déjà:
- TC++PL 3ed
- Moderne C++ Design
- The Design and Evolution of C++

Je pensais à:
- Exceptional C++
- Effective C++
- More Exceptional C++ : parce qu'il dit insister sur les traits
et l'usage de la STL

J'hésite sur:
- Essential C++ : je pense que c'est pour des plus débutants
- More Effective C++ : avec les 3 ci dessus, ça devrait
déjà être pas mal
- The Boost Graph Library : je dois faire quelques manips de
base sur les graphes, et je me demande si j'aurais
plus vite fait de tout recoder ou de me plonger dans Boost


Des commentaires ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

10 réponses

Avatar
Marc Boyer
Philippe Guglielmetti wrote:
a écrit
3. Il y a effectivement l'effet des couches surajoutées


j'ajouterais:
4. C'est surtout la librairie C/C++ qui apporte de la complexité et qui a
été faite en étapes (et n'est pas finie). Le langage lui-même n'a pas grand
chose d'original par rapport à Pascal, par exemple, si ce n'est les
<template>, qui existent aussi en ADA par exemple...


C'est un Troll ?
S'il existe un sous-ensemble de C++ qui n'est qu'un Pascal augmenté
de généricité, et qui peut avoir son utilité, limiter C++ à ce
sous-ensemble, c'est une erreur grave de point de vue.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Pierre Maurette
L'étiquette suggère de s'abstenir de signaler les fautes d'orthographe, ou
alors de le faire de manière discrète.
Je suppose que je ne suis pas le seul à m'être retenu de répondre à "Quels
bouquins achetter ?" par "Un bon dictionnaire français".
Je trouve particulièrement grossier le signalement de la faute en lettres
capitales dans l'objet du message.
Pierre
Avatar
Philippe Guglielmetti
"Marc Boyer" a écrit dans le message
de news:bo59rb$fl$
Philippe Guglielmetti wrote:
4. C'est surtout la librairie C/C++ qui apporte de la complexité et qui
a


été faite en étapes (et n'est pas finie). Le langage lui-même n'a pas
grand


chose d'original par rapport à Pascal, par exemple, si ce n'est les
<template>, qui existent aussi en ADA par exemple...


C'est un Troll ?
S'il existe un sous-ensemble de C++ qui n'est qu'un Pascal augmenté
de généricité, et qui peut avoir son utilité, limiter C++ à ce
sous-ensemble, c'est une erreur grave de point de vue.


il ne faut pas trop sortir les choses de leur contexte. La question initiale
portait sur la "complexité" de C++ par rapport aux autres langages. Je
maintiens qu'un débutant n'as pas besoin de maitriser les subtilités des
constructeurs, des surcharges d'opérateurs et des exceptions pour commencer
à programmer.
Bon, ok, la référence à Pascal est un peu réductrice. Mais je me permets de
rappeller que les premiers compilateurs C++ comme Cfront traduisaient du C++
en C avant de compiler le C. Les programmeurs "haut niveau" ont tendance à
oublier qu'un objet n'est qu'un (e liste de) struct contenant des pointeurs
sur des fonctions... Même si la syntaxe de C++ simplifie beaucoup la
programmation objet, le "paradygme" est toujours celui des langages
procéduraux fortement typés, à la Pascal. Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage. Chaque
question de débutant sur les chaînes de caractères le prouve... Après, pour
devenir un pro, c'est plus dur, j'essaie encore...
--
Philippe Guglielmetti - www.dynabits.com


Avatar
Christophe Lephay
Philippe Guglielmetti wrote:
il ne faut pas trop sortir les choses de leur contexte. La question
initiale portait sur la "complexité" de C++ par rapport aux autres
langages. Je maintiens qu'un débutant n'as pas besoin de maitriser
les subtilités des constructeurs, des surcharges d'opérateurs et des
exceptions pour commencer à programmer.


Concernant les constructeurs, j'ai quelques doutes. Pour le reste, celà
n'est peut-être pas, en effet, du ressort du débutant qui fait des hello
world.

Bon, ok, la référence à Pascal est un peu réductrice. Mais je me
permets de rappeller que les premiers compilateurs C++ comme Cfront
traduisaient du C++ en C avant de compiler le C. Les programmeurs
"haut niveau" ont tendance à oublier qu'un objet n'est qu'un (e liste
de) struct contenant des pointeurs sur des fonctions...


Tu dis que la référence à Pascal est réductrice, mais tu réitères le
procédé, en réduisant les classes à des struct.

Le fait que CFront traduisait en C n'implique rien du tout...

Même si la
syntaxe de C++ simplifie beaucoup la programmation objet, le
"paradygme" est toujours celui des langages procéduraux fortement
typés, à la Pascal.


Le fait de compiler un programme au lieu de l'interpreter peut aussi être
décrit comme un paradigme, d'après lequel tous les langages compilés
suivraient le même paradigme.

C'est un peu vide de sens, tout celà...

Je maintiens que la difficulté d'apprentissage de
C++ tient plus à la librairie qu'au langage. Chaque question de
débutant sur les chaînes de caractères le prouve...


Chaque question de débutant sur les chaines de caractères montre justement
que la SL rend celà plus facile...

Après, pour
devenir un pro, c'est plus dur, j'essaie encore...


Ben visiblement, il y a encore du boulot !

Quand on lit une absurdité dans un post, on se dit qu'on a peut-être mal
compris quelque chose. Mais là, je n'ai pas le sentiment d'avoir lu une
seule chose sensée...

Chris

Avatar
Marc Boyer
Philippe Guglielmetti wrote:
C'est un Troll ?
S'il existe un sous-ensemble de C++ qui n'est qu'un Pascal augmenté
de généricité, et qui peut avoir son utilité, limiter C++ à ce
sous-ensemble, c'est une erreur grave de point de vue.


il ne faut pas trop sortir les choses de leur contexte. La question initiale
portait sur la "complexité" de C++ par rapport aux autres langages. Je
maintiens qu'un débutant n'as pas besoin de maitriser les subtilités des
constructeurs, des surcharges d'opérateurs et des exceptions pour commencer
à programmer.


Oui, on peut commencer par un sous-ensemble de C++ relativement
simple (proche en effet de Pascal) puis, peu à peu, découvrir
des aspects plus avancés.

Bon, ok, la référence à Pascal est un peu réductrice. Mais je me permets de
rappeller que les premiers compilateurs C++ comme Cfront traduisaient du C++
en C avant de compiler le C. Les programmeurs "haut niveau" ont tendance à
oublier qu'un objet n'est qu'un (e liste de) struct contenant des pointeurs
sur des fonctions...


Attention, ne confondons pas tout. A ce rythme là, Ada n'est qu'un ASM
un peu habillé.
C++, même au temps de Cfront, apportait des avancées notables,
comme les "public/private", l'appel automatique du destructeur des
variables automatiques en fin de portée, etc.
Un objet, en plus d'être un struct C, est aussi un espace de nom,
avec des règles différentes du C. Voire par exemple
struct foo {
struct bar { int i; } b;
int i;
};
struct bar aBar;

Même si la syntaxe de C++ simplifie beaucoup la
programmation objet, le "paradygme" est toujours celui des langages
procéduraux fortement typés, à la Pascal.


Oui, on est dans la "famille" des langages procéduraux typés,
mais aussi dans celle de la POO. C++ ressemble plus à Pascal
qu'à Caml ou Prolog, c'est vrai, mais si on commence à se
demander s'il ressemble plus à Pascal ou a SmallTalk, on
peut discuter longtemps.

Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage. Chaque
question de débutant sur les chaînes de caractères le prouve... Après, pour
devenir un pro, c'est plus dur, j'essaie encore...


D'avoir enseigné C et C++ (et quelques autres), je suis pas
tout à fait sur. L'opposition entre la famille des printf et
les ostream est assez flagrante. Le passage de tableau "à la C"
dans une fonction contre vector aussi.
A quoi pensais-tu en parlant des "question de débutant sur les
chaînes de caractères" ? Moi, j'ai moins de mal à expliquer
string s1= "toto";
string s2=s1;
s1[1]='a';
s2[1]='u';
cout<<"s1= "<<s1<<" et s2= "<<s2<<endl;
que
char *s1 = "toto";
char *s2 = malloc( strlen(s1)+1 );
strcpy(s2,s1);
s1[1]='a'; /* UB, mais ça marche souvent quand même */
s2[1]='u';
printf("s1= %s et s2= %sn",s1,s2);

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Philippe Guglielmetti
"Marc Boyer"
Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage. Chaque
question de débutant sur les chaînes de caractères le prouve...
D'avoir enseigné C et C++ (et quelques autres), je suis pas

tout à fait sur. L'opposition entre la famille des printf et
les ostream est assez flagrante. Le passage de tableau "à la C"
dans une fonction contre vector aussi.


exactement ce que je disais : il faut apprendre la LIBRAIRIE (stl) pour
avoir accès aux string, aux vector etc. Contrairement à beaucoup d'autres
langages, les chaînes de caractère, les listes etc. ne font pas partie du
LANGAGE C++. Il faudrait compter, mais je suis prêt à parier qu'il y a plus
de mots clef en Visual Basic qu'en C++.
Pour être clair, c'est ce que j'adore dans C++ : le langage lui-même est
pratiquement minimal. Et j'en reviens au sujet original du post dont vous
essayez désespérément de me faire dévier : non, C++ n'est pas un langage
plus "complexe" qu'un autre. Voilà.
Mon avis diffère donc de ce ceux qui estiment que connaître C++ est réservé
à une élite et qui se permettent d'insulter les autres (pas toi, Marc).
--
Philippe Guglielmetti - www.dynabits.com


Avatar
Christophe Lephay
Philippe Guglielmetti wrote:
"Marc Boyer"
Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage.
Chaque question de débutant sur les chaînes de caractères le
prouve...
D'avoir enseigné C et C++ (et quelques autres), je suis pas

tout à fait sur. L'opposition entre la famille des printf et
les ostream est assez flagrante. Le passage de tableau "à la C"
dans une fonction contre vector aussi.


exactement ce que je disais : il faut apprendre la LIBRAIRIE (stl)
pour avoir accès aux string, aux vector etc.


Hum, tu te contredis : d'un coté tu dis qu'il n'est pas nécessaire de
maitriser les notions de constructeur, de surcharge d'opérateur et autres
templates pour débuter, et de l'autre, tu laisses entendre qu'il faut
apprendre l'intégralité de la SL pour n'en utiliser que les string...

Conclusion : de la même manière qu'il n'est pas nécessaire de maitriser
l'ensemble des fonctionnalités pour écrire un "hello world", il n'est pas
nécessaire de maitriser l'ensemble de la SL si on n'a besoin que des
strings.

La SL a justement, et de façon bien plus consistante que la syntaxe ou la
grammaire du langage, été conçue de manière modulaire.

A fonctionnalités égales, l'utilisation des string recquiert moins de
connaissances que l'utilisation des char[]. Le fait d'en douter serait,
IMHA, le signe d'un esprit tourmenté ;)

Chris



Avatar
Philippe Guglielmetti
"Christophe Lephay" a écrit dans le message
de news:bo83jf$g6k$
Hum, tu te contredis : d'un coté tu dis qu'il n'est pas nécessaire de
maitriser les notions de constructeur, de surcharge d'opérateur et autres
templates pour débuter, et de l'autre, tu laisses entendre qu'il faut
apprendre l'intégralité de la SL pour n'en utiliser que les string...


je ne laisse entendre rien du tout. J'écris des trucs comme:

Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage.



et que string ne fait PAS partie du langage. Je ne dis rien de plus. Si tu
penses que le langage C++ est particulièrement difficile, ce qui est le
sujet de la discussion, c'est ton droit de le dire clairement plutôt que de
m'insulter.
Si tu entends des voix en lisant mes messages ou si tu en composes de
nouveaux à partir de phrases prises hors contexte, ce n'est pas mon
problème,

IMHA, le signe d'un esprit tourmenté ;)
anglo-francisisme si je ne me trompe ? AMHA ou IMHO ?

--
Philippe Guglielmetti - www.dynabits.com


Avatar
Marc Boyer
Philippe Guglielmetti wrote:
"Marc Boyer"
Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage. Chaque
question de débutant sur les chaînes de caractères le prouve...
D'avoir enseigné C et C++ (et quelques autres), je suis pas

tout à fait sur. L'opposition entre la famille des printf et
les ostream est assez flagrante. Le passage de tableau "à la C"
dans une fonction contre vector aussi.


exactement ce que je disais : il faut apprendre la LIBRAIRIE (stl) pour
avoir accès aux string, aux vector etc. Contrairement à beaucoup d'autres
langages, les chaînes de caractère, les listes etc. ne font pas partie du
LANGAGE C++. Il faudrait compter, mais je suis prêt à parier qu'il y a plus
de mots clef en Visual Basic qu'en C++.
Pour être clair, c'est ce que j'adore dans C++ : le langage lui-même est
pratiquement minimal.


Disons qu'un des objectif du langage a été de ne mettre dans
le langage que ce qui ne pouvait pas être dans une librairie.
Il tente d'être minimal, pour un ensemble d'objectifs donnés.

Et j'en reviens au sujet original du post dont vous
essayez désespérément de me faire dévier : non, C++ n'est pas un langage
plus "complexe" qu'un autre. Voilà.


Ca dépend de "quel" autre. On doit avoir des complexités
équivalentes avec Ada9X par exemple. Mais par rapport à des
vieux langages comme C ou Pascal, non, il y a un gain de complexité
notable. Ceci dit, on peut se servir de C++ comme un "C amélioré"
ou un "Pascal amélioré", en ne faisant pas de polymorphisme
dynamique (aucun virtual), en utilisant pas de namespace,
en n'utilisant les templates que présents dans la stl,
en ne faisant pas d'héritage, en ne faisant pas de surcharge
d'opérateurs (dont les opérateurs de conversion).
C'est l'approche "C++ pour les débutants", et ça me
paraît même plus facile à enseigner que le C.

Un des objectif de C++ est en effet qu'on a pas besoin de
maîtriser tout le langage pour commencer à coder en C++,
et qu'on peut découvrir les choses au fur et à mesure.

Mais moi qui suis justement dans la phase de découverte
des mécanismes avancés du langage, non, je te dis que C++ est
un langage plus complexe que des langages comme C ou Pascal.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(



Avatar
Christophe Lephay
Philippe Guglielmetti wrote:
"Christophe Lephay" a écrit dans le
message de news:bo83jf$g6k$
Hum, tu te contredis : d'un coté tu dis qu'il n'est pas nécessaire de
maitriser les notions de constructeur, de surcharge d'opérateur et
autres templates pour débuter, et de l'autre, tu laisses entendre
qu'il faut apprendre l'intégralité de la SL pour n'en utiliser que
les string...


je ne laisse entendre rien du tout. J'écris des trucs comme:

Je maintiens que la difficulté
d'apprentissage de C++ tient plus à la librairie qu'au langage.



et que string ne fait PAS partie du langage.


Hum, les strings font bel et bien partie du langage, au même titre que la SL
en fait bel et bien partie...

Je ne dis rien de plus.
Si tu penses que le langage C++ est particulièrement difficile, ce
qui est le sujet de la discussion, c'est ton droit de le dire
clairement plutôt que de m'insulter.


Hum, je n'entendais pas t'insulter en relevant ce qui me semblait être une
contradiction...

Si tu entends des voix en lisant mes messages ou si tu en composes de
nouveaux à partir de phrases prises hors contexte, ce n'est pas mon
problème,


Quand tu dis :

"il faut apprendre la LIBRAIRIE (stl) pour
avoir accès aux string, aux vector, etc"

Il me semble que tu présentes *la* librairie comme une entité indissociable.
Du restes, si tu ne la considère pas comme telle, la complexité dont tu
parles n'existe plus ce qui fait que, par conséquent, tu es dans l'erreur
dans les deux cas.

Je pense qu'il est évident pour tout le monde qu'il n'est pas nécessaire
d'apprendre toute la SL pour utiliser des strings. Et quelle que soit la
façon dont elles puisse être implémentées, il faut bien une interface aux
fonctionnalités proposées, qu'il est donc, bien évidemment, nécessaire
d'apprendre. Mais c'est le cas dans tous les langages, et il n'y a rien qui
rendent string en C++ plus difficile à apprendre que dans n'importe quel
autre langage et, si même c'était le cas, rien qui ne soit lié au fait que
les strings soient définies dans la SL ou non.

Je suis d'accord que les tableaux, sous la forme des vectors, sont un peu
plus complexes que dans d'autres langages. Toutefois, ils le sont beaucoup
moins que les traditionnels [].

Peut-être que j'ai mal compris tes propos, auquel cas j'aimerais bien que tu
les développes un peu :
- les strings sont ils difficiles à apprendre ?
- sont-ils difficiles à apprendre parce qu'il sont dans la SL ?
- les vectors sont ils plus difficiles à apprendre (à utiliser) que les
tableau à la C ?
- si oui, est-ce le cas juste parce qu'ils sont dans la SL ?
- est-on obligé d'apprendre toute la SL si on veut pouvoir utiliser strings
et vectors ?

La réponse à toutes ces questions, en ce qui me concerne, est clairement
non. Il me semble que ta position est exactement l'inverse.

Si on peut apprendre les strings sans apprendre autre chose de la SL que les
strings, alors il est évident que le fait qu'ils se trouvent dans la SL ou
non ne change rien en terme de complexité.

Si tu considères la SL comme quelque chose de modulaire, alors il n'y a
aucune complexité induite par le fait que telle ou telle fonctionnalité s'y
trouve. Le fait que tu dises que la SL est la source principale de
complexité (mais peut-être ai-je mal compris ?), implique donc que tu lui
enlèves son aspect modulaire, alors même que tu parles d'une telle
modularité dans la syntaxe du langage (dans lequel un débutant n'a pas
besoin de connaitre la surcharge des opérateurs, par exemple, pour écrire un
programme). C'est là la contradiction qu'il me semblait relever (sans pour
autant que je veuille t'insulter, même si je reconnais avoir dit n'avoir lu
que des absurdités des ta part *dans un autre post*, propos dont je
comprends le caractère blessant, sans pour autant qu'il soit justifié de
parler d'insultes). La contradiction me parait d'autant plus notable que je
trouve la SL bien plus modulaire que le core langage(*).

(*) par modularité, j'entends ici absence de connaissances pré-requises.

Chris