Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refonte du tutoriel C++ de M@teo21 !

Un ldz prévue pour décembre !

    14 juin 2010 à 20:12:28

    Salut,

    Je suis parfaitement d'accord avec toi Nivl. Même sans parler d'argent, il faut bien différencier le C du C++ et cette suite illogique des cours n'arrange pas les choses. Surtout qu'il suffirait presque de faire un copier-coller de la partie I du cours sur le C vers le cours de C++. De plus, avec cette présentation, on a l'impression que le langage C ne sert à rien sinon à apprendre le langage C++.
    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2010 à 20:22:39

      Citation : M@teo21

      Je ne suis pas sûr de comprendre où vous voulez en venir :

      - les membres confondent allègrement C et C++ : bouh c'est la faute du méchant mateo21 qui entretient la confusion. Autant je ne dis pas que je n'ai pas de tord dans cette affaire, autant il s'agirait aussi de ne pas me mettre tout sur le dos. Bien avant que le sdz existe, les gens confondaient. Il en est de même pour Java et Javascript qui n'ont rien à voir.

      Alors qu'est-ce que JE peux faire pour ça ? Proposez (voire aidez !) !
      Clairement, je n'ai pas le temps et encore moins la force de pondre une intro pour débutants sur le C++, pour indiquer qu'il faut installer les mêmes logiciels, pour réexpliquer les variables et tout le tintouin.

      Faut-il copier-coller bêtement (à quelques exceptions près) la première partie du tuto de C par exemple ? Est-ce bien utile ? Est-ce que ça va pour autant d'un coup par magie enlever toute confusion dans la tête des lecteurs ?



      Je suis d'accord, les membres qui te mettent tout sur le dos ont torts de le faire de cette manière. Pour améliorer l'introduction, il faudrait juste rajouter une phrase dans l'introduction pour bien prévenir que ce n'est pas exactement le même langage, en la mettant un peu en valeur. Ce serait déjà pas négligeable : le fait qu'ils sont biens différents ne sera pas absent.
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2010 à 20:32:20

        S'il suffisait d'indiquer dans l'intro que ce sont deux langages différents pour qu'on ne reproche plus cette confusion, ce serait trop facile ! Hélas, je veux bien le faire, mais ça ne changera rien aux critiques qui sont formulées.

        Les gens, idéalement, aimeraient voir une approche à partir de zéro sur le C++... mais elle consisterait en grande partie à reprendre les parties I et II du tuto de C, ce qui en ferait un cours très conséquent et il y aurait beaucoup de redondance. Je n'ai pas la force de reformuler tout !
        • Partager sur Facebook
        • Partager sur Twitter

        If you'd like to join us, read "How do we work at OpenClassrooms"! :)

          14 juin 2010 à 21:22:31

          Auriez-vous appelé le cours de C "Apprenez à programmer en C++ (partie 1)" si vous y aviez pensé avant ?
          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2010 à 22:50:44

            Bien que cela fut déjà proposé, je pense que parler des std::vector est un très bonne chose. En effet, quand on lit le tutoriel C++, et qu'on arrive à Qt, on à l'impression de bien connaître les bases du C++, que Mateo a été plutôt explicite, et que ce qui reste à voir est assez mineur. Néanmoins la plupart des membres vont utilisés des tableaux dont l'allocation se fera "manuellement" alors que c'est pas la peine.
            En faite, je pense qu'il faudrait introduire (avant de commencer Qt) un paragraphe redirigeant vers le chapitre annexe, car on le lit pas forcément automatiquement.
            Et préciser qu'il reste encore de nombreuses notions à apprendre. Le tuto en annexe, le fait déjà en grande partie, mais il devrait être introduit avant Qt je pense.
            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2010 à 2:59:49

              Pour ma part, je suis partisan d'une approche du C++ sans passer par le C. Toutefois, je ne plaiderais pas pour une refonte du tuto du site par M@teo21 puisque je comprends parfaitement que cela représenterais une charge de travail trop importante et parce que je pense que ce n'est pas un frein pour quelqu'un désirant maitriser le C++, il suffit de se renseigner autours, il y a amplement assez d'information sur le web. Et puis ce sont ces deux tuto (C et C++) qui m'ont fait faire mes premiers pas dans la programmation et j'ai toujours du mal à critiquer le maître spirituel ^^

              En revanche, s'il doit y avoir un LdZ sur le C++, je pense qu'il faut absolument éviter de reprendre la structure actuelle, et je ne dis pas ça pour une raison idéologique, mais plutôt pour des considérations marketing. Le risque encouru par un lecteur du tuto tel qu'il est actuellement est, cela a déjà été dit, d'en arriver à produire du code bâtard, à cheval sur le C et le C++. Or, je pense qu'un client achetant un LdZ traitant du C++ s'attend logiquement, et avec raison, à apprendre le C++. Qu'arrivera-t-il s'il se pointe sur le forum C++, tout fier de ses compétences nouvellement acquises, et qu'un membre aigri comme moi lui déclare d'un ton sec à la lecture de son code : « Va poster dans le forum C » ? Bref, désastreux en terme d'image de marque, le client (qui n'en sera plus un) ressortira avec l'impression qu'on s'est moqué de lui en écrivant C++ sur la couverture.
              Deuxième raison, j'ai cru lire quelque part que les LdZ allaient être disponibles dans de grandes surfaces, le cercle des consommateurs va donc s'agrandir, les acheteurs potentiels n'auront pas forcément entendu parler du SdZ et feront leur choix en magasin. Du coup, leur imposer l'achat du bouquin sur le C représente une dépense supplémentaire et joue en faveur de la concurrence. En plus, d'expérience, quand on apprends quelque chose avec un bouquin c'est toujours plus agréable de ne pas avoir à se référer à un autre livre, ça ne fait pas le même effet qu'une recherche sur Internet.

              Je reviens sur le tuto maintenant, puisque c'est le sujet de cette discussion.
              Tout d'abord, je le répète, je ne me prononcerais pas pour de gros changements dans le cours actuel. Certes, il est nécessaire d'améliorer certaines choses, mais tout bien réfléchit, cette continuité entre le C et le C++ a, à mon avis un avantage (Je parle surtout de mon expérience personnelle ici, mais je pense que beaucoup de zéros se reconnaitrons).
              Quand j'ai commencé à suivre le tuto sur le C, ce qui m'intéressait, ce n'était pas le C en lui même, c'était la programmation. A la rigueur, plutôt qu'« Apprenez à programmer en C ! » le tuto aurait pu s'appeler tout simplement « Apprenez à programmer » ça n'aurait fait aucune différence puisque je ne m'imaginais absolument pas me retrouver un jour à lire la norme du C++ ou le code source de boost. Il ne s'agissait que d'une expérience. Ce qui m'a plu et qui m'a fait suivre le cours jusqu'à la fin, c'est le côté ludique, les chapitres s'enchainent naturellement et sans avoir besoin de peiner pour comprendre les concepts de base. Finalement, le passage au C++ n'a pas été vécu comme le passage d'un langage à un autre (ce qui induit beaucoup de monde en erreur), mais comme l'élargissement des connaissances déjà acquises, la découverte de nouveaux aspects de la programmation.
              C'est à mon avis cela qui fait la grande force du tuto et qu'il ne faut surtout pas perdre : il s'adresse à des gens qui n'ont aucune expérience ni information sur le monde de la programmation et qui veulent le découvrir sans s'embarrasser avec des considérations sur la norme, les bonnes habitudes de programmation et tout le reste. Ça, c'est typiquement le genre de choses qui s'acquière ensuite, une fois que le grand saut a été fait et que la décision a été prise de faire de la programmation un passe-temps/passion/tout ce que vous voulez.
              Pourtant, il y a des zéros qui viennent sur ce site pour apprendre spécifiquement le C++, on le voit lorsque l'un d'eux pose cette question récurrente : « Faut-il apprendre le C pour faire du C++ ». C'est pour eux qu'il me semble qu'un tuto alternatif s'impose, partant véritablement de zéro sans passer par le C. Pour anticiper la remarque déclarant que beaucoup de choses se trouvant dans le tuto C vont revenir, je dois dire que je ne suis que partiellement d'accord avec cet argument. Selon moi, un tuto C++ partant de zéro ne reviendrait pas à réécrire les parties fondamentales concernant la programmation en C++ déjà présentes dans le cours sur le C, mais à remplacer ces dernières par un équivalent plus adapté en C++. En effet, bon nombre de fondamentaux du C ne sont plus nécessaires à des débuts en C++, je pense notamment aux pointeurs.
              Quelqu'un a dit précédemment qu'il faudrait expliquer une seconde fois les tableaux ; je ne suis pas d'accord, faisons plutôt découvrir std::vector et boost::array (petite parenthèse pour dire qu'à mon avis boost ne devrait pas être présentée comme librairie annexe, mais comme complément indispensable de la STL, ou tout du moins dans les parties qui seront intégrées au prochain standard). L'absence de pointeurs pose problème ? Pas si l'on introduit les références et en annexe (ou dans une partie pour les débutants confirmés) boost::*_ptr/std::auto_ptr. Pour être un peu extrémiste dans mes propos, je pense que l'on peu très bien se passer de la boucle for (ou bien la mettre en notion complémentaire) et la remplacer par std::for_each ou BOOST_FOREACH. L'idée derrière tout ça serait de limiter au maximum les références au notions héritées du C (avec évidement quelques passages obligés : while, int, etc) pour présenter le C++ comme un langage à part et orienté objet.
              Je n'ai pas de structure bien définie à présenter mais voilà un résumé improvisé de comment j'envisage le monstre :
              • Partie I : Découverte du C++
                • 1) Petite histoire du C++ (avec mention de la prochaine norme bien sûr)
                • 2) Présentation des outils : compilateur, STL et boost
                • 3) Présentation des types de base : int, float, char,... , std::string, boost::array (oui oui, vous avez bien lu) et opérations.
                • 4) Hello World ! interactif, présentation de std::cin/cout.
                • 5) Premier objet, quelque chose de simple comme une calculatrice :-° présentation des attributs/méthodes (un attribut pour retenir le dernier résultat) et fonctions statiques (convertisseur euro intégré par exemple).
                • 6) Dans la lancé sur les objets : constructeur, destructeur, méthodes constantes (abordé trop tard à mon avis dans le tuto C++), références.
                • 7) Structures de contrôle : conditions et boucles (ou en deux chapitres distincts, mais je n'ai jamais trouvé ceux du tuto C très compliqués.)
                • 8) TP : RPG (inspiré du cours C++), introduction de std::map (choix des cibles), (j'aurais aimé ajouter std::list ici, mais il faut lui trouver une utilité ^^)
              • Partie II : Approfondissements
                • 1) Héritage
                • 2) Polymorphisme (en ne se servant que des références pour l'instant)
                • 3) Surcharge des opérateurs
                • 4) Classes de pointeurs : boost::shared_ptr, boost::weak_ptr, std::auto_ptr,... (et retour sur le polymorphisme)
                • 5) Gestion des exceptions
                • 6) Les notions essentielles que j'ai oublié à cause de la fatigue.
              • Partie III : Pour aller plus loin (partie fourre-tout)
                • 1) Allocation dynamique
                • 2) Template (éventuellement en plusieurs chapitres)
                • 3) Boost::function, boost::variant, std::bind1st, les algorithmes courants, bref je ne sais pas trop ce qu'il pourrait être intéressant de présenter dans le cadre de ce cours, mais élargir sur les possibilités de ces bibliothèques ne me semble pas du luxe.
                • 4) Pointeurs (les vrais cette fois)
                • 5) Amitié (je ne suis pas fan c'est pour ça que ça se retrouve ici, pareil pour variables static/globales dont il faut toucher un mot quelque part)
                • 6) Préprocesseur (optionnel, et encre très rapidement)
                • (intégration éventuelle du tuto Lecture/Écriture dans des fichiers de Xavinou pour réétablir l'équilibre avec le C)
              • Partie IV : SFML(placé en 4e position pour l'exemple, mais devrait en réalité être la 3e partie)
                • 1) Module graphique (je ne détaille pas)
                • 2) Module audio
                • 3) Module réseau ? :D

              Ce n'est bien sûr qu'un exemple de ma vision des choses, mais il y a plusieurs choses à noter :
              Contrairement à ce qui a été dit plusieurs fois et qui se retrouve dans le plan d'iNaKoll, je pense qu'il faut beaucoup parler de la STL et de boost dès le début, en faisant souvent des références à la doc pour que le lecteur prenne rapidement le réflexe de chercher et d'utiliser les outils à sa disposition et non d'essayer de les créer. On ne peux bien sûr pas parler de tout, mais se restreindre à <iostream> et <vector>, c'est pour moi une mauvaise idée. Mieux vaut tout de suite montrer la roue, comme ça si l'on veux la réinventer, il y a moins de chance qu'elle soit carrée. ^^
              D'autre part, je crois que l'OO doit être directement mis au centre de l'apprentissage, encore une fois pour prendre de bon réflexes et ne pas se retrouver avec des codes qui tiennent plus du C.
              En ce qui concerne les template, je ne crois pas utile de leur consacrer une partie entière. Certes c'est une spécificité importante du C++, c'est pratique tout ça, mais pour un débutant ça n'a pas grand intérêt. Il les utilise certes avec la STL/Boost mais ne les crée que rarement lui-même.
              Enfin, je suis d'accord pour faire étudier une lib annexe, mais je suis sceptique face à Qt, parce que cette bibliothèque est tellement imposante qu'elle en arrive à transformer le langage (certains débutants croient que Qt n'est pas codé en C++ standard). Finalement, on se retrouve à utiliser les classes Qt (qui remplacent la STL : QString, QVector,...), la syntaxe Qt (signal/slot/emit), en bref le langage Qt.
              La SFML au contraire est beaucoup plus proche de ce que l'on peux réaliser à la sortie du tuto C++ : on y repère facilement héritage, polymorphisme et autres template. En plus le code source et la doc sont clairs, le tout est simple d'utilisation et c'est une lib qui est de plus en plus connue (avez vous noté que la dernière version de Code::Blocks vous permet de créer un « SFML project » :-° ). Donc ça me semble être une alternative intéressante à la SDL (présentée dans le tuto sur le C).
              Pour conclure, ce que j'ai présenté s'adresse à ceux qui veulent apprendre le C++ directement, et qui ont donc une idée précise concernant leur projet d'apprentissage. C'est pour cela que je néglige volontairement tout ce qui concerne le bas niveau, fonctionnement de la mémoire, etc. Pour ceux qui veulent découvrir la programmation, passer par le tuto sur le C est à mon avis la meilleure solution.

              C'est bien beau tout ça. Quand est-ce que tu te met au travail ?

              (en réaction au « Proposez (voire aidez !) ! », je propose d'aider)
              Je ne vous cache pas que je suis un peu désœuvré en ce moment, donc ce n'est pas le manque de temps qui m'arrête, mais plutôt mon niveau en C++... :(
              Pour faire court, je suis disposé à donner un coup de main pour proposer une alternative au tuto actuel sur le C++ (où pour jouer le nègre dans une refonte, j'ai du temps à tuer) s'il y a des membres motivés pour contribuer à élaborer un plan solide et éventuellement rédiger une ou deux parties (en tout cas corriger les bêtises que moi je vais écrire).

              Bon, je crois que j'ai dit tout ce que je pensais sur ce sujet... Dans tous les cas je vais m'arrêter là ou le serveur va rendre l'âme quand je vais envoyer le message :lol:
              Félicitation à ceux qui auront lu mon pâté jusqu'au bout, très courageux de votre part.
              A vous les studios.
              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2010 à 7:46:29

                Et puis, sur le site du zéro, on est censés apprendre à partir de zéro, or ce n'est pas le cas dans le cours sur le langage C++.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  15 juin 2010 à 9:09:57

                  Ni dans celui de PHP.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juin 2010 à 9:23:09

                    En même temps, on ne peut pas faire un livre sur le Html et sur le PHP, sinon, il ferait 1000 pages au minimum. Alors que refaire une introduction au cours de C++, ça c'est parfaitement faisable et serait beaucoup mieux que le cours dans son état actuel.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juin 2010 à 9:55:01

                      C'est vrai que moi je suis super intéressé pour une refonte du cours de C++ et apprendre de nouvelles choses. Je ne connaissais même pas les Templates ^^ .
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        15 juin 2010 à 10:07:31

                        Après lecture de la news Devenez auteur de cours sur le Site du Zéro et le Livre du Zéro, je me dis, pourquoi ne pas refaire un cour uniquement sur le C++ en présentant quelques notions avancé du paradigme oo comme l'abstraction, le polymorphisme, les templates...

                        Ensuite, quelques autres membre du site du 0 peuvent faire un cour dédié uniquement sur le framework Qt, en présentant la aussi des outils avancé, comme l'accès aux base de données, les gestionnaires d'accès et évènementielle, le nouveau module QtMultimedia, utilisation de QtCreator, etc...

                        Si des personnes semble intéressé, je me porte volontaire, pour un big-tuto sur Qt, à vous de voir.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 juin 2010 à 10:28:10

                          Je suis complètement d'accord avec De Passage.

                          J'aime beaucoup son plan, qui m'a l'air très intéressant (mais ne m'étant pour l'instant pas beaucoup éloigné des sentiers de la programmation battus par M@teo21, il y a beaucoup de notions de C++ que je ne connais pas encore ; je ne me prononcerais pas sur le fond de son plan).

                          Par contre, comme apparemment c'est le souhait de plusieurs membres confirmés de "refondre" le tuto du C++, il semble indispensable qu'une telle transformation ait lieu un jour (car comme le souligne De Passage, c'est une condition indispensable pour un futur LdZ sur le C++). Mais je comprends tout a fait le manque de courage de M@teo21 à tout réécrire quelque chose qui roule...

                          En effet, une telle reconstruction prendra beaucoup de temps et doit être planifié à l'avance. Je trouve toutes les idées de ce topic très louables, mais pour l'instant, je les vois mal se réaliser concrètement. Pour que le projet puisse prendre forme, il faut qu'on organise la chose.

                          Et pour cela, il faut commencer par résoudre un certain nombre de problématiques :

                          Faut-il écrire un tuto "de zéro" en reprenant des cours déjà existants, en particulier celui de m@teo21 ? Ou tout réécrire ?

                          En effet, si on fait un tuto sur le plan que propose De Passage, il faudra presque tout réécrire...

                          Le nouveau tuto prendra-t-il la place de celui de M@teo21, ou restera-t-il dans les "tutos des zéros non-officiels" ?

                          Autre question épineuse qui ne peut se résoudre sans grande discussion avec le maître du tuto en question...

                          Dans tout les cas, si on décide de réécrire le tuto, en partie ou entièrement, cela ne se fera pas tout seul.
                          Ainsi je propose de créer un comité motivé pour (ré)écrire le tuto. Car non seulement la charge de travail d'une telle entreprise ne peut être géré seul (sauf si on beaucoup de temps et de courage ^^ ) mais il faut aussi éviter le piège d'un big tuto très bien commencé mais qui ne finira jamais (comme c'est le cas de pas mal de bigs tutos non-officiels actuellement :( )
                          Enfin, il me semble indispensable que le futur plan d'un tel tuto soit validé ici par les membres, et/ou par M@teo21. On a ici une communauté très au courant sur les notions du C++, il serait bête de ne pas profiter du savoir de chacun. Et comme tout le monde ne peut pas écrire, on peut au moins élaborer le plan tous ensemble. Afin d'être certain de partir dans la bonne direction.

                          Mais à mon avis si on planifie pas la chose, on décollera jamais.

                          Qu'en pensez-vous ?

                          Je ne sais si un tel projet aura l'aval des Grands Gourous, mais je me dis que dans tous les cas, il faut qu'on planifie ce projet dès maintenant si on veut voir un jour un beau cour de C++ qui part de zéro :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            15 juin 2010 à 10:40:57

                            Citation : Abdelite

                            Après lecture de la news Devenez auteur de cours sur le Site du Zéro et le Livre du Zéro, je me dis, pourquoi ne pas refaire un cour uniquement sur le C++ en présentant quelques notions avancé du paradigme oo comme l'abstraction, le polymorphisme, les templates...

                            Ensuite, quelques autres membre du site du 0 peuvent faire un cour dédié uniquement sur le framework Qt, en présentant la aussi des outils avancé, comme l'accès aux base de données, les gestionnaires d'accès et évènementielle, le nouveau module QtMultimedia, utilisation de QtCreator, etc...

                            Si des personnes semble intéressé, je me porte volontaire, pour un big-tuto sur Qt, à vous de voir.



                            C'est exactement ce à quoi j'avais pensé, on pourrait y faire :

                            Une partie "Les bases du framework"


                            Avec le tuto actuel de M@teo

                            Une partie "Mise en place, technique"


                            http://www.siteduzero.com/tutoriel-3-3 [...] l-studio.html
                            http://www.siteduzero.com/tutoriel-3-3 [...] ement-qt.html
                            http://www.siteduzero.com/tutoriel-3-1 [...] -avec-qt.html
                            http://www.siteduzero.com/tutoriel-3-2 [...] sans-dll.html

                            Une partie "Classes"


                            Partie sur la communication en réseau de M@teo
                            http://www.siteduzero.com/tutoriel-3-7 [...] settings.html
                            http://www.siteduzero.com/tutoriel-3-1 [...] -avec-qt.html
                            http://www.siteduzero.com/tutoriel-3-2 [...] cintilla.html
                            http://www.siteduzero.com/tutoriel-3-2 [...] er-qtxml.html
                            http://www.siteduzero.com/tutoriel-3-1 [...] t-phonon.html
                            http://www.siteduzero.com/tutoriel-3-2 [...] -plugins.html
                            http://www.siteduzero.com/tutoriel-3-1 [...] la-suite.html
                            http://www.siteduzero.com/tutoriel-3-2 [...] tnetwork.html

                            Une partie> "Qt dans d'autres langages"


                            http://www.siteduzero.com/tutoriel-3-3 [...] qt-jambi.html
                            Et pourquoi pas faire un tutoriel sur PyQt :)

                            Comme ça tous les petits auteurs sont valorisés, on fait un livre "collectif", et de plus ça incite les gens à faire des tutos.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              15 juin 2010 à 10:44:04

                              @Serialtueur Je ne pense pas que prendre les autres tutoriels soit une très bonne chose, si on devait rédiger de 0 un cour sur Qt. Avant de proposer un plan, j'attends l'avis de M@teo21.

                              Edit : Il ne faudrait pas non plus être trop nombreux dans la rédaction du cour, 4-5 personnes maximum.

                              Noter aussi que les developpeurs francophone Qt, vont avoir une petite surprise ce lundi. :)
                              Mais je ne dirais rien. :-°

                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 juin 2010 à 10:48:36

                                Mais ça devient clairement un tuto sur Qt plus que sur le C++, là...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  15 juin 2010 à 10:50:36

                                  Citation : O.G.R.E.

                                  Mais ça devient clairement un tuto sur Qt plus que sur le C++, là...


                                  L'idéal serait de séparer le cour en deux. M@teo21 s'occupe du cour C++, et nous sur Qt. Mais nous attendons d'abord son avis.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 juin 2010 à 11:15:33

                                    ..d'où l'intérêt comme je j'ai évoqué de cibler correctement les besoins :p

                                    On part déjà dans des objectifs apparemment très différents... Je pensais plus à un besoin de développer les notions du C++ en partant de zéro, que de développer la partie sur Qt, qui à mon avis, est encore quelque chose de différent.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 juin 2010 à 11:19:15

                                      Vous rêvez pas mal j'ai l'impression. Le plan qui a été proposé fait appel sur la lib boost (que je ne connais pas assez) et qui n'est pas du tout présenté dans le tuto actuellement.
                                      Il va très vite sur ce qui est structures de contrôles, ne présente pas les tableaux (oui il y a les vector, mais on ne peut pas faire l'impasse sur les tableaux malgré tout, on y est forcément confronté un jour !).
                                      Il ne parle pas des structures, de la programmation modulaire et même des pointeurs, dont on a toujours besoin (les références ne les ont pas complètement remplacés, loin de là ! Qu'entends-tu par "les vrais cette fois" ? Ceux du C sont faux ?).

                                      Si je dois introduire les pointeurs en C++, je vais devoir... recopier à 99,99% le chapitre issu du tuto de C... et devoir maintenir deux chapitres identiques en parallèle ! Et c'est valable pour pas mal d'autres chapitres !

                                      Est-ce que vous vous rendez compte que ce n'est vraiment pas possible ou il n'y a que moi qui le vois ?


                                      ps : quant à Qt, cela fait partie de la méthode pédagogique qui fait vraiment pratiquer sur le sdz. Si je retire ça, on retombe à peu de choses près sur un énième cours théorique et abstrait où on ne voit pas l'intérêt de ce qu'on apprend, et je ne le souhaite pour rien au monde.
                                      Je trouve qu'on commence à s'égarer complètement, chacun a sa propre idée de ce qu'il faudrait pour un tuto de C++. Et chaque contribution de serialtueur nous fait partir complètement à l'ouest.
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                                        15 juin 2010 à 11:30:19

                                        Citation : De passage

                                        L'idée derrière tout ça serait de limiter au maximum les références au notions héritées du C (avec évidement quelques passages obligés : while, int, etc) pour présenter le C++ comme un langage à part et orienté objet.
                                        Je n'ai pas de structure bien définie à présenter mais voilà un résumé improvisé de comment j'envisage le monstre :

                                        • Partie I : Découverte du C++
                                          • 1) Petite histoire du C++ (avec mention de la prochaine norme bien sûr)
                                          • 2) Présentation des outils : compilateur, STL et boost
                                          • 3) Présentation des types de base : int, float, char,... , std::string, boost::array (oui oui, vous avez bien lu) et opérations.
                                          • 4) Hello World ! interactif, présentation de std::cin/cout.
                                          • 5) Premier objet, quelque chose de simple comme une calculatrice :-° présentation des attributs/méthodes (un attribut pour retenir le dernier résultat) et fonctions statiques (convertisseur euro intégré par exemple).
                                          • 6) Dans la lancé sur les objets : constructeur, destructeur, méthodes constantes (abordé trop tard à mon avis dans le tuto C++), références.
                                          • 7) Structures de contrôle : conditions et boucles (ou en deux chapitres distincts, mais je n'ai jamais trouvé ceux du tuto C très compliqués.)
                                          • 8) TP : RPG (inspiré du cours C++), introduction de std::map (choix des cibles), (j'aurais aimé ajouter std::list ici, mais il faut lui trouver une utilité ^^)
                                        • Partie II : Approfondissements
                                          • 1) Héritage
                                          • 2) Polymorphisme (en ne se servant que des références pour l'instant)
                                          • 3) Surcharge des opérateurs
                                          • 4) Classes de pointeurs : boost::shared_ptr, boost::weak_ptr, std::auto_ptr,... (et retour sur le polymorphisme)
                                          • 5) Gestion des exceptions
                                          • 6) Les notions essentielles que j'ai oublié à cause de la fatigue.
                                        • Partie III : Pour aller plus loin (partie fourre-tout)
                                          • 1) Allocation dynamique
                                          • 2) Template (éventuellement en plusieurs chapitres)
                                          • 3) Boost::function, boost::variant, std::bind1st, les algorithmes courants, bref je ne sais pas trop ce qu'il pourrait être intéressant de présenter dans le cadre de ce cours, mais élargir sur les possibilités de ces bibliothèques ne me semble pas du luxe.
                                          • 4) Pointeurs (les vrais cette fois)
                                          • 5) Amitié (je ne suis pas fan c'est pour ça que ça se retrouve ici, pareil pour variables static/globales dont il faut toucher un mot quelque part)
                                          • 6) Préprocesseur (optionnel, et encre très rapidement)
                                          • (intégration éventuelle du tuto Lecture/Écriture dans des fichiers de Xavinou pour réétablir l'équilibre avec le C)
                                        • Partie IV : SFML(placé en 4e position pour l'exemple, mais devrait en réalité être la 3e partie)
                                          • 1) Module graphique (je ne détaille pas)
                                          • 2) Module audio
                                          • 3) Module réseau ? :D




                                        Celon moi, il serait intéressant de montrer au lecteur comment se servir d'une doc, comment la lire, etc ...

                                        Mais il ne faudrait pas abuser des bibliothèques dès le début, car cela pourrait rendre le Zéro "dépendant" (propos très superficiel et quelque peu infondé mais bon ...) d'une bibliothèques et l'empêcher de découvrir des concepts natifs du C++ (polymorphisme universel etc ...).


                                        Aussi, je ne pense pas que l'héritage a sa place dans la partie II : c'est un concept qu'il faut connaitre impérativement, sans quoi il est impossible de programmer OO en C++ ...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 juin 2010 à 11:39:48

                                          @ M@teo21 : A ma décharge, j'ai improvisé le plan à 2 heures du matin donc c'est normal qu'il manque des choses :-° Je suis passé un peu vite sur la base parce que mon idée était surtout de présenter quelque chose commençant par l'étude de l'OO et de la librairie standard/boost (au moins 50% des problèmes de débutants sont solubles en utilisant un objet adapté venant d'une de ces deux lib).
                                          Mais tout de même, je crois que ne pas parler des tableaux/pointeurs est tout à fait possible dans un premier temps en C+ puisqu'on peux les remplacer par des classes déjà prêtes. Après il est évident que c'est une notion importante, mais un lien vers le tuto C en annexe avec quelques mises en garde vis-à-vis des classes (destructeur et constructeur de copie) me paraissent suffisants.
                                          Pour les structures, un petit mot en passant sur les classes suffit puisque c'est la même chose globalement.

                                          Pour la programmation modulaire, c'est vrai que c'est un gros manque, mais que je verrais bien introduite avec les classes en montrant des pratiques de programmation courantes (classes dans des fichiers à part, séparation déclaration/implémentation). Pas besoin de plus pour un début vu que je ne mentionne pas les fonctions (c'est marrant j'aurais plutôt pensé qu'on me reprocherait ce point là. À ajouter impérativement pour la surcharge des opérateurs de toutes manières.)

                                          Ensuite, je me répète mais la proposition que je faisais ne viserais en aucun cas à remplacer le tuto existant (pour des raisons exposées dans mon précédent post) mais à proposer une alternative pour ceux qui veulent absolument commencer immédiatement par le C++. Et pour la rédaction, je crois qu'il y a suffisamment de membres qui seraient près à s'y coller (moi compris) quitte à ce que ce soit un tuto non officiel.

                                          @ Vynile : J'ai mis l'héritage en partie 2 (mais au tout début tout de même) pour deux raisons : il faut commencer par présenter les bases pour s'y attaquer (quoi qu'on pourrait envisager faire passer les structures de contrôle après :lol: ), et c'est une notion qui me semble pas évidente pour un vrai zéro donc commencer par des choses plus light me semblait pas mal.

                                          reEdit : Il va sans dire que présenter des lib, c'est aussi et surtout présenter la doc. C'était clair dans mon esprit qu'expliquer comment s'en servir est une priorité et je ne l'ai pas ajouté dans le plan parce que ça me semblait évident. A la réflexion ça ne l'était pas... :-°
                                          Pour ce qui est des lib annexes, il faut trouver un juste équilibre, mais je préfère voir un débutant utiliser une classe de boost/STL là où il aurait été plus efficace de faire une classe maison (où ça ?) que de le voir utiliser un tableau de char pour stocker ses chaines de caractères sur lesquelles il fait des tonnes d'opérations style strlen/strcmp/etc.
                                          Quant aux "concepts essentiels", je ne suis pas sûr qu'on passe à côté en utilisant boost/STL. C'est un support pour simplifier la vie du codeur et lui donner l'occasion de faire des choses sympa rapidement, ça ne dispense pas d'un chapitre sur le polymorphisme.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            15 juin 2010 à 11:48:06

                                            Citation : M@teo21

                                            Je trouve qu'on commence à s'égarer complètement, chacun a sa propre idée de ce qu'il faudrait pour un tuto de C++. Et chaque contribution de serialtueur nous fait partir complètement à l'ouest.


                                            Je suis d'accord, avant de continuer plus loin, il faut cerner les besoins, pourquoi ce cours a besoin d'être revu, et comment pourrait-il l'être.

                                            On peut partir sur le principe que, si le cours est un jour adapté en livre, il faudra repartir de zéro, comme l'a signalé "De Passage".
                                            Et pour que cela soit possible un jour, tant qu'à faire, autant commencer le plus vite possible, et, tant qu'à faire (bis), autant recourir à l'aide et au bénévolat des membres du SdZ qui seraient prêt à construire une partie "introductrice" au tuto de M@teo21 pour ceux qui veulent apprendre le c++ de zéro.

                                            Le problème, c'est que les zéros qui veulent apprendre la programmation, et qui vont lire le tuto de m@teo21 sur le C, ils vont faire quoi, après l'avoir lu ? Ca m'étonnerait qu'ils aient envi de tout reprendre de zéro pour apprendre le C++...

                                            Donc on s'orienterait vers un tout nouveau tuto de c++ non-officiel, comme propose De passage. Mais je doute qu'une telle entreprise se réalise un jour, vu son énormité.. De plus, les nouveaux membres vont automatiquement préférer le tuto "officiel"...

                                            Bref, ça n'avance pas le schmilblik :p
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              15 juin 2010 à 11:51:29

                                              Mis à part le détail de son plan, je suis entièrement d'accord avec De Passage (au passage, mon plan avait aussi été fait à la va vite). J'ai aussi beaucoup de respect pour le travail de M@teo mais je pense aussi que si l'on veut un tutoriel qui ressemblerait plus à ce que l'on souhaite il n'y a qu'à se mettre au travail (c'est aussi écrit en tout petit quelque part au milieu du message de De Passage).

                                              Pour en revenir aux améliorations du cours actuel, après avoir bien intégré les arguments de poids évoqués par M@teo, la seule amélioration que je verrais serait de séparer le chapitre en annexe en deux pour les placer respectivement à la suite de la première et de la deuxième partie du cours ou encore de placer de nombreux liens vers l'annexe dans le cours (© Catsoulet).

                                              Edit:
                                              @O.G.R.E. : La preuve que c'est possible, Nanoc a déjà abattu une grande partie du travail. Même sans son aide, je suis certain que l'on peut y arriver avec la bonne volonté de quelques uns. :)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                                                15 juin 2010 à 12:13:06

                                                Pour améliorer le cours existant, je propose un point (détail peut être) qui a déjà été soulevé par lmghs mais qui n'a pas été corrigé. Dans le chapitre sur la surcharge des opérateurs, les opérateurs binaires sont présentés comme des fonctions membres, ils devraient être libres (tant qu'à faire on pourrait donner un lien vers le tuto de developpez présentant la bonne manière de surcharger les différents opérateurs).

                                                Deuxième chose, dans le chapitre sur l'héritage, un lien dans la conclusion (indiqué comme un complément essentiel) vers le tuto de Nanoc sur le polymorphisme me semble nécessaire.

                                                Si possible, présenter les fonctions membres constantes plus tôt, et en tout cas bien mettre en évidence leurs spécificités (il me semble que le fait qu'elles puissent être utilisés par des objets constants n'est pas mis en évidence, en tout cas ça n'apparait pas dans la rubrique « Quel intérêt »).

                                                Enfin, dire un mot sur la prochaine norme dans l'introduction me semble pas mal :)

                                                Voilà, beaucoup de détails mais je ne vois rien d'autre qui n'ai déjà été dit pour l'instant.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  15 juin 2010 à 12:16:03

                                                  Citation : M@teo21

                                                  Et chaque contribution de serialtueur nous fait partir complètement à l'ouest.



                                                  Je te permet pas §§
                                                  Nous on trouve des idées, toi tu choisis :p
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    15 juin 2010 à 12:17:20

                                                    Citation : M@teo21

                                                    Et chaque contribution de serialtueur nous fait partir complètement à l'ouest.


                                                    serial-tueur :lol::lol::lol:

                                                    Très bien. Dans ce cas le cour C++ ne sers strictement à rien. A part à peine se servir de Qt... Si on reste avec ce que tu nous apprends dans le cour actuel, autant rester au C.

                                                    Le C++ introduit la programmation orienté objet. Il est donc indispensable de parler de l'abstraction et du polymorphisme, au moins ces deux notions là. Ensuite, si tu regardes sur le forum C++, tu verras comment les lecteurs de ton cour, manipule manuellement leur tableau, alors que std::vector existe depuis bien longtemps, et je ne cite pas les autres horreurs du genre... Peut-être au passage, de parler des templates, il y a de nombreuses classes "conteneurs et templates" dans la STL : std::list et std::set pour ne citer qu'eux.

                                                    Ensuite ne nous égarons pas, bien que la bibliothèque boost est aujourd'hui l'une des plus utilisé dans les programmes C++, il faudrait là encore un autre tutoriel dédié entièrement à elle.

                                                    Citation : D epassage

                                                    4) Pointeurs (les vrais cette fois)



                                                    Ah oui c'est vrai, les pointeurs vu jusqu'à maintenant sont des faux... Non plus sérieusement, niveau pointeurs rien à dire, M@teo21 s'y prend parfaitement. Il faudrait juste un peu plus souligner que les new et delete, sont des opérateurs qui n'ont pas de comportement par défaut, il sont surchargé par la bibliothèque standard et appelle encore des fonctions type malloc et free comme en C en apportant quelques optimisations en appelant certains destructeurs, etc...

                                                    Quand aux autres notions pas besoin de les aborder, je penses aux exceptions, au opérateurs binaire, l'en-tête algorithm... ne mérite pas d'attention particulière, sauf dans des cas vraiment précis, d'où là encore la rédaction d'un autre tutoriel dédié (et là on dit merci Nanoc).

                                                    Merci pour vos précieux avis.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      15 juin 2010 à 12:29:40

                                                      Citation : Abdelite

                                                      Ensuite ne nous égarons pas, bien que la bibliothèque boost est aujourd'hui l'une des plus utilisé dans les programmes C++, il faudrait là encore un autre tutoriel dédié entièrement à elle.

                                                      C'est sûr, mais d'un autre côté certaines classes de boost vont être intégrées au prochain standard. Un peu d'anticipation ne peux pas faire de mal dans ce cas.

                                                      Citation : Abdelite

                                                      Citation : D epassage

                                                      4) Pointeurs (les vrais cette fois)



                                                      Ah oui c'est vrai, les pointeurs vu jusqu'à maintenant sont des faux... Non plus sérieusement, niveau pointeurs rien à dire, M@teo21 s'y prend parfaitement.

                                                      C'était juste histoire de marquer la différence avec les classes de pointeurs intelligents, pas une proposition de titre. Après ce n'est que mon avis, mais je persiste à croire que la gestion des pointeurs à bas niveau peut être évitée en C++ dans un premier temps.
                                                      Edit :

                                                      Citation : M@teo21

                                                      Qu'entends-tu par "les vrais cette fois" ? Ceux du C sont faux ?

                                                      Non, au contraire. Ma dénomination maladroite vrai/faux pointeurs classait les classes de pointeurs intelligents abordés précédemment parmi les "faux" (pas très clair dans le plan proposé je l'admet) et les pointeurs du C auraient été les "vrais".
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        15 juin 2010 à 12:43:43

                                                        Citation : De passage

                                                        C'est sûr, mais d'un autre côté certaines classes de boost vont être intégrées au prochain standard. Un peu d'anticipation ne peux pas faire de mal dans ce cas.


                                                        En effet, et ça ne va pas tarder avec la nouvelle norme C++1x ! Il faudrait aussi en parler.

                                                        Citation : De passage

                                                        C'était juste histoire de marquer la différence avec les classes de pointeurs intelligents, pas une proposition de titre. Après ce n'est que mon avis, mais je persiste à croire que la gestion des pointeurs à bas niveau peut être évitée en C++ dans un premier temps.


                                                        Voici un autre avantage que nous propose la surcharge des opérateurs ! Avec les pointeurs intelligent, mais sur ce, je suis un peu contre, les classes de pointeurs intelligent proposé par la bibliothéque standard sont un peu obsolète (oh ça ne va pas plaire...). il faudrait mieux se tourner vers d'autres classes proposé par boost ou même Qt pour ce genre de chose .
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          19 juin 2010 à 12:38:31

                                                          je suis tout a fait d'accord avec mateo21 sur le fait qu'il soit inutile de recopier les base du c++(variable,condition...). cependant après avoir lu le tutoriel c++ je me suis rendu compte que des choses très importante n'ont pas été introduite. je pose la question à mateo21: serais t-il possible de mettre le tuto a jour tout en fusionnant le tuto de nanoc?

                                                          j'ai bien compris que le site du zéro proposé des cours d'initiation à la programmation et qu'il fallait ensuite faire le curieux en lisant des article par-ci par là seulement les parties que développe nanoc me paraissent essentiel.

                                                          quoi qu'il arrive une simple mise a jour et toujours la bienvenue.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            19 juin 2010 à 14:44:27

                                                            Au faite, en relisant le cour pour apprendre le langage C, j'ai remarquer que comme c'etait dit on avait l'impression qu'il n'y avait que le langage C pour programmer !(enfin, c'est ce que j'ai compris).
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              4 juillet 2010 à 16:41:34

                                                              Je remonte un peu le sujet avec une autre proposition d'amélioration :

                                                              Dans le chapitre Premier programme C++ avec cout et cin, M@teo21 nous présente le code source suivant :

                                                              #include <iostream>
                                                              
                                                              using namespace std;
                                                              
                                                              int main()
                                                              {
                                                                      cout << "Hello world!" << endl;
                                                                      return 0;
                                                              }
                                                              

                                                              Si l'IDE est bien configuré, et qu'il ne rajoute pas de lignes en plus, à la compilation et exécution, la console est ouverte puis fermé à la vitesse de l'éclair. Il faudrait surtout ne pas proposer de rajouter des lignes de codes du style system() qui ne fonctionne que sur windows.

                                                              Pourquoi ne pas utiliser la méthode présenté dans la FAQ C++ DVP ? A savoir rajouter la ligne de code suivante :

                                                              #include <iostream>
                                                              
                                                              using namespace std;
                                                              
                                                              int main()
                                                              {
                                                                      cout << "Hello world!" << endl;
                                                                      cin.ignore(numeric_limits< streamsize >::max(), '\n' );
                                                                      return 0;
                                                              }
                                                              

                                                              Avec cette méthode, pour terminer/continuer le programme, l'utilisateur doit enfoncer la touche Entrée de son clavier.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Refonte du tutoriel C++ de M@teo21 !

                                                              × 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.
                                                              • Editeur
                                                              • Markdown