OVH Cloud OVH Cloud

Je me lance, de Francis Glassborow, premiers avis sur ce livre.

41 réponses
Avatar
Loïc Joly
Comme la question de la qualité de ce livre a déjà été débattue ici, je
donne mon premier avis à chaud (j'ai lu une partie, survolé le reste, je
pense en faire une vraie critique quand j'aurais fini).

Les points forts :
- Vraiment aucune connaissance préalable
- Un environnement de développement livré avec et des infos détaillées
sur comment s'en servir
- Des explications qui ont l'air claires, de bonnes analogies
- Des commentaires de la beta testeuse du livre qui peuvent donner une
autre perspective
- Un livre vraiment fait pour apprendre seul
- Un apprentissage des différents éléments dans le bon ordre,
utilisation de la STL
- L'utilisation d'une bibliothèque graphique assez simple permettant de
faire dès le début des programmes assez ludiques

Les points faibles :
- Ne va pas très loin (pas de polymorphisme, de création de templates,
d'exceptions, survol des constructeurs...)
- Je trouve que le style de s'adresser directement au lecteur introduit
parfois des précautions oratoires un peu gênantes à force. Je suis plus
dubitatif que vraiment contre.
- Un nombre important de typos, dont certaines très gênantes (un *
remplacé par un gros point comme on en voit dans une liste de points).
Je pense que ce livre est une des nombreuses victimes de la traduction.
- Peut-être un peu lent (difficile de juger pour un non débutant).

En résumé : Pour des personnes vives d'esprit, avec un certain niveau
d'études scientifiques, je continuerai probablement à conseiller
/Accelerated C++/ de Koenig et Moo. Pour les autres, ou les allergiques
à l'anglais, ce livre pourrait être un premier pas, à complèter
impérativement par un autre (mais lequel ? Une suite du même auteur ?).


--
Loïc

10 réponses

1 2 3 4 5
Avatar
Nadine St-Amand
wrote:
Nadine St-Amand wrote:

C'est le fruit de 3 ans de cours particuliers de C++, il
s'agit du matériel didactique préparé pour mes élèves.



http://cplusplus.cdoc.biz/



Juste quelques petits commentaires, vite faits.


Merci :)

(Je n'ai regardé
que quelque pages du chapitre 1.)


Ce n'est pas vraiment le meilleur chapître,
il vaut mieux consulter les chapitres plus illustrés.

Puisque vous avez consulté le chapître le moins représentatif du livre,
je vous invite plutôt à consulter parmi ces sections
(qui n'ont que quelques pages chacunes) :

sur l'allocation dynamique :
http://cplusplus.cdoc.biz/download_fichier.php?f=1%205%20memoire%20dynamique%2013.pdf

sur les pointeurs avancés :
http://cplusplus.cdoc.biz/download_fichier.php?f=6%201%20pointeurs%20avance%2016.pdf

ou sur les pointeurs débutants :
http://cplusplus.cdoc.biz/download_fichier.php?f=1%203%20pointeurs%205.pdf

ou sur les recursives :
http://cplusplus.cdoc.biz/download_fichier.php?f=4%204%20recursive%2030.pdf

qui sont plus représentatifs de la technique d'enseignement dont
j'essaie en vain de faire part dans ce newsgroup.


-- En C++, normalement, on écrit : « int main() », et non « int
main( void ) ». (L'utilisation de void, ici, est un hack,
rendu nécessaire pour des raisons de compatibilité avec C.)


Bonne remarque,

En effet, mais le livre parle des deux langages donc je ne peux pas me
permettre d'utiliser main() qui est très illégal en C.

De plus, le prototype détaillé
int main ( int argc, char *argv[] )

qui est compatible en C et en C++

est un petit peu surchargé pour le 'premier programme'

l'objectif est d'avoir une vue dégagée de la page pour se concentrer sur
les notions de base.

Je suppose que le seul moyen de me sortir de cette impasse est de
présenter les deux versions séparément :
int main() pour le C++
et
int main(void) pour le C


-- Je ne veux pas être plus royaliste que le roi, mais est-ce
que l'expression « point flottant » est réelement français ?
J'aurais dit « virgule flottant ». (Mais j'ai vu d'après
l'adresse email que tu es au Canada. C'est peut-être la
cause de la différence.)


Oui :)
Merci de la remarque, je n'y aurais jamais pensé seule :)

En fait, on utilise spontanément le terme anglais 'floating point' ou
'float', autant dans les milieux anglophones que francophones.

En fait, au Québec,
comme les américains et les canadiens,
nous utilisons un point pour séparer les décimale de la partie entière
dans les nombres, alors que vous utilisez une virgule, c'est
probablement pourquoi j'ai traduit différemment de vous.

Il me faudra donc une version francaise, une version québécoise et une
version anglaise... :)

-- Plus généralement : il ne faut jamais, jamais parler des
réels quand on parle des nombres dans l'ordinateur. Ça mène

fait. (Et je sais, ce n'est pas facile à dire à un débutant,
il y a des types dont tu n'as pas le droit de t'en servir,
parce qu'il faudrait un cour entier seulement pour apprendre
à s'en servir.)


oui c'est vrai rigoureusement.

mais je ne peux pas être trop précise dans le tout premier chapître qui
devrait s'intituler 'me debrouiller pour comprendre le premier programme
de ma vie', c'est déjà assez difficile d'expliquer à un débutant sans
ces technicalités.

Le chapître sur les boucles mentionne ce fait puisque ca a une incidence
sur l'utilisation de l'opérateur = =.

À votre suggestion, j'ajouterai un commentaire plus long, une
discussion, sur le sujet

-- Je me méfie beaucoup d'un livre d'aujourd'hui qui parle
immédiatement, dans le premier chapitre, de char[] et
d'int[].


J'aime aborder la programmation avec un regard bas-niveau.
Ca permet aux élèves de tout de suite comprendre qu'ils
vont travailler avec une machine.

Un accent particulier est fait sur l'utilisation faite des
espace-mémoire car c'est le plus gros problème chez les débutants en
programmation et c'est aussi ce qui leur permet le plus rapidement
de retomber sur du tangible.

Il faut dire aussi que c'est un livre
qui présente le C et le C++ (dans l'ordre).

Il est vrai que l'approche top-down est aussi nécessaire pour devenir un
développeur complet et la section architecture sera consacré à ce sujet
et utilisera plutôt les techniques haut-niveau pour cadrer et simplifier
l'expression.

Le type chaîne de caractères, c'est std::string en
C++, et un tableau d'entiers s'écrit std::vector<int>.


A mon sens, std::vector<int> est plutot le type 'chaine de caractères de
longueur variable'

et ce type ne fait pas directement partie du langage mais d'une
librairie complémentaire (la STL)

et encore une fois, le livre enseigne autant le C que le C++,
surtout dans les premières sections.

Le C++ c'est surtout le chapître sur les oo.

Il existe plusieurs manières de développer en C++,
- on peut travailler bas-niveau excepté pour l'architecture globale du
programme qui elle est basée sur les classes
- ou encore travailler de façon systématique avec les objets du C++
autant que possible

Surtout dans les devoirs, dans les réponses proposées : un
prénom ou un nom ne se stocke jamais dans un « tableau
char[] ».


Vous avez raison, il me faut trouver des exemples plus appropries
pour représenter les chaînes de longueur constante.

-- L'encodage ASCII ne fait pas partie du C++, et de toute
façon, la façon que sont encoder des caractères est un thème


Effectivement, mais il fait partie de ce qu'un élève a besoin
ou croit avoir besoin pour écrire ses premiers programmes.
Le chapitre 1 n'est pas une introduction au C++ mais une introduction a
'Je lis ou j'ecris mon premier programme et je le comprend'

Si je dis à l'élève :

tu peux construire une chaîne de caractère avec un tableau de char,

je dois lui expliquer comment assigner un caractère
à cet espace-mémoire (et toutes les façons de le faire).
Dans les bouquins de langage C, c'est toujours abordé assez rapidement,
avec la table ascii en annexe.

---------------

L'ordre des chapîtres et notions, surtout dans les futures versions,
sera davantage l'ordre d'apprentissage que le classement par thème de
programmation

(cout n'a pas non plus sa place dans le chapître 1 si on
classe par thème)

Dans une expérience d'apprentissage, il faut plusieurs fois repasser
tous les thèmes: premièrement l'initiation ou on aborde
superficiellement tous les thèmes,
puis apprentissage basique de chaque sujet, puis approfondissement,
puis librairies spéciales, etc.

Ce n'est pas un livre de référence mais un livre d'enseignement et de
pratique. C'est pourquoi il ne ressemble pas à ce que vous attendriez
(et s'il y ressemblait, ce serait inquiétant que je perde mon temps à
refaire ce qui est déjà fait)

Merci tout de même pour vos commentaires constructifs.

--
Nadine St-Amand


Avatar
Nadine St-Amand
* parler de template pour autre chose que le concept C++ ne
me semble pas indiqué


vous avez raison, mais c'est un terme utilisé aussi pour les templates
de texte dans les applications alors il sera difficile de réserver le
terme au c++

* c'est quoi vos conventions de nommage? Parfois en
anglais, parfois en français, parfois les identificateurs


Le livre se dirige vers une version anglaise et une version francaise,
certaines sections existant deja dans les deux langues.
A terme tout sera séparé

L'important pour moi est d'indiquer à l'élève que le nom est choisi par
lui-meme.

* le tableau sur les cast est à revoir. En fait parler des
cast aussi tôt est plutôt à éviter. Donner des exemples
avec des pointeurs alors qu'ils n'ont pas été abordé, ce
n'est pas mal.

* on introduit la boucle for au milieu de la description des
tableaux,

* on voit les fonctions C de manipulation de caractères,
suivit des classes String et StringBuffer de Java et
j'abandonne.


L'ordre des chapitres est présentement thématique excepté pour le
premier, je vais tout rediviser en parcours typiques.
En effet, la boucle for est introduite comme tel dans la section sur les
conditions cond.

Je referai un mail dans la liste quand les parcours seront prêts.



--
Nadine St-Amand

Avatar
Nadine St-Amand
| A mon sens, std::vector<int> est plutot le type 'chaine de caractères
| de longueur variable'

Ahem.


std::vector<char>

pardon

Avatar
Nadine St-Amand
Gabriel Dos Reis wrote:
Nadine St-Amand writes:

| > | A mon sens, std::vector<int> est plutot le type 'chaine de caractères
| > | de longueur variable'
| > Ahem.
|
| std::vector<char>

Si tu vas là, ils auront des problèmes le jour ils découvriront qu'en
fait, le type chaîne de caractères c'est std::string et que, ben en
fait, il ne se comporte pas, mais pas du tout comme std::vector<char>.

À éviter.


C'est pas moi qui vais la,
j'expliquais une différence entre les char [] et les vector<char>
de mon point de vue

Je ne parle pas des STL dans mon livre car il y a d'autres ouvrages
qui le font déjà très bien, et d'autre part, une base en algo
est intéressante pour bien comprendre la STL
et une base en programmation est utile pour faire la base en algo,
alors commencons par le début

Mon livre présente en long et en large les tableaux de caractères
(qui null terminés sont considérés par des chaînes de caractères)

et ce, par des librairies de c++ telles qui iostream,
et des librairies de C utilisées en C++ comme stdio.h et string.h.
Ces librairies sont utilisées par la communauté du C et celle du C++
historiquement, et même aujourd'hui.

Bien sur, quand j'introduis les char [], je me prépare en fait à
introduire les char * qui permettront d'implémenter des chaînes variables.

Je présente également les std::string mais extrêmement brièvement.

Le type chaîne de caractères, ce n'est pas que toi ou moi decidons
qu'il est. Mais ce que la communauté perçoit comme tel. C'est
std::string et non std::vector<char>.


ce n'est pas faux

le type natif de base est char []
le type objet le plus utilisé est std::string

on pourrait penser à utiliser un vector<char> pour implémenter une
classe de type std::string

--
Nadine St-Amand

Avatar
Andre Heinen
On Thu, 23 Jun 2005 17:27:14 +0000, Nadine St-Amand
wrote:

Andre Heinen wrote:
On Thu, 23 Jun 2005 14:44:25 +0000, Nadine St-Amand
wrote:

Les gens très intéressés peuvent me laisser leur adresse e-mail


Pourquoi ne pas poster un article ici même lorsque le document sera
prêt?


C'est ce qui vient d'être fait.

Je considère que le contenu de ce qui est en ligne est suffisamment mûr
car je ne l'ai pas modifié depuis plusieurs mois.

A moins que vous ne parliez de poster un contenu typique ?


Non non, je voulais dire "quand le document sera prêt". D'après ce
que j'ai compris des autres articles, vous envisagez encore des
modifications.

--
André Heinen
Mon e-mail, encodé ROT13: n qbg urvara ng rhebcrnayvax qbg pbz
La FAQ: http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/



Avatar
Andre Heinen
On 23 Jun 2005 09:31:00 -0700, wrote:

Gabriel Dos Reis wrote:

Des bouquins sur C++, il y en a déjà plein. Ce dont la
communauté a besoin, c'est de bons bouquins. Sans excuses :-)


Il y a même quelques très bons bouquins.


En français? Peux-tu nous en donner quelques exemples? Je ne sais
jamais quoi conseiller aux gens.

--
André Heinen
Mon e-mail, encodé ROT13: n qbg urvara ng rhebcrnayvax qbg pbz
La FAQ: http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/


Avatar
Marc Boyer
Nadine St-Amand a écrit :
Gabriel Dos Reis wrote:
Nadine St-Amand writes:

Le type chaîne de caractères, ce n'est pas que toi ou moi decidons
qu'il est. Mais ce que la communauté perçoit comme tel. C'est
std::string et non std::vector<char>.


ce n'est pas faux

le type natif de base est char []
le type objet le plus utilisé est std::string


Non, il y a une confusion faite entre le typage du langage
et l'utilisation sémantique.
En C, il n'y a pas de type "chaine de caractère" dans le système
de type. Pour faire une chaine de caractères, on utilise un
tableau de char terminé par . On ajoute un invariant au
système de type.
En C++, le type existe, et c'est std::string.

J'ajouterais que le type char[] n'existe pas. Ce qui
existe, c'est char[N]. Essayez de déclarer une variable
de tupe char[] pour voir.

on pourrait penser à utiliser un vector<char> pour implémenter une
classe de type std::string


Confusion implémentation/identité. On peut implémenter une chaine
de caractères avec char[], list<char>, iostream ou float* si on veut.
Ce qui est important avec une chaine de caractères, surtout quand
on parle à des débutants, c'est que cela permette de stocker ce
qu'on appelle "du texte" et d'avoir les opérations "naturelles"
dessus.

Un bon exemple: la concaténation. En C++, la concaténation
de deux chaines est une chaine. En C, on a pas de chaines, on
a des tableaux, avec une capacité, dans lesquels on peut stocker
une chaine. La concaténation de deux chaines doit se faire dans
un tableau de capacité suffisante.

Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?


Avatar
kanze
Nadine St-Amand wrote:
wrote:
Nadine St-Amand wrote:



[...]
-- En C++, normalement, on écrit : « int main() », et non « int
main( void ) ». (L'utilisation de void, ici, est un hack,
rendu nécessaire pour des raisons de compatibilité avec C.)


Bonne remarque,

En effet, mais le livre parle des deux langages donc je ne
peux pas me permettre d'utiliser main() qui est très illégal
en C.


Je ne crois pas que c'est une bonne idée. Ou le C, ou le C++ est
déjà assez difficile pour un débuttant. Essayer de les enseigner
tous les deux en parallel, alors, me semble un gageur.

De plus, le prototype détaillé
int main ( int argc, char *argv[] )

qui est compatible en C et en C++

est un petit peu surchargé pour le 'premier programme'


Tout à fait d'accord là, vue l'approche que j'ai ressenti. (Très
« pas-à-pas », une chose à la fois.)

l'objectif est d'avoir une vue dégagée de la page pour se
concentrer sur les notions de base.

Je suppose que le seul moyen de me sortir de cette impasse est
de présenter les deux versions séparément :
int main() pour le C++
et
int main(void) pour le C


La seule véritable solution, c'est de ne pas essayer de faire
les deux langages en parallel. Même s'il y a un sous-ensemble
commun, on ne programme pas de la même façon en C qu'en C++.

-- Je ne veux pas être plus royaliste que le roi, mais est-ce
que l'expression « point flottant » est réelement français ?
J'aurais dit « virgule flottant ». (Mais j'ai vu d'après
l'adresse email que tu es au Canada. C'est peut-être la
cause de la différence.)


Oui :)
Merci de la remarque, je n'y aurais jamais pensé seule :)

En fait, on utilise spontanément le terme anglais 'floating
point' ou 'float', autant dans les milieux anglophones que
francophones.


Tout à fait. Je l'ai reconnu tout de suite comme un anglicisme.
Ensuite, je me suis rappelé avoir rémarqué un adresse en .ca, et
je me posais la question...

En fait, au Québec, comme les américains et les canadiens,
nous utilisons un point pour séparer les décimale de la partie
entière dans les nombres, alors que vous utilisez une virgule,
c'est probablement pourquoi j'ai traduit différemment de vous.


Sans doute, en effet.

D'ailleurs, un des points qui apparaît assez tôt dans un bouquin
sur le C ou le C++ en français, c'est une indication que
contraire à ce qu'on fait de l'habitude, il faut bien utiliser
un '.', et non un ',', dans les constantes virgule flottante
dans le programme. Chose que tu as évidemment complétement
négligée (pour des raisons tout à fait compréhensibles).

Il me faudra donc une version francaise, une version
québécoise et une version anglaise... :)


Et une version wallone, et une version Suisse romande...

Dans le cas du français, et sans vouloir dénigrer mes amis
belges, canadiens, etc., je crois que la norme internationale
correspond au français de France. En général, je m'attendrais
plus à ce qu'un wallon comprend « quatre-vingt-dix » qu'à ce
qu'un français comprend « nonante ». (En anglais, la chose est
moins claire, mais dans le domaine technique, j'estîme que c'est
l'anglais des USA qui domine. Même si l'anglais qui s'enseigne
aux écoles en France est plutôt l'anglais britannique. De même,
les britanniques semblent avoir moins de problèmes avec
l'américain que vice versa.)

Mais ça concerne le langage en général. Le cas de « virgule
flottante » est bien particulier -- ça doit sonner vraiment
drôle à un québecois d'entendre « virgule flottante » pour une
signe qu'il écrit '.'.

-- Plus généralement : il ne faut jamais, jamais parler des
réels quand on parle des nombres dans l'ordinateur. Ça mène

fait. (Et je sais, ce n'est pas facile à dire à un débutant,
il y a des types dont tu n'as pas le droit de t'en servir,
parce qu'il faudrait un cour entier seulement pour apprendre
à s'en servir.)


oui c'est vrai rigoureusement.

mais je ne peux pas être trop précise dans le tout premier
chapître qui devrait s'intituler 'me debrouiller pour
comprendre le premier programme de ma vie', c'est déjà assez
difficile d'expliquer à un débutant sans ces technicalités.


Tout à fait. La solution la plus simple serait de ne rien dire
sur les virgule flottante au début. Sinon, je n'utiliserais
*jamais* le mot « réel » à leur égard. Je suppose que les élè ves
ciblés connaissent déjà la différence entre des réels et des
rationnels. Ils sont donc déjà au courant qu'il existe
différents types de nombres. Alors, les virgule flottante, c'est
un nouveau type, qu'ils n'ont pas encore vu. Et dont,
malheureusement, la façon de les écrire est identique à celle
des réels. (En fait, en France, on pourrait dire qu'on écrit
"1/2", si on veut un rationnel, "0,5", si on veut un réel, et
"0.5", si on veut un virgule flottante. Mais je crains que dire
que "0,5" n'a pas de « virgule », et que "0.5" en a une, n'est
pas pour rendre les choses plus claires non plus:-).)

Le chapître sur les boucles mentionne ce fait puisque ca a une
incidence sur l'utilisation de l'opérateur ==.

À votre suggestion, j'ajouterai un commentaire plus long, une
discussion, sur le sujet


Je ne crois pas qu'une longue discussion soit nécessaire.
Simplement an avertissement du genre « Attention : les virgule
flottant ne sont pas de réels. Ils ont un comportement assez
différent, dont il faut en tenir compte (et dont on parlera plus
en détail par la suite). C'est pour cette raison, d'ailleurs,
qu'on les appellera systèmatiquement virgule flottante, et non
réel. »

-- Je me méfie beaucoup d'un livre d'aujourd'hui qui parle
immédiatement, dans le premier chapitre, de char[] et
d'int[].


J'aime aborder la programmation avec un regard bas-niveau.


Je ne crois pas que ce soit une bonne approche. Et s'il était :
c'est quoi, exactement, le bas-niveau. L'assembleur ?
L'architecture machine ? Je trouve que dans un cursus
universitaire, un bon cour d'architecture machine et assembleur
ne fait pas de mal. Mais ce n'est pas par là que je
commencerais.

Ca permet aux élèves de tout de suite comprendre qu'ils vont
travailler avec une machine.


Ils s'en rendront compte assez vite, ne t'en fais pas. La
machine va faire ce qu'il a dit, non ce qu'il a voulu. Alors,
dès le premier ';' oublié...

Un accent particulier est fait sur l'utilisation faite des
espace-mémoire car c'est le plus gros problème chez les
débutants en programmation et c'est aussi ce qui leur permet
le plus rapidement de retomber sur du tangible.


Je suis pas sûr de comprendre. Est-ce que tu veux dire que le
plus grand problème chez les débuttants, c'est que leurs
programmes utilisent trop de mémoire ? Parce que là, je ne
serais pas de tout d'accord. Le plus grand problème chez les
débuttants (et bien trop non-débuttants aussi), c'est que le
code qu'ils écrivent n'est pas correct. Et la chose la plus
importante à leur enseigner, c'est comment écrire du code
correct ; c-à-d l'analyse, les tests...

Il faut dire aussi que c'est un livre qui présente le C et le
C++ (dans l'ordre).


Ce qui est plutôt un défaut, à mon avis.

Il est vrai que l'approche top-down est aussi nécessaire pour
devenir un développeur complet et la section architecture sera
consacré à ce sujet et utilisera plutôt les techniques
haut-niveau pour cadrer et simplifier l'expression.

Le type chaîne de caractères, c'est std::string en
C++, et un tableau d'entiers s'écrit std::vector<int>.


A mon sens, std::vector<int> est plutot le type 'chaine de
caractères de longueur variable'


Le type de chaîne de caractères, en C++, c'est std::string. Un
point, c'est tout. Naturellement, on peut les représenter avec
d'autres structures ; il y a des contextes où std::vector<char>
convient, et même des contextes où char[] est de l'ordre de
jour. Mais ce sont des contextes plutôt avancées, et le type par
défaut reste std::string.

et ce type ne fait pas directement partie du langage mais
d'une librairie complémentaire (la STL)


La bibliothèque, ici, n'est pas complémentaire, mais fait part
et parcelle du langage.

Avant la bibliothèque standard, la façon préférée à enseigner le
C++, c'était de le présenter d'abord avec ses classes à soi :
String, ArrayOf, etc. Et seulement par la suite expliquer qu'en
fait, ces classes-là ne font pas partie du langage, mais
qu'elles ont été écrites par le prof, afin de faciliter
l'introduction. (Voir, par exemple, le livre de Robert Martin.
Certainement le meilleur livre pour un débuttant dans l'époque
pré-standard.)

et encore une fois, le livre enseigne autant le C que le C++,
surtout dans les premières sections.


Et encore une fois : c'est une erreur fondamentale, qui ne peut
que semer la confusion parmi les élèves.

Le C++ c'est surtout le chapître sur les oo.

Il existe plusieurs manières de développer en C++,
- on peut travailler bas-niveau excepté pour l'architecture
globale du programme qui elle est basée sur les classes
- ou encore travailler de façon systématique avec les objets
du C++ autant que possible


C-à-d qu'on peut utiliser tout le langage, tel qu'il a été conçu
pour être utiliser, ou on peut se restreindre de façon
artificielle à un petit sous-ensemble, et pas le plus
intéressant des sous-ensembles non plus.

Surtout dans les devoirs, dans les réponses proposées :
un prénom ou un nom ne se stocke jamais dans un «
tableau char[] ».


Vous avez raison, il me faut trouver des exemples plus
appropries pour représenter les chaînes de longueur constante.


Plus simple : tu présentes std::string.

-- L'encodage ASCII ne fait pas partie du C++, et de toute
façon, la façon que sont encoder des caractères est un thème


Effectivement, mais il fait partie de ce qu'un élève a besoin
ou croit avoir besoin pour écrire ses premiers programmes.


L'élève n'en a certainement pas besoin. Et s'il croit en avoir
besoin, il faut lui changer cette croyance. À peu près le seul
moment où je m'intéresse à l'encodage, c'est quand j'écris des
modules de traduction du code (UTF-8 de et vers autre chose, par
exemple). Et alors, il n'est jamais question de l'ASCII,
encodage que je n'ai pas vu depuis des ages, mais des encodages
comme ISO 8859-n, UTF-8, et UCS-4. Et même plus d'une fois :
EBCDIC. Mais ce sont des applications pour des spécialistes ; ce
n'est pas le genre de chose qu'on va faire dans la première
chapître d'un livre introductoire.

Le chapitre 1 n'est pas une introduction au C++ mais une
introduction a 'Je lis ou j'ecris mon premier programme et je
le comprend'

Si je dis à l'élève :

tu peux construire une chaîne de caractère avec un tableau de
char,


Et si tu lui expliquais simplement qu'une chaîne de caractères,
c'est une chaîne de caractères ?

je dois lui expliquer comment assigner un caractère à cet
espace-mémoire (et toutes les façons de le faire).


char ch = 'a' ;

Où est le problème ? D'où est-ce qu'il faut connaître
l'encodage ?

Je dirais même que si l'élève commence à vouloir traiter ch
comme un entier, il y a un problème. Il en est un, évidemment,
mais ça fait partie de l'abstraction dont on n'a pas besoin de
tenir compte.

Dans les bouquins de langage C, c'est toujours abordé assez
rapidement, avec la table ascii en annexe.


C'est dans aucun des livres C que j'ai chez moi. Mais c'est peu
dire : la seule livre C que j'ai, c'est le K&R (première
édition). Mais c'est dans aucun des livres C++ non plus. C'est
quelque chose sans intérêt.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
Andre Heinen wrote:
On 23 Jun 2005 09:31:00 -0700, wrote:

Gabriel Dos Reis wrote:

Des bouquins sur C++, il y en a déjà plein. Ce dont la
communauté a besoin, c'est de bons bouquins. Sans excuses :-)


Il y a même quelques très bons bouquins.


En français? Peux-tu nous en donner quelques exemples? Je ne
sais jamais quoi conseiller aux gens.


En français, je ne sais pas. Si des gens posent la question en
exigeant que les livres soient en français, je crains que le
seul conseil qu'on puisse leur donner, c'est d'apprendre
l'anglais. (C'est dommage, mais je crains que c'est comme ça.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Marc Boyer
Nadine St-Amand a écrit :
wrote:
Nadine St-Amand wrote:
(Je n'ai regardé
que quelque pages du chapitre 1.)


Ce n'est pas vraiment le meilleur chapître,
il vaut mieux consulter les chapitres plus illustrés.

Puisque vous avez consulté le chapître le moins représentatif du livre,
je vous invite plutôt à consulter parmi ces sections
(qui n'ont que quelques pages chacunes) :

sur l'allocation dynamique :
http://cplusplus.cdoc.biz/download_fichier.php?f=1%205%20memoire%20dynamique%2013.pdf

sur les pointeurs avancés :
http://cplusplus.cdoc.biz/download_fichier.php?f=6%201%20pointeurs%20avance%2016.pdf

ou sur les pointeurs débutants :
http://cplusplus.cdoc.biz/download_fichier.php?f=1%203%20pointeurs%205.pdf

ou sur les recursives :
http://cplusplus.cdoc.biz/download_fichier.php?f=4%204%20recursive%2030.pdf

qui sont plus représentatifs de la technique d'enseignement dont
j'essaie en vain de faire part dans ce newsgroup.


J'ai parcouru ces documents.
Ce que je comprend de votre "méthode d'enseignement", c'est une
illustration constante (et joliement faite) de ce qui se passe
en mémoire. En fait, rien de nouveau sur le soleil, que
le même genre de dessins que tous les enseignants font au tableau,
mais avec des dessins de qualité, une charte graphique, de couleurs,
etc.

Mais je reviens de ce genre de choses: déjà, pour le C,
je trouve cela limité comme approche, mais pour le C++, je
trouve ça inadéquat.

Un exemple sur les pointeurs: très vite, vous présentez un
pointeur comme quelque chose qui contient une adresse. Mais
ce n'est pas ça qui est intéressant du point de vue sémantique.
Ce qui est important, c'est qu'un pointeur désigne une autre variable.
Qu'il stocke son nom, son adresse ou la ligne de définition dans le
code, on s'en moque en première approche.
D'autant ensuite que p++ n'augmente pas l'adresse de 1
(ce qui parait logique si on s'appuies sur la représentation)
mais sur la prochaine variable (dans un tableau).

Donc, dans l'allocation dynamique, ce qui est important,
c'est qu'on crée une nouvelle variable.
Ensuite, dans l'allocation dynamique C++, le petit
schéma oublie une notion fondamentale: l'appel du
constructeur par défaut.
Si pour le C une simple représentation de la mémoire permet
de présenter ce qui se passe, c'est complètement faux en C++.

Là, votre cours souffre d'être un cours de C/C++.

et ce type ne fait pas directement partie du langage mais d'une
librairie complémentaire (la STL)


Ridicule. Dans ce cas, on oublie string.h dans le C. Dès lors,
rien de prédispose le codage des chaines de caractère par un
char*.
Et sans "librairie complémentaire", pas d'E/S...

et encore une fois, le livre enseigne autant le C que le C++,
surtout dans les premières sections.


Qui trop embrasse, mal étreind.

Le C++ c'est surtout le chapître sur les oo.


Ce qui est une erreur trop communément faite.

Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?


1 2 3 4 5