Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Quel est selon vous le meilleur moyen d'apprendre le Langage C ?
Et si c'était à refaire ?

Le , par Franck.H

5PARTAGES

7  0 
Quel est selon vous le meilleur moyen d'apprendre le Langage C ?
Quel est selon vous le meilleur moyen d'apprendre le Langage C ? Et si c'était à refaire ?

  • Livres papiers/électroniques
  • Des tutoriels
  • L'étudier à l'école
  • Demander à un(e) ami(e) qui le maîtrise
  • Sites d'apprentissage
  • Sites d'entraide
  • Faire des exercices, guidés par un livre (ex. : K&R)
  • Faire des exercices, guidés par une personne
  • Faire des exercices, guidés par un site Web
  • Lire du code source
  • Participer à des projets de développement
  • Autres…


Nombreuses sont les personnes, étudiant(e)s ou autodidactes, qui se sont lancées dans l'apprentissage du langage C. Souvent pénible et fastidieux pour certains, beaucoup d'entre-elles abandonnent quand surviennent les passages critiques mais clés du langage comme les pointeurs ou encore l'allocation dynamique de mémoire.

Vous qui êtes arrivés au terme de cet apprentissage ou bien qui êtes en cours d'apprentissage, vous qui avez laissé tomber pour une raison ou une autre ou bien vous qui l'avez étudié dans le cadre d'un système éducatif mais qui regrettez les méthodes que vous avez déployées d'emblée :

Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?

Si c'était à refaire, le feriez-vous toujours ? Et pourquoi ?

Qu'est-ce que vous changeriez dans votre technique d'apprentissage ?

Quels conseils donneriez-vous aux débutants ?

À lire aussi :

Quel est votre langage de programmation préféré en 2013 ?

Quelle est la meilleure typo pour programmer ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Obsidian
Modérateur https://www.developpez.com
Le 05/07/2013 à 0:01
En ce qui me concerne :

  1. Architecture des ordinateurs : pas la peine de tout couvrir de fond en comble, mais il me semble qu'exposer les bases du fonctionnement d'un micro-processeur à un apprenti programmeur, c'est comme expliquer comment fonctionne un moteur à explosion à un élève en mécanique ;
  2. Être guidé par une personne : on apprend plus en trois jours à une coding party que seul en deux ans. Malheureusement, il est souvent difficile de trouver la bonne personne, et il faut ensuite convaincre de jouer les parrains ;
  3. Pratique, pratique, pratique ! La programmation est une des rares activités qui, une fois le matériel acquis, ne coûte pour ainsi dire rien ;
  4. Voir si possible les langages dans l'ordre de leur apparition. C'est une affirmation très controversée d'une part parce que c'est un luxe et, d'autre part, parce qu'il faut bien définir un « horizon », sous peine de démarrer l'informatique avec les cartes perforées ;
  5. Garder la norme sous le coude. C'est le vademecum de ceux qui veulent pratiquer le C sérieusement, notamment en contexte professionnel.


En ce qui concerne le C en particulier, j'insiste sur le fait que voir l'architecture des ordinateurs en début de formation est un énorme plus car le C est fait pour cela. Je suis personnellement de l'époque des huit bits et en ce temps, on commençait par le BASIC et on passait directement à l'assembleur, et ce n'était pas spécialement surhumain. Et surtout, on avait PEEK et POKE pour aller lire ou déposer un octet en mémoire. Et comme on avait directement accès à la mémoire vidéo, on voyait physiquement ce qu'il se passait quand on tapait dedans. Parallèlement, il y avait de nombreuses machines différentes, chaque fabriquant produisant sa propre gamme.

Je suis toujours stupéfait de lire les témoignages de ceux qui sont nés dans les années 1990 et qui, aujourd'hui, finissent leur troisième cycle, et de les voir présenter les pointeurs comme un concept subtil et presque mystique qui s'appréhende sur la durée. Je le suis encore plus quand je constate que ceux qui ont fini par maîtriser le concept et avoir une idée claire de la manière dont fonctionne leur machine sont ceux qui, après avoir atteint le terme de ce long parcours, ont « approfondi » leurs connaissance en reprenant en fait le chemin à l'envers, comme un pèlerinage, jusqu'à atteindre le point de départ, par où leurs aînés ont en fait commencé.

C'est pour cela que je reste réservé sur le fait d'apprendre le C uniquement par l'école. Pas sur le principe, bien sûr, mais à cause du fait qu'avec la meilleure volonté du monde, on n'a pas le temps de couvrir efficacement tous les aspects du langage avec les raisons sous-jacentes qui ont conduit à tel ou tel choix. Comme pour beaucoup de disciplines, ça ne peut être qu'une base solide permettant à l'élève d'entamer lui-même sa propre formation.
9  0 
Avatar de ram-0000
Rédacteur https://www.developpez.com
Le 04/07/2013 à 19:15
Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?
Je ne sais pas si c'est le meilleur moyen mais c'est comme cela que je l'ai appris :
  • d'abord à l'école (l'AFPA en fait)
  • puis dans les livres pour parfaire certains points non maitrisés
  • et en même temps dans des projets (personnels dans un premier temps puis au boulot parce que j'ai eu la chance d'intégrer un projet en SSII avec du développement en C


Si c'était à refaire, le feriez-vous toujours ? Et pourquoi ?
Oui, je le referais comme cela

Qu'est-ce que vous changeriez dans votre technique d'apprentissage ?
rien

Quels conseils donneriez-vous aux débutants ?
les projets qui sortent des exercices bateau scolaires, c'est formateur. Cela peut être des projets personnels ou bien professionnels.
3  0 
Avatar de kwariz
Membre expert https://www.developpez.com
Le 05/07/2013 à 16:15
Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?

Comme pour tout ce qu'on peut apprendre je ne pense pas qu'il existe un meilleur moyen, il y a juste quelques moyens qui fonctionnent suivant le caractère des apprenants. Il y a certainement aussi beaucoup de mauvaises méthodes à ne jamais appliquer.
Je suis issu d'une génération de bidouilleur sur machine 8bits, ceux qu'on appelait les hobbyistes dans les années 80, je bidouillais en basic et en asm sur mon c64, mais aussi sur les machines de mes amis comme les oric, les armstrads ou des ti. Nous partagions nos découvertes à base de copiage de lignes et de lignes de codes piquées dans hebdogiciel, nous finissions même par comprendre l'allemand en achetant des magazines comme chip je crois.
Bref j'étais un jeune homme bourré de mauvaises habitudes lorsqu'il a eu son premier contact avec la programmation structurée.
Heureusement au lieu de voir ça comme une contrainte j'ai vite compris qu'en fait cela permettait d'exprimer une plus grande liberté dans ce qu'on pouvait faire. Scolairement j'ai appris pascal à mon lycée, continué en GFa Basic sur mon atari à la maison.
Même si on ne nous a pas appris l'algorithmique au lycée à l'époque, le fait d'avoir manipulé plusieurs langages et de continuer à le faire m'en a vite fait apparaître le concept. Je pouvais écrire en Français ce que je voulais que la machine fasse puis ensuite je parlais basic à mon atari ou pascal au PC. Mais à l'époque ça m'apparaissait plus comme un brouillon qu'un véritable outil.
Dans les années 90, arrivé à la fac on me permet enfin d'acquérir des bases solides en algorithmique, mais aussi en architecture des ordinateurs. Enfin on me donnait les mots pour les notions ce que j'avais entraperçues et effleurées.
Du coup l'apprentissage du C a été relativement facile. Juste une question de s'adapter*à la syntaxe, la grammaire et (le pire) les idiomes et de passer par les erreurs classiques qui forment.
La maturation de mon C c'est faite ensuite en l'utilisant.

Si c'était à refaire, le feriez-vous toujours ? Et pourquoi ?
Oui, parce qu'apparemment ça n'a pas trop mal fonctionné

Qu'est-ce que vous changeriez dans votre technique d'apprentissage ?
Rien pour les mêmes raisons

Quels conseils donneriez-vous aux débutants ?
Ne pas uniquement se focaliser sur le langage. Le langage n'est qu'un moyen pour réaliser quelque chose. Pour bien la réaliser il faut aussi d'autres capacités en plus de la motivation et de la rigueur : on n'apprend pas un langage pour apprendre un langage.

D'ailleurs pour pinailler un peu ... un langage c'est pas grand chose. Tout le monde confond le langage et les outils. La base en C est simple, le langage et la libc (qui d'ailleurs peut être écrite en c). Pour rejoindre à nouveau Obsidian enfin un peu, la génération post90 n'arrive plus à faire cette distinction. Elle est d'ailleurs volontairement rendue floue à mon avis pour de mauvaises raisons. Il suffit de voir le nombre fonctionnalités proposées par les framework/sdk/toolbox/"bibliothèques standards" qui sont décrites comme faisant partie intégrante du langage ... Je ne dis pas qu'elles sont inutiles bien au contraire, mais je dis simplement que ça ne fait plus partie du langage à proprement parler mais des outils développés avec.
3  0 
Avatar de Squeak
Membre actif https://www.developpez.com
Le 07/07/2013 à 16:34
Un ami (qui pourtant n'avais pas de formation informatique orientée développement) a fait une très belle réflexion justement sur les programmeurs actuels en disant qu'ils sont de plus en plus chanceux d'utiliser des bibliothèques "toutes faites" alors que certains ont vraiment dû se casser la tête pour leur fournir.

Un exemple qu'il a cité était : "les fonctions qui permettent d'afficher des pixels sur l'écran pour afficher des formes, des fenêtres etc". Aucun programmeur ne s'en soucie aujourd'hui de ça car tout est là mais des pionniers (qui ont sans doute plus de 60 ans) ont dû y réfléchir et passer du temps considérable.

Et à propos des bibliothèques aussi, qui se soucie encore aujourd'hui d'essayer d'implémenter un Quicksort ou des arbres binaires pour autre chose qu'un but didactique? Nous avons en effet, moult bibliothèques qui le font à notre place, quel que soit le langage.

La conclusion : le métier de programmeur tend à être restructuré au rôle d'intégrateur, il ne programme plus lui-même les bases d'une application mais va de plus en plus assembler des composants comme des briques Lego.
3  0 
Avatar de Bktero
Modérateur https://www.developpez.com
Le 07/07/2013 à 22:20
Ce n'est pas exactement les jeux car quand on voit la taille des jeux sur PC, on a peur. En revanche, le domaine des consoles portables à de réelles contraintes mais cela n'est pas lié au jeu mais à la machine : elle fait partie du magnifique monde de l'embarqué. Il reste le seul domaine où on se soucie toujours des ressources car elles sont limitées. Et encore, ça commence à devenir de moins en moins vrai comme tu le dis, que ce soient pour les micro-contrôleurs (qui contiennent maintenant assez régulièrement 1024 ko de flash !) ou les téléphones portables (portés par des méga Cortex Ax). Les gens qui se préoccupent encore des tailles dans l'embarqué sont ceux qui ont des contraintes de coûts associés. D'un côté prendre l'exemple de je ne sais plus quelle application Android téléchargée la semaine dernière qui pèse 5 Mo et ne fait presque rien et un client qui m'a fait comprendre clairement qu'il n'avait vraiment pas envie de prendre un micro-contrôleur plus gros (et donc plus cher) et qu'il allait falloir compacter l'application.

J'avais dit que je ne voulais pas généraliser mais j'aurais dû parler de l'embarqué : tu fais bien de le faire
3  0 
Avatar de satenske
Membre confirmé https://www.developpez.com
Le 05/07/2013 à 11:50
Citation Envoyé par Metalman Voir le message
Ca va partir en troll... mais juste pour clore très vite : 6 mois ça inclut la partie OCaml pour démarrer la prog avant le paradigme impératif.
Petits joueurs ou pas... le but de la comparaison était de montrer que les IUT appliquant la règle du "pas de pointeur en 1ère année car trop difficile" ont un GROS problème, et tu es d'ailleurs d'accord avec moi !
Un autre ami a fait la Fac, et selon lui aussi il y avait des choses à revoir.

C'est ce que l'on peut reprocher à l'organisation des cours Fac/IUT : pas assez de pratique poussée.
Les pointeurs, à la fin de la 1ère année ça doit être assimilé, au moins dans la notion !
J'ai personnellement eu mon DUT après deux années, et je suis actuellement à la fac, donc je peux comparer.
À mon iut, nous apprenons les pointeurs au début du second semestre, soit après 6mois de cours d'algorithmiques. Je trouve personnellement ça assez bien, une fois les bases apprises, on peut se pencher sur le cœur du C, les pointeurs et l'allocation dynamique.
Et c'est donc au second semestre où on a appris tout ce qui était listes, arbres de recherche, tables de hashage tout ça, tout ça.
Avant le second semestre, on est pas censé savoir ce qu'est un pointeur, on fait sans.

À la fac, fonctionnement un peu différent, dès le troisième cours, on nous explique ce qu'est concrètement un pointeur, mais on ne voit l'utilité que pour faire des paramètres en mise-à-jours, et le fait qu'un tableau n'est rien d'autre qu'un pointeur.
On nous donne des exercices, avec des pointeurs de pointeurs en paramètre, je cherche toujours l'intérêt d'essayer d'embrouiller les élèves de cette manière.
Ensuite, semestre suivant, là on revoit le fonctionnement d'un pointeur (c'est pas plus mal), allocation dynamique, et ensuite on passe aux structures de données.

Mon apprentissage à été assez chaotique je pense, j'ai appris en lisant des tutos à droite à gauche, après avoir appris le PHP, mais bon, je faisais des choses sales, il n'y avait personne pour me corriger, me dire de ne pas faire quelque chose, vraiment je ne pense pas que ça soit le meilleur moyen de devenir un bon développeur, à moins d'avoir déjà de l'expérience dans d'autres langages.
Ensuite, je suis entré à l'iut, et c'est là ou j'ai appris des méthodes de développement et que ce n'est pas parce que ça marche que c'est forcément bien.

Je pense que le meilleur moyen pour apprendre, c'est d'avoir quelqu'un de bon dans le domaine qui soit derrière nous pour nous dire ce qui est bien ou pas bien.
Autrement dis, des projets personnels, c'est génial, mais s'il n'y a personne pour guider, ça peut nous faire prendre des mauvaises habitudes.
Sinon, pour ma part, l'iut m'a bien formé, après il faut être investit, si on s'arrête à faire ce qu'on nous demande, on ne deviendra pas un bon développeur, par contre, si on s'amuse un peu chez sois, et qu'on demande à un prof ce qu'il pense de ce qu'on a fait pour s'amuser, alors là on progressera bien plus vite.
2  0 
Avatar de Obsidian
Modérateur https://www.developpez.com
Le 06/07/2013 à 4:16
Citation Envoyé par Thomas404 Voir le message
Personellement, je suis en apprentissage du C, avec le livre K&R mais je lutte pas mal, je trouve le livre tres innaccessible et trop peu détailler comparer à mon livre sur le Python 3 ...
C'est précisément pour cela qu'il aurait été intéressant de voir les langages dans l'ordre chronologique de leur apparition puisque chacun d'eux tente d'améliorer l'existant.

D'ailleurs, la j'en suis aux pointeurs justement, alors j'arrive à comprendre qu'un pointeur pointe sur l'adresse d'une variable, mais je ne vois pas en quoi c'est si interessant.
C'est une question qui est loin d'être anodine, mais tu peux déjà dégager plusieurs arguments valables :
  • Si tu sais ce qu'est une adresse mémoire, tu comprends qu'il te faudra bien un type de donnée dédié pour les représenter. Ceci justifie en soi l'existence du pointeur. Ensuite, comme il y a toujours « quelque chose » à l'endroit pointé, tu peux également spécifier le type de cette donnée, et introduire la notion d'indirection ;
  • Lorsque tu appelles « malloc(n); », tu réserves n octets de mémoire. Mais quelle information cette fonction doit-elle te renvoyer pour que tu puisses les utiliser, et sous quelle forme ?
  • Quand ton pointeur pointe une variable, ça te permet d'écrire directement dedans. Dans la plupart des langages, C compris, on fait une affectation avec « variable = valeur » mais, en pratique, que va-t-il techniquement se passer au niveau du micro-processeur et quels sont les routines sous-jacentes qui vont effectivement copier ta valeur dans ta variable ?


Une bonne approche consiste souvent à prendre le problème à l'envers : « comment ferais-je si je devais me passer complètement des pointeurs » et « que devrais-je utiliser à la place » ?
2  0 
Avatar de Obsidian
Modérateur https://www.developpez.com
Le 07/07/2013 à 18:49
Citation Envoyé par Jeremy0201 Voir le message
Je pense que c'est pas la même "logique", aujourd'hui pour faire un jeu 2d on a des bibliothèque comme la sdl qui permette de faire des jeux juste en apprenant à l'utiliser sans avoir de connaissances particulières. Ce que je me demande c'est comment ils ont fait dans les années 70 sans utiliser tout les bibliothèques de maintenant !
C'est une très bonne question, pas tant pour les bibliothèques que pour la puissance des machines de l'époque. Je suis convaincu que si l'on demandait aujourd'hui aux programmeurs de reprogrammer les mêmes logiciels sur les mêmes machines (celles de l'époque), bien peu en seraient capables.

Ce n'est pas forcément une paupérisation car les compétences perdues sur ce segment ont été compensées par de nouveaux savoirs-faire développés sur les machines modernes, mais je ne suis pas sûr que ce soit en proportions équivalentes.

En particulier, on a beaucoup perdu sur la notion de coût en ressources. À l'époque les machines avaient beaucoup de potentiel mais il n'était pas virtuellement illimité pour autant. Quand on voulait faire quelque chose qui sortait un peu de l'ordinaire, il fallait faire des compromis. Dans le même esprit, le code lié au matériel est une notion qui a été combattue ces dix à quinze dernières années et la tendance à suivre a été « portable ». C'est dommage car il y a beaucoup de techniques qui étaient très intéressantes en soi, et efficaces dans leur contexte.
2  0 
Avatar de mith06
Membre éclairé https://www.developpez.com
Le 05/07/2013 à 10:51
En ce qui me concerne :

Architecture des ordinateurs : pas la peine de tout couvrir de fond en comble, mais il me semble qu'exposer les bases du fonctionnement d'un micro-processeur à un apprenti programmeur, c'est comme expliquer comment fonctionne un moteur à explosion à un élève en mécanique ;
Être guidé par une personne : on apprend plus en trois jours à une coding party que seul en deux ans. Malheureusement, il est souvent difficile de trouver la bonne personne, et il faut ensuite convaincre de jouer les parrains ;
Pratique, pratique, pratique ! La programmation est une des rares activités qui, une fois le matériel acquis, ne coûte pour ainsi dire rien ;
Voir si possible les langages dans l'ordre de leur apparition. C'est une affirmation très controversée d'une part parce que c'est un luxe et, d'autre part, parce qu'il faut bien définir un « horizon », sous peine de démarrer l'informatique avec les cartes perforées ;
Garder la norme sous le coude. C'est le vademecum de ceux qui veulent pratiquer le C sérieusement, notamment en contexte professionnel.
Entièrement d'accord!
Comprendre comment fonctionne un CPU c'est la base de la programmation!

Mes études ont fait que j'ai commencé avec le JAVA, puis le C, puis le VHDL, et ça ne m'a pas posé de problème. Au contraire cela a été de + en + intéressant!!
1  0 
Avatar de Reyhn
Candidat au Club https://www.developpez.com
Le 05/07/2013 à 11:59
Citation Envoyé par Metalman Voir le message
Ca va partir en troll... mais juste pour clore très vite : 6 mois ça inclut la partie OCaml pour démarrer la prog avant le paradigme impératif.
Petits joueurs ou pas... le but de la comparaison était de montrer que les IUT appliquant la règle du "pas de pointeur en 1ère année car trop difficile" ont un GROS problème, et tu es d'ailleurs d'accord avec moi !
Un autre ami a fait la Fac, et selon lui aussi il y avait des choses à revoir.

C'est ce que l'on peut reprocher à l'organisation des cours Fac/IUT : pas assez de pratique poussée.
Les pointeurs, à la fin de la 1ère année ça doit être assimilé, au moins dans la notion !
Tu as initié le troll tout seul

Pour avoir fait un IUT informatique et avoir rencontré des étudiants de la même formation qui venaient de partout en France, il n'y a pas d'histoires de "les pointeurs c'est trop compliqué on le fera en 2ème année". C'est même le premier langage qu'on étudiait dans le mien : le C, et les pointeurs compris dedans.
Il y a des choses à revoir dans l'enseignement c'est sûr, comme à la fac, et comme dans les écoles privées.

Le problème avec l'enseignement du C est qu'on hésite à le conseiller aux débutants car il peut décourager, mais il introduit des aspects essentiels de la programmation (surtout quand on voit à côté l'architecture des ordinateurs) qui manquent à bon nombre de programmeurs qui n'ont touché qu'à du php ou du ruby par exemple. L'abstraction c'est bien mais le côté proche de la machine aussi, et personnellement je vois pas trop comment y sensibiliser les étudiants par exemple en recréant des structures de données type liste etc quand à côté on leur montre python.
1  0