Salut à tous, premier message de ma part sur ce forum !
J'ai commencé à suivre le cours du language C++ sur OC, puis après un mois de travail, j'ai un peu relâché la cadence, au point d'arrêter. Le problème étant le format du cours : je préfèrerais avoir un livre à coté et programmer en meme temps, plutôt que de switcher entre Edge et Qt/CodeBlocks à chaque fois.
J'ai appris qu'il y avait un format papier au cours disponible sur OC, mais si je ne me trompe pas, le cours est un peu ancien, et sur plusieurs pages de ce même forum, plusieurs utilisateurs disent qu'il y a des erreurs dans ce cours et qu'il nous apprends mal le language (mauvaises méthodes, choses que l'on devra désapprendre, trop dépendant du C,...).
Du coup, je fais appel à votre aide et vos connaissance pour me conseiller un livre pas trop cher (en dessous des 25€ serait ideal mais si il vaut plus, proposez quand meme je ne suis pas du tout fermé sur le prix). Je suis capable de lire l'anglais et le français.
C++ Primer (la dernière édition) de Stanley B. Lippman, je te mets le lien amazon sur la 5ème édition (à ma connaissance c'est la dernière). Ce bouquin est à ce jour considéré par la plupart des programmeurs C++ expérimentés comme étant le meilleur cours sur C++ disponible, même s'il date un peu.
A ne surtout pas confondre avec C++ Primer plus (qui existe aussi), qui n'est pas de Lippman, et qui pour ce que j'en ai entendu dire, serait plutôt mauvais.
Bien sûr, c'est en anglais, mais de toutes façons, l'anglais est un préalable, car 90% de la doc sur c++ est en anglais, donc...
Perso j'ai appris avec le Lippman aussi, dans sa dernière édition, et je l'ai trouvé vraiment bien. Il est accessible, mais ne fait aucune concession quant à la rigueur du code. Il est en effet actuellement reconnu comme le meilleur livre disponible, pour ce que j'en sais.
Ce qui est chouette, c'est que je n'ai meme plus à faire ma propre promo...
Au moins, ca évite aux gens de croire que je me surestime
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
@koala01 quand le produit est bon, il n'a pas besoin de pub Au fait, tu n'avais pas un projet de cours de c++ dans tes cartons?
Si, mais, je souffre du meme mal que gbdivers à ce sujet
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
@koala01 Ahaha il faut rendre à César ce qui appartient à César ;p mais on va y aller doucement parce que sinon à ce rythme, tu vas aussi avoir en commun avec gbdivers un sens un peu trop aigu de l'ego x) Manquerait plus que tu nous expliques à quel point tu aimes Qt
@YES, man: Le cours d'OC est mauvais (y compris la partie sur Qt), pas seulement parce qu'il est obsolète, il contient aussi beaucoup d'erreurs, d'absurdités et de mauvaises pratiques et c'est aussi valable pour la partie sur Qt.
Particulièrement sur la partie Qt, il néglige complètement un point fondamental de Qt: le système de gestion de la mémoire adopté par Qt, qu'on appelle ordinairement le système parent/enfants, or c'est un point crucial si on veut écrire une application Qt qui tient un tant soit peu la route.
Il est par ailleurs complètement dépassé, depuis la version 5 de Qt, une nouvelle façon de connecter les signaux et les slots a été introduite, cette nouvelle façon de faire, évacue les mauvaises macros SIGNAL(...) et SLOT(...), et vérifie la compatibilité de la connexion à la compilation. Ce qui fait que si tu tentes de connecter un signal et un slot qui sont incompatibles, avec l'ancienne méthode, ça ne marche pas et va comprendre pourquoi ? avec la nouvelle méthode, ça ne compilera pas et tu auras un message d'erreur qui te dira explicitement que la connexion est impossible parce que les types des arguments du signal et du slot ne sont pas compatibles.
Encore un autre aspect fondamental, totalement négligé par le cours d'OC, plus une erreur est détectée tôt, plus elle sera facile à corriger. Des erreurs, on en fait tous, même les plus expérimentés. Croire que parce qu'on est expérimenté, on ne fera pas d'erreur confine à la bêtise pure et simple. La différence, c'est qu'avec l’expérience, on les repère plus vite, on les corrige aussi plus vite, et on utilise des techniques de conception qui nous mettent à l'abri des erreurs les plus communes (par exemple, le recours systématique aux pointeurs intelligents, SOLID,...). Dans la chasse aux erreurs, le compilateur peut être un allié très précieux à condition d'apprendre à bien le configurer pour qu'il soit intraitable et ne tolère pas le plus petit écart. Si le compilateur rejette, c'est que le code n'est pas correct, ce qui ne veut pas dire que s'il l'accepte, il est correct. Cela veut juste dire qu'on peut passer à l'étape suivante à savoir les tests. C'est comme ça qu'on arrive à écrire des programmes de plusieurs centaines de milliers de lignes qui ne se plantent pas lamentablement au premier imprévu. Contrairement à ce que laisse croire le cours d'OC, la programmation est un art difficile.
Je suis tout à fait d'accord, c'est pas après pas que les choses avancent. Or le tutoriel d'OC fait sauter beaucoup de pas. Donc il est à déconseiller. N'es-tu pas d'accord @YES, man ?
C'est comme ceux qui passent leur temps à critiquer les riches, et qui se plaignent ensuite d'être pauvres.
Personnellement, quand quelqu'un m'enrichit, je lui dis "merci" au lieu de le critiquer.
(Je suis pas sur que l'on n'est pas complètement HS dans cette discussion.)
Je suis d'accord avec toi. Mais alors, du coup, quelqu'un qui se fait de l'argent (vente de livres ou d'abonnements) sur le dos des débutants (qui n'ont pas le recul pour juger de la qualité d'une formation) en vendant un produit que beaucoup de professionnels sur le forum considèrent qu'il nuit plus qu'il n'apporte de bonnes choses, il faut lui dire merci ou il faut le critiquer ?
Réfléchis un peu qui a le plus a gagner a conserver une formation, même si elle est de mauvaise qualité.
int21h, en même temps , avec ta dernière phrase, c'est le meilleur moyen de décourager ceux qui ont besoin d'être encouragé.
C'est pas après pas que les choses avancent.
Je suis d'accord qu'il faut motiver les débutants, mais pas n'importe comment.
Si on laisse à penser que la programmation est une activité qui peut être apprise en dilettante, un peu comme le crochet ou le tricot, le débutant ne tardera pas à se rendre compte que l'on a dit des conneries, et nous perdrons toute crédibilité.
Si quelqu'un a besoin de motivation, il faut qu'elle soit sincère, et qu'elle se rapproche d'avantage de celle que l'on donnerait pour inciter quelqu'un à devenir sportif de haut niveau : "tu peux y arriver, tu verras, c'est vraiment chouette, mais il faut que tu donnes le meilleur de toi même, et il faudra sans doute t'accrocher à certains moments. Et tu verras, tu ne regretteras jamais de t'être accroché".
Et puis, c'est difficile, mais ce n'est pas impossible. La preuve : j'y suis bien arrivé, moi
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
@YES, man: Le problème est que le cours d'OC à une excellente approche pédagogique (la forme), et ce n'est pas ce qu'on lui reproche.
Ceux qui le lisent, beaucoup de débutants (donc des personnes maléables) vont prendre de mauvaises habitudes, qui nuira gravement à leur apprentissage par la suite, lorsque les réelles difficultés apparaitrons.
Donc, autant éviter les pièges dès le debut, quitte à ce que soit plus difficile ou contraignant au début, lorsque les difficultés apparaitrons, ils seront prêt à franchir l'obstacle sans dommages.
Oui Deedolith, je suis d'accord avec toi. Exprimé ainsi, les choses sont beaucoup plus raisonnables, et là je peux acquiescer,
Autre chose :
Personnellement, si j'avais écouté toutes les critiques négatives que j'ai entendues sur le cours du Grand Mathieu, je n'aurais pas appris tout ce que j'ai appris. Par exemple, grâce à Mathieu, j'ai formellement compris ce qu'est un pointeur, et je n'avais trouvé de définition aussi clair dans aucun autre cours de c++ aussi longtemps que je m'en souvienne
En plus , le côté jovial et chaleureux de son cours, est juste génial. Il encourage l'apprentissage. Quand on tient compte du fait que que l'humour joue en faveur de l'apprentissage, on voit les choses autrement.
Avoir un cours austère et trop sérieux, ça n'aide pas tout le monde.
Mais je fais la part des choses, et suis conscient grâce à int21h, gbdivers, koala, ksasspeuk, deedoolith qu'il ne faut pas uniquement s'en remettre à cela , et qu'il faut approfondir la question en allant vers le C++11 et 14, qui résolvent d'importants challenges si j'en crois ce que les experts ont dit sur ce forum
Amitiés à tous
ps :
Voici un passage du cours de Mathieu sur commet apprendre à utiliser la documentation de Qt :
à lieu seul, il comprend au moins 3 moments sympas :
Au final (ouf !), pour utiliser setValidator, on peut procéder ainsi :
QValidator *validator = new QIntValidator(0, 150, this);
monChamp.setValidator(validator);
… pour s'assurer que la personne ne saisira qu'un nombre compris entre 0 et 150 ans (cela laisse de la marge !).
La morale de l'histoire, c'est qu'il ne faut pas avoir peur d'aller lire la documentation d'une classe dont a besoin la classe sur laquelle vous travaillez. Parfois, il faut même aller jusqu'à consulter les classes filles.
Cela peut faire un peu peur au début, mais c'est une gymnastique de l'esprit à acquérir. N'hésitez donc pas à sauter de lien en lien dans la documentation pour arriver enfin à envoyer à cette $%@#$#% de méthode un objet du type qu'elle attend !
- Edité par pseudo-simple 25 avril 2017 à 14:14:36
Merci beaucoup, j'ai fait des recherches pendant ces quelques jours d'absence de mon côté.
Finalement je vais acheter le livre de Lippmann, puis celui de Dunski si possible.
Comme les avis sont partagés sur le cours OC, je compte continuer à suivre ce cours mais en complément du livre (juste pour pouvoir tester ce que j'apprends du livre, voir si cela correspond).
En tout cas je vous remercie beaucoup, programmer est vraiment une activité enrichissante, j'espère pouvoir un jour en faire mon métier.
Le point de vue de gbdivers sur le C++11/14 comme langage plus simple que le C++ de base, est un point de vue intéressant. J'aime bien ton état esprit MathisDecaille
- Edité par pseudo-simple 26 avril 2017 à 15:00:28
Que l'on soit bien d'accord : le C++11 contient plus de choses que le C++03, le C++14 contient plus de choses que le C++11, etc. (Pour des raisons de rétrocompatibilité, on ajoute plus de choses au C++ qu'on en retire). Donc "plus simple" n'est pas totalement vrai.
Ce qui est correcte de dire, c'est que le C++ "moderne" (qui commence avec le RAII, donc avec le C++03) permet d'écrire du code safe. Et plus on utilise une norme récente, plus il est possible d'extraire une sous-partie du C++ dont l'apprentissage est plus facile, plus safe et permet de répondre a 99% des besoins des devs C++.
Cela veut dire que si on reprend un cours de C++03 et que l'on ajoute la partie C++11 (comme font beaucoup de cours de C++ "mis à jour pour le C++11"), alors le cours sera plus compliqué. Parce l'approche pédagogique n'aura pas été mise a jour.
Le point de vue de gbdivers sur le C++11/14 comme langage plus simple que le C++ de base, est un point de vue intéressant. J'aime bien ton état esprit MathisDecaille
- Edité par YES, man il y a environ 1 heure
Une version plus avancée n'implique pas que c'est plus compliqué, et c'est même souvent l'inverse. Que préfères-tu ? - Manipuler des tableaux "C-Style" et trimbaler leur taille partout où tu en as besoin ? Ou manipuler les conteneurs de la STL (std::vector et/ou std::array) qui embarquent leur taille en interne ? - Déclarer des variables de type compliqué ? Ou laisser le compilateur déduire le type via auto ? - Faire des allocations dynamiques à la main avec toutes les contraintes que ca impose ? Ou utiliser les classes de la STL qui font le travail pour toi (std::unique_ptr et/ou std::shared_ptr) ? ect ect ... (la liste est longue).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Discord NaN. Mon site.