Les concepts de base de la programmation

Explications sur les concepts commun à de très nombreux langages

a marqué ce sujet comme résolu.

Malheureusement, ce tutoriel qui était en bêta a été supprimé par son auteur.

Salut à tous,

En rédigeant le chapitre sur les variables pour le cours de C++, j’en suis venu au constat que je répète les mêmes choses que les tutoriels C, Ruby, Python, etc. Je me suis donc dit « Et pourquoi ne pas écrire un tutoriel présentant ces concepts communs que sont les variables, les conditions, les boucles, les fonctions et les structures de données (tableaux, etc) ? »

N’hésitez pas à relever les fautes, à suggérer des idées ou des améliorations, afin de produire rapidement un contenu de qualité.

En rédigeant le chapitre sur les variables pour le cours de C++, j’en suis venu au constat que je répète les mêmes choses que les tutoriels C, Ruby, Python, etc. Je me suis donc dit « Et pourquoi ne pas écrire un tutoriel présentant ces concepts communs que sont les variables, les conditions, les boucles, les fonctions et les structures de données (tableaux, etc) ? »

informaticienzero

Parce qu’il y a souvent des subtilités qui changent tout. Comme la notion de variable qui est très différente en C et en Python, et qui mène sur les forums à de nombreuses confusions.

Je trouve tout de même que c’est une bonne idée de tutoriel, mais ça ne doit à mes yeux pas remplacer la présentation et l’explication de ces concepts dans chaque langage.

Ah oui ça, on ne doit enlever des explications précises pour chaque langage. L’idée est plus de donner une idée assez générale de ce qu’est une variable, puis après de ne se concentrer sur les variables que comme en C++, ou en Python, ou en Ruby, dans le cours du langage en question.

Le but serait surtout d’éviter de répéter X fois qu’une variable est stockée en mémoire vive, qu’elle a un nom, un type, etc etc.

En rédigeant le chapitre sur les variables pour le cours de C++, j’en suis venu au constat que je répète les mêmes choses que les tutoriels C, Ruby, Python, etc. Je me suis donc dit « Et pourquoi ne pas écrire un tutoriel présentant ces concepts communs que sont les variables, les conditions, les boucles, les fonctions et les structures de données (tableaux, etc) ? »

C’est effectivement une constatation récurrente, mais ça n’a à ma connaissance jamais abouti à grand chose d’intéressant, pour deux raisons principales :

  • Comme dit entwanne, tous les langages ont leur propre façon d’aborder même les concepts communs, et tu es condamné à rester très vague.
  • Un tutoriel de programmation pour débutant complet qui ne fait pas pratiquer, c’est a priori plutôt une mauvaise idée : l’élève moyen décrochera très vite, et l’élève têtu apprendra moins bien qu’avec un cours qui utilise réellement un langage précis choisi pour mettre ces concepts en application.

Cela dit, le problème que tu soulèves est bien réel : on a X cours sur la programmation qui parlent de la même chose (de façon plus ou moins réussie). La réponse « on a qu’à factoriser » est tentante, mais ce n’est pas la bonne approche, pour les raisons données plus haut.

La bonne méthode, c’est de faire réellement la différence entre « un cours qui apprend la programmation » et « un cours qui apprend un langage de programmation », et surtout d’arrêter de croire que le deuxième implique forcément le premier, ce qui est la tentation habituelle de ceux qui se lancent dans ce genre de projet. On peut parfaitement faire un cours de Ruby, OCaml ou C destiné à des élèves qui ont déjà des bases en programmation, et ça permet de passer plus rapidement sur certains concepts pour développer l’apprentissage du langage lui-même. À l’inverse, il faut aussi des cours de programmation pour débutants qui choisissent un langage quelconque et qui s’en servent comme support pour apprendre à programmer (et pas à programmer en Python, par exemple). Ces cours iront moins loin dans l’apprentissage du langage, parce qu’il ne sert que de support et pas d’objectif.

+6 -0

Je réponds particulièrement à la deuxième objection, mais déjà merci d’avoir pris le temps de faire un post complet.

En fait, l’idée n’est pas de faire lire tout le tutoriel d’un coup à un débutant mais plutôt chaque partie quand besoin est. Exemple : j’écris un cours C++, j’introduis les variables en disant "Allez lire cette partie" puis je reviens à mon cour en disant : "Alors, vu que C++ est un langage statique et explicite, il faut qu’on précise le type bla bla bla. Voilà comment on fait bla bla bla".

Après je ne m’y connais pas assez en Python pour avoir pensé à cette objection. Quel est le problème des variables ?

Par exemple, tu commences par présenter la variables avec une analogie de valeurs stockées dans des tiroirs. Cette analogie peut gêner à la compréhension des variables en Python : comment une même valeur pourrait être dans deux tiroirs différents ?

Mais d’autres l’expliquent mieux que moi : http://foobarnbaz.com/2012/07/08/understanding-python-variables/

Je parle de Python et des variables parce que c’est ce qui me vient en tête, mais il y a sûrement d’autres points pour lesquels il n’est pas possible d’avoir une bonne définition valable pour tous les langages de programmation.

En fait, l’idée n’est pas de faire lire tout le tutoriel d’un coup à un débutant mais plutôt chaque partie quand besoin est. Exemple : j’écris un cours C++, j’introduis les variables en disant "Allez lire cette partie" puis je reviens à mon cour en disant : "Alors, vu que C++ est un langage statique et explicite, il faut qu’on précise le type bla bla bla. Voilà comment on fait bla bla bla".

Le premier problème reste le même : tu es condamné à être soit très vague, soit tellement complet que c’en est indigeste. Tu as d’ailleurs un peu tendance à mélanger les deux soucis dans ton premier jet : la partie « qu’est-ce qu’une variable » est réduite à son strict minimum (« c’est une enveloppe »), et s’ensuit une digression de plusieurs paragraphes sur le typage où tu donnes tout un tas de détails hyperspécifiques dont le débutant ne retiendra probablement pas la moitié (par exemple, « en python, depuis la dernière version, on peut spécifier le type d’une variable »). Et malgré cette abondance de détails, qui risque vite de se transfomer en une énumération des spécificités de chaque langage (… donc à un cours de tous les langages en même temps plutôt qu’un cours sur ce qui est commun), il manque encore tellement de choses qu’on peut essentiellement dire que tu as à peine effleuré le sujet. Par exemple, tu n’as pas touché un mot du système de types d’OCaml à part « j’ai pas besoin de mettre int » – ce qui au passage tend à suggérer, avec les termes que tu utilises, que c’est un fonctionnement similaire à Python (« les types sont implicites ») alors que ça n’a vraiment rien à voir.

Alors entendons-nous bien : je ne suis pas en train de dire que tu as fait un mauvais travail en rédigeant ce cours, je suis en train de dire que tu t’attaques à une tâche impossible et que ça va te demander un travail phénoménal pour un résultat qui sera probablement inexploitable par nature. Ne serait-ce que sur les variables, tu n’as aucune chance de pouvoir rédiger quelque chose d’à la fois compréhensible, utilisable pour des cours sur des langages variés, et suffisamment conséquent pour que l’effet « ça allège les différents cours en factorisant » se produise vraiment. La question que tu poses sur Python le montre d’ailleurs très bien.

Je maintiens ce que je disais plus haut : tu as identifié un problème réel, mais la solution que tu proposes n’est pas la bonne. Si tu veux éviter de tout reprendre de zéro dans ton tutoriel C++, il faut simplement accepter de viser un public qui a déjà des notions de programmation. Si tu tiens absolument à ce que ton tutoriel soit le premier que lise quelqu’un qui veut apprendre à programmer, alors il faut insister sur les concepts de base et oublier les détails avancés du C++ pour s’en servir simplement comme langage support. Boire ou conduire, il faut choisir.

+0 -0
Ce sujet est verrouillé.