Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refonte du cours C

16 août 2017 à 10:50:01

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". 

https://csis.pace.edu/~bergin/PedPat1.3.html#spiral

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.

-
Edité par michelbillaud 16 août 2017 à 10:57:38

  • Partager sur Facebook
  • Partager sur Twitter
16 août 2017 à 11:14:05

Faire tout d'un coup la notion la moins comprise du C ne peut pas être une bonne idée en effet. 

  • Partager sur Facebook
  • Partager sur Twitter
16 août 2017 à 12:29:33

"oui mais on a toujours fait comme ça".

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é.

http://www.softwarepreservation.org/projects/FORTRAN/index.html

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.

-
Edité par michelbillaud 16 août 2017 à 12:43:46

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2017 à 20:36:14

Pour le coup je pense qu'il faudrait faire de cours sur le C :

- Un expliquant les bases et les fondamentaux :

  • Le fonctionnement du compilateur et les différentes étapes
  • Les variables et tableaux
  • La séparation du code (.h et .c) ainsi que le préprocesseur
  • Les fonctions
  • Les pointeurs (simple)
  • Les structures
  • La SDL (pour pimenter le tout)

- un autre plus avancé (notamment la prog en C sur linux) :

  • Les unions
  • Les pointeurs (avancé : pointeurs de fonctions,...)
  • Ce qu'apporte la norme C11
  • Les signaux
  • la gestions des processus (fork(), daemon(), exec(), ...)
  • ...

-
Edité par Dr_BlackApple 4 septembre 2017 à 20:41:34

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2017 à 20:48:13

Dr_BlackApple a écrit:

- 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

  • Partager sur Facebook
  • Partager sur Twitter
Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
8 septembre 2017 à 1:43:16 - Message modéré pour le motif suivant : Message complètement hors sujet


23 septembre 2017 à 15:36:07

salut des nouvelles sur la refonte ?
  • Partager sur Facebook
  • Partager sur Twitter

technicien systèmes et réseaux 

23 septembre 2017 à 16:58:57

Apparemment, il n'y personne qui ait à la fois

  • l'envie
  • les compétences
  • le temps

pour pondre un cours de C décent destiné aux débutants complets.

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2017 à 17:29:00

Il faudrait revoir la partie du cours pour installer SDL2 car c'est impossible maintenant, je suis bloqué.
  • Partager sur Facebook
  • Partager sur Twitter
Un bon programmeur est un programmeur fainéant !
Anonyme
23 septembre 2017 à 22:26:30

bha je me suis mis à sdl 1.2  perso , pas moyen de trouver un tuto décent  gratuit sur  sdl 2   , en français en tous cas ^^
  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2017 à 22:40:42

Pcc777 a écrit:

bha je me suis mis à sdl 1.2  perso , pas moyen de trouver un tuto décent  gratuit sur  sdl 2   , en français en tous cas ^^


C'est quoi la différence entre les deux?
  • Partager sur Facebook
  • Partager sur Twitter
Un bon programmeur est un programmeur fainéant !
Anonyme
23 septembre 2017 à 22:59:43

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 ...

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2017 à 23:07:22

Ok mais moi je voudrais savoir en quoi sdl2 est mieux ?
  • Partager sur Facebook
  • Partager sur Twitter
Un bon programmeur est un programmeur fainéant !
23 septembre 2017 à 23:09:21

@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 ?

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
Anonyme
23 septembre 2017 à 23:11:12

regarde  là quelqu'un  a poser la même question que toi ici :  https://openclassrooms.com/forum/sujet/difference-en-sdl-1-2-15-et-sdl-2-0

  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2017 à 3:06:10

@Medhi: Ça n'a strictement rien à voir. SDL2 à mis 15ans avant de sortir ... C'est une refonte majeur ...

https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer#History

  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

11 novembre 2017 à 9:56:37

Pcc777 a écrit:

bha je me suis mis à sdl 1.2  perso , pas moyen de trouver un tuto décent  gratuit sur  sdl 2   , en français en tous cas ^^


Il en existe un sur zeste de savoir assez complet et facile à trouver...
  • Partager sur Facebook
  • Partager sur Twitter
Un bon programmeur est un programmeur fainéant !
Anonyme
13 novembre 2017 à 14:13:54

oui je l 'ai trouvé depuis le temps mais merci quand même ;)
  • Partager sur Facebook
  • Partager sur Twitter
26 novembre 2017 à 20:17:14

Salut,

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")

-
Edité par BozoUntel 27 novembre 2017 à 12:20:17

  • Partager sur Facebook
  • Partager sur Twitter
Abou
26 novembre 2017 à 21:53:39

BozoUntel a écrit:

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.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

27 novembre 2017 à 10:40:51

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

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2017 à 12:16:27

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.

  • Partager sur Facebook
  • Partager sur Twitter
Abou
27 novembre 2017 à 12:27:41

Quand tuBozoUntel a écrit:

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

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2017 à 12:36:43

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 ;)

  • Partager sur Facebook
  • Partager sur Twitter
Abou
27 novembre 2017 à 12:37:49

BozoUntel a écrit:

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

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

27 novembre 2017 à 12:46:47

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 ?

  • Partager sur Facebook
  • Partager sur Twitter
Abou
27 novembre 2017 à 12:53:57

BozoUntel a écrit:

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

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

27 novembre 2017 à 13:32:26

BozoUntel a écrit:

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

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2017 à 13:52:49

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.

-
Edité par robun 27 novembre 2017 à 13:53:30

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2017 à 14:14:00

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

  • Partager sur Facebook
  • Partager sur Twitter