Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
In article ,
Marc Boyer wrote:Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
Est-ce que tu fais du suivi sur les gens a qui tu donnes des cours ?
Dans les etudiants pour qui les explications a base d'adresse `ne passent
pas', combien d'entre eux continuent a faire du C a un niveau interessant
apres ?
Est-ce vraiment souhaitable de leur enseigner le C, d'ailleurs ?
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
pourquoi ne pas aller directement faire du java dans ce cas.
In article <slrner9eru.kqu.Marc.Boyer@localhost.localdomain>,
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr> wrote:
Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
Est-ce que tu fais du suivi sur les gens a qui tu donnes des cours ?
Dans les etudiants pour qui les explications a base d'adresse `ne passent
pas', combien d'entre eux continuent a faire du C a un niveau interessant
apres ?
Est-ce vraiment souhaitable de leur enseigner le C, d'ailleurs ?
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
pourquoi ne pas aller directement faire du java dans ce cas.
In article ,
Marc Boyer wrote:Et moi, je ne parle pas de mon expérience d'apprenant (car vu que j'ai
commencé vers 12-13 ans, je n'ai aucun souvenir du moment ou j'ai
compris les pointeurs), mais de ce que je vois des cours que je donne.
Et je vois bien que les explications à base d'adresse ne passent
pas, hormis pour une minorité.
Est-ce que tu fais du suivi sur les gens a qui tu donnes des cours ?
Dans les etudiants pour qui les explications a base d'adresse `ne passent
pas', combien d'entre eux continuent a faire du C a un niveau interessant
apres ?
Est-ce vraiment souhaitable de leur enseigner le C, d'ailleurs ?
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
pourquoi ne pas aller directement faire du java dans ce cas.
Marc Boyer wrote:Et on rajoute 6h de cours et 6h de TD d'archi des ordis à l'emplois
du temps parce que le prof qui enseigne le C en a besoin pour
illustrer la notion de pointeur ? Ben non, on a pas assez d'heures à
l'emploi du temps pour jouer à ça.
Je vous comprends mais pour moi on n'échappe pas facilement au fait
qu'il faille un certain ordre dans la manière de faire comprendre.
Le C est un langage d'assez bas niveau qui demande d'avoir une vision,
de toute manière plus où moins abstraite d'une machine.
Pour moi, c'est simple, mon interprétation naïve est suffisante pour me
faire une représentation et ce n'est pas à moi qui ai mon certificat
d'études primaires qu'on va faire croire que c'est difficile
d'expliquer ce qu'est une adresse à un étudiant qui fait des grandes
études, vraiment j'ai du mal à trouver plus simple comme concept.
Marc Boyer wrote:
Et on rajoute 6h de cours et 6h de TD d'archi des ordis à l'emplois
du temps parce que le prof qui enseigne le C en a besoin pour
illustrer la notion de pointeur ? Ben non, on a pas assez d'heures à
l'emploi du temps pour jouer à ça.
Je vous comprends mais pour moi on n'échappe pas facilement au fait
qu'il faille un certain ordre dans la manière de faire comprendre.
Le C est un langage d'assez bas niveau qui demande d'avoir une vision,
de toute manière plus où moins abstraite d'une machine.
Pour moi, c'est simple, mon interprétation naïve est suffisante pour me
faire une représentation et ce n'est pas à moi qui ai mon certificat
d'études primaires qu'on va faire croire que c'est difficile
d'expliquer ce qu'est une adresse à un étudiant qui fait des grandes
études, vraiment j'ai du mal à trouver plus simple comme concept.
Marc Boyer wrote:Et on rajoute 6h de cours et 6h de TD d'archi des ordis à l'emplois
du temps parce que le prof qui enseigne le C en a besoin pour
illustrer la notion de pointeur ? Ben non, on a pas assez d'heures à
l'emploi du temps pour jouer à ça.
Je vous comprends mais pour moi on n'échappe pas facilement au fait
qu'il faille un certain ordre dans la manière de faire comprendre.
Le C est un langage d'assez bas niveau qui demande d'avoir une vision,
de toute manière plus où moins abstraite d'une machine.
Pour moi, c'est simple, mon interprétation naïve est suffisante pour me
faire une représentation et ce n'est pas à moi qui ai mon certificat
d'études primaires qu'on va faire croire que c'est difficile
d'expliquer ce qu'est une adresse à un étudiant qui fait des grandes
études, vraiment j'ai du mal à trouver plus simple comme concept.
In article ,
Pascal Bourguignon <> wrote:Et même le vieux K&R C, avec les accolades:
[corrigé]
int f(x)int x;{
int y=x+1;
g(y);
Ensuite, tu as des contraintes tres fortes sur ce que tu as le droit
de mettre dans une expression d'initialisation en C traditionnel,
contraintes qui ont ete levees en C99.
In article <874pqjnesc.fsf@thalassa.informatimago.com>,
Pascal Bourguignon <> wrote:
Et même le vieux K&R C, avec les accolades:
[corrigé]
int f(x)int x;{
int y=x+1;
g(y);
Ensuite, tu as des contraintes tres fortes sur ce que tu as le droit
de mettre dans une expression d'initialisation en C traditionnel,
contraintes qui ont ete levees en C99.
In article ,
Pascal Bourguignon <> wrote:Et même le vieux K&R C, avec les accolades:
[corrigé]
int f(x)int x;{
int y=x+1;
g(y);
Ensuite, tu as des contraintes tres fortes sur ce que tu as le droit
de mettre dans une expression d'initialisation en C traditionnel,
contraintes qui ont ete levees en C99.
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
[...]
A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
[...]
A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
[...]
A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
Marc Boyer writes:A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Marc Boyer writes:A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Marc Boyer writes:Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse. Mais c'est
justement ça qui n'est pas difficile et qui est trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Oui, un pointeur pourrait être un type abtrait contenant le nom de la
variable référée et d'un déplacement (pour les vecteurs), ou on
pourrait faire un autre dévelopement abstrait avec une théorie de
types.
Mais c'est surement plus facile de comprendre, pour un débutant, en
expliquant comment ça fonctionne réellement. Pour des enfants, on
peut même en faire un jeu avec des casiers et des petits papiers...
La mémoire est une longue suite de case numérotées de 0 à (B^N)-1, et
dans chaque case, on peut enregistrer un numéro de 0 à (B^W)-1.
En supposant W=N et B pour faire un exemple simple, on peut mettre
en memoire un vecteur contenant (3 2 1 0) à l'adresse 1000, et alors
on peut mettre à l'adresse 2000, un "pointeur" vers ce vecteur, c'est
à dire l'adresse 1000:
+------+
0000: | |
+------+
0001: | |
+------+
...
+------+
1000: | 0003 |
+------+
1001: | 0002 |
+------+
1002: | 0001 |
+------+
1003: | 0000 |
+------+
...
+------+
2000: | 1000 |
+------+
...
+------+
9999: | |
+------+
Et donc, en partant de la case mémoire à l'adresse 2000, on peut
accéder au deuxième élément du vecteur, en lisant ce qui se trouve
dans la case de l'adresse 2000, soit 1000 et en additionnant 1, soit
1001, et en lisant ce qui se trouve dans la case 1001, soit 2.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Une variable pointeur est donc une case comme celle à l'adresse 2000,
et une variable vecteur une série de case comme celles entre les
adresses 1000 et 1003.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse. Mais c'est
justement ça qui n'est pas difficile et qui est trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Oui, un pointeur pourrait être un type abtrait contenant le nom de la
variable référée et d'un déplacement (pour les vecteurs), ou on
pourrait faire un autre dévelopement abstrait avec une théorie de
types.
Mais c'est surement plus facile de comprendre, pour un débutant, en
expliquant comment ça fonctionne réellement. Pour des enfants, on
peut même en faire un jeu avec des casiers et des petits papiers...
La mémoire est une longue suite de case numérotées de 0 à (B^N)-1, et
dans chaque case, on peut enregistrer un numéro de 0 à (B^W)-1.
En supposant W=N et B pour faire un exemple simple, on peut mettre
en memoire un vecteur contenant (3 2 1 0) à l'adresse 1000, et alors
on peut mettre à l'adresse 2000, un "pointeur" vers ce vecteur, c'est
à dire l'adresse 1000:
+------+
0000: | |
+------+
0001: | |
+------+
...
+------+
1000: | 0003 |
+------+
1001: | 0002 |
+------+
1002: | 0001 |
+------+
1003: | 0000 |
+------+
...
+------+
2000: | 1000 |
+------+
...
+------+
9999: | |
+------+
Et donc, en partant de la case mémoire à l'adresse 2000, on peut
accéder au deuxième élément du vecteur, en lisant ce qui se trouve
dans la case de l'adresse 2000, soit 1000 et en additionnant 1, soit
1001, et en lisant ce qui se trouve dans la case 1001, soit 2.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Une variable pointeur est donc une case comme celle à l'adresse 2000,
et une variable vecteur une série de case comme celles entre les
adresses 1000 et 1003.
Marc Boyer writes:Quel
interet presente encore le C si on ne maitrise pas les manipulations
d'adresses ?
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse. Mais c'est
justement ça qui n'est pas difficile et qui est trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Oui, un pointeur pourrait être un type abtrait contenant le nom de la
variable référée et d'un déplacement (pour les vecteurs), ou on
pourrait faire un autre dévelopement abstrait avec une théorie de
types.
Mais c'est surement plus facile de comprendre, pour un débutant, en
expliquant comment ça fonctionne réellement. Pour des enfants, on
peut même en faire un jeu avec des casiers et des petits papiers...
La mémoire est une longue suite de case numérotées de 0 à (B^N)-1, et
dans chaque case, on peut enregistrer un numéro de 0 à (B^W)-1.
En supposant W=N et B pour faire un exemple simple, on peut mettre
en memoire un vecteur contenant (3 2 1 0) à l'adresse 1000, et alors
on peut mettre à l'adresse 2000, un "pointeur" vers ce vecteur, c'est
à dire l'adresse 1000:
+------+
0000: | |
+------+
0001: | |
+------+
...
+------+
1000: | 0003 |
+------+
1001: | 0002 |
+------+
1002: | 0001 |
+------+
1003: | 0000 |
+------+
...
+------+
2000: | 1000 |
+------+
...
+------+
9999: | |
+------+
Et donc, en partant de la case mémoire à l'adresse 2000, on peut
accéder au deuxième élément du vecteur, en lisant ce qui se trouve
dans la case de l'adresse 2000, soit 1000 et en additionnant 1, soit
1001, et en lisant ce qui se trouve dans la case 1001, soit 2.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Une variable pointeur est donc une case comme celle à l'adresse 2000,
et une variable vecteur une série de case comme celles entre les
adresses 1000 et 1003.
Marc Boyer writes:Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse.
Mais c'est justement ça qui n'est pas difficile et qui est
trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse.
Mais c'est justement ça qui n'est pas difficile et qui est
trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Marc Boyer writes:Doucement. Je n'ai pas dit qu'il ne fallait pas connaître la notion
d'adresse. J'ai juste dit que pour faire la première approche, le
premier déclic, se contenter de dire qu'un pointeur est une adresse
ne fonctionne pas pour une majorité d'étudiants.
Bin non, il faut expliquer ce qu'est une adresse.
Mais c'est justement ça qui n'est pas difficile et qui est
trés éclairant.
En fait, nous sommes tirés dans deux dirrections opposées, vers
l'abstraction théorique, et vers le pragmatisme de l'implémentation
concrête.
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.
Le 23-01-2007, Pascal Bourguignon a écrit :Marc Boyer writes:A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
Tout Balzac ou tout Hugo ou un peu de Balzac et un peu d'Hugo ?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Qu'est-ce qu'un programmeur ?
Je ne forme pas des gens avec un diplome d'informatique, mais des
gens qui seront ammenees a programmer des choses dans leur specialite.
Donc, ils ont fait un peu d'assembleur, sans etre tout a fait
a l'aise avec. Je ne pense pas qu'ils aient optimise quoi que
ce soit.
Le 23-01-2007, Pascal Bourguignon <pjb@informatimago.com> a écrit :
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
Tout Balzac ou tout Hugo ou un peu de Balzac et un peu d'Hugo ?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Qu'est-ce qu'un programmeur ?
Je ne forme pas des gens avec un diplome d'informatique, mais des
gens qui seront ammenees a programmer des choses dans leur specialite.
Donc, ils ont fait un peu d'assembleur, sans etre tout a fait
a l'aise avec. Je ne pense pas qu'ils aient optimise quoi que
ce soit.
Le 23-01-2007, Pascal Bourguignon a écrit :Marc Boyer writes:A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.
Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?
Tout Balzac ou tout Hugo ou un peu de Balzac et un peu d'Hugo ?
À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.
Qu'est-ce qu'un programmeur ?
Je ne forme pas des gens avec un diplome d'informatique, mais des
gens qui seront ammenees a programmer des choses dans leur specialite.
Donc, ils ont fait un peu d'assembleur, sans etre tout a fait
a l'aise avec. Je ne pense pas qu'ils aient optimise quoi que
ce soit.