IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comment enseigner le b-a-ba du C ?


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Points : 20
    Points
    20
    Par défaut Comment enseigner le b-a-ba du C ?
    Bonjour,

    Je suis enseignant dans le supérieur et je suis souvent confronter à des étudiants qui ont beaucoup de mal avec la programmation (du C en l'occurrence). Je l'enseigne suivant une approche classique que l'on retrouve dans bon nombre de bouquins (programme minimal, entrée/sortie, structures, fonction, pointeurs, ...). Je l'enseigne pour le calcul numérique pas pour de la programmation logicielle et autres onbjectifs propres aux informaticiens purs.
    Cette approche est bonne pour des gens ayant l'"esprit info", mais pour les autres c'est une véritable galère. Et moi, qui programmais en basic en 6ième, j'ai souvent des difficultés à expliquer des trucs qui dans ma tête tombe sous le sens. Un exemple typique est la boucle for ... La notion de compteur de boucles est pour moi complètement intuitive ainsi que la façon dont la boucle va s'exécuter. Mais pour bon nombre d'étudiants, c'est déjà bien dur (alors je vous explique pas quand vient le moment des pointeurs). Et je me retrouve souvent sans autre argument qu'il faut pratiquer pour comprendre. Mais à l'heure des TP, ça reste dur pour beaucoup.

    Ma question est donc la suivante : connaîtriez vous un ouvrage ou un site (not necessarily in French) qui m'aide à concevoir un cours dans lequel la programmation serait abordée sous un aspect qui le rendrait plus facilement accessible à des récalcitrants à l'info (je ne parle pas de ceux qui mettent de la mauvaise volonté pour qui je ne peux pas grand-chose) ?

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tu as des choses très bien ici :
    Cours de C
    La FAQ C
    Les livres C

    Et peut-être aller faire un tour sur cette discussion...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    Merci Mac LAK, mais mon souci n'est pas de savoir par quel langage commencer. Ce n'est pas moi qui en décide.(j'ai commencé à programmer par le BASIC puis le pascal et enfin le FORTRAN pour finir par enseigner le C et le codage avec matlab,scilab). Et donc pour cette matière là, c'est du C.
    Dans tout ce débat d'école d'informaticien, je me perds un peu. Je me considère scientifique et j'enseigne l'informatique (probablement mal en regard des paradigmes de l'informatique) dans ce but. Si effectivement le C autorise pas mal d'erreurs, je ne laisse pas mes étudiants errer en déclarant mal des variables, en mettant des pointeurs n'importe comment et à toutes les sauces... Mais cela réclame de la vigilance de ma part ...(pas la peine de compter sur le compilateur pour ça) et heureusement les codes ne sont pas trop gros.
    Et au fond ma question porte plus sur comment faire comprendre à un étudiant le fonctionnement logique des programmes, l'interaction avec la mémoire de l'ordinateur, pourquoi on écrit une fonction pour faire certaine chose que tout mettre dans le main.. Tout ceci n'est pas forcément propre au langage C. Ceci tout en restant accessible sinon d'une j'explose mes étudiants qui n'ont pas vocation à devenir des programmeurs émérites en l'état et de deux, je n'enseigne pas l'ASM...

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Si effectivement le C autorise pas mal d'erreurs, je ne laisse pas mes étudiants errer en déclarant mal des variables, en mettant des pointeurs n'importe comment et à toutes les sauces... Mais cela réclame de la vigilance de ma part ...(pas la peine de compter sur le compilateur pour ça)
    C'est aussi ce que j'ai toujours essayé de faire comprendre aux anti-"C pour débuter" de ce forum à travers divers discussions anciennes comme les nouvelles, mais c'est très rare que je me suis fait entendu. Le C te laisse seul maître de ton programme, il faut juste savoir ce qu'on fait (comprendre la machine) pour l'utiliser.

    J'ai publié une série de tutoriels sur le C (entre autres) sur mon espace perso : http://melem.developpez.com/, en utilisant une pédagogie une peu particulière : j'ai mélangé le style "didactiel" au style "référence", c'est-à-dire que chaque tutoriel est à priori un didactiel mais chaque fois qu'un concept vient d'être introduit, je sors immédiatement la référence. Je t'invite à les parcourir ne serait-ce qu'en diagonale et à me dire ce que t'en penses.

    Une autre bonne approche à mon avis est de fusionner un bon cours d'algorithmique, d'architecture des ordi, de systèmes et logiciels, et de C en un seul méga cours, en introduisant les notions requises au fur et à mesure des besoins. Le C est en effet adapté aux débutants en programmation mais pas aux débutants en informatique. On peut pourtant apprendre le Pascal ou le Java par exemple en ne conaissant pratiquement rien de l'ordinateur (mémoire, processeur, système, etc.). C'est pourquoi, je réitère encore une fois qu'un cours idéla de C (C pour débutants), ça serait un cours qui inclut également les bases de l'informatique.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Melem Voir le message
    Une autre bonne approche à mon avis est de fusionner un bon cours d'algorithmique, d'architecture des ordi, de systèmes et logiciels, et de C en un seul méga cours, en introduisant les notions requises au fur et à mesure des besoins. Le C est en effet adapté aux débutants en programmation mais pas aux débutants en informatique. On peut pourtant apprendre le Pascal ou le Java par exemple en ne conaissant pratiquement rien de l'ordinateur (mémoire, processeur, système, etc.). C'est pourquoi, je réitère encore une fois qu'un cours idéla de C (C pour débutants), ça serait un cours qui inclut également les bases de l'informatique.
    Je suis entièrement d'accord. Je ne sais pas si cela peut aider mais j'ai appris le C d'une façon plus orientée pratique. J'entend par là, un petit projet qui sert de fil rouge à l'apprentissage du langage et le projet est complété au fur et à mesure de l'avancement de l'apprentissage.

    Schématiser également des notions du langage comme les pointeurs, les tableaux, etc... pour avoir une approche plus visuelle aide également beaucoup.



    Voici pour mon avis
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par raoulpetite Voir le message
    Merci Mac LAK, mais mon souci n'est pas de savoir par quel langage commencer. Ce n'est pas moi qui en décide.(j'ai commencé à programmer par le BASIC puis le pascal et enfin le FORTRAN pour finir par enseigner le C et le codage avec matlab,scilab). Et donc pour cette matière là, c'est du C.
    Dans tout ce débat d'école d'informaticien, je me perds un peu. Je me considère scientifique et j'enseigne l'informatique (probablement mal en regard des paradigmes de l'informatique) dans ce but. Si effectivement le C autorise pas mal d'erreurs, je ne laisse pas mes étudiants errer en déclarant mal des variables, en mettant des pointeurs n'importe comment et à toutes les sauces... Mais cela réclame de la vigilance de ma part ...(pas la peine de compter sur le compilateur pour ça) et heureusement les codes ne sont pas trop gros.
    Et au fond ma question porte plus sur comment faire comprendre à un étudiant le fonctionnement logique des programmes, l'interaction avec la mémoire de l'ordinateur, pourquoi on écrit une fonction pour faire certaine chose que tout mettre dans le main.. Tout ceci n'est pas forcément propre au langage C. Ceci tout en restant accessible sinon d'une j'explose mes étudiants qui n'ont pas vocation à devenir des programmeurs émérites en l'état et de deux, je n'enseigne pas l'ASM...
    Mon petit 2 sous :

    moi je n'ai jamais appris officiellement quoi que ce soit : je suis physicien, et j'ai eu 3 heures de cours d'introduction au Fortran (4) avant d'être lancé sur le marché, où mon premier boulot a été de faire du traitement d'image et des programmes scientifiques

    J'ai donc une approche assez "pragmatique".

    Alors je dirais que ton dernier paragraphe me semble aller dans la bonne direction :

    • commencer par l'origine : les maths et la formalisation que cela représente.
    • poursuivre par la formalisation (qui deviendra l'algorithmique) du découpage d'une tâche si possible n'ayant rien à voir avec l'informatique (un bon exemple est comment on ouvre la portière de sa voiture le matin)
    • appliquer ceci à une tâche plus proche de l'informatique : un raisonnement sur une opération mathématique ou une tâche comme établir la liste des images de son appareil photo..
    • puis présenter ce qu'est un ordinateur, avec sa partie CPU et sa partie mémoire.
    • suivre par ce qu'est un programme : une suite d'instructions qui sont trasnformées en opérations électronique, avec des données figurant en mémoire.
    • suivre par ce qu'est un OS et un programme applicatif
    • suivre par les opérations de base (de tout langage) : opérations mathématiques (+,-..), tests, ouverture/femeture de fichiers, lire/écrire des lignes. Inculquer que ce sont les opérations présentes dans tous les langages, et qui servent de base.
    • suivre par les moyens d'enchaînement de logique : boucles, tests imbriqués


    En introduction au mode de pensée et fonctionnement, c'est un peu ce que je ferais...


    Mais ce n'est que un humble avis à froid, juste après mon café du matin
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Pour apprendre le C à des débutants (des stagiaires, des collègues, je ne suis pas prof de métier), je n'ai jamais trouvé de sites ou de bouquins qui me satisfassent complètement. Surtout quand on aborde les aspects tableaux/pointeurs qui posent problème à beaucoup de débutants.

    Je veux juste enfoncer le clou par rapport à Franck.H ("coté pratique") et souviron34 ("aspect pragmatique"), sur l'exemple (combien de fois débattu ...) des allocations dynamiques, des pointeurs et des tableaux alloués à la compilation :

    FAIS DES DESSINS !!!

    Je vais peut-être passer pour un illuminé mais, avec les cours, excellents au demeurant (comme ceux de Melem), qui existent mais, sur ces aspects, trop - je ne trouve pas le mot - ... "académiques", comment se fait-il que le forum C soit littéralement truffé de questions, parfois élémentaires, sur ces aspects (bon, d'accord, il y a beaucoup de messages de feignants (désolé) qui veulent savoir tout faire sans faire le moindre effort) ?

    Pour enseigner à des débutants, un pointeur c'est une case d'où sort :

    - une flèche allant sur d'autres cases (zone allouée dynamiquement ou autre variable)
    - un symbole "terre" (électricité) pour symboliser un pointeur NULL
    - une flèche arrivant à un '?' si le pointeur n'a pas été initialisé et pointe n'importe où

    Au départ, tu peux même mettre 4 (ou 8) cases/octets pour bien montrer qu'un pointeur, en soi, ça prend un peu de place et puis après tu simplifies.

    Ca te permet de montrer la différence entre :
    - int tabint[4] et int *tabint = malloc(4*sizeof(int))
    - un tableau de chaines, façon argv, et char tabstr[4][6]

    En montrant, en parallèle, les instructions C et "mes" fameuses cases (avec un caractère dedans), tu peux remplir, avec de petites chaines, tabstr puis, rageusement, écrire dans tabstr[0] une chaine de 10 caractères qui écrase tout sur son passage ! Sur un tableau de chaines "sauce argv", ça bave aussi mais pas de la même façon.

    Sur l'exemple de la boucle for, je suis un peu plus perplexe. Ne forces-tu pas le trait ? Tu enseignes dans le supérieur, tes élèves sont supposés se servir de matlab (et pas comme d'une simple calculette je suppose), il y a pire comme auditioire, du moins sur le papier. Ne tombes-tu pas dans le piège classique (et ça m'arrive régulièrement, même en y faisant attention) de passer trop vite sur des choses dans lesquelles tu baignes ? Quatre ou cinq planches sur le sujet, sur des exemples très terre à terre, forcément, quitte à "être lourd", ne me semblent pas aberrantes quand, pour l'auditoire, un "compteur de boucle" n'évoque à priori rien.

    Et puis, pendant les cours, au tableau, "fais le débugger" et utilise au maximum le fait que ce soit du direct : signale l'instruction en cours, modifie en conséquence tes cases, tes flèches, etc... Ca rendra le cours plus vivant et interactif (les plus intéressés peuvent même participer, mais tout dépend du nombre d'élèves, je ne connais pas le contexte).

    Prends aussi tes aises, quand c'est nécessaire, avec la "sainte norme" et permets toi de dire des choses qui sont "presque vraies", vraies dans 95% des cas de figure. Il sera toujours temps, une fois que tu auras avancé dans ton cours, de revenir et de préciser quand tu tomberas (si tu tombes) sur les 5% restants. Elimine aussi, pour commencer, les cas trop "compliqués" et repousse les à + tard (voire, selon le temps dont tu disposes, aux calendes grecques) : pour un débutant, un fichier ça s'ouvre en lecture ou en écriture, point (si ça passe mal, pour toi, évoque rapidement les autres modes mais c'est tout).

    Et enfin, très rapidement pour ne pas relancer (pitié !) le sempiternel débat "le C convient-il aux débutants ?" (perso, je navigue quotidiennement entre le C et Python qui sont, quand même, deux langages avec une "philo" assez différente, et je n'ai pas d'avis tranché), il faut se poser la question, souvent laissée de côté, du type de l'auditoire et de ses besoins : débutants, certes, mais futurs informaticiens qui doivent passer par l'apprentissage de plusieurs langages ou ingénieurs/scientifiques qui ont besoin d'outils pour résoudre d'autres problèmes bien concrets, parfois très complexes, et qui ne peuvent s'offrir le luxe de trop se disperser ailleurs ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Je pense ( et je dis peut être une bétise ) c'est que le premier cours, doit être un court super théorique sur ce qu'est un ordinateur.
    Genre, l'évolution de la gestion de la mémoire ( qui expliquera du coup pourquoi on ne doit pas pointer n'importe ou avec nos flèches ).
    Ce que c'est le CPU ... comment qu'il avance dans un programme.

    Après le point d'entrée d'un programme. ( main sans arguments , même si cela reste un peu crade :p )
    Un joli hello word, est toujours sympa pour une première découverte pour pouvoir expliquer, l'entrée dans une fonction, la sortie ... l'execution.

    Enfin je m'enfonce dans le compliqué j'ai l'impression.
    Je sais juste que j'ai appris le C il y a trois ans, dans un IUT d'info, donc ça aide, que en parallèle des cours de mon prof d'algo ( notez bien qu'au début on nous parler plus de cours d'algo que de cours de C ), je suivait le cours du site , qui je trouve est très bien fait pour les débutants.
    Donc, un bon truc c'est de leur conseiller un tuto sur le net.

    Et je suis entièrement d'accord qu'il faut faire des dessins ... On ne m'a jamais appris une listes chainées sans dessin ... et ceci marche pour tous les cas en algorithmique.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Je veux juste enfoncer le clou par rapport à Franck.H ("coté pratique") et souviron34 ("aspect pragmatique"), sur l'exemple (combien de fois débattu ...) des allocations dynamiques, des pointeurs et des tableaux alloués à la compilation :

    FAIS DES DESSINS !!!

    Je vais peut-être passer pour un illuminé mais, avec les cours, excellents au demeurant (comme ceux de Melem), qui existent mais, sur ces aspects, trop - je ne trouve pas le mot - ... "académiques", comment se fait-il que le forum C soit littéralement truffé de questions, parfois élémentaires, sur ces aspects (bon, d'accord, il y a beaucoup de messages de feignants (désolé) qui veulent savoir tout faire sans faire le moindre effort) ?



    J'en avais mis ici :

    Les pointeurs : qu'est-ce post #19,

    et ici

    Les pointeurs : qu'est-ce post #21

    et à une autre endroit l'année précédente, dont je ne me rappelle plus..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par raoulpetite Voir le message
    Merci Mac LAK, mais mon souci n'est pas de savoir par quel langage commencer. Ce n'est pas moi qui en décide. Et donc pour cette matière là, c'est du C.
    Oui, mais dans la discussion, on parle des problèmes du C en tant que langage de débutant, et en gros quoi éviter. Ce n'est pas pour te faire changer de langage, un ordre est un ordre même s'il est idiot.

    Citation Envoyé par raoulpetite Voir le message
    Et au fond ma question porte plus sur comment faire comprendre à un étudiant le fonctionnement logique des programmes, l'interaction avec la mémoire de l'ordinateur, pourquoi on écrit une fonction pour faire certaine chose que tout mettre dans le main.. Tout ceci n'est pas forcément propre au langage C.
    Dans ce cas, je rejoins mes condisciples : il est crucial de commencer à leur expliquer ce qu'est un ordinateur et comment il marche avant d'attaquer la moindre ligne de C... Et à chaque fois que tu introduis un concept C dans ton cours, il FAUT faire le parallèle avec la machine.

    Déclarer une variable ? Expliquer qu'un ordinateur doit savoir où lire/écrire.
    Déclarer une fonction ? Expliquer les sauts au niveau CPU.
    Les pointeurs ? Re-expliquer qu'un ordinateur doit savoir lire/écrire. Expliquer en plus que la boîte n'est pas le contenu (pour ma part, on m'avait donné l'analogie de l'adresse postale, bien plus petite et facile à donner/manipuler que la maison située à l'adresse indiquée...).
    Les macros ? Expliquer le préprocesseur et en quoi c'est un langage DIFFÉRENT du C, au même titre que les makefiles.
    Etc.

    Je pense que le point le plus important à expliquer à des débutants en C, c'est l'histoire du langage et son but originel (écrire le système d'exploitation des ordinateurs de façon "commune", l'histoire d'Unix, etc.). Donc, bien leur faire comprendre que le C a été conçu pour remplacer DES langages assembleurs tous différents, et qu'en conséquence il est très proche de la machine... Voire "trop" proche parfois, permettant ainsi des craderies sans nom et rendant difficile l'implémentation d'algorithmes de haut niveau tant que l'on n'a pas développé les bibliothèques basiques permettant de franchir un cran.

    En ce sens, il est à mon sens important de leur expliquer que le C est à la base de beaucoup de langages de beaucoup plus haut niveau, ne serait-ce qu'en leur fournissant leurs couches basses (et 90% de leurs performances au passage)... Et que du code C "crade" ne peut absolument pas servir de base à quoi que ce soit, car la moindre erreur peut se répercuter très très loin du code C et avoir des conséquences plus ou moins catastrophiques pour l'utilisateur final.

    Le gros problème du C, c'est sa permissivité... Dans un programme "final", c'est déjà grave, mais dans une librairie destinée à être utilisée par des milliers, voire des millions ou plus de programmes, c'est catastrophique. Leur donner les exemples de failles de sécurité trouvées dans les OS et programmes grand public (navigateurs Web par exemple) comme conséquences de code C pas forcément très bien écrits.

    Dernier point : l'algorithmique est cruciale là aussi. Il faut leur apprendre à penser leur programme avant de le traduire en C, et non pas à pisser du code C en espérant lui faire faire un algo. Faire des organigrammes, des dessins, illustrer au maximum les propos en utilisant le plus possible de concepts de haut niveau afin de leur apprendre ce point crucial : on conçoit son programme d'abord, on le traduit en C ensuite.

    La plupart des erreurs que je vois en C sont liées au fait que les gens croient savoir ce qu'ils font, et commencent à attaquer le code direct. Cela ne produit jamais rien de bien... Ils ne savent pas penser leurs algos avant, donc on arrive au constat déplorable suivant :
    • Ils ne savent pas faire de conception, et encore moins de doc de conception.
    • Ils font du mauvais code C.
    • Ils seront toujours incapables de passer à un autre langage, car les structures du C seront trop ancrés en eux pour réfléchir autrement (on a d'ailleurs la même chose avec ceux ayant débuté par un langage de trop haut niveau...).


    Donc, mes conseils sur le sujet :
    • Expliquer le fonctionnement de la machine, et l'histoire de l'informatique.
    • Expliquer le pourquoi de la naissance du C, son but premier, son rôle actuel.
    • Expliquer les bases de l'algorithmique, même si ça se cantonne à des organigrammes.
    • Introduire les concepts à haut niveau en premier, abondamment illustrés.
    • Toujours faire le parallèle Machine / C en introduisant un concept.
    • Toujours montrer l'exemple de ce qu'il ne faut PAS faire, en expliquant POURQUOI.


    Si tu en as la possibilité, je t'encourage à leur faire faire une librairie d'outils plus ou moins basiques, et à faire un programme en parallèle les utilisant... Et à leur montrer, à chaque fois qu'ils auront un bug lié à une mauvaise implémentation dans la librairie, comment le lever et les conséquences potentielles de ces erreurs. La plupart auront plutôt tendance à blinder au niveau du programme (réduisant l'intérêt de la librairie), il faut donc leur montrer qu'un code C mal écrit "coûte" du temps à ceux qui l'utilisent.

    Citation Envoyé par Melem Voir le message
    C'est aussi ce que j'ai toujours essayé de faire comprendre aux anti-"C pour débuter" de ce forum à travers divers discussions anciennes comme les nouvelles, mais c'est très rare que je me suis fait entendu. Le C te laisse seul maître de ton programme, il faut juste savoir ce qu'on fait (comprendre la machine) pour l'utiliser.
    C'est une évidence, Melem... Le souci, comme ça a été dit, c'est pour débuter et exclusivement pour débuter.
    Or, souvent, un débutant en programmation est AUSSI un débutant en informatique, ce qui n'aide pas.
    Débuter le C en étant un pro de l'architecture des ordinateurs, ce n'est pas un problème majeur en soi. Quand l'ordinateur n'est qu'une télé avec un clavier et un "mulot", ce n'est plus tout à fait la même histoire.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Réponses: 105
    Dernier message: 02/03/2010, 08h41
  2. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Réponses: 7
    Dernier message: 01/05/2002, 20h23
  5. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo