Rédaction tutoriel C

(auto)recrutement

a marqué ce sujet comme résolu.

Je ne suis pas du tout d'accord avec toi sur ce point de vue. Ce dont parlait lesmon était de faire un tutoriel sur le langage algorithmique plutôt que sur un langage en particulier. L'idée je trouve est pas mauvaise mais il faut voir comment l'appliquer.

Il y a déjà Guiloooo qui travail là dessus il me semble

Enfin, je conclurais que non, je ne pense pas que ce niveau d'abstraction soit trop élevé pour un lecteur lambda.

C’est juste la dessus que je ne suis pas convaincu en fait. J’espère bien qu’un étudiant en info/math n’ai pas de soucis avec ça, mais ce n’est pas vraiment le publique visé. Après, rien n’empêche d’essayer, je serais ravis d’avoir tord.

on retrouvait assez souvent des messages du genre Non mais le C c'est mieux que le Java trololol.

Mais le C est mieux que Java. Hey, on est vendredi \o/

+0 -0

Je ne suis pas du tout d'accord avec toi sur ce point de vue. Ce dont parlait lesmon était de faire un tutoriel sur le langage algorithmique plutôt que sur un langage en particulier. L'idée je trouve est pas mauvaise mais il faut voir comment l'appliquer.

Il y a déjà Guiloooo qui travail là dessus il me semble

Kje

Un tuto algorithmique, ok, mais il serait tout de même bon d'avoir derrière des tutos sur les différents langage qui existent, libre aux lecteurs de les lire ou non, après, ou même sans, avoir lu le tuto algorithmique.

+0 -0

Donc finalement le problème qui reste c'est comment le lecteur peut pratiquer ces nouvelles connaissances lorsqu'il se retrouve face, pour la première fois, à apprendre un langage informatique ? Je pense, que là, il faut revenir à un langage informatique, ce qui me parait logique puisqu'il va devoir appliquer ses connaissances sur une machine réelle et non plus "abstraite".

Ça sous-entend le choix d'un langage. Sinon, on se retrouvera avec pleins de posts qui demanderont "quel langage pour le tutoriel ?". Je sais bien qu'il y aura des sujets avec "Quel langage choisir ?", mais là on risque de rajouter au problème.

De plus, l'algorithmique peut être légèrement différente selon le type de programmation (orientée objet, procédurale etc…). Le fait d'imposer un langage influera sur le tutoriel.

Enfin, le choix d'un langage dans le tutoriel influera aussi sur le lecteur.

Enfin, je conclurais que non, je ne pense pas que ce niveau d'abstraction soit trop élevé pour un lecteur lambda.

C'est pas si sûr. Je suis dubitatif comme Simbilou. La première solution que je vois ce serait de faire un chapitre théorique, suivi d'un chapitre pratique, puis un chapitre théorique, puis un pratique etc… Ça me paraît ajouter de la complexité. Mais on bute sur le problème : comment enseigner l'algorithmique de façon ludique ?

@ Saroupille :

Je ne pense pas que l'on puisse avoir un cours assez générique que complet sur "la" programmation en général. Il y a beaucoup de concepts et de notions à aborder, et il sera très difficile de trouve un point de cohérence qui évitera au cours de partir un peu dans tous les sens.

Ceci dit tu as peut être réfléchi au squelette ?

Je ne te cache pas que ça me parait tellement ambitieux (illusoire ?) de penser qu'on peut arriver à construire un cours de ce genre et qu'il soit apprécié des lecteurs (de nos jours en tout cas, peut être le jour où les langage et l'informatique en général, convergera, mais là c'est un autre débat).

+0 -0

Donc finalement le problème qui reste c'est comment le lecteur peut pratiquer ces nouvelles connaissances lorsqu'il se retrouve face, pour la première fois, à apprendre un langage informatique ? Je pense, que là, il faut revenir à un langage informatique, ce qui me parait logique puisqu'il va devoir appliquer ses connaissances sur une machine réelle et non plus "abstraite".

Ça sous-entend le choix d'un langage. Sinon, on se retrouvera avec pleins de posts qui demanderont "quel langage pour le tutoriel ?". Je sais bien qu'il y aura des sujets avec "Quel langage choisir ?", mais là on risque de rajouter au problème.

C'est peut-être utopique ce que je propose, mais on peut imaginer proposer un même exercice dans 5 langages différents pour voir les différences. Ca demande d'apprendre une syntaxe différente à chaque fois, mais quand on se cantonne au if-then-else et au while et aux fonctions, pas tant que ça. Donc on est pas obligé de sortir d'un cours d'algorithmique.

De plus, l'algorithmique peut être légèrement différente selon le type de programmation (orientée objet, procédurale etc…). Le fait d'imposer un langage influera sur le tutoriel.

Enfin, le choix d'un langage dans le tutoriel influera aussi sur le lecteur.

Pour la question du paradigme, encore une fois, le langage algorithmique étant souple, on en fait ce qu'on veut.

Rien ne nous interdit de séparer d'avoir trois tutoriels sur une version impérative, fonctionnelle, et objet du langage algorithmique. C'est d'ailleurs un autre avantage à cette abstraction. Tu ne peux pas utiliser, où je pense que c'est de mauvais goût, python pour apprendre la programmation objet aux lecteurs.

Enfin, je conclurais que non, je ne pense pas que ce niveau d'abstraction soit trop élevé pour un lecteur lambda.

C'est pas si sûr. Je suis dubitatif comme Simbilou. La première solution que je vois ce serait de faire un chapitre théorique, suivi d'un chapitre pratique, puis un chapitre théorique, puis un pratique etc… Ça me paraît ajouter de la complexité. Mais on bute sur le problème : comment enseigner l'algorithmique de façon ludique ?

Ezenku

Hmmm, j'ai quelques exemples qui me viennent en tête dont :

Donc ta remarque est intéressante, et je pense que ça reste possible de s'affranchir d'un langage tout en pratiquant, notamment grâce à des outils comme scratch.

EDIT : ah je suis perdu avec le markdown, mes listes ne fonctionnent pas :'( .

EDIT 2 : J'ai compris !

EDIT 3 : @uknow : je pense te répondre dans l'après-midi. Et oui c'est peut-être illusoire, mais c'est intéressant d'en discuter pour justement partager nos illusions ;)

+0 -0

EDIT

La discussion a bien évolué entre temps, je réponds au message qui propose de faire un tuto sur la prog en général. La prog en général n'est pas l'algorithmique ce sont deux choses différentes. Concernant l'algo, je maintiens donc mon approche : dire aux gens de lire la partie I du tuto Python (ou whatever tuto qui reprend vraiment tout depuis 0), puis revenir attaquer l'algorithmique.

/EDIT

TL;DR

Quitte à faire un tuto sur la prog en général, choisis un langage pour permettre aux gens de compiler/tester les exemples. Dans tous les autres tutos, tu peux mettre en lien en disant « allez apprendre les bases avec le tuto Python » (c'est juste un exemple, choisis le langage que tu veux). Ça ne contredit pas l'approche « à partir de zéro », car si tu es prêt pour apprendre la prog, tu es capable de cliquer sur un lien, de lire, puis de faire « précédent ».

/TL;DR

Le problème d'un tutoriel sur la programmation en général est qu'il serait impossible de tout aborder : les langages sont trop différents les uns des autres. Tu serais obligé de te restreindre à des concepts extrêmement basiques, genre variables/fonctions/boucles/conditions/tableaux. Si tu parles de pointeurs, autant faire un cours de C/d'ASM/d'Ada directement, au moins on pourra essayer concrètement du code.

Par contre, il serait àmha indispensable (pédagogiquement) de donner des exemples dans un langage de programmation effectivement compilable (Pascal, Python, Caml, celui que tu veux), même si tu te restreins aux concepts de base. J'ai du mal à imaginer un cours de programmation, quel qu'il soit, où l'on ne peut pas tester le code que l'on écrit. Même dans notre (futur) cours d'algorithmique, nous donnons des exemples concrets de codes compilables.

Du coup, tu vas te retrouver à faire un tuto qui explique les concepts élémentaires (variables, conditions, etc.) en Python (ou le langage de ton choix). Félicitations, tu viens d'écrire la partie 1 d'un big-tuto de Python (ou le langage de ton choix).

Je suis plus fan de l'approche qui dit : « OK, on suppose que vous savez déjà un peu programmer dans un autre langage. Si vous ne savez pas, allez lire la partie I du tuto Python, il est vachement cool, pratiquez un peu puis revenez ». Je ne trouve pas que ça contredise l'approche « à partir de zéro » : tu es effectivement guidé de A à Z, tu dois juste cliquer sur un lien et lire des trucs avant de revenir. Je pense que n'importe qui capable d'apprendre à programmer pourra faire ça. En outre, c'est plus pertinent, parce que ça ressemble à la façon dont les vrais gens apprennent la programmation : ils apprennent ce qu'est une boucle avec un premier langage, puis quand ils changent, ils réutilisent leurs connaissances.

+0 -0

Je profite de la réponse de GuilOooo pour répondre dans un premier temps à uknow.

Ce que je défend, sur mes deux derniers postes, c'est le côté chiant qu'il y avait dans un tutoriel sur un nouveau langage de se taper toujours trois voir quatre chapitres introductifs sur les structures de contrôles. Alors d'un côté, tu te fiches des explications de comment fonctionne un while parce que tu connais ça par coeur, mais en même temps, si tu passes à côté, tu peux louper deux trois trucs de syntaxes, donc fallait le survoler et faire attention aux nouveautés.

Donc l'idée que j'avais en tête, c'était de proposer un tutoriel assez cours, $3$ à $4$ chapitres maximum sur les bases que l'on retrouve dans tous langage impératif. Mais comme le souligne GuilOooo, si on en revient à devoir donner des exemples dans un langage particulier, ça revient à faire la partie $1$ d'un big-tuto dans ce langage. C'est pour ça que je proposais avec une opinion un peu plus critique de donner plusieurs exemple dans des langages différents sans avoir à expliquer les spécificités du langage (un while se ressemble dans tous les langages). Mais bon c'est effectivement peut-être utopiste.

Donc peut-être qu'il faut effectivement prendre un langage particulier comme exemple de base et si je devais en choisir un, aujourd'hui, je prendrais le python. Mais dans ce cas là, je pense qu'il faudra considérer ce dernier comme une référence comme le dit GuilOooo, c'est à dire que si je veux faire un tutoriel sur Scala ensuite, je demanderais d'avoir acquis certaines base et j'irais diriger le lecteur vers le tutoriel Python.

Comme je le mentionne rapidement dans mon dernier post, le Python se rapproche pas mal d'un langage algorithmique simple. Il a d'autres problèmes, mais d'un point de vue pédagogique, et comme premier langage, je pense qu'il peut faire l'affaire.

Je pense néanmoins qu'on est tous d'accord pour dire que refaire un tutoriel sur le C à partir de zéro n'est probablement une bonne chose. A partir de là, peut-être que nous devrions recréer un topic pour avoir un peu plus de visibilité, voir ce que les gens en pensent ?

On voit qu'on a tous un avis là dessus c'est très riche mais malheureusement ça ne fait pas beaucoup avancer. Si l'on veut avoir une communauté d'expertise en C, qui se sent concerné ? Nous ouvrirons un sujet plus centré là dessus où nous travaillerons sur quels contenus importer, quel plan garder…

Surtout ne vous bousculez pas :) !

+1 -0

En faite je ne suis pas d'accord avec toi uknow, ça ne part pas dans tous les sens. Au contraire, globalement les gens sont arrivés à un consensus où refaire un tutoriel C à partir de zéro n'est pas une si bonne idée. Maintenant les solutions sur que faire à la place, je suis d'accord devraient avoir lieu sur un autre topic.

En ce qui concerne un tutoriel C, pour ma part, j'aimerais bien voir une partie programmation système. Si aujourd'hui je dois coder en C c'est pour faire du système. Par exemple voir le fonctionnement de certaines fonctions bien connues comme malloc/free , ou bien de fopen etc… Jusqu'à l'année dernière j'avais toujours vu ces fonctions comme des boites noires, et voir ce qui se cache derrière, j'ai trouvé ça jouissif.

Bref, ce que je trouverais intéressant dans un tutoriel C aujourd'hui c'est que ça serait un bon prétexte pour aller fouiller dans les entrailles de Linux (par exemple). Après c'est juste un point de vue personnel.

Je ne voulais pas déclencher un tel massacre :euh:

Peu importe ce que vous voudrez faire finalement, vous aurez mon soutien. Je plussoie aussi bien un tutoriel C sous toutes ses formes qu'un cours sur le langage algorithmique de base.

Après, les cours ne sont pas figés dans le temps, hein.
On peut modifier ou ajouter des trucs de-ci de-là au fil du temps si on se dit que ça peut être plus efficace (je pense tout particulièrement au cours sur le langage algorithmique, que l'on pourrait améliorer selon les besoins et les remarques soulevées).

Tu ne peux pas utiliser, où je pense que c'est de mauvais goût, python pour apprendre la programmation objet aux lecteurs.

Saroupille

Pourquoi donc ? Je fait du python objet tous les jours et ce site est code avec un framework basé sur du python orienté objet (entre l'ORM et les Class-Based Views). Donc oui, plein de gens font des scripts python, donc souvent du procédural, mais le langage est aussi adapté a des applications complexes et des bibliothèques orientées objets.

+0 -0

Tu ne peux pas utiliser, où je pense que c'est de mauvais goût, python pour apprendre la programmation objet aux lecteurs.

Saroupille

Pourquoi donc ? Je fait du python objet tous les jours et ce site est code avec un framework basé sur du python orienté objet (entre l'ORM et les Class-Based Views). Donc oui, plein de gens font des scripts python, donc souvent du procédural, mais le langage est aussi adapté a des applications complexes et des bibliothèques orientées objets.

Luthaf

Ah je ne dis pas que ça ne fonctionne pas, seulement que de mon point de vue, ça ne serait pas le choix de langage que je ferais pour introduire la conception de classes et d'objets et toutes les notions sous-jacente comme l'encapsulation. Je pense que c'est pas un bon choix pédagogique.

En ce qui concerne un tutoriel C, pour ma part, j'aimerais bien voir une partie programmation système. Si aujourd'hui je dois coder en C c'est pour faire du système. Par exemple voir le fonctionnement de certaines fonctions bien connues comme malloc/free , ou bien de fopen etc… Jusqu'à l'année dernière j'avais toujours vu ces fonctions comme des boites noires, et voir ce qui se cache derrière, j'ai trouvé ça jouissif.

Bref, ce que je trouverais intéressant dans un tutoriel C aujourd'hui c'est que ça serait un bon prétexte pour aller fouiller dans les entrailles de Linux (par exemple). Après c'est juste un point de vue personnel.

Saroupille

+10

Je suis totalement d'accord !

Les principaux arguments pour coder en C sont :

  • L'embarqué (pas toujours d'autres solutions).
  • Performances et gestion pointilleuse de la mémoire (low config (embarqué ou pas) ou tout simplement pour avoir quelque chose de très optimisé).
  • Impossible avec un autre langage, la programmation système.

En faite je ne suis pas d'accord avec toi uknow, ça ne part pas dans tous les sens. Au contraire, globalement les gens sont arrivés à un consensus où refaire un tutoriel C à partir de zéro n'est pas une si bonne idée.

Saroupille

C'est vrai. Le C n'est pas le langage le plus adapter pour un débutant et je doute encore plus qu'un débutant s'amusera à faire de la programmation système. Il y en aura peut être mais ils se débrouilleront surement sans nous.

Par contre une personne ayant déjà fait du Python qui chercher à mettre un peu plus les mains dans le cambouis sera toujours heureuse de trouver un tuto pour lui expliquer tout ça. Le tout sans forcement prendre les gens pour des pures débutants.

Donc un tuto de zéro, je ne suis pas convaincu mais si tu t'engages tout de même sur cette voie profite en bien pour expliquer dans quels cas le C serait un bon choix.

Ps: Si vous cherchez du monde pour la programmation système sous linux je suis votre homme !

+0 -0

Je trouve les approches suivantes excellentes en vue d'un cours sur le C :

  • on n'apprend pas l'algorithmique dans un cours sur le C

  • on n'apprend pas à se servir d'une bibliothèque graphique en particulier

  • on s'attache à rentrer dans le détail des grandes forces du C : ce pour quoi il est utile, ce pour quoi il est difficile à maîtriser, ce pour quoi il est piégeux (grosso modo : la gestion de la mémoire hein, que tout apprenant a subi à grands coups de segfault)

  • on essaie de trouver des cas d'application concrets pour illustrer les chapitres en prenant des cas où le C EST UTILE (ne pas illustrer fopen() en ouvrant un fichier XML pour le parser)

  • on apprend à débugger un code C (parce que c'est pas à la portée de tout le monde quand on apprend), comme on pourrait apprendre à lire une stacktrace dans un autre langage

  • on est clair sur "à quoi ça sert", un peu comme ça pour ne pas induire le lecteur en erreur

J'ai suivi ce topic depuis le début et très sincèrement vous m'avez l'air sur une très bonne voie pour déboucher sur un cours original et parfaitement adapté à ce pourquoi le C est intéressant. Félicitations et bonne continuation.

+9 -0

Vous pouvez ne pas lire mon message précédent et lire celui de Javier à la place. J'abonde en son sens et il dit les choses bien mieux que moi.

Un nouveau point qui semble se dégager des derniers posts, c'est que le C sert à faire des choses bas niveau. On a parlé de programmation système, je suis sûr que dans 3-4 posts quelqu'un va parler de programmation de micro-contrôleur et quelqu'un d'autre de créer un OS. C'est clairement la bonne direction (tout en restant très généraliste).

À mon humble avis, les TPs finaux (i.e. le big-projet qui prend une partie complète du tuto à lui tout seul) du cours de C pourraient être :

  • recoder un malloc/free simple (avec un lien vers un tuto avancé pour les gens que ça motive) ;
  • coder un système de fichiers minimaliste (qui stockerait lui-même les données dans un unique fichier, pourquoi pas) avec les opérations open/close/write/read ;
  • coder un (dé)compresseur Zip, ou PNG, ou autre format analogue (du point de vue des algorithmes) ;
  • recoder un shell comme sh, bash, ksh, version minimaliste ;
  • recoder un émulateur pour une VM/un ByteCode/une machine simple, par exemple un embrayon d'émulateur NES (ou autre console old-school) ;
  • créer un OS x86 ultra-minimaliste (on peut s'épargner le bootloader en utilisant qemu pour tester, il permet grosso modo de lancer un exécutable on the bare metal en appelant main() directement) ;
  • faire un truc avec un microcontrôleur (plus délicat).

L'idée serait d'écrire tout le tuto en vue de réaliser l'un (ou plusieurs, ou tous) les TPs proposés ci-dessus. Ça orienterait directement les lecteurs vers ce pour quoi le C est fait, plutôt que de leur faire miroiter la création d'un jeu vidéo (qui, bien que possible, est une grande galère pour un débutant en C).

My 2 cents.

+6 -0

Salut :)

Si vous comptez rédiger un tuto C, je suis prêt à rejoindre votre équipe.

Je suis pas un expert, mais pense pouvoir rédiger avec vous un tutoriel d'introduction au langage C (il me semble que c'est ce que l'on compte faire).

J'ai également un tuto sur la programmation système en suspens sur l'ancienne version du SdZ, la v3. J'ai eu la flemme de la reprendre lorsque le site est passé sur la version actuelle, mais j'ai toujours le xml d'antan.. et un accès à la v3 :p

Je n'ai pas lu toute la discussion (trop fatigué, j'en suis à la page 2, je dors, je lis la suite et je suis là :p)

+0 -0

Je suis assez d'accord en général avec ce qui a été dit précédemment.

J'ai pas tout lu, ça se trouve je fais de redite, donc désolé si c'est le cas…

Le fait est que:

  • Un cours n'est jamais parfait (donner une attention de 100% à des lecteurs est impossible)
  • Il y aura toujours des mécontents (ils croiront que leur cas est une généralité, ce qui est faux)
  • Partir d'un cours sans problématique de départ est une utopie de nos jours
  • Conclure un tutoriel sans résoudre la problématique de départ est un tutoriel incomplet
  • Un tutoriel doit avoir des tests afin de vérifier les acquis
  • Théorie un peu, mais pratique beaucoup, dans le sens où demander aux lecteurs de tester les codes du tutoriel et donner leurs remarques permettra d'interagir entre auteur(s), membres et lecteur
  • Trop de blablas tuent le tutoriel (si on donne un tutoriel trop long, le mec va se barrer, créer des tutoriels étape me semble une bonne idée)
+0 -0

créer un OS x86 ultra-minimaliste (on peut s'épargner le bootloader en utilisant qemu pour tester, il permet grosso modo de lancer un exécutable on the bare metal en appelant main() directement) ;

Mouais, pour cette tâche là il est normalement nécessaire de toucher un peu de l'assembleur, ne serait-ce l'x86 ce qui me semble dépasser le simple cadre d'un cours sur le langage C.

+0 -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