Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nouveau cours C++ "moderne"

6 mai 2014 à 10:46:11

Salut

J'avais prévu d'attendre d'être plus avancé dans la rédaction avant d'ouvrir un post pour avoir des avis externes, mais finalement, cela ne ferait pas de mal de partager mes interrogations

Au final, ça ne sera pas une simple mise à jour du code pour le C++11/14 du cours du SdZ. Il y a trop de choses à corriger, trop d'explications qui me conviennent pas. Ca sera une réécriture complète (et donc cela va prendre un peu plus de temps que prévu).

Je me pose la question de l'exemple principal, le RPG. Est ce que vous pensez que c'est un sujet intéressant qu'il faut garder ou vous préférer un autre sujet d'exemple ? Et bien sûr, pourquoi ?

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 11:22:14

C'est un exemple ludique et concret qui touche facilement les jeunes.

Le soucis pour moi tient plus dans ses limitations. Cela fait longtemps que je suis convaincu que les CRPG doivent être conçus sur des principes de classes à traits (les personnages ont un ensemble de traits (vision low-light, résistance poison, capacité à lancer des sorts, ...) qui évoluent (gains avec les niveaux/races, les classes (de perso), par sorts, par équipement, ...)). Depuis, on parle d'ECM, et là ce n'est plus ce qu'il y a de plus adapté pour présenter l'OO.

Après je n'ai pas de bon exemple concret et utilisable pour tout public -- dans les formations que je donne au boulot, j'essaie de prendre des exemples d'application que nous développons régulièrement.

  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
6 mai 2014 à 11:41:36

L'exemple du RPG est un des seuls jeux qui peut être joué en console (cf dongeon and dragon version papier). Un Mario pourrais être fun mais il n'est pas jouable en console. Après tu peut te concentrer sur la création d'un livre dont vous êtes le héros (il y a moyen de caler facilement de la surcharge d'opérateur, héritage). Après il faut trouver un diagramme de classe pas trop abstrais pour les débutants.

Prévoir un chapitre sur les nouveautés C++11. Que ce ne soit pas que un tuto pour les débutants.

-
Edité par robinson des bois 6 mai 2014 à 12:00:01

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 11:50:57

@lmghs

Pareil, je crois que les hiérarchies d'objets ne sont pas adaptées pour représenter les objets d'un RPG (hum, j'aime la copie d'un personnage... moi qui croyais que le clonage humain était interdit en France :) ). Ensuite, peut être que cela peut convenir comme support pédagogique (le temps d'expliquer ce qu'est le ECM), mais je ferais de toute façon des modifications :

  • respect des sémantiques d'entité et valeur
  • DP factory et builder pour créer les personnages
  • dès que possible, passer d'une hiérarchies d'objets codé en dur dans le code à une structure flexible dynamique via fichiers (ECM ?)

En complément, je vais ajouter des exos (pour chaque sous-chapitre), des TP (pour chaque chapitre) et des projets (sur plusieurs chapitres). Il est possible que le RPG passe en projet à faire par l'utilisateur et non pour illustrer le cours. Mais il faut que je trouve un autre support pédagogique (je vais éviter de piquer l'idée d'un jeu d'échec ;) )

-
Edité par gbdivers 6 mai 2014 à 11:51:43

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 11:58:38

@robinson des bois

Non pour le C++11/14... puisque le cours sera basé sur le C++11/14. J'en avais déjà parlé, je crois que l'on n'est plus à écrire des tutos sur le C++11 pour ceux qui connaissent le C++, mais il faut écrire des cours complet basé sur le C++11 pour les débutants.

C'est à dire que (par exemple) au lieu d'expliquer les pointeurs nus puis les pointeurs intelligents, j'explique directement les pointeurs intelligents. Et pas du tout les pointeurs nus. C'est un choix pédagogique, cela ne veut pas dire qu'il ne sera jamais utile pour un dév C++ d'apprendre les pointeurs nus, mais que les pointeurs nus sont une technique avancée et donc sortent du cadre d'un cours débutant.

Pour l'idée un mario, j'ai supprimé (pour le moment) la partie sur Qt. Je n'aborde pas (pour le moment) les graphismes en C++ (ni Qt, ni SFML, rien du tout). Pour l'idée d'un livre dont vous être le héro, j'ai peur que le principale, ce soit le contenu, pas le programme en lui même. Je vois pas trop pour le moment comment l'utiliser pour expliquer les notions abordées dans le cours, mais je vais y réfléchir

-
Edité par gbdivers 6 mai 2014 à 11:59:15

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 12:11:07

Pour les copies des persos, dans le support de cours du boulot, j'ai fait le choix de commencer par parler des classes à sémantique de valeur, avec des vecteurs pour illustration des problèmes de copie de ressources, et matrices pour l'exercice. Puis le chapitre entités où je dis "pas de copie", et où héritage(s -> substituabilité et import) sont présentés. Pour l'exo, c'est lié à notre métier.

EDIT: les livres dont vous êtes le héros sont des machines à états finis. Du coup, il y a le pattern state. Mais pour ce qui est d'illustrer l'héritage, ça ne me parait pas terrible.

Plus simple que les échecs, tu as les jeux simples à 2 : tic-tac-toe. Si tu regardes celui que j'avais proposé en correction pour les exos v2 ici-même, on peut avoir de l'héritage pour le choix du centre de décisions (j'ai une approche légèrement différente de celle de Philippe ;)) -> IA ou joueur.

-
Edité par lmghs 6 mai 2014 à 12:16:56

  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
6 mai 2014 à 12:13:22

Je suis d'accord avec le fait de ne faire un cours qu'en console. Si j'ai bien compris l'objectif de ton tuto est de comprendre la POO pour ensuite pouvoir utiliser les bibliothèque C++.

Le livre dont vous êtes le héro donne envie de créer du contenu et donc de pratiquer. Après il faut trouver un système pour obliger le programmeur à utiliser la POO lors de la création du contenu.

Le jeu d'échec est une très bonne idée :) 

touché coulé sinon.

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 12:14:35

Autre question. Les règles régissant la création automatique des constructeurs et opérateurs par le compilateur n'était pas forcement simple, ne faudrait-il pas conseiller par défaut au début à déclarer systématiquement ceux-ci (via default et delete) ?

class A {
}; // non

class B { // sémantique entité
    // défaut
    B() = default;
    // copie
    B(B const&) = delete;
    B & operator= (B const&) = delete;
    // move
    B(B &&) = default;
    B & operator= (B &&) = default;
    // comparaison
    bool operator== (B const&) = delete;
}; // ok

(je sais bien que le jeu d'échec est une bonne idée... mais ce n'est pas la mienne, je vais pas copier les idées des autres)

-
Edité par gbdivers 6 mai 2014 à 12:15:55

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 13:27:37

Si tu repars de 0 , vas-tu (re) presenter une librairie pour la partie graphique? (si oui laquelle?)

Où vas-tu expliquer et ne pas sortir de la STD?

ça m'interesse vivement! :)

bonne chance :)

  • Partager sur Facebook
  • Partager sur Twitter
Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
6 mai 2014 à 13:34:06

Pour le moment, pas de lib graphique

Pour moi, c'est indispensable de savoir utiliser des libs externes en général et au moins une lib graphique. Pas besoin de maîtriser, juste savoir faire une fenêtre et deux ou trois boutons. Mais pour éviter de trop me disperser, dans cette première version du cours, j’exclue pour le moment l'utilisation des libs graphiques. Et ça sera du Qt quand je le ferais

Donc il est probable que je n'aborde que la STL (j'aborderais plus en détail le processus de compilation et l'utilisation de libs externes, mais je ne détaillerais pas leur utilisation)

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 13:36:18

gbdivers a écrit:

Donc il est probable que je n'aborde que la STL (j'aborderais plus en détail le processus de compilation et l'utilisation de libs externes, mais je ne détaillerais pas leur utilisation)


Haha, oui désolé, l'habiture des std::  ^^...

En tout cas je suivrai de très prêt:).




  • Partager sur Facebook
  • Partager sur Twitter
Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
6 mai 2014 à 14:49:26

Et il n'abordera pas que la STL, mais la lib standard ;)

Ne t'excuse pas pour avoir écrit STD.

  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
6 mai 2014 à 15:16:17

J'ai peut de dire un connerie  mais la STL c'est pas la STandard Library ?
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 15:21:24

Standard Template Library. Cela désigne un sous-ensemble de la lib standard. Cf FAQ tout ça.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
6 mai 2014 à 15:28:17

Ca fait très longtemps que je ne fais plus la distinction entre STL et SL :)
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 15:35:50

Bin du coup moi non plus. J'ai toujours cru que la SL et la STL c'était la même chose. Mais finalement la seul différence c'est la généricité de la STL ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
6 mai 2014 à 15:38:13

Bonjour,

Dites-moi j'ai une question, puisque vous êtes Confirmé, serez-vous capable de crée des bibliothèques C++ utiles ou pourquoi pas même crée un mini langage ou même un jeu 3D qui tient la route ?

-
Edité par Anonyme 6 mai 2014 à 15:38:43

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 15:45:27

Guys. Premier lien de ma signature! http://cpp.developpez.com/faq/cpp/?page=La-STL#Qu-est-ce-que-la-STL
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
6 mai 2014 à 15:45:59

Crashit a écrit:

Bonjour,

Dites-moi j'ai une question, puisque vous êtes Confirmé, serez-vous capable de crée des bibliothèques C++ utiles ou pourquoi pas même crée un mini langage ou même un jeu 3D qui tient la route ?

-
Edité par Crashit il y a 3 minutes


:lol:. Le boulot pour ce genre de projet et assez lourd. Je pense pas qu'il serai utile pour le tutoriel de créer se genre de chose si ce n'est faire fuir les gens .
  • Partager sur Facebook
  • Partager sur Twitter
Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
6 mai 2014 à 15:53:24

 - Qu'entend tu par bibliothèque utiles ? Genre une bibliothèque mathématique ?

 - Créer un mini langage c'est déjà plus chaud. Il faut créer un interpréteur de code et il y a beaucoup de chose à penser pour éviter les bugs.

 - Un jeu 3D est surtout long mais pas extrêmement compliqué. Compter 6 mois pour un moteur de jeu très basique et 6 mois pour des graphismes.

Pourquoi ces questions ? Si ce n'est pas en rapport avec le post tu peut en créer un autre. On se fera une joie du participer ^^

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
6 mai 2014 à 16:10:16

Non non, c'était juste pour voir vos capacités de faire. ;)
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 16:14:31

robinson des bois a écrit:

 - Créer un mini langage c'est déjà plus chaud. Il faut créer un interpréteur de code et il y a beaucoup de chose à penser pour éviter les bugs.

Pas bête comme TP (guidé a mon humble avis parce que c'est pas non plus dans la poche) de fin de cours pour s'entrainer sur les opérations de strings, ou a la rigueur même pas la peine d'aller jusqu’à un mini-language, mais un interpréteur de calcul mathématique basique ce serait sympa je trouve (ou en tout cas plus original et plus dur que la calculatrice a 2 chiffres avec cin et cout) 

EDIT : Soit dit en passant je trouve que les TPs c'est une chose qui manque beaucoup aux tutos de progs sur le net, comme on dit c'est en forgeant qu'on devient forgeron ! Mais la plupart des tutos que j'ai vu ne proposent que 2-3 TPs pas forcément très dur, et pas forcément d'idées de TP originales ou attractives (je reproche rien aux grands classiques mais le changement c'est bien aussi ! ) Enfin bref, je pense que limite faire une partie du cours spéciale TP (dirigé ou non) avec une correction serait bien utile ! Mais ce n'est que mon humble avis ! :lol:

-
Edité par valent20000 6 mai 2014 à 16:20:56

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
6 mai 2014 à 16:36:15

C'est vrais que j'ai du recoder 5 ou 6 fois la classe std::vector. Changer les exemples est toujours un plus (sauf si l'exemple trouvé est vraiment nul :D ).
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2014 à 17:39:02

Pour les "mini-langages", une chose qu'il est possible de faire en C++ et qui est une technique très puissante, c'est les DSEL (Domain Specific Embded Langage). Par contre, cela nécessite d'aborder la méta programmation un peu plus en détail, ce qui sort d'un cours débutant (mais peut être qu'il faudrait aborder les bases de la méta programmation dans un cours débutant C++, au moins pour que ceux qui apprennent le C++ comprennent la puissance de ce langage)

Pour les exos, je vais ajouter des exos pour chaque sous chapitres, des TP pour chaque chapitre et des projets sur plusieurs chapitres. Le but sera de mettre en application ce qui est abordé dans le cours. Les exos seront très simples, quelque lignes de code, découpés en de nombreuses étapes très très simples. Les TP seront moins détaillés, ideallement il faudra réappliquer les étapes apprises dans les exos pour les réappliquer dans les TP. Et pour les projets, il y en aura plusieurs proposée, le but sera que l'apprenant choisisse 1 ou 2 et les réalisent tout au long de la lecture du cours.

Par contre, dans un premier temps, je ne donnerais pas les corrections des exos

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 13:59:48

Ça fait plaisir de voir l'implication de la communauté pour ça ! :) J'espère que ton cours sera vite accessible (pas nécessairement dans son intégralité, mais au moins quelques chapitres que l'on puisse juger ! ) Surtout si tu as besoin d'aide ou d'avis constructifs, n'hésite pas ! J'aimerai beaucoup y voir apparaitre un chapitre consacré à la présentation de quelques design patterns (au moins les plus gros) et un chapitre qui traite de certaines controverses telles que l'utilisation ou non de singletons ! :) pas nécessairement quelque chose de très détaillé mais qui ouvre les yeux du lecteur sur l'existence du problème et les différents points de vue, pour qu'il puisse faire des recherches de son coté ! Enfin, je pense qu'un chapitre dédié à l'apprentissage de la lecture de la doc officielle serait NECESSAIRE ! :)

En tout cas bon courage pour la suite ! C'est un très bon travail !

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 14:23:34

leboucetmistère a écrit:

un chapitre qui traite de certaines controverses telles que l'utilisation ou non de singletons

export aussi ? x)

-
Edité par valent20000 7 mai 2014 à 14:23:57

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 14:32:13

Pour la doc, c'est prévu (probablement plus sous forme d’exercices, avec une petite présentation rapide de cppreference.com)

Pour les DP, c'est prévu aussi. Avec le thème du RPG actuel, j'ai pensé au moins à factory et builder. A voir pour les autres DP et à voir si je garde le thème du RPG comme exemple illustratif (il passera peut être comme projet)

Pour les controverses, mon but est vraiment de présenter les "bonnes pratiques" pour commencer. Comme c'est un cours débutant, il est possible que dans un premier temps, le cours ne va pas assez loin pour aborder ce genre de problématique (ou plus précisément, il y a des sujets - comme la méta programmation - qui me semblent plus intéressant en termes d'utilisation pratique à aborder dans un cours, plutôt qu'aborder des sujets pour dire "ça, il faut pas l'utiliser")

Par contre, je pense ajouter également à la fin de chaque chapitre une partie "Aller plus loin", avec des liens sur des points plus détaillés

Comme j'ai parlé de ce cours dans plusieurs discussions, c'est un peu brouillon pour avoir les infos. En gros, à la base, le but était de mettre à jour le code du cours C++ du SdZ. Malheureusement, il y avait aussi des mises à jour des explications à faire. Et au cours de ma lecture, j'ai trouvé beaucoup de choses qui me plaisent pas. Du coup, je pars sur une réécriture complète. Va falloir que je me disperse pas trop :)

Pour le moment, je fais une lecture détaillée + prise de notes. C'est consultable là : Programmez avec le langage C++ (j'ai souligné mes notes et ce qui me pose problème). La plan n'est pas définitif 

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 14:46:45

Je viens de regarder ton plan, il me semble plutôt bien ! Y a pas mal de points que tu va aborder qui n'ont pas été très bien présenté (voir pas du tout) sur les cours que j'ai déjà vu sur le web (je pense notamment aux rvalues + lvalues, sémantique de valeur et d'entité etc ...)

Un petit truc qui me choque quand même : le chapitre sur les foncteurs est (dans ton plan) avant la partie orientée objet, petit fail je pense :p (Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi :lol: ).

Sinan une autre chose que je n'ai pas vu dans les cours du c++, c'est le multithreading avec std::thread. Le multi-threading pour moi est une partie assez dure de la prog au début, je pense que ce serait un bon chapitre dans la grande partie Utilisez la bibliothèque standard pour commencer à se familiariser avec le concept, et peut-être voir 2-3 techniques pour faire du thread-safety (je le mettrais là parce que c'est vers la fin du cours + std::thread appartient a la lib standard)

En tout cas je trouve ça génial que quelqu'un fasse un nouveau tuto, les autres commencent a dater, et ne montrent que trop superficiellement certains concepts à mon goût ! Le problème aussi c'est que rentrer en profondeur a partir d'un certain chapitre, ça pourrait faire fuir les débutants ... :D

J'espère que tu arrivera a concilier les moyens / avancés avec les débutants ! En tout cas je te souhaite vraiment une bonne continuation ! ;)

-
Edité par valent20000 7 mai 2014 à 14:48:39

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 15:06:11

valent20000 a écrit:

Un petit truc qui me choque quand même : le chapitre sur les foncteurs est (dans ton plan) avant la partie orientée objet, petit fail je pense :p (Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi :lol: ).

Au contraire, c'est très cohérent. Maîtriser très tôt l'utilisation des algo de la SL est  important, et comprendre les foncteurs est un sacré plus pour les utiliser.
  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

7 mai 2014 à 15:14:41

C'est un des points qui va changer dans le plan :) 

Pour le moment, ce qui me plait pas dans le cours actuel, c'est d'aborder en premier vector et [] (donc le cas particulier) et les conteneurs et itérateurs (le cas générique) quasiment à la fin du cours.

Donc le but sera d'avoir le cas générique en premier (conteneur + itérateurs) puis un peu plus loin (au niveau du chapitre sur les boucles) les algorithmes + lambda. Le foncteur devraient arriver dans la partie sur les classes (ou pas, je verrais lors de la rédaction finale... ça m'embête de parler des classes aussi tardivement)

Sinon, pour les threads, j'y ai pensé, mais pour le moment, je vais pas aborder. Il y a beaucoup trop de choses à dire (et j'en parle pas mal dans mon second livre en préparation... :-°)

-
Edité par gbdivers 7 mai 2014 à 15:15:12

  • Partager sur Facebook
  • Partager sur Twitter