Tutoriel C en anglais sur ZdS : possible ?

Une pensée pour nos amis anglophones

a marqué ce sujet comme résolu.

Salut à tous !

J’ai parmi mon entourage des amis anglais, ça m’arrive parfois de discuter avec eux de mon travail, et des fois j’arrive même à les intéresser à l’informatique. Par contre, dès qu’il s’agit de leur donner un lien vers un tutoriel anglais qui est à la fois didactique, simple à comprendre, précis, avec des exercices etc.. C’est presque impossible d’en trouver.

En France on a la chance d’avoir le tutoriel C du Site du Zéro (enfin, la version épurée et pas à jour de OpenClassrooms), ainsi que le tutoriel C de Zeste de Savoir (mais qui manque peut-être un petit côté "application pratique sympa" - la partie SDL du Site du Zéro était parfaite pour ça).

Pour les anglophones par contre, il n’y a pas grand chose à part des bouquins - le site correspondant le plus à ce que je recherche c’est https://www.learn-c.org/, mais les exos sont vraiment très bateau, quelqu’un qui suit ce tuto peut prendre le risque d’enchainer les très courts chapitres, faire les exos, et après se casser les dents en essayant de tout combiner à la fois.

Pour ces raisons j’aimerais rédiger en anglais un tutoriel dans le même style que celui adopté par anciennement le Site du Zéro - des cours aggrémentés de milestones/mini-projets, des exos à la fin de chaque cours qui s’assurent que la personne a bien pigé avant de passer à la suite, des concepts introduits graduellement selon leur nécessité immédiate. Au lieu de faire un "voilà toutes les features du C une par une", j’aimerais organiser ça en "Voilà les projets qu’on va pouvoir faire. Et pour faire ces projets là, on aura besoin de telle, telle et telle notion qu’on va voir maintenant", "Vous vous rappelez ce projet là ? Essayez de l’améliorer avec ce qu’on a appris", etc..

Cependant avant de me lancer là dedans, j’ai besoin de trouver un support.

La programmation web n’est pas du tout dans mes cordes. Si je dois faire mon propre site web il faudrait que je passe du temps à faire le style, m’approprier le(s) langage(s) etc.. Je préfère donc utiliser une plateforme déjà existante.

Je pensais donc à la possibilité d’utiliser Zeste de Savoir comme support pour ce tutoriel. Par contre, je n’ai pas l’impression de voir de tutoriel en anglais ici. D’un autre côté, le nom de domaine est ".com" ce qui pourrait laisser supposer que ce n’est pas forcément destiné à être franco-français non plus.

Ma question est donc : est-ce que cela pourrait rentrer dans la politique du site d’avoir du contenu en anglais ?

+0 -0

C’est presque impossible d’en trouver.

J’en doute… Je suis très intéressé d’avoir un lien vers un tutoriel qui remplit mes critères dans ce cas :)

Mais de toute façon les billets donnent une liberté très grande qui répondrais à une partie de ta problématique je pense.

Oui j’ai vu ces "billets" mais je ne suis pas très au point sur la différence entre un billet et un tutoriel ?

Je trouve que ce serait une chouette initiative, ça serait un vrai plus. Attention que rédiger un tutoriel prend beaucoup de temps et il faudra penser à trouver des relecteurs compétents qui s’y connaissent en anglais.

Oui je suis très conscient du temps que ça prendrait. ça serait un petit projet auquel je m’attaquerais entre midi et deux pour ainsi dire, et à avancer pendant les vacances.

Salut,

Les tutoriels et les articles sont des contenus qui subissent une validation par l’équipe du site (une vérification factuelle et pédagogique du contenu). Les billets sont des contenus qui ne subissent pas de validation, donc ZdS n’offre aucune garantie sur la qualité et l’exactitude de ces contenus. Au-delà de cet aspect, le format des billets ne conviendrait pas à un long cours de toute façon.

On s’oriente exclusivement sur des contenus rédigés en français, donc on ne validera pas un tuto en anglais. C’est un choix éditorial arbitraire qui découle à la fois des capacités de l’équipe (valider un contenu en anglais, ça devrait le faire, mais à ce moment là pourquoi par l’allemand ou autre, et ça devient plus délicat), des capacités techniques (le site lui même est purement français), et de la pléthore de contenus disponibles par ailleurs en anglais (donc une faible valeur ajoutée). Par contre, rien ne t’empêche d’ouvrir un sujet sur le forum pour que des gens motivés par un tel projet t’aident à l’écrire/relire/améliorer. Mais on n’hébergera pas le contenu lui même ici.

+10 -0

Salut,

[…] ainsi que le tutoriel C de Zeste de Savoir (mais qui manque peut-être un petit côté "application pratique sympa" - la partie SDL du Site du Zéro était parfaite pour ça).

potterman28wxcv

Mmm… Par curiosité, comment verrais-tu la chose, du coup ? Je veux dire, le tutoriel comporte des exercices dans plusieurs chapitres ainsi que plusieurs travaux pratiques (alors certes, moins folichons que « faites votre jeu en 2D », mais quand même). Toutefois, si je saisis bien, tu souhaiterais plutôt un cours du même type que Automate the boring stuff with python ou Rust by example, mais pour le C ? Si oui, quels exercices ou applications pratiques te viendraient à l’esprit pour compléter le cours C ?

Édit : est-ce qu’une bonne âme peut convertir l’étiquette « c++ » en « c » ? :-°

+0 -0

Salut,

[…] ainsi que le tutoriel C de Zeste de Savoir (mais qui manque peut-être un petit côté "application pratique sympa" - la partie SDL du Site du Zéro était parfaite pour ça).

potterman28wxcv

Mmm… Par curiosité, comment verrais-tu la chose, du coup ? Je veux dire, le tutoriel comporte des exercices dans plusieurs chapitres ainsi que plusieurs travaux pratiques (alors certes, moins folichons que « faites votre jeu en 2D », mais quand même). Toutefois, si je saisis bien, tu souhaiterais plutôt un cours du même type que Automate the boring stuff with python ou Rust by example, mais pour le C ? Si oui, quels exercices ou applications pratiques te viendraient à l’esprit pour compléter le cours C ?

Édit : est-ce qu’une bonne âme peut convertir l’étiquette « c++ » en « c » ? :-°

Taurre

Salut ! Je trouve ça effectivement très bien qu’il y ait des exercices réguliers - l’absence d’exercices est ce que je reproche au tutoriel de OpenClassroom où ils ont enlevé une grande partie des exos (qui étaient présents dans la version du SdZ sauf si je me trompe).

Par contre effectivement les TP ne sont pas très folichons comme tu dis. Désolé je vais faire l’avocat du diable pour le reste de ce post, mais c’est des critiques qui se veulent être constructives et honnêtes :) Je trouve l’initiative de créer un tutotiel C sur ZdS absolument géniale, et il y a des détails présents dans le tuto de ZdS que j’aurais bien aimé voir sur celui de Openclassroom/SdZ.

Le TP sur les jours de la semaine, je comprends l’intérêt de manipuler des conditions imbriquées, mais en terme d’envie de coder, même maintenant en tant que programmeur j’aurais la flemme de coder les règles des années bisextiles et autres. C’est aussi difficile je pense à déboguer : un bug typique serait "C’est sensé afficher mercredi mais ça affiche vendredi", et là bonne chance pour déboguer ça en tant que débutant.

Il faut avoir l’intuition de tenter des petites valeurs pour l’année, et possiblement aussi tester ce qu’il se passe pour la toute première année bisextile depuis l’an 1, avoir le réflexe de tester des petites valeurs en entrée, ce qu’un débutant complet en programmation n’a pas.

Il y a aussi l’intérêt : je ne sais pas si c’est très amusant de coder ça. Par contre, si je regarde le TP du plus ou moins du SdZ : on peut jouer avec, si on a des bugs ils sont en général faciles à identifier, et c’est aussi un TP qui pousse à aller plus loin: aller au delà de la spécification initiale, tenter des trucs. Et c’est là que l’élève va progresser : au moment où il cesse de suivre le TP, et où il commence à prendre sa propre route pour se confronter par lui-même à des problèmes qui ne sont pas dans le TP initialement.

Pour vous aider, voici un schéma que vous pouvez suivre.

Oui mais du coup ça a moins d’intérêt si l’élève doit suivre un peu à l’aveugle un schéma donné, plutôt que de créer une solution par lui même. Car il doit alors comprendre le schéma - puis après réfléchir à comment l’adapter en C - au lieu de réfléchir par lui même à comment il pourrait s’y prendre.

Au contraire, désolé de reprendre cet exemple, mais le TP du Plus ou Moins : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14828-tp-plus-ou-moins-votre-premier-jeu

ça commence par des explications de ce que le programme doit faire, puis comment tirer un nombre aléatoire, et.. c’est tout ! Après c’est que de la débrouille, et c’est ce qui permet de progresser.

Si je regarde maintenant le TP de la calculette, là c’est suffisamment débrouille pour que ça me plaise : pas trop d’indication, le "à vous de jouer" arrive très vite, par contre c’est un peu bateau comme exemple, et un peu chaud à étendre.

Le TP string.h : pour moi c’est plus une série d’exercices qu’un vrai TP

Le TP du Puissance 4 : là c’est intéressant ! J’approuve :) C’est fun, didactique, et c’est très possible d’aller plus loin. Par contre, peut-être qu’il manque des exercices sur des chapitres d’avant qui n’en ont pas eu, comme l’allocation dynamique (et les fichiers, mais je pense pas qu’il y ait besoin d’utiliser des fichiers pour le Puissance 4).

Par contre, j’aurais peut-être donné un poil d’indication vu que la difficulté augmente considérablement : par exemple, indiquer qu’on pourrait représenter la grille comme un tableau à deux dimensions. Cette indication pourrait être dans des "spoilers" au cas où l’élève galère.

Enfin, le dernier TP de l’allocateur mémoire, qui est dans la section "avancée", ce que je comprends être : on a voulu vous en parler mais on n’a pas su où caser tout ça :p je suis un peu surpris que la section sur l’énumération est dans la section avancée, alors que c’est très utile, ne serait-ce pour les codes de retour d’erreur - et idem pour le typedef qui est introduit dans les notions avancées alors que c’est une notion très simple à comprendre qui pourrait être incorporée dans le chapitre sur les struct.

Je m’égare :) Ce TP d’allocateur mémoire, est très intéressant, mais pour un débutant en C, je ne sais pas si c’est bien pertinent - c’est pour ainsi dire ultra chaud !

Dans ce TP on leur fait manipuler :

Des alignements. Notion vue au chapitre sur les structures c’est à dire il y a 15 chapitres de ça, sans exo dessus - et puis pour être honnête, même en tant que programmeur non débutant j’aurais du mal à être à l’aise dessus

Des liste chainées. Et là j’ai une petite pensée à mes élèves de L2 dont certains continuent de galérer après 3 heures de TP, des cours magistraux dessus et un poly qui explique en détail la plupart des algo qu’on peut faire avec - j’imagine même pas ce que ça donne avec un débutant qui a juste le petit paragraphe en guise d’explications

Je pense que le TP d’allocateur mémoire est ultra chaud pour un débutant qui vient de finir son premier puissance 4 en console, vient de se farcir une dizaine de chapitres de spécificités du C, et s’apprête à attaquer du lourd avec de l’alignement et des pointeurs dans tous les sens. Des choses super chaud à déboguer, d’autant plus que vous n’introduisez pas gdb non plus.

Pour donner un ordre d’idée, dans mon université, une implémentation d’allocateur mémoire c’est un TP qui est donné à des élèves en Master 1.

Par contre pour quelqu’un qui a déjà une bonne expérience en C (on va dire un ou deux projets), et qui a envie d’en savoir plus, oui, c’est super.

Voilà donc un peu ce que je reproche au tutoriel - mais qui est, je le redis, une très bonne initiative ! :) Et c’est un peu facile de critiquer quand on n’a pas touché au projet d’écriture de près ou de loin, mais c’est mon ressenti personnel.

+1 -0

Un grand merci pour ce retour. :)

Par contre effectivement les TP ne sont pas très folichons comme tu dis. Désolé je vais faire l’avocat du diable pour le reste de ce post, mais c’est des critiques qui se veulent être constructives et honnêtes :)

potterman28wxcv

C’est bien ce que j’attendais. ;)
Honnêtement, on n’a pas eu beaucoup de retours, critiques ou non concernant le tuto, donc c’est vraiment le bienvenu.

Le TP sur les jours de la semaine, je comprends l’intérêt de manipuler des conditions imbriquées, mais en termes d’envie de coder, même maintenant en tant que programmeur j’aurais la flemme de coder les règles des années bisextiles et autres. C’est aussi difficile je pense à déboguer : un bug typique serait "C’est sensé afficher mercredi mais ça affiche vendredi", et là bonne chance pour déboguer ça en tant que débutant.

Il faut avoir l’intuition de tenter des petites valeurs pour l’année, et possiblement aussi tester ce qu’il se passe pour la toute première année bisextile depuis l’an 1, avoir le réflexe de tester des petites valeurs en entrée, ce qu’un débutant complet en programmation n’a pas.

Il y a aussi l’intérêt : je ne sais pas si c’est très amusant de coder ça. Par contre, si je regarde le TP du plus ou moins du SdZ : on peut jouer avec, si on a des bugs ils sont en général faciles à identifier, et c’est aussi un TP qui pousse à aller plus loin: aller au delà de la spécification initiale, tenter des trucs. Et c’est là que l’élève va progresser : au moment où il cesse de suivre le TP, et où il commence à prendre sa propre route pour se confronter par lui-même à des problèmes qui ne sont pas dans le TP initialement.

Pour vous aider, voici un schéma que vous pouvez suivre.

Oui mais du coup ça a moins d’intérêt si l’élève doit suivre un peu à l’aveugle un schéma donné, plutôt que de créer une solution par lui même. Car il doit alors comprendre le schéma - puis après réfléchir à comment l’adapter en C - au lieu de réfléchir par lui même à comment il pourrait s’y prendre.

Au contraire, désolé de reprendre cet exemple, mais le TP du Plus ou Moins : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14828-tp-plus-ou-moins-votre-premier-jeu

ça commence par des explications de ce que le programme doit faire, puis comment tirer un nombre aléatoire, et.. c’est tout ! Après c’est que de la débrouille, et c’est ce qui permet de progresser.

potterman28wxcv

Pour être honnête, je ne suis pas fan de ce TP non plus, pourtant c’est moi qui l’ai pondu (si ma mémoire est bonne). x)
Le truc, c’est que je souhaitais proposer un TP avant le chapitre sur les boucles, or impossible de faire un « plus ou moins » sans cela (il est nécessaire de boucler pour lire les entrées). Aussi, j’aimais bien l’idée de présenter une utilisation du switch où l’absence d’instructions break a une utilité.

Aussi, je souhaitais éviter de présenter trop de fonctions standards au début, surtout si elles manipulent autre chose que des chaînes de caractères. Typiquement, la fonction time() implique de toucher un mot sur les pointeurs ou sur la macrosonstante NULL. Ce n’est évidemment pas bloquant, mais c’est une des raisons qui font que la génération de nombres pseudo-aléatoire n’est présentée que lors du TP sur le Puissance 4.

Ceci étant dit, je me suis peut-être trop focalisé sur l’intérêt technique de l’exercice au détriment de l’intérêt du lecteur.

Si je regarde maintenant le TP de la calculette, là c’est suffisamment débrouille pour que ça me plaise : pas trop d’indication, le "à vous de jouer" arrive très vite, par contre c’est un peu bateau comme exemple, et un peu chaud à étendre.

Le TP string.h : pour moi c’est plus une série d’exercices qu’un vrai TP

potterman28wxcv

En effet, c’est un « vrai faux » TP. ^^"
Toutefois, dans les faits, il y a quand même un défi : recorder strtok().

Le TP du Puissance 4 : là c’est intéressant ! J’approuve :) C’est fun, didactique, et c’est très possible d’aller plus loin. Par contre, peut-être qu’il manque des exercices sur des chapitres d’avant qui n’en ont pas eu, comme l’allocation dynamique (et les fichiers, mais je pense pas qu’il y ait besoin d’utiliser des fichiers pour le Puissance 4).

Par contre, j’aurais peut-être donné un poil d’indication vu que la difficulté augmente considérablement : par exemple, indiquer qu’on pourrait représenter la grille comme un tableau à deux dimensions. Cette indication pourrait être dans des "spoilers" au cas où l’élève galère.

potterman28wxcv

J’en prends note.

Enfin, le dernier TP de l’allocateur mémoire, qui est dans la section "avancée", ce que je comprends être : on a voulu vous en parler mais on n’a pas su où caser tout ça :p

potterman28wxcv

En fait, l’allocateur mémoire est également le TP de fin du K&R, sauf que ce dernier se base sur l’appel système sbrk() et non sur un tableau de classe de stockage statique (si je ne dis pas de bêtises, je n’ai plus le bouquin sous la main). Je trouvais cela pas mal comme exercice pour travailler l’alignement, les pointeurs, les structures, les unions (bon, depuis que le tuto suit la norme C11 ce n’est plus le cas puisqu’il y a _Alignas, mais bref), etc. Maintenant, c’est sûr que c’est pas un TP facile, cela étant c’est celui de la partie « avancée », et de ce côté il n’usurpe pas son nom. :p

je suis un peu surpris que la section sur l’énumération est dans la section avancée, alors que c’est très utile, ne serait-ce pour les codes de retour d’erreur - et idem pour le typedef qui est introduit dans les notions avancées alors que c’est une notion très simple à comprendre qui pourrait être incorporée dans le chapitre sur les struct.

potterman28wxcv

Pour le typedef, je ne voulais pas le présenter avec les structures parce que je ne souhaite pas que cela y soit assimilé. En créant un chapitre à part, j’insiste bien sur le fait que c’est un moyen à part de déclarer un type. Aussi, j’aime personnellement bien de ne pas utiliser de typedef pour les structures, unions et énumérations. C’est plus verbeux, mais cela permet d’indiquer clairement ce que l’on manipule (struct list est clair, list ne l’est pas : qu’est-ce ? Un pointeur ? Une structure ? Une union ? Un tableau ?). Je sais que c’est parfois justement le résultat souhaité, notamment dans le cas des ADT, mais je n’en suis pas partisan.

Pour les énumérations, elles pourraient effectivement être présentées auparavant, je pense qu’elles sont justes là pour pouvoir également donner un exemple avec les drapeaux (présenté dans le chapitre sur la manipulation des bits).

Je m’égare :) Ce TP d’allocateur mémoire, est très intéressant, mais pour un débutant en C, je ne sais pas si c’est bien pertinent - c’est pour ainsi dire ultra chaud !

Dans ce TP on leur fait manipuler :

Des alignements. Notion vue au chapitre sur les structures c’est à dire il y a 15 chapitres de ça, sans exo dessus - et puis pour être honnête, même en tant que programmeur non débutant j’aurais du mal à être à l’aise dessus

Des liste chainées. Et là j’ai une petite pensée à mes élèves de L2 dont certains continuent de galérer après 3 heures de TP, des cours magistraux dessus et un poly qui explique en détail la plupart des algo qu’on peut faire avec - j’imagine même pas ce que ça donne avec un débutant qui a juste le petit paragraphe en guise d’explications

Je pense que le TP d’allocateur mémoire est ultra chaud pour un débutant qui vient de finir son premier puissance 4 en console, vient de se farcir une dizaine de chapitres de spécificités du C, et s’apprête à attaquer du lourd avec de l’alignement et des pointeurs dans tous les sens. Des choses super chaud à déboguer, d’autant plus que vous n’introduisez pas gdb non plus.

Pour donner un ordre d’idée, dans mon université, une implémentation d’allocateur mémoire c’est un TP qui est donné à des élèves en Master 1.

Par contre pour quelqu’un qui a déjà une bonne expérience en C (on va dire un ou deux projets), et qui a envie d’en savoir plus, oui, c’est super.

potterman28wxcv

Il y a effectivement un gros écart de niveaux entre les deux premières parties et la troisième, en tous les cas pour plusieurs chapitres. Maintenant, c’est bien le but de cette partie : présenter des notions avancées. Tu as pris l’exemple du TP, mais sincèrement, je pense que les chapitres sur la représentation des types, les limites des types, la représentation des chaînes de caractères et les caractères larges sont certainement nettement plus imbuvables en première lecture pour quelqu’un qui a fini la seconde partie. ^^"

Ce n’est pas l’effet recherché (encore heureux :p ), on a essayé de rendre cela aussi abordable que possible, mais voilà, ce ne sont pas des sujets évidents à traiter ni à expliquer. Je ne prétends pas que cela ne peut pas être amélioré, c’est juste qu’un équilibre n’est pas évident à trouver lors de la rédaction.

Voilà donc un peu ce que je reproche au tutoriel - mais qui est, je le redis, une très bonne initiative ! :) Et c’est un peu facile de critiquer quand on n’a pas touché au projet d’écriture de près ou de loin, mais c’est mon ressenti personnel.

potterman28wxcv

Y a pas de soucis, toute critique constructive est la bienvenue. :)
Par ailleurs, si tu as des suggestions d’ajouts et/ou de modifications, n’hésite pas à proposer, le tuto n’est pas figé dans le marbre de même que ses auteurs (c’est bien le but de la licence CC-0). ;)

+0 -0

Je répondrai plus en détail demain :) mais pour le typedef, j’aime beaucoup la convention de rajouter un "_t" au type pour indiquer que c’est bien un type

struct list {
  /* stuff */
};

typedef struct list list_t; // si je ne me trompe pas dans l'ordre du typedef :p

Par contre, oui, un typedef struct list list pour moi c’est à éviter.

mais pour le typedef, j’aime beaucoup la convention de rajouter un "_t" au type pour indiquer que c’est bien un type […]

potterman28wxcv

C’est une pratique fréquente effectivement, il faut juste faire attention au fait que les identificateurs de type finissant par _t sont réservés par la norme POSIX, il me semble.

+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