Sinon, l'approche pédagogique peut aussi être considérée comme obsolète. Visiblement il y a l'idée malheureusement (très classique) de "faire les pointeurs", en bloc. Pour s'en débarrasser.
Alors que c'est bien plus judicieux d'avoir une approche "en spirale".
D'abord introduire un besoin simple et naturel (1), par exemple fonction qui doit modifier un de ses paramètres, par exemple pour initialiser une structure (2). Passer les adresses au lieu des valeurs, travailler avec des arguments qui sont des pointeurs. & et *, et voila.
Ensuite on les utilise pour les paramètres pendant un certain nombre d'exercices, et ensuite on peut y revenir plus tard pour des variables pointeurs à plein titre (allocation dynamique). Et encore plus tard, pour des structures chainées, qui relèvent plus de l'algorithmique.
---
(1) pas "et si on voulait qu'une fonction retourne deux données", problème qui ne s'est absolument pas posé dans les exercices précédents. Un exemple artificiel, rien de tel pour laisser penser que ce qu'on explique ne sert à rien en réalité.
(2) évidemment, si on s'obstine avec les exemples sur les tableaux et les chaines, ça va merder comme explication, vu le statut baroque des tableaux en C.
Dit-on en oubliant qu'au début, le langage C était enseigné à des gens qui connaissaient Fortran/pascal et/ou l'assembleur. Que les premiers tutoriels ont été écrits dans ce contexte, et que les suivants ont été pompés les uns sur les autres.
Pour revenir encore plus loin, dans un des premiers rapport sur Fortran (54 ?) il est écrit qu'un gars a été invité, et a appris Fortran en une seule journée, et a écrit un programme de calcul qui marche. Evidemment, le gars, il savait avant écrire des programmes de calcul en assembleur, et donc on pouvait lui présenter les choses dans un certain ordre. Il ne lui a certainement pas été nécessaire de passer une heure à lui expliquer la notion de boucle, ou que =, c'est l'affectation, pas l'égalité.
C'est pas faux, comme c'est écrit, de dire aussi que c'est beaucoup plus facile d'enseigner Fortran que l'assembleur à des débutants complets, sauf que, si on suit le même plan de cours qu'à un type qui sait déjà programmer, ça va pas être optimal.
Faut s'adapter la présentation à l'auditoire. La pédagogie, c'est un vrai boulot.
- un autre plus avancé (notamment la prog en C sur linux) :
[…]
Les signaux
la gestions des processus (fork(), daemon(), exec(), ...)
...
Donner ne serait-ce que des bases sur le développement POSIX et sur les Unix en général nécessiterait d'écrire un cours/livre séparé. Il faudrait déjà savoir écrire un cours de C potable avant de se lancer dans un tel projet.
EDIT: En relisant, je viens de comprendre que « de cours sur le C » ne voulait pas dire « du cours sur le C » mais « deux cours sur le C ». Le message reste valide quand même, si ce n'est que les unions, les pointeurs, les standard récents et une introduction sur les signaux devraient être inclus dans le cours de base.
- Edité par Mad scientist 4 septembre 2017 à 21:00:51
bon après j ' y suis allé un peu fort il y a quand même deux trois tutos bien , mais faut croiser les sources pour avoir un tout correct et j ' avance pas à la vitesse que je voudrais ...
@Pcc777 : vu que la partie SDL du tutoriel d'OC est plutôt bof (surtout niveau conception), alors on va dire que je ne partage pas trop ton point de vue. Tu as testé quels tutoriels sur la SDL 2 ?
moi je comprend que certains, la majorité en fait, veuillent un tuto qui parte du simple vers le compliqué voir l'au-dela comme cela a été écrit, mais en tant que simple amateur du c je trouve que ce tuto devrait rester dans les limites du débutant, quitte à faire un autre tuto séparé du premier, pour le niveau plus avancé.
Le tuto débutant devrait aussi contenir :
- Pourquoi et comment choisir un compilateur (je ne vois pas pourquoi forcer sur codeBlock)
- Le C de base.
- Pourquoi et comment choisir une librairie graphique, comment parametrer le compilateur afin d'utiliser une librairie graphique.
- Idem pour les autres librairies utilisables pour un jeu : TTF, CURSES, etc
- Reprise d'un tuto SDL de jeu 2D déjà fait sur le site, mais en SDL 2, adapté à aujourd'hui.
Voilà, voilà ...
EDIT : Correction d'une horrible faute ! (Corrigée, sur le mot "contiendrait", devenu "contenir")
mais en tant que simple amateur du c je trouve que ce tuto devrait rester dans les limites du débutant
Oui mais le langage ne peut pas être simple par magie. Au bout d'un moment, si tu veux écrire du code juste, correct, valide, en C, ça demande du boulot. Et si on n'est pas près à faire cet effort autant utiliser un autre langage de programmation. Le C n'est pas un langage facile à manipuler, même pour faire des choses simples.
BozoUntel a écrit:
- Le C de base.
Sauf que ça fait déjà bien plus que ce que la majorité des débutants pensent.
Finalement, la question c'est de savoir si ça vaut le coup de développer un cours de C pour débutants complets. Il y a deux objectifs distincts : apprendre à programmer, et apprendre le C.
Il y a une méprise sur la prétendue simplicité de C : c'est un langage qui ne comporte que peu de concepts. Et par conséquent, l'utiliser pour faire quoi que ce soit d'un peu utile avec des mécanismes rudimentaires demande beaucoup de travail (pallier l'absence de conteneurs, par exemple), de méthodologie, d'organisation, etc. Qui s'ajoutent aux difficultés de l'apprentissage de la programmation en général (notion de boucle, découpage procédural, algorithmique etc).
remarquez y a encore plus simple : programmer en assembleur sur un PDP 4. Y a jamais que 16 instructions différentes, et avec ça on fait tout. http://s3data.computerhistory.org/brochures/dec.pdp4.1963.102646216.pdf
C'est peut être plus sage que les débutants apprennent les bases avec un langage plus facile (par exemple Processing), et qu'ils reviennent faire du C une fois qu'ils ont un peu compris en quoi consistait la programmation. Plutot que se pourrir la vie dès le début avec des pointeurs pour faire de malheureux passages de paramètres.
- Edité par michelbillaud 27 novembre 2017 à 10:43:05
Franchement je pense qu'il ne faut pas sous-estimer les complets débutants car j'ai remarqué qu'ils comprennent en quelques secondes ce qu'est une boucle et une condition, ainsi qu'une structure, il suffit de bien leur présenter la chose, j'ai eu à le faire auprès de quelques ados et ils n'avaient pas de difficulté à saisir le principe et à l'appliquer à leur cas ou leur projet.
En fait cela dépend de la façon dont on présente la chose, cela semble plus compliqué quand on le fait de façon scolaire et intellectuelle, mais ça paraît beaucoup plus motivant et facile à comprendre quand on présente le sujet avec des mots simples, avec citation d'exemples au besoin, dans une optique de jeux vidéo, car ça leur parle mieux, même si ces débutants sont des adultes.
Je pense donc qu'apprendre la programmation peut se faire directement avec le C, les gens ne sont pas bêtes.
Franchement je pense qu'il ne faut pas sous-estimer les complets débutants car j'ai remarqué qu'ils comprennent en quelques secondes ce qu'est une boucle et une condition, ainsi qu'une structure, il suffit de bien leur présenter la chose, j'ai eu à le faire auprès de quelques ados et ils n'avaient pas de difficulté à saisir le principe et à l'appliquer à leur cas ou leur projet.
Tu m'expliqueras comment on fait, parce que j'enseigne la programmation depuis plusieurs décennies, et mes collègues et moi-mêmes trouvent ça toujours très difficile à faire passer.
Quand tu dis qu'ils comprennent en quelques secondes, tu veux dire que tu leur as demandé si ils comprenaient, et qu'ils ont répondu oui ? Ou que tu leur as donné un vrai problème où il faut faire des boucles, genre tracer une grille avec des carreaux noirs et blancs, et qu'ils ont été capables de le résoudre en quelques secondes ? :-)
- Edité par michelbillaud 27 novembre 2017 à 12:29:35
En effet ils ont fait des petits codes où il y avait des boucles, il s'agissait de créer des lignes soit verticales soit horizontales, mais le fait est que c'est la façon de présenter un sujet qui peut lui donner un aspect rebutant ou difficile alors qu'au fond il est peut-être simple, d'ailleurs tout sujet peut être simplifier aussi en le décomposant et en étudiant chaque partie avec exemples simples à l'appui.
C'est vrai que le mot "variable" par exemple ou "structure" peut faire peur mais on peut largement présenter ça sous forme simple en indiquant des comparaison de la vie de tous les jours sur ce qu'est une variable par exemple.
C'est sûr que si tu leur parles d'entrée de variables, de paramètres, d'adresses, et compagnie ça va pas le faire
Je pense donc qu'apprendre la programmation peut se faire directement avec le C, les gens ne sont pas bêtes.
On n'a jamais dit que les gens étaient bêtes mais là on parle de C. Le langage où ce programme faux s'exécute sans sourciller si on a pas demandé au compilateur de nous produire des canaris pour faire apparaître l'erreur à l'exécution :
#include <stdio.h>
int main(){
int t[5];
for(int i = 0; i <= 5; i++)
scanf("%d", &t[i]);
for(int i = 0; i <= 5; i++)
printf("%d\n", t[i]);
}
Dans un cadre comme ça, où le moindre programme ultra basique peut fonctionner alors qu'il contient une erreur triviale (mais pas pour le débutant), faudra m'expliquer comment on peut sereinement penser que tout ça va enseigner la rigueur nécessaire pour développer correctement.
- Edité par Ksass`Peuk 27 novembre 2017 à 12:38:38
Ksass : Parce qu'au débutant complet tu veux commencer par un scanf ? Lol
Il faut y aller étape par étape, commencer par les notions de variables, de constantes, etc en augmentant le niveau de difficulté après chaque instruction, on ne peut comprendre ce qu'est un multivibrateur si on n'a pas compris ce qu'est un transistor, enfin prend un autre exemple de la vie de tous les jours si tu veux mais ce que je veux dire c'est que scanf peut se voir qu'après un certain temps par les débutants complet.
Pourquoi vous voyez le C si difficile à expliquer ?
Ksass : Parce qu'au débutant complet tu veux commencer par un scanf ? Lol
Remplace le scanf par t[i] = 42, le problème n'est pas dans la saisie. Le code est toujours aussi faux et s'exécute toujours sans aucun problème.
BozoUntel a écrit:
Pourquoi vous voyez le C si difficile à expliquer ?
Parce que 196 UB dans la norme, dont un bon paquet d'entre eux peuvent être produis avec quelques lignes de code très simple qu'un débutant pourrait tout à fait écrire. Je vois des experts du langage se faire piéger sur des codes de quelques lignes tous les jours à cause de l'horreur de sa norme, alors des débutants.
- Edité par Ksass`Peuk 27 novembre 2017 à 16:52:45
mais on peut largement présenter ça sous forme simple en indiquant des comparaison de la vie de tous les jours sur ce qu'est une variable par exemple.
Ah, les analogies de la vie courante, ça nous en amène des bien bonnes. Déjà que quand on dit qu'une variable a _contient_ quelque chose, ça va partir en live. Parce que qu'on dit après que b = a; ça met dans b ce qu'il y a dans a, et là, pouf, y a plus personne dans a ?
Plus subtil, quand on dit que while ( a == b) { .... } ça fait répeter tant que a est égal à b, y en a qui vont comprendre que _dès que_ a ou b changent, ça fait sortir de la boucle. Alors que non, il faut attendre de repasser sur le test.
Décomposer en trucs simples, aborder les notions une par une : c'est bien ce qu'on fait. Et c'est pour ça que ça ne se fait pas "en quelques secondes". Parce que les exercices de familiarisation avec la notion , d'application, et la résolution de problèmes en faisant appel à ces notions, ça prend du temps.
A part ça, si tu enlèves les variables, les fonctions, les paramètres, tu fais quoi avec C ? Des boucles sans variables ? Tu n'appelles pas printf ?
- Edité par michelbillaud 27 novembre 2017 à 13:36:54
Est-ce que, du coup, on devrait considérer qu'un cours d'initiation en C doit avoir pour but d'enseigner les bases du C à un public qui a déjà un peu programmé, sans s'occuper de lui enseigner les bases de la programmation ? (Ça me semblerait une bonne idée vu qu'à mon avis débuter la programmation en C est difficile.) Et est-ce qu'un tel cours serait vraiment différent des cours habituels (cours du Site du Zéro ou de Zeste de Savoir notamment) qui s'adressent à des débutants complets ? Oui, il n'y aurait pas les deux premiers chapitres où on explique (notamment) ce que signifie compiler et ce qu'est une variable, mais pour le reste, est-ce que ça changerait quelque chose ?
Mais bon, je pense que l'urgence, c'est de mettre à jour la partie sur la SDL (on voit bien en suivant ce forum qu'il y a une réelle demande à ce sujet), quitte à garder le reste du cours comme il est.
Dans ce cas, il faut faire un tutoriel de SDL pour ceux qui connaissent un peu C. C'est une autre histoire.
Mais je comprends bien que si on veut enseigner la programmation aux débutants, de nos jours c'est un peu tristounet de se restreindre à des exercices avec des dialogues en mode texte (*), et qu'on préfère des machins qui bougent et qui clignotent. D'où la tentation d'y mêler une bibliothèque graphique, qui est hors sujet, mais donne accès à des illustrations plus motivantes.
(*) quoique d'aucuns paient fort cher des formations où on leur fait réécrire inlassablement strlen et strcpy.
- Edité par michelbillaud 27 novembre 2017 à 14:14:36
technicien systèmes et réseaux
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C