L'apprentissage de la programmation et plus encore

Le problème exposé dans ce sujet a été résolu.

En définitive je pense suivre vos conseils et commencer par Ruby qui me parle plus a priori (je vais quand même regarder une dernière fois la syntaxe de Python afin de m'en assurer)…et des cours d'algorithmique puisqu'il semble que ça s'impose…

Mysterri1

Garde bien à l'esprit qu'il s'agit de conseils et non d'obligations. L'algorithmique peut t'être utile, mais ce n'est en rien une obligation ou un prérequis. ;)

P.S.: Petite curiosité, y a t-il quand même quelques "Rubyistes" parmi vous (même si je n'en ai pas l'impression.) ?

Mysterri1

Je suis un fervent défenseur du C. Maintenant, entre le Python et le Ruby, j'ai tendance à préférer le second.

+1 -0

D'ailleurs petit aparté à ce sujet, j'ai lu le cours de @gbdivers jusqu'à l'exercice qui fait appel à l'algorithmique (sur lequel j'ai bloqué évidemment, honte à moi je sais), mais le cours en lui-même est plutôt abordable (jusque là tout au moins), relativement complet, et agréable à lire malgré quelques fautes de français ici et là.

Mysterri1

Merci. Pour les fautes, je sais, ça toujours été mon cauchemar (du coup, je passe systématiquement mes articles au correcteur… mais comme le cours n'est pas fini, je ne l'ai pas encore fait. Et avec un QWERTY, cela n'aide pas)

Quel chapitre tu parles ? Pour le moment, je n'ai pas encore rédiger les exos, juste mis quelques idées.

Ce que j'apprécie par-dessus tout c'est la volonté de faire pratiquer, et la volonté de faire pratiquer de différentes manières, sur des petits exercices de quelques minutes avec des consignes, ou sur des projets plus ambitieux amenés à évoluer au fur et à mesure de l'apprentissage, je trouve ça vraiment génial.

Mysterri1

Le but du cours n'est pas d'apprendre le C++. C'est d'apprendre à créer des applications en C++. La conception est une partie importante dans la création d'applications pro. Quand on se focalise sur l'apprentissage d'une syntaxe seule, il est impossible de comprendre réellement ce que cela implique quand on parle de "maintenabilité", "robustesse", "évolutivité".

Ce sont des choses qui ne peuvent être apprise que par la pratique. Et sur des projets conséquents (pour éviter le "j'efface tout et je recommence à zéro"). Je pense qu'il y a moyen de donner de vrais challenges sur lesquels bosser :)

Par contre, ça peut paraître "bête" mais serait-il possible de guider un peu plus le lecteur quant à l'utilisation de la documentation (du c++ bien sûr, et du compilateur si possible, clang dans ce cas), c'est peut-être évident et facile pour un professionnel, mais pour une personne qui apprend ça peut être compliqué, et ça me paraît être une clé essentielle de l'indépendance et du progrès de l'apprenant, c'est réellement le point qui m'a le plus ennuyé.

Mysterri1

Tu es dur, dès le "hello world", je montre la doc :)

Mais je suis d'accord avec toi. Je crois que j'en ai parlé dans la discussion de présentation sur SdZ, mais très clairement, pour moi, cela ne présente pas d'intérêt de présenter les algos de la STL un par un, alors que la documentation est très bien faite. Cela me semble plus pertinent de donner des travaux dirigés, qui nécessiterait de rechercher dans la doc l'algo a utiliser pour résoudre un problème donné. (et pour les utilisations avancées, cela sort d'un cours débutant. Et le Josuttis est très bien fait).

L'autre chose qu'il manque dans les cours, c'est étudier les messages d'erreur. Le compilateur est généralement vu comme celui qui fait planter les programmes, alors que c'est la première aide que l'on a pour résoudre les problèmes. Du coup, cela me semble intéressant de montrer quelques erreurs et les messages que cela produit.

(HS : c'est amusant que tu parles du C++ comme langage haut niveau, beaucoup le mette en bas niveau - a tort a mon sens)

Je connais pas trop python (il faut que je m'y mette) et encore moins ruby. Je préfère python, tout simplement parce qu'il est plus utilisé (il est assez courant d'écrire des scripts py pour les builds en C++)

Je trouve que l'assembleur à très très peu d'intérêt dans ton cas (trop domaine spécifique. Et je ne suis pas sûr que ce soit vitale de l'apprendre pour comprendre ton ordi). Par contre, je rajouterais un langage fonctionnel dans ta liste (haskell ?)

+0 -0

En définitive je pense suivre vos conseils et commencer par Ruby qui me parle plus a priori (je vais quand même regarder une dernière fois la syntaxe de Python afin de m'en assurer)

Mysterri1

Pour moi, on ne peut pas vraiment juger un langage sur sa syntaxe*. C'est clair que si tu utilises quotidiennement une syntaxe qui tu déplais, ce peut-être gênant. Moi non plus, je ne suis pas un grand fan de la syntaxe de Python. Mais au final, on fini par s'y habituer. Donc selon moi, la syntaxe ne devrait occuper qu'un très petit rôle dans le choix d'un langage.

* Cela dépend également de la définition que vous donnez à la syntaxe d'un langage.

En définitive je pense suivre [..] et des cours d'algorithmique puisqu'il semble que ça s'impose…

Mysterri1

Comme dit plus haut, ce n'est pas obligatoire mais c'est un plus. Ce cours a l'air plutôt sympa. Il traite de l'apprentissage de l'algorithmie, avec des implémentations en Python. Si tu sélectionnes seulement les parties que tu comprends et qui t'intéressent, il pourrait t'être utile.

+1 -0

@Taurre J'ai bien conscience que ce ne sont que des conseils, mais je pense que ce sont des conseils avisés (qui plus est de professionnels du domaine pour la majorité j'imagine), dans mon intérêt et dans le but de me faire progresser, donc autant (au moins essayer) de faire les choses "correctement".
D'ailleurs il est vrai que j'ai déjà fait du PHP et que ça ne m'a jamais vraiment gêner même si je ne pense pas que ce soit totalement comparable.

Au passage, je serais curieux de connaître tes arguments/les avantages que tu trouves au C, mais comme ce n'est pas vraiment le sujet ici, on peut peut-être poursuivre en messages privés si ça ne te dérange pas évidemment. :)

@gbdivers Concernant les exercices il y en avait sur le compilateur (dans "Programme C++ minimal"), dans "Les chaînes de caractères" et celui sur lequel j'ai lamentablement bloqué à la fin de "Les nombres entiers".

Le but du cours n'est pas d'apprendre le C++. C'est d'apprendre à créer des applications en C++. La conception est une partie importante dans la création d'applications pro. Quand on se focalise sur l'apprentissage d'une syntaxe seule, il est impossible de comprendre réellement ce que cela implique quand on parle de "maintenabilité", "robustesse", "évolutivité".

Personnellement je suis "fan" de cette approche, j'ai presque envie de dire "Lance-toi dans l'enseignement !".

Tu es dur, dès le "hello world", je montre la doc :)

gbdivers

Effectivement, mais ce que je reproche ce n'est pas de ne pas avoir montré la documentation, c'est de ne pas nous guider, nous apprendre comment l'utiliser, c'est différent. ;)
Autrement dit, expliquer comment elle est hiérarchisée, à quel endroit trouver telle chose.

Par exemple, dans ton cours tu dis "Si vous avez regardé un peu la documentation de std::cout, vous avez peut-être remarqué qu'il existe d'autres flux de sortie:[…]"
Or, suivant ma compréhension (qui est peut-être mauvaise) de la documentation, c'est dans la documentation de std::basic_ostream que je trouve les différents flux de sortie dans les "Global objects".

Ce qui me permet d'ailleurs de rebondir dans mon explication, dans ce cas ce sont des "Global objects" pourquoi, qu'est-ce que ça veut dire, en-dessous je vois "Member functions", "Member classes" et "Non-members function" à quoi ça correspond tout ça ? Pourquoi c'est là ?
Idem dans "l'onglet" Input/output library il y a un tant de termes étranges, qui ne sont d'ailleurs pas les mêmes selon "l'onglet sélectionné" d'après mes constatations pourquoi ?

Voilà, j'espère avoir été un peu plus clair sur le reproche, qui était d'ailleurs plus une remarque générale, que j'ai formulé.

Mais je suis d'accord avec toi. Je crois que j'en ai parlé dans la discussion de présentation sur SdZ, mais très clairement, pour moi, cela ne présente pas d'intérêt de présenter les algos de la STL un par un, alors que la documentation est très bien faite. Cela me semble plus pertinent de donner des travaux dirigés, qui nécessiterait de rechercher dans la doc l'algo a utiliser pour résoudre un problème donné. (et pour les utilisations avancées, cela sort d'un cours débutant. Et le Josuttis est très bien fait).

L'autre chose qu'il manque dans les cours, c'est étudier les messages d'erreur. Le compilateur est généralement vu comme celui qui fait planter les programmes, alors que c'est la première aide que l'on a pour résoudre les problèmes. Du coup, cela me semble intéressant de montrer quelques erreurs et les messages que cela produit.

gbdivers

En deux mots: "Totalement approuvé."

(HS : c'est amusant que tu parles du C++ comme langage haut niveau, beaucoup le mette en bas niveau - a tort a mon sens)

Je connais pas trop python (il faut que je m'y mette) et encore moins ruby. Je préfère python, tout simplement parce qu'il est plus utilisé (il est assez courant d'écrire des scripts py pour les builds en C++)

Je trouve que l'assembleur à très très peu d'intérêt dans ton cas (trop domaine spécifique. Et je ne suis pas sûr que ce soit vitale de l'apprendre pour comprendre ton ordi). Par contre, je rajouterais un langage fonctionnel dans ta liste (haskell ?)

gbdivers

Autant je considère le C comme un langage bas niveau, autant il ne m'est pas venu à l'esprit de considérer le C++ comme tel, même si je ne saurais pas vraiment expliquer pourquoi dans l'immédiat. Pour l'assembleur, même si je me décide, ça ne sera de toute façon pas avant très longtemps, je verrai le moment venu s'il me semble utile ou non.

Pour ce qui est des langages fonctionnels dont j'ai déjà entendu parler, j'avoue ne pas avoir vraiment saisi leur utilité, c'est une notion très flou pour moi.

@Emeric Je ne juge pas un langage à sa syntaxe (Python en l'occurrence ici) j'exposais juste que je préférais la syntaxe de Ruby pour quelques choses qui peuvent paraître infimes, bêtes ou dérisoires.
Par exemple, en Ruby, quand on fait une boucle, que l'on parcourt un tableau, un "hash", on a le petit mot clé "end" qui délimite bien la fin, idem quand on crée une condition, une fonction, une classe, bref quelque chose qu'il faut délimiter clairement.
Aussi, j'aime beaucoup les "blocs" en Ruby, qui ressemblent à ça:

1
2
3
4
montableau = ['Zeste', 'de', 'Savoir']
montableau.each do |x|
  une instruction à appliquer sur chaque élément du tableau
end

Ou encore de manière plus anecdotique, le constructeur des classes en Ruby "def initialize" que je préfère à celui de Python "def init(self):" (il me semble, corrigez-moi si ce n'est pas ça ou qu'il y a une écriture alternative) que je trouve un peu "barbare" etc

Bref, quelques petites particularités qui font partie de la syntaxe, pas forcément très importantes de Ruby que j'aime bien (et je suis loin de tout avoir découvert !), que je trouve plus simple à retenir, intuitive et assez élégante dans l'ensemble, mais c'est vraiment une affaire de goût.
Pour finir, je pourrais sans doute m’accommoder de Python car après un nouveau coup d’œil il y a quand même un certain nombre de similitudes et assez peu d'éléments qui "ne me conviennent pas", en plus je pense que Python a une bibliothèque standard beaucoup plus fournie, ainsi qu'une plus grande communauté (toujours utile quand on rencontre un problème).

C'est tout de même un coup de théâtre, j'étais partie pour Ruby et ton commentaire me fait à nouveau hésiter, toutefois je pense tout de même suivre mon idée première (donc Ruby), et je changerai si vraiment je rencontre des problèmes majeurs (pas assez de ressources, pas assez de bibliothèques à jour, problème technique important et communauté absente etc)

Pour ce qui est du cours d'algorithmique, je l'ai survolé, et il a l'air effectivement très intéressant, complet, et surtout "axé débutant", je l'ai donc mis de côté pour le regarder plus attentivement par la suite. :)

Plus de monde propose python que ruby car il est dans l'ensemble plus populaire. Il y a plus d'utilisateur. Ruby, en dehors de Rails et du Web, il est beaucoup moins utilisé. Mais en l'occurrence si tu accroche mieux avec ruby, fais du ruby.

@gbdivers Concernant les exercices il y en avait sur le compilateur (dans "Programme C++ minimal"), dans "Les chaînes de caractères" et celui sur lequel j'ai lamentablement bloqué à la fin de "Les nombres entiers".

Mysterri1

Tu n'es pas le seul. Cf cette discussion pour des détails en plus : http://openclassrooms.com/forum/sujet/exercices-dans-le-cours-de-gbdivers.

Personnellement je suis "fan" de cette approche, j'ai presque envie de dire "Lance-toi dans l'enseignement !".

Mysterri1

Trop mal payé :)

Effectivement, mais ce que je reproche ce n'est pas de ne pas avoir montré la documentation, c'est de ne pas nous guider, nous apprendre comment l'utiliser, c'est différent. ;)
Autrement dit, expliquer comment elle est hiérarchisée, à quel endroit trouver telle chose.

Par exemple, dans ton cours tu dis "Si vous avez regardé un peu la documentation de std::cout, vous avez peut-être remarqué qu'il existe d'autres flux de sortie:[…]"
Or, suivant ma compréhension (qui est peut-être mauvaise) de la documentation, c'est dans la documentation de std::basic_ostream que je trouve les différents flux de sortie dans les "Global objects".

Ce qui me permet d'ailleurs de rebondir dans mon explication, dans ce cas ce sont des "Global objects" pourquoi, qu'est-ce que ça veut dire, en-dessous je vois "Member functions", "Member classes" et "Non-members function" à quoi ça correspond tout ça ? Pourquoi c'est là ?
Idem dans "l'onglet" Input/output library il y a un tant de termes étranges, qui ne sont d'ailleurs pas les mêmes selon "l'onglet sélectionné" d'après mes constatations pourquoi ?

Mysterri1

Tres bonne remarque. Je mets les termes anglais entre parenthèses lorsque j'utilise des termes français (mais pas question que j'utilise "patron" ou "modèle" a la place de "template"…), parce qu'il me semble important que les personnes les connaissent (au moins pour faire des recherches). Mais il faudrait effectivement une petite intro pour la doc.

+1 -0

D'ailleurs, je propose que l'on utilise "insecte logiciel", plutot que "bug" ou "bogue"

gbdivers

Sinon, il y a : erreur, anomalie, problème, dysfonctionnement, coquille (qui, finalement, eu été mieux que « bogue » quitte à parler d'enveloppes), défaut, vice , tare, etc. Bref, ce ne sont pas les mots qui manquent. En revanche, pour debugger ou debugging, c'est plus pénible…

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte