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

Les rubriques (actu, forums, tutos) de Développez
Tags
Réseaux sociaux


 Discussion forum

Retrouvez le dossier complet de la rédaction
Le , par Franck.H, Rédacteur


  • 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 ?
Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de ram-0000 ram-0000
http://www.developpez.com
Responsable Réseaux
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.
Avatar de Kannagi Kannagi
http://www.developpez.com
Membre Expert
le 04/07/2013 19:32
Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?
Pour ma part j'ai appris de cette manière :
J'ai appris avec des tutoriel , puis a école et après je suis passé par des projets perso , je me considère plus autodidactes sachant que je n'ai pas fini mon cursus scolaire et que j'ai appris principalement seul que avec les cours.

Si c'était à refaire, le feriez-vous toujours ? Et pourquoi ?
Peut être pas les tutoriels en premiers , sans quelqu'un derrière qui vous suis en fait souvent du mauvais code et on a de mauvaises bases.

Qu'est-ce que vous changeriez dans votre technique d'apprentissage ?
rien , mais en tous je déplore le niveau de enseignement a ma fac , beaucoup de mes collègues ont un mauvais niveau , fout des variables globales partout , ont du mal a créer des fonctions digne de nom ,et ceci peut importe le niveau de L1 a M2 ,est ce normal d'avoir encore des difficultés avec les pointeurs en L2 et L3 .

Quels conseils donneriez-vous aux débutants ?
De coder , coder et encore coder , c'est principalement le meilleur moyen pour s’améliorer , expérience est très importante dans la programmation.
Avatar de Metalman Metalman
http://www.developpez.com
Expert Confirmé
le 04/07/2013 22:09
Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?
Tutos, Ecole, Exercices Guidés, Lire du Code
Je rajouterai même : faire du PHP en parallèle des cours d'algorithmique impérative... et voir un peu d'architecture CPU + ASM.

Pourquoi ?
Les cours d'algos sont nécessaires.
En lisant des vieux livres sur MS-DOS et le FAT, j'avais réussi à chopper le concept de pointeur (un grand tableau de fichiers qui a des références dans chaque case vers le fichier), du coup, je me souviendrai toute ma vie de ma réaction quand mon enseignante nous a montré cela : "OH ! C'est comme le FAT !"
Il faut "juste" que les cours soient + efficaces et rentrent plus vite dans le sujet : un ami en IUT s'est vu entendre que les pointeurs seraient vus en 2e année, car en 1ère... c'est trop difficile pour les étudiants.
Venant d'une école privée, où au bout de 6 mois on les aborde, c'est ardu de comprendre cette restriction.

Pourquoi le PHP en parallèle des cours ?
La syntaxe est TRES proche du C (et pour le moment c'est le langage qui s'en rapproche le + avec des magouilles de sh pour les variables), mais sans les pointeurs.
Du coup, il est possible d'apprendre l'algorithmique et de pratiquer avec du PHP, tout en se préparant au C par la syntaxe.
Les notions de tableau avec les char en C sont un peu tordues... du coup, tant qu'il n'y a pas de pointeur et de la "norme '\0'", on est très très perdu et on ne comprend rien.
Après l'apprentissage des pointeurs, il faut passer le cap et FAIRE du C !

Pourquoi l'assembleur et de l'architecture ?
Je vais vraiment pomper le programme de mon école, mais le 68000 est en effet tellement... "complet", que quand on finit par comprendre que l'on peut accéder à la mémoire directement lors des instructions, on a quasiment compris comment fonctionnent les pointeurs en pratique.
L'architecture permet de comprendre ce qu'il se passe en pratique, les "interruptions" permettent enfin d'identifier la différence man 2/man 3.

Et le livre qui m'a permis de tout rassembler : Linux Programmation Système et Réseau.
Explications efficaces de certaines parties système, exemples de codes qui fonctionnent et qui sont TRES commentés...

Si c'était à refaire, le feriez-vous toujours ? Et pourquoi ?
Oui !
La partie "syntaxe" a fait tilt sur le PHP.
La partie "internals" a fait tilt avec ASM + Exemples.
...j'ai juste eu du mal à comprendre et apprendre la syntaxe des pointeurs en C, alors que la notion était comprise, et là... je n'ai aucun conseil hormis la pratique et les exemples !

Qu'est-ce que vous changeriez dans votre technique d'apprentissage ?
Je suis sûr que ma méthode n'est pas la meilleure car elle est longue et lourde.
Avec tous les conseils des autres, il doit être possible de tirer des bouts communs et suffisants !

Quels conseils donneriez-vous aux débutants ?
Suivez bien vos cours d'algos !
Faites du PHP en parallèle.
Lisez le livre (Linux Programmation Système et Réseau) en parallèle.
Et une fois que vous abordez les pointeurs, commencez à taper du C !
Et compilez TOUJOURS avec les flags de debug ! Avec gcc : gcc -Wall -Wextra -Werror
Ensuite, apprenez à retirer vos leaks avec valgrind/dr.memory !
Avatar de I_believe_in_code I_believe_in_code
http://www.developpez.com
Membre émérite
le 04/07/2013 23:50
Citation Envoyé par Metalman  Voir le message
un ami en IUT s'est vu entendre que les pointeurs seraient vus en 2e année, car en 1ère... c'est trop difficile pour les étudiants.
Venant d'EPITA, où au bout de 6 mois on les aborde, c'est ardu de comprendre cette restriction.

Dans les cours vidéo que je propose en ligne, j'introduis les pointeurs très tôt sans en avoir l'air, et puis j'aborde franchement le sujet au bout de seulement 9 vidéos. Z'êtes des petits joueurs à EPITA

9ème vidéo : "les pointeurs, partie 1"

http://www.dailymotion.com/video/xso...aout-2012_tech
Avatar de Obsidian Obsidian
http://www.developpez.com
Modérateur
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.
Avatar de Metalman Metalman
http://www.developpez.com
Expert Confirmé
le 05/07/2013 9:36
Citation Envoyé par I_believe_in_code  Voir le message
Dans les cours vidéo que je propose en ligne, j'introduis les pointeurs très tôt sans en avoir l'air, et puis j'aborde franchement le sujet au bout de seulement 9 vidéos. Z'êtes des petits joueurs dans votre école

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 !

EDIT : je soutien vivement le post d'Obsidian, même si je suis issu d'un cru 1988, qui effectivement fait le pèlerinage dont il parle.
Et c'est aujourd'hui, après mes études, que je m'intéresse (et peut pratiquer) aux Mainframes et au COBOL.
Un topic récent sur le forum COBOL a même soulevé une grosse question : COBOL (1959 je crois) est-il haut ou bas niveau ?
C'est un haut niveau selon la litterature, et en pratique, pendant des dizaines d'années on débuggait du COBOL avec un dump mémoire "brut", car ses instructions sont en fait TRES proches de l'assembleur.
Avatar de mith06 mith06
http://www.developpez.com
Membre expérimenté
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!!
Avatar de satenske satenske
http://www.developpez.com
Membre éclairé
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.
Avatar de Reyhn Reyhn
http://www.developpez.com
Invité de passage
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.
Avatar de megahertz77 megahertz77
http://www.developpez.com
Membre du Club
le 05/07/2013 12:02
Je préfère de loin la rapidité d'acquisition que proposent des sites comme codecademy.com pour apprendre les langages.

Le concept est idéal, l'apprentissage par l'exemple et l'expérimentation. Avec l'interactivité d'une vérification automatisée des erreurs de l'apprenant.

L'adaptation au rythme de l'apprenant, la motivation (par l'acquisition de badges et l’interaction sur les réseaux sociaux).

C'est pour moi la méthode la plus efficace pour apprendre, loin des clichés et des théorisations à outrance des livres d'écoles, apprendre devient aussi addictif que jouer à un jeu.

Par contre, cela va de soi, tout savoir non pratiqué n'est pas durablement assimilé.

En ce qui concerne les projets, rien n’empêche ce système de tutoriel interactif d'aller jusqu'au bout de la démarche en apprenant pas à pas à concevoir un site complexe (e-commerce, forum ou autre).

Cette méthode à donc l'avantage de pouvoir intriquer ensemble formation, expérimentation, et travail pratique sur la création d'un projet de A à Z.

C'est l'avenir de l'apprentissage, et ce dans beaucoup d'autres domaines.
Offres d'emploi IT
Développeur Webdev H/F
CDD
CDS SOFT, Pôle Informatique du groupe STUDIEL - Midi Pyrénées - Toulouse (31000)
Parue le 24/06/2014
Administrateur / Ingénieur de Production H/F
CDI
BULL FR - Bretagne - Trélazé (49800)
Parue le 30/06/2014
Développeur informatique VBA
CDI
ProRH - Ile de France - Mantes-la-Jolie (78200)
Parue le 30/06/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula