Marc Boyer a écrit :
Tu va au devant de 3 problèmes avec les biblo graphiques:
- d'abord, t'es obligé de présenter des "commandes magiques" pour que
ça marche (genre #include <titi.h> + compilation avec -I /usr/lib...),
Non, la SDL ou ncurses marche aussi facilement que si tu utilises des fonctions
de math.h, suffit de lier genre -lncurses .
te les faire installer sur les machines (et les universités sont pas
toutes riches en ingé système),
Ya rien à faire, ya des paquet tout prets.
et devoir déboguer des usages bizares
de la lib que tu n'avais pas imaginé
Le but n'est pas de faire de la programmation graphique, c'est d'utiliser une
lib non standard et de se familiariser à certaines généralités (instanciées dans
ta lib graphique).
- un bon nombre d'étudiants passent leur temps à vouloir changer la
couleur de fond, la fonte, et passent à côté de l'objectif de
l'enseignement,
Tu peux poser des limites. Je répète le but n'est pas de faire de la
programmation graphique.
- les bibliothèques d'IHM fonctionnent sur une prog évenementielle
(ce qu'on appelait "callback"), qui demande encore du temps de
présentation.
OK mais ça c'est autre chose, toi tu parles de programmer un GUI (genre GTK)
mais là on s'éloigne de l'apprentissage du C. Tu peux faire un peu de
programmation graphique pour apprendre à utiliser une bibliothèque non standard
sans faire de programmation événementielle (ou alors très limitée) parce que
sinon tu vas rentrer dans des détails qui n'ont plus rien à voir avec
l'apprentissage du C.
Ca, en 2009, baser un cours d'algorithmique sur le C me semble un bien mauvais
choix.
Il ne s'agit pas d'un cours d'algorithmique à proprement parler, il s'agit de
faire des expérimentations algorithmiques. Tu disposes d'un langage de
programmation et tu cherches à résoudre des problèmes de nature algorithmique en
utilisant ce langage (vu comme un outil).
Enseigner le C ne se justifie que si on considère le C comme un langage
dans le domaine professionnel de la formation.
Et bien, nombreuses sont les facs où on enseigne le C aux étudiants de maths et
de physique jusqu'en L2 voire L3 (pour des méthodes numériques par exemple).
Marc Boyer a écrit :
Tu va au devant de 3 problèmes avec les biblo graphiques:
- d'abord, t'es obligé de présenter des "commandes magiques" pour que
ça marche (genre #include <titi.h> + compilation avec -I /usr/lib...),
Non, la SDL ou ncurses marche aussi facilement que si tu utilises des fonctions
de math.h, suffit de lier genre -lncurses .
te les faire installer sur les machines (et les universités sont pas
toutes riches en ingé système),
Ya rien à faire, ya des paquet tout prets.
et devoir déboguer des usages bizares
de la lib que tu n'avais pas imaginé
Le but n'est pas de faire de la programmation graphique, c'est d'utiliser une
lib non standard et de se familiariser à certaines généralités (instanciées dans
ta lib graphique).
- un bon nombre d'étudiants passent leur temps à vouloir changer la
couleur de fond, la fonte, et passent à côté de l'objectif de
l'enseignement,
Tu peux poser des limites. Je répète le but n'est pas de faire de la
programmation graphique.
- les bibliothèques d'IHM fonctionnent sur une prog évenementielle
(ce qu'on appelait "callback"), qui demande encore du temps de
présentation.
OK mais ça c'est autre chose, toi tu parles de programmer un GUI (genre GTK)
mais là on s'éloigne de l'apprentissage du C. Tu peux faire un peu de
programmation graphique pour apprendre à utiliser une bibliothèque non standard
sans faire de programmation événementielle (ou alors très limitée) parce que
sinon tu vas rentrer dans des détails qui n'ont plus rien à voir avec
l'apprentissage du C.
Ca, en 2009, baser un cours d'algorithmique sur le C me semble un bien mauvais
choix.
Il ne s'agit pas d'un cours d'algorithmique à proprement parler, il s'agit de
faire des expérimentations algorithmiques. Tu disposes d'un langage de
programmation et tu cherches à résoudre des problèmes de nature algorithmique en
utilisant ce langage (vu comme un outil).
Enseigner le C ne se justifie que si on considère le C comme un langage
dans le domaine professionnel de la formation.
Et bien, nombreuses sont les facs où on enseigne le C aux étudiants de maths et
de physique jusqu'en L2 voire L3 (pour des méthodes numériques par exemple).
Marc Boyer a écrit :
Tu va au devant de 3 problèmes avec les biblo graphiques:
- d'abord, t'es obligé de présenter des "commandes magiques" pour que
ça marche (genre #include <titi.h> + compilation avec -I /usr/lib...),
Non, la SDL ou ncurses marche aussi facilement que si tu utilises des fonctions
de math.h, suffit de lier genre -lncurses .
te les faire installer sur les machines (et les universités sont pas
toutes riches en ingé système),
Ya rien à faire, ya des paquet tout prets.
et devoir déboguer des usages bizares
de la lib que tu n'avais pas imaginé
Le but n'est pas de faire de la programmation graphique, c'est d'utiliser une
lib non standard et de se familiariser à certaines généralités (instanciées dans
ta lib graphique).
- un bon nombre d'étudiants passent leur temps à vouloir changer la
couleur de fond, la fonte, et passent à côté de l'objectif de
l'enseignement,
Tu peux poser des limites. Je répète le but n'est pas de faire de la
programmation graphique.
- les bibliothèques d'IHM fonctionnent sur une prog évenementielle
(ce qu'on appelait "callback"), qui demande encore du temps de
présentation.
OK mais ça c'est autre chose, toi tu parles de programmer un GUI (genre GTK)
mais là on s'éloigne de l'apprentissage du C. Tu peux faire un peu de
programmation graphique pour apprendre à utiliser une bibliothèque non standard
sans faire de programmation événementielle (ou alors très limitée) parce que
sinon tu vas rentrer dans des détails qui n'ont plus rien à voir avec
l'apprentissage du C.
Ca, en 2009, baser un cours d'algorithmique sur le C me semble un bien mauvais
choix.
Il ne s'agit pas d'un cours d'algorithmique à proprement parler, il s'agit de
faire des expérimentations algorithmiques. Tu disposes d'un langage de
programmation et tu cherches à résoudre des problèmes de nature algorithmique en
utilisant ce langage (vu comme un outil).
Enseigner le C ne se justifie que si on considère le C comme un langage
dans le domaine professionnel de la formation.
Et bien, nombreuses sont les facs où on enseigne le C aux étudiants de maths et
de physique jusqu'en L2 voire L3 (pour des méthodes numériques par exemple).
Bien sûr. Déjà, les types, en 1h...
Et tu cases où les opérateurs et les structures de controle ?
Bien sûr. Déjà, les types, en 1h...
Et tu cases où les opérateurs et les structures de controle ?
Bien sûr. Déjà, les types, en 1h...
Et tu cases où les opérateurs et les structures de controle ?
(Marc Espie) writes:
| In article <4aae3151$0$22542$,
| candide wrote:
| >Marc Boyer a écrit :
| >> Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
| >> des liens entre connaissances, et ces liens (sous réserve qu'ils soient
| >> vrais), confortent les apprentissage.
| >
| >Question d'équilibre car il y a un risque de surcharge. Mon principe
| >d'enseignement favori : le rasoir d'Occam.
|
| Ca depend de ce que tu dois enseigner. Moi l'idee, c'est de les confronter
| a la realite du code existant, a terme. Donc je ne peux pas trop simplifier,
| ni abandonner des trucs. Ou alors, tu te retrouves a leur presenter un
| langage "jouet" qui ressemble a du C... apres, ca te fait des programmeurs
| qui s'integrent mal a d'autres equipes, qui ont un style tres particulier
| et bizarre... alors qu'il y a quand meme un style a peu pres standard de
| codage en C (qui vaut ce qu'il vaut, mais au moins, les gens ne sont pas
| paumes en le lisant).
En effet, la question est : quel est le but du cours ? Former des gens
qui, à la fin, peuvent écrire des programmes de tailles modérées, peuvent
s'intégrer dans une équipe ? Ou une tête remplie de connaissance livresque ?
espie@lain.home (Marc Espie) writes:
| In article <4aae3151$0$22542$426a34cc@news.free.fr>,
| candide <candide@free.invalid> wrote:
| >Marc Boyer a écrit :
| >> Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
| >> des liens entre connaissances, et ces liens (sous réserve qu'ils soient
| >> vrais), confortent les apprentissage.
| >
| >Question d'équilibre car il y a un risque de surcharge. Mon principe
| >d'enseignement favori : le rasoir d'Occam.
|
| Ca depend de ce que tu dois enseigner. Moi l'idee, c'est de les confronter
| a la realite du code existant, a terme. Donc je ne peux pas trop simplifier,
| ni abandonner des trucs. Ou alors, tu te retrouves a leur presenter un
| langage "jouet" qui ressemble a du C... apres, ca te fait des programmeurs
| qui s'integrent mal a d'autres equipes, qui ont un style tres particulier
| et bizarre... alors qu'il y a quand meme un style a peu pres standard de
| codage en C (qui vaut ce qu'il vaut, mais au moins, les gens ne sont pas
| paumes en le lisant).
En effet, la question est : quel est le but du cours ? Former des gens
qui, à la fin, peuvent écrire des programmes de tailles modérées, peuvent
s'intégrer dans une équipe ? Ou une tête remplie de connaissance livresque ?
(Marc Espie) writes:
| In article <4aae3151$0$22542$,
| candide wrote:
| >Marc Boyer a écrit :
| >> Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
| >> des liens entre connaissances, et ces liens (sous réserve qu'ils soient
| >> vrais), confortent les apprentissage.
| >
| >Question d'équilibre car il y a un risque de surcharge. Mon principe
| >d'enseignement favori : le rasoir d'Occam.
|
| Ca depend de ce que tu dois enseigner. Moi l'idee, c'est de les confronter
| a la realite du code existant, a terme. Donc je ne peux pas trop simplifier,
| ni abandonner des trucs. Ou alors, tu te retrouves a leur presenter un
| langage "jouet" qui ressemble a du C... apres, ca te fait des programmeurs
| qui s'integrent mal a d'autres equipes, qui ont un style tres particulier
| et bizarre... alors qu'il y a quand meme un style a peu pres standard de
| codage en C (qui vaut ce qu'il vaut, mais au moins, les gens ne sont pas
| paumes en le lisant).
En effet, la question est : quel est le but du cours ? Former des gens
qui, à la fin, peuvent écrire des programmes de tailles modérées, peuvent
s'intégrer dans une équipe ? Ou une tête remplie de connaissance livresque ?
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une abstraction,
il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Meme
avec toute la bonne volonte du monde, j'ai toujours un mal fou a faire
rentrer la notion de portabilite.
La notion d'undefined behavior est tres
difficile a integrer.
L'exemple standard, c'est les etudiants qui ne tapent pas le -O2 -Wall du gcc
(parce que c'est trop long)
et qui me pondent du code qui "tombe en marche"
(grace a la superbe idee de gcc d'initialiser a 0 les variables locales
en -O0), et a qui j'ai un mal fou a expliquer que leur programme est buggue
jusqu'a l'os...
Donc, j'ai du code buggue, et des questions, et je suis bien oblige d'expliquer
que le code "tape" a cote, ce qu'une fonction avec pas le bon nombre de
parametres va faire, et tout et tout. En fait, c'est tres dommage que,
sur les compilo modernes, le mode par defaut ne soit pas hyper-strict.
Genre -Wall -O1 -Werror...
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une abstraction,
il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Meme
avec toute la bonne volonte du monde, j'ai toujours un mal fou a faire
rentrer la notion de portabilite.
La notion d'undefined behavior est tres
difficile a integrer.
L'exemple standard, c'est les etudiants qui ne tapent pas le -O2 -Wall du gcc
(parce que c'est trop long)
et qui me pondent du code qui "tombe en marche"
(grace a la superbe idee de gcc d'initialiser a 0 les variables locales
en -O0), et a qui j'ai un mal fou a expliquer que leur programme est buggue
jusqu'a l'os...
Donc, j'ai du code buggue, et des questions, et je suis bien oblige d'expliquer
que le code "tape" a cote, ce qu'une fonction avec pas le bon nombre de
parametres va faire, et tout et tout. En fait, c'est tres dommage que,
sur les compilo modernes, le mode par defaut ne soit pas hyper-strict.
Genre -Wall -O1 -Werror...
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une abstraction,
il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Meme
avec toute la bonne volonte du monde, j'ai toujours un mal fou a faire
rentrer la notion de portabilite.
La notion d'undefined behavior est tres
difficile a integrer.
L'exemple standard, c'est les etudiants qui ne tapent pas le -O2 -Wall du gcc
(parce que c'est trop long)
et qui me pondent du code qui "tombe en marche"
(grace a la superbe idee de gcc d'initialiser a 0 les variables locales
en -O0), et a qui j'ai un mal fou a expliquer que leur programme est buggue
jusqu'a l'os...
Donc, j'ai du code buggue, et des questions, et je suis bien oblige d'expliquer
que le code "tape" a cote, ce qu'une fonction avec pas le bon nombre de
parametres va faire, et tout et tout. En fait, c'est tres dommage que,
sur les compilo modernes, le mode par defaut ne soit pas hyper-strict.
Genre -Wall -O1 -Werror...
Là tu parles de programmes de taille relativement conséquentes.
Le pauvre gars devrait peut être apprendre à écrire de simples
programmes d'abord avant de s'occuper de l'organisation. Je pense.
Savoir écrire des programmes demande beaucoup de pratique.
Apprendre et savoir organiser ses programmes est quelque chose qui
demande d'écrire beaucoup de programmes.
Là tu parles de programmes de taille relativement conséquentes.
Le pauvre gars devrait peut être apprendre à écrire de simples
programmes d'abord avant de s'occuper de l'organisation. Je pense.
Savoir écrire des programmes demande beaucoup de pratique.
Apprendre et savoir organiser ses programmes est quelque chose qui
demande d'écrire beaucoup de programmes.
Là tu parles de programmes de taille relativement conséquentes.
Le pauvre gars devrait peut être apprendre à écrire de simples
programmes d'abord avant de s'occuper de l'organisation. Je pense.
Savoir écrire des programmes demande beaucoup de pratique.
Apprendre et savoir organiser ses programmes est quelque chose qui
demande d'écrire beaucoup de programmes.
Marc Espie a écrit :
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une
abstraction,il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Ce n'est pas mon avis. Bien sûr si tu parles abstraitement pour décrire des
choses abstraites... Je ne crois pas vraiemnt à cette histoire de "faculté
d'abstraction" comme si ça existait intrinsèquement. La succession des nombres
entiers est une abstraction quand je pense 3 je ne pense pas forcément 3 fleurs,
3 lettres, etc. Pratiquement tout le monde comprend la notion de nombre. Ou
d'infini. L'infini est une abstraction. Ce modèle se construit par des suites
Marc Espie a écrit :
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une
abstraction,
il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Ce n'est pas mon avis. Bien sûr si tu parles abstraitement pour décrire des
choses abstraites... Je ne crois pas vraiemnt à cette histoire de "faculté
d'abstraction" comme si ça existait intrinsèquement. La succession des nombres
entiers est une abstraction quand je pense 3 je ne pense pas forcément 3 fleurs,
3 lettres, etc. Pratiquement tout le monde comprend la notion de nombre. Ou
d'infini. L'infini est une abstraction. Ce modèle se construit par des suites
Marc Espie a écrit :
Je suis un peu pessimiste sur le coup. Ce que tu decris ne marche pas avec
toutes les populations d'etudiants. Pour que la memoire reste une
abstraction,il faut qu'ils aient de bonnes capacites d'abstraction, justement.
Ce n'est pas mon avis. Bien sûr si tu parles abstraitement pour décrire des
choses abstraites... Je ne crois pas vraiemnt à cette histoire de "faculté
d'abstraction" comme si ça existait intrinsèquement. La succession des nombres
entiers est une abstraction quand je pense 3 je ne pense pas forcément 3 fleurs,
3 lettres, etc. Pratiquement tout le monde comprend la notion de nombre. Ou
d'infini. L'infini est une abstraction. Ce modèle se construit par des suites
Marc Boyer a écrit :Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
des liens entre connaissances, et ces liens (sous réserve qu'ils soient
vrais), confortent les apprentissage.
Question d'équilibre car il y a un risque de surcharge. Mon principe
d'enseignement favori : le rasoir d'Occam.
Mais il est tout à fait possible de s'en passer.
Oui, je l'ai fait.La mémoire est une abstraction et elle peut rester telle quand on
enseigne le C.
Mais il faut présenter cette abstration, l'enseigner.
Oui, et c'est un manque certain dans les cours de C, in vivo ou imprimés, pardon
pour les collègues.
Pas besoin d'aller bien loin. Tiens, retourner un pointeur sur
une variable locale de fonction, et manipuler cette valeur...
Il me semble que ce n'est pas le plus courant que l'on rencontre. D'ailleurs, je
trouve que le mot "variable" est très trompeur. Le cas que j'ai en mémoire (!)
est le suivant :
int *remplirMal(int n)
{
int t[100] = { 0 };
int i;
for (i = 0; i < n; i++)
t[i] = i;
return t;
}
Au point que je n'osais plus faire renvoyer de pointeur à une fonction. Il faut
bien comprendre qu'il y a plein de situations où on peut renvoyer un pointeur
vers quelque chose qui "ressemble" à une variable locale (typiquement strchr())
et c'est pas du tout évident de discerner les différentes situations quand on
est débutant et même débutant avancé. Et puis tu as la situation de la mémoire
allouée. D'ailleurs, c'est en analysant tout cela que j'ai compris que le mot
variable est un mot qui est source de beaucoup de confusion. Le bon mot est le
mot "objet", c'est un mot qui fait peur (comme le mot "identificateur") mais
c'est surtout parce qu'il est expliqué de manière abstraite, non instanciée.
Non, je ne pense pas que tu aies besoin de connaître quoi que ce soit en archi
pour comprendre ça, d'ailleurs, ce principe est indépendant de l'architecture.
Et oui. Pourquoi faire des gammes sur un piano ? De toute façon, c'est une
spécificité de l'informatique et de sa copie facile: quelque soit le sujet
que l'on puisse imaginer pour un exercice de TD/TP (ie réalisable en 1-3h),
il en existe déjà au moins 50 implantations sur Google...
Ce n'est pas le problème de la copie, c'est le problème du désir de coder.
strcmp ne donne pas envie de coder (à moi, oui, à beaucoup d'étudiants, non ou
pas présenté tel quel).
Marc Boyer a écrit :
Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
des liens entre connaissances, et ces liens (sous réserve qu'ils soient
vrais), confortent les apprentissage.
Question d'équilibre car il y a un risque de surcharge. Mon principe
d'enseignement favori : le rasoir d'Occam.
Mais il est tout à fait possible de s'en passer.
Oui, je l'ai fait.
La mémoire est une abstraction et elle peut rester telle quand on
enseigne le C.
Mais il faut présenter cette abstration, l'enseigner.
Oui, et c'est un manque certain dans les cours de C, in vivo ou imprimés, pardon
pour les collègues.
Pas besoin d'aller bien loin. Tiens, retourner un pointeur sur
une variable locale de fonction, et manipuler cette valeur...
Il me semble que ce n'est pas le plus courant que l'on rencontre. D'ailleurs, je
trouve que le mot "variable" est très trompeur. Le cas que j'ai en mémoire (!)
est le suivant :
int *remplirMal(int n)
{
int t[100] = { 0 };
int i;
for (i = 0; i < n; i++)
t[i] = i;
return t;
}
Au point que je n'osais plus faire renvoyer de pointeur à une fonction. Il faut
bien comprendre qu'il y a plein de situations où on peut renvoyer un pointeur
vers quelque chose qui "ressemble" à une variable locale (typiquement strchr())
et c'est pas du tout évident de discerner les différentes situations quand on
est débutant et même débutant avancé. Et puis tu as la situation de la mémoire
allouée. D'ailleurs, c'est en analysant tout cela que j'ai compris que le mot
variable est un mot qui est source de beaucoup de confusion. Le bon mot est le
mot "objet", c'est un mot qui fait peur (comme le mot "identificateur") mais
c'est surtout parce qu'il est expliqué de manière abstraite, non instanciée.
Non, je ne pense pas que tu aies besoin de connaître quoi que ce soit en archi
pour comprendre ça, d'ailleurs, ce principe est indépendant de l'architecture.
Et oui. Pourquoi faire des gammes sur un piano ? De toute façon, c'est une
spécificité de l'informatique et de sa copie facile: quelque soit le sujet
que l'on puisse imaginer pour un exercice de TD/TP (ie réalisable en 1-3h),
il en existe déjà au moins 50 implantations sur Google...
Ce n'est pas le problème de la copie, c'est le problème du désir de coder.
strcmp ne donne pas envie de coder (à moi, oui, à beaucoup d'étudiants, non ou
pas présenté tel quel).
Marc Boyer a écrit :Je ne pense pas que ce soit vrai: on apprécise toujours de pouvoir faire
des liens entre connaissances, et ces liens (sous réserve qu'ils soient
vrais), confortent les apprentissage.
Question d'équilibre car il y a un risque de surcharge. Mon principe
d'enseignement favori : le rasoir d'Occam.
Mais il est tout à fait possible de s'en passer.
Oui, je l'ai fait.La mémoire est une abstraction et elle peut rester telle quand on
enseigne le C.
Mais il faut présenter cette abstration, l'enseigner.
Oui, et c'est un manque certain dans les cours de C, in vivo ou imprimés, pardon
pour les collègues.
Pas besoin d'aller bien loin. Tiens, retourner un pointeur sur
une variable locale de fonction, et manipuler cette valeur...
Il me semble que ce n'est pas le plus courant que l'on rencontre. D'ailleurs, je
trouve que le mot "variable" est très trompeur. Le cas que j'ai en mémoire (!)
est le suivant :
int *remplirMal(int n)
{
int t[100] = { 0 };
int i;
for (i = 0; i < n; i++)
t[i] = i;
return t;
}
Au point que je n'osais plus faire renvoyer de pointeur à une fonction. Il faut
bien comprendre qu'il y a plein de situations où on peut renvoyer un pointeur
vers quelque chose qui "ressemble" à une variable locale (typiquement strchr())
et c'est pas du tout évident de discerner les différentes situations quand on
est débutant et même débutant avancé. Et puis tu as la situation de la mémoire
allouée. D'ailleurs, c'est en analysant tout cela que j'ai compris que le mot
variable est un mot qui est source de beaucoup de confusion. Le bon mot est le
mot "objet", c'est un mot qui fait peur (comme le mot "identificateur") mais
c'est surtout parce qu'il est expliqué de manière abstraite, non instanciée.
Non, je ne pense pas que tu aies besoin de connaître quoi que ce soit en archi
pour comprendre ça, d'ailleurs, ce principe est indépendant de l'architecture.
Et oui. Pourquoi faire des gammes sur un piano ? De toute façon, c'est une
spécificité de l'informatique et de sa copie facile: quelque soit le sujet
que l'on puisse imaginer pour un exercice de TD/TP (ie réalisable en 1-3h),
il en existe déjà au moins 50 implantations sur Google...
Ce n'est pas le problème de la copie, c'est le problème du désir de coder.
strcmp ne donne pas envie de coder (à moi, oui, à beaucoup d'étudiants, non ou
pas présenté tel quel).