Je donne des cours particuliers à quelques étudiants qui ont beaucoup de mal à apprendre les bases de leur premier langage de programmation: C ++. J'ai connu de nombreux étudiants excellents et brillants qui ont échoué ou abandonné leur premier cours CS. Tous ceux à qui je donne des cours donnent un compte rendu similaire de leur expérience en classe: l'instructeur avance trop vite, rien dans les cours n'a de sens, et al. Avant ce cours de CS, la plupart de ces étudiants en difficulté n'avaient exprimé aucun intérêt pour les ordinateurs comme autre chose que des traitements de texte, des navigateurs Web ou toute autre forme de divertissement. L'ordinateur est une boîte noire qui fonctionne, alors pourquoi jouer avec?
Ma meilleure supposition est qu'ils ont du mal à connecter les abstractions de l'informatique avec des concepts familiers. C'est-à-dire que ces étudiants savent peut-être apprendre les mathématiques, la biologie ou la physique, mais ces techniques ne fonctionnent pas en matière de programmation.
Quelqu'un a-t-il des suggestions ou des conseils? Les étudiants que j'aide ne méritent pas l'échec de ce cours. Il est clair que l'instructeur ne prend pas en compte le style d'apprentissage de ces élèves. C'est-à-dire que l'instructeur n'échoue pas à ses élèves.
Réponses:
Il y a quelques choses avec lesquelles pratiquement tous les débutants ont du mal. Les élèves doivent savoir lire le code avant d'apprendre à écrire du code.
=
) dans les langages de style C est extrêmement trompeur. Vous devez expliquer très attentivement que celaa = 5
signifie «attribuer 5 à la variablea
, et non « a est égal à 5 ».3+3
est un entier,3.5 + 3
est un double,"3" + "3"
(en C #) est une chaîne,x == 5 * 3 + 25
est un booléen (ou un entier en C ++). Passez beaucoup de temps pour vous assurer que l'élève est parfaitement à l' aise avec cette notion.x
définition dans une portée est différente d'unex
définition dans une autre portée.for
les boucles ne doivent pas être enseignées tant que des exemples adéquats d'itération utilisant deswhile
boucles ne sont pas fournis. La syntaxe abrégée prête à confusion et laisse les élèves se demander pourquoi ils ne peuvent pas simplement utiliser deswhile
boucles. Avoir une feuille de triche qui décrit unefor
boucle en termes dewhile
boucle peut être utile.Les composants OOP de C ++ sont une bête complètement différente, et j'espère que l'instructeur n'y arrivera pas - parce que OOP est mieux enseigné en utilisant des langages conçus à partir de zéro pour être OOP. D'après mon expérience, l'enseignement de la POO via C ++ ne s'est jamais bien passé.
la source
Avez-vous déjà enseigné la programmation?
J'ai enseigné la programmation aux majors CS et non CS pendant quatre ans. Le premier semestre, mon expérience a été comme la vôtre, jusqu'à ce que j'apprenne quelques choses.
Ce qui me paraissait vacueusement simple n'était pas du tout simple pour les débutants.
Quel que soit le langage, vous devez mettre en place un cadre mental - des choses si évidentes que vous ne réalisez même pas que vous les connaissez, telles que:
Les ordinateurs ne font qu'une chose à la fois. (Quiconque dit avoir du parallélisme et des pipelines, s'en va. Revenez quand les élèves sauront quelque chose.) Les ordinateurs ne peuvent faire qu'un petit nombre de choses différentes, et ils ne peuvent pas commencer une étape tant que la précédente n'est pas terminée. Je dis seulement cela, parce que les ordinateurs semblent faire tellement de choses, et les faire instantanément, que pour un débutant, il semble qu'ils font tout à la fois, et lisent aussi votre esprit.
Les variables sont importantes. Il est essentiel de comprendre que le nom d'une variable et son contenu au moment de l'exécution sont deux choses entièrement différentes. Les débutants ont du mal avec ça. Si je dis "Ecrivez un programme pour saisir votre nom puis vous dire bonjour", ils doivent comprendre qu'ils ont besoin d'une variable pour conserver leur nom, et ils doivent trouver un nom pour la variable, et ils sont tentés de lui donner son nom et de se demander ce que signifie "entrée".
Il y a une énorme différence entre l'heure à laquelle vous écrivez / éditez le programme et l'heure à laquelle il s'exécute. Lors de leurs premiers exercices, il faut le rappeler assez souvent.
La langue que j'ai utilisée était BASIC, car elle est très simple pour les débutants. Il n'est pas difficile de passer à d'autres langues après avoir développé un ensemble de capacités de programmation de base.
Nous écrivions souvent un programme au tableau, puis «jouions à l'ordinateur». Autrement dit, placez un X à côté de l'instruction actuelle, faites-le manuellement, puis déplacez le X à l'instruction suivante. Les variables étaient des rectangles sur le tableau, où nous écririons le contenu actuel. Lorsqu'une affectation se produisait, nous l'effaçions et introduisions la nouvelle valeur.
Une astuce que j'ai développée était un ordinateur décimal simulé, avec 1000 emplacements de mémoire, chacun capable de contenir un nombre à 4 chiffres. Il y avait un petit ensemble d '«opcodes» comme charger l'accumulateur, ajouter, stocker, sauter, etc. Ensuite, des concepts tels que les variables, le saut, etc. sont beaucoup plus faciles à expliquer.
J'espère que ça t'as aidé.
la source
À mon avis, le C ++ est une exagération en tant que première langue.
Si j'étais vous et que vous aviez suffisamment de temps, j'irais introduire des concepts de programmation et de CS en utilisant Python (ou similaire).
Lorsque les concepts sont clairs, c'est-à-dire lorsqu'ils sont à l'aise avec les structures de données de base, l'indirection, les algorithmes de base, etc., j'introduirais lentement le C ++ et ils pourront très rapidement se rapporter à ce qu'ils auraient déjà appris.
la source
Voici ce que je conseillerais:
Fondamentalement, je vous conseillerais de créer du papier a4 unique contenant tous les détails nécessaires. Une sorte de manuel de référence qui contient tous les détails. Certains livres peuvent également aider, par exemple le livre "The C Programming Language" qui a énormément aidé car il avait tous les détails nécessaires disponibles sous forme compacte. La compression des informations est une partie nécessaire dans la création du papier a4 qui contient tous les détails.
la source
La programmation est sensiblement différente des autres domaines communs rencontrés par un étudiant. De nombreux étudiants avant l'université ont réussi en faisant simplement attention en classe et peut-être en faisant quelques devoirs avec des problèmes faciles et les réponses au dos du livre. Il s'agit davantage de mémoriser des processus, puis de les créer. C'est également la première fois que de nombreux étudiants obtiennent à plusieurs reprises la mauvaise réponse (erreurs de syntaxe, erreurs logiques, erreurs de segmentation, etc.). Cela peut drainer la motivation des étudiants lorsqu'ils travaillent sur des programmes.
Pour vraiment savoir ce qui se passe avec la programmation, ils devront PRATIQUER BEAUCOUP. Une technique souvent négligée consiste à leur faire écrire du code pseudo dans leur langue maternelle. Demandez-leur de continuer à développer cela jusqu'à ce qu'ils aient une solution assez détaillée au problème. Il s'agit ensuite de traduire cela en vrai code.
la source
Quand j'étais au collège, j'étais un tuteur pour le cours d'introduction à la programmation parmi d'autres cours. Le problème que vous décrivez n'est pas rare. Selon votre rôle spécifique, vous pouvez adopter différentes approches.
Premièrement, s'il s'agit d'un problème répandu affectant une partie importante des élèves de la classe, si vous y avez accès, j'aborderais le professeur enseignant le cours avec des commentaires spécifiques sur les concepts que les élèves ne parviennent pas à saisir, afin qu'il ou elle peut soit incorporer un examen supplémentaire de ce matériel au fur et à mesure qu'il reviendra au cours du trimestre, soit améliorer le programme d'études pour les termes futurs.
Si vous enseignez une section de discussion pour le cours en plus de votre temps de laboratoire, ce serait un moment merveilleux pour exposer les choses qui prêtaient à confusion en cours et aider à les rendre plus concrets et à vous assurer que les fondamentaux étaient tous compris.
Si la seule fois où vous travaillez avec ces étudiants est pendant votre séjour dans le laboratoire de tutorat, vous pouvez toujours utiliser ce temps pour enseigner aux étudiants, individuellement ou individuellement, les blocs de construction conceptuels dont ils ont besoin pour comprendre et terminer leurs devoirs.
Ils peuvent se sentir tellement perdus en classe qu'ils ne savent même pas où s'arrêter et poser des questions. Si tel est le cas, revenez aux bases avec eux. Où étaient-ils dans le cours lorsqu'ils ont pour la dernière fois compris ce qui se passait? S'ils ne sont pas sûrs ou "jamais" compris, vous devrez peut-être remonter jusqu'au début pour expliquer le monde bonjour, en leur enseignant des choses comme ce qu'est une variable, comment l'ordinateur prend leur liste d '"instructions" et essaie de faites-les dans l'ordre, mais l'ordinateur n'est pas aussi "intelligent" que nous, vous devez donc être très littéral et dire les choses exactement pour que l'ordinateur les comprenne, etc.
C'est en fait un point de lutte et de frustration que j'ai vu assez souvent dans les cours de programmation non majeurs. Les élèves écrivent du code. Cela semble "à peu près" correct, mais ensuite ils vont le compiler et cela donne une erreur, une erreur très cryptique. Et ils n'ont aucune idée de ce qui ne va pas. Et regardez leur code pendant des heures. Puis enfin comprendre que c'était quelque chose qui semble insignifiant, comme un point-virgule manquant ou une accolade au mauvais endroit. Ensuite, ils vont à nouveau le compiler, et il y a encore une erreur, c'est autre chose. Ils ont orthographié un nom de variable différemment la deuxième fois qu'ils l'ont utilisé. Etc. Alors, ils demandent de l'aide à un ami ou un tuteur ou à quelqu'un, et ils peuvent répondre du haut de leur tête "oh ajoutez-y simplement là et alors cela fonctionnera." Donc, leur expérience est que la programmation est un peu "mystérieuse"
C'est un domaine en tant que tuteur, où vous avez beaucoup de place pour vous aider. Selon leur niveau de frustration, je pourrais avoir différentes approches pour les aider à comprendre pourquoi leur code ne fonctionne pas. S'ils l'obtiennent, je pourrais leur donner des indices et essayer de les aider à comprendre par eux-mêmes. Mais s'ils sont juste au bout de leur corde sur le point d'abandonner frustrés, je leur donnerai souvent quelques réponses gratuites, puis j'essaierai au moins de leur poser des questions telles que "comprenez-vous pourquoi ce changement a corrigé votre programme ? "
Pour certains étudiants, en particulier les non-majeurs, ils peuvent ne pas avoir l'attention méthodique aux détails nécessaire pour être un bon programmeur ou apprécier la programmation. Vous pouvez les manipuler par le biais de stratégies pour les aider à prêter attention aux détails et être suffisamment méthodique pour résoudre les problèmes, même si cela représente un défi pour eux.
Mais réticents à ce que les étudiants mettent en retrait leur code "correctement" - si souvent, les programmeurs débutants créent des problèmes d'imbrication et de portée car ils ont des accolades qui ne correspondent pas ou similaires parce qu'ils ne font pas attention à ce qui est imbriqué sous quoi. Donnez-leur une liste de contrôle des "choses à vérifier lorsque votre programme ne compilera pas", comme indenter correctement tout le code et assurez-vous que les accolades correspondent, assurez-vous que toutes les lignes se terminent par des points-virgules, en particulier autour du numéro de ligne où la première erreur s'affiche. , etc.
Apprenez-leur à compiler tôt et à compiler souvent. Écrivez le code squelette minimum (disons bonjour au monde), compilez / testez. Ajoutez quelques lignes, compilez à nouveau. Il est beaucoup plus facile de trouver des erreurs si vous ne regardez qu'un petit ensemble de modifications et non un grand ensemble.
Aidez-les à apprendre à décomposer un problème en petits problèmes résolubles. C'est la même chose que nous faisons en tant que programmeurs professionnels qui résolvent des problèmes beaucoup plus difficiles que nous ne savons pas résoudre. Vous continuez à le décomposer jusqu'à ce que vous arriviez à quelque chose que vous savez résoudre ou que vous puissiez faire des recherches pour apprendre à résoudre. "Quelles mesures devez-vous prendre pour arriver à une solution de travail?" Eh bien, vous auriez d'abord besoin d'un code squelette (bonjour le monde). Savez-vous comment le faire? Oui, super, alors quand nous aurons fini de parler, vous pouvez commencer par faire ça! Il doit ensuite lire un fichier en entrée. Vous souvenez-vous d'avoir lu à ce sujet au chapitre 4? Pas vraiment? Pourquoi n'iriez-vous pas jeter un coup d'œil à cela après avoir lancé Hello World, et voir à quel point vous pouvez vous rapprocher de cela, puis rappelez-moi et je Je vais vous aider un peu plus quand vous serez coincé là-dessus. Les premières fois, vous devrez peut-être leur faire une liste numérotée des étapes nécessaires pour résoudre le problème, afin qu'ils puissent apprendre par exemple comment décomposer le problème.
S'ils obtiennent une partie mais pas la totalité du matériel en classe, encouragez-les à poser des questions en classe, car neuf fois sur dix, ils ne sont pas le seul élève à ne pas comprendre, et le professeur a probablement simplement ignoré quelque chose d'important.
S'ils passent des "heures" à regarder un bug sans le comprendre, c'est une perte de temps, ils n'en tirent pas grand-chose. Souvent, les bogues sont des problèmes de perspicacité, et il s'agit de trouver la bonne perspicacité pour le résoudre, et ils peuvent ne pas avoir un talent pour ces types de problèmes. Suggérez d'autres approches générales à adopter lorsqu'ils sont coincés: demandez de l'aide à un autre ami de la classe (apprenez à connaître certains camarades de classe si nécessaire pour le faire), commencez leurs devoirs bien à l'avance afin qu'ils aient le temps de s'arrêter, puis le laboratoire de tuteur et poser des questions pendant les heures d'ouverture, ou aller aux heures de bureau du professeur. S'ils sont habitués au bourrage, ce qui fonctionne bien pour les sujets de mémorisation, ils heurteront un mur de frustration lorsqu'ils face à la programmation qui est plus une question de résolution de problèmes que de mémorisation. Montrez-leur comment rechercher des exemples de syntaxe dans leur manuel, stackoverflow, etc. Encouragez-les à publier une question sur un forum de questions de classe privée, le cas échéant.
Apprenez-leur à préciser où le code cesse de fonctionner. Commentez les éléments jusqu'à ce que vous reveniez à quelque chose qui fonctionne, puis ajoutez-les lentement jusqu'à ce que vous obteniez à nouveau ce défaut de segmentation.
Un grand nombre de ces idées pourraient être transformées en documents à distribuer si elles se présentent souvent. Les stratégies sont généralement la partie que les professeurs passent sous silence - ils passent leur temps sur la syntaxe, la sémantique de la façon d'écrire des boucles, des tableaux, des E / S, etc. Mais pas assez de temps consacré à "ce que je fais quand j'essaie pour exécuter mon code et il ne compile pas ou tombe en panne sur moi? "
En ce qui concerne les choses conceptuelles, en particulier les fondamentaux, comme "qu'est-ce qu'une variable", ou "qu'est-ce qu'une boucle?" ne pas comprendre cela les empêchera de suivre le reste du cours. Dans un cours magistral, le professeur peut ne pas avoir le temps de répondre à toutes les questions ou d'aider à éteindre l'ampoule pour chaque étudiant. Et c'est en partie pourquoi les tuteurs sont si importants pour l'apprentissage de la programmation. Ils peuvent avoir besoin d'un enseignement individualisé avec des analogies supplémentaires pour concrétiser un sujet particulier.
Puisque vous enseignez en C ++, j'imagine que les cours apparaissent comme un sujet abstrait que certains étudiants ont du mal à "obtenir". Souvent, l'abstraction des classes est enseignée avec des exemples correspondant à un objet du monde réel aléatoire, comme une "machine ATM", et des analogies sont faites avec l'objet du monde réel. Vous pourriez avoir des variables pour garder une trace de la quantité d'argent à l'intérieur, vous avez des méthodes, qui sont comme des règles qui disent à la machine atm comment répondre à des conditions particulières, etc. Parfois, une analogie est celle qui "colle" pour une personne particulière et les autres élèves en saisissent mieux un autre.
Dans la mesure du possible, dessinez des images pour eux. Comme un diagramme de séquence de ce qui se passe au fil du temps pour les aider à avoir une vue d'ensemble de ce que fait le code qu'ils écrivent. L'utilisateur clique sur ce bouton. Ensuite, le programme devrait répondre en faisant x, y et z. Dessinez un tableau comme un tas de boîtes postales au bureau de poste qui ne peut contenir qu'un seul numéro, et des pointeurs comme des flèches pointant vers "l'adresse" sur le devant de la boîte. Etc.
la source
De tous les merveilleux choix pour les langages de programmation, ce collège utilise C ++ comme classe d'introduction CS pour les majors non CS ?? Entre les mains d'un instructeur talentueux, cela pourrait être envisageable à distance, mais pourquoi le rendre si difficile?
Quand j'ai appris "Pascal" dans mon cours d'introduction au CS, nous avons passé les 3 premières semaines à travailler avec " Karel le robot ". Il s'agissait d'un environnement de programmation de type sandbox très simple où tous les concepts de base (y compris la récursivité) ont été explorés à fond avant de le faire en Pascal. Dans "Karel le robot", vous contrôlez un robot dans l'espace 2D à l'aide d'un petit ensemble de commandes simples. Cela donne aux élèves une base concrète utile sur laquelle ils peuvent s'appuyer pour ce qui se passera ensuite.
Peut-être existe-t-il maintenant des langages de programmation pédagogique plus modernes qui remplissent le rôle de "Karel le Robot"? Mais probablement trop tard pour vos élèves maintenant.
la source
En plus de ce qui a été dit, je suppose qu'en tant que débutant, ils n'ont qu'à gratter la surface, alors adaptez votre programme en conséquence pour éviter des choses complexes.
0-leur donner un problème simple (disons évaluer une expression).
1-leur donner le temps de le comprendre.
2-donnez-leur la réponse.
3-passer par la réponse ligne par ligne
4-demandez-leur de comparer votre réponse avec leur réponse
5-leur demander de tirer la leçon de ce problème
6-ajouter une étape supplémentaire au même problème, par exemple une condition nécessitant une instruction IF
7-répétez la tâche ci-dessus sur plusieurs problèmes. D'ici là, ils auraient compris les bases de la langue et comment utiliser l'environnement. Le serait prêt pour la suite.
Également,
-ont un problème simple bonus pour eux d'essayer à la maison toutes les 2 classes environ
-engager avec chaque élève pour voir quel est le point qui l'empêche d'aller plus loin
-fournir du matériel de référence facile, oublier des sujets complexes et des livres complexes
-obtenir fréquemment leurs commentaires et les utiliser
-les demander de se préparer au sujet suivant avant de venir en classe
la source
Ce qui m'a aidé lorsque j'ai parcouru CS 101, c'est d'apprendre la logique avant même de regarder le code. Nous avons parcouru les tables de vérité et le calcul prépositionnel juste pour commencer à penser "ceci est vrai ou faux" et non "ceci est égal à ceci ou cela".
C'était juste là quand tout a cliqué pour moi. Une fois que j'ai compris que la programmation consiste simplement à manipuler des valeurs vraies / fausses à sa base, tout est devenu relativement simple.
Et cela fait que peu importe la langue que j'utilisais, la logique est la même partout. La syntaxe peut être déroutante, mais je peux dire des choses comme "Ok, dans Obj CI envoyer des messages à des classes comme celle-ci et en C ++ les messages ont été envoyés de cette façon. Mais l'algorithme n'a pas changé du tout." etc.
la source
Il y a un article ACM ou IEEE quelque part qui explique en détail pourquoi les débutants (même les diplômés CS commençant dans le domaine) doivent s'asseoir derrière un programmeur senior et les regarder coder un problème.
Les professionnels s'associent souvent pour des problèmes difficiles. On dit trop souvent aux étudiants de ne pas le faire. Avantages de l'appariement (à tour de rôle au clavier): 1. L'élève apprend immédiatement ce qu'il fait mal. Rétroaction instantanée. 2. Lorsque l'apprenant regarde l'enseignant, l'apprenant reprend des choses qu'il n'aurait jamais pensé signaler.
Plutôt que de laisser un élève développer de mauvaises pratiques, ils sont étouffés dans l'œuf. (Je retournerais # 1 avec # 2 ici et laisserais l'étudiant regarder le moniteur / TA en premier )
Enseigner CS avec un ensemble statique de diapositives PowerPoint ne prête pas bien au processus temporel d'écriture d'un programme. (Certes, il existe des astuces que vous pouvez faire en augmentant les fonctions ligne par ligne, mais elles sont généralement maladroites.)
Les apprenants doivent savoir où commencer à écrire, et où s'arrêter et compiler. Nos cerveaux sont principalement câblés pour lire de gauche à droite de haut en bas, mais un programme est comme un tout choisissez votre propre livre d'aventure entassé dans une seule page!
Trop souvent, un débutant copiera un programme entier puis compilera. Même un professionnel pourrait donner une première chance à cela, avant de se rendre compte qu'il aurait dû laisser toutes les fonctions vides et compiler le programme, puis l'ajouter de manière itérative dans un squelette fonctionnel.
En outre, l'idée ridicule que la CS devrait être enseignée sans ordinateur et seulement avec un crayon et du papier est liée. Je me demande combien de professionnels de la programmation employés pensent vraiment que c'est la meilleure façon, ou si c'est juste ce que font les instructeurs CS parce qu'ils n'aiment pas eux-mêmes travailler avec des ordinateurs? Toute tentative de supprimer un ordinateur de l'image est moyenne. Cela rend la programmation moins amusante et moins interactive qu'elle ne devrait l'être. Nous sommes depuis longtemps passés à saisir des données sur une carte perforée et à attendre patiemment. Les développeurs professionnels d'aujourd'hui sont fans de gratification instantanée. Heureusement, la plupart des étudiants le sont aussi.
De toute évidence, le dessin de jolis dessins au crayon et au papier avant et pendant le processus de développement est un outil puissant pour les programmeurs professionnels et débutants. Ce temps comme le "clavier" devrait également être consacré à l'appairage! Ici, il serait peut-être judicieux de laisser l'élève tenter le premier tour avant de regarder l'enseignant, même si cela vaut probablement la peine de voir le véritable processus de réflexion de l'enseignant.
Enfin, les touches de raccourci et les astuces d'édition que le développeur professionnel utilise ne sont pas du «bruit» pour l'apprentissage de l'étudiant. Plus important encore, ils engagent et intéressent l'élève. Deuxièmement, ils sensibilisent aux besoins communs de développement. De plus, les pratiques les plus élémentaires sont souvent faciles à exécuter mais pas évidentes au départ. Un jeune étudiant en atelier de menuiserie peut facilement apprendre à retirer un clou avec la griffe d'un marteau, mais dans la plupart des cas, il faut d'abord dire que c'est à cela que sert la griffe. Certaines choses extrêmement faciles à faire ne sont tout simplement pas triviales à apprendre sans être enseignées. Même les développeurs professionnels oublient ces "astuces" tout le temps et bénéficient d'outils de refactoring comme resharper pour supprimer le code redondant ou non atteint, etc.
la source
La programmation informatique est souvent l'un des premiers cours où l'habileté cognitive de synthèse est requise pour une note de passage. Cette compétence est très difficile à transmettre à quelqu'un d'autre. Vous pouvez expliquer tous les composants dont ils disposent et comment ils fonctionnent. Vous pouvez donner une multitude d'exemples de la façon dont d'autres personnes ont utilisé la synthèse pour combiner ces composants en un tout plus utile, mais il n'y a que beaucoup de choses que vous pouvez faire sans quelque chose de «cliquetant» dans l'esprit de l'élève.
D'après mon expérience, c'est l'habileté de la synthèse qui échappe le plus souvent aux personnes qui n'obtiennent pas de programmation. Ils ont une parfaite compréhension des parties, comme les variables, les fonctions et les boucles, mais ils posent des questions comme: "Je comprends pourquoi cela fonctionne, mais comment saviez-vous que vous deviez y mettre une boucle?" Vous devez simplement pratiquer jusqu'à ce que vous l'obteniez.
la source
Pour citer mal Aaron Hillegass, rappelez-leur qu'ils ne sont pas stupides, c'est juste difficile. Il est difficile de former votre esprit à la programmation, c'est une toute autre façon de penser, et bien qu'ils puissent avoir du mal avec les bases, ils sont probablement très conscients qu'ils le sont et cela les rendra assez découragés.
Je dis cela en tant que personne qui a également échoué à son cours de CS de première année, j'avais déjà programmé beaucoup de choses et obtenu tous les concepts (VB, ouais bébé) mais C ++ ne voulait tout simplement pas cliquer pour moi. J'ai fini par revenir à l'essentiel et à travailler à partir de là, puis ça a cliqué, mais si quelqu'un avait dit "Tu n'es pas un idiot, c'est juste dur" ça m'aurait facilité la vie.
la source
Vous avez dit "ces étudiants savent peut-être apprendre les mathématiques, la biologie ou la physique, mais ces techniques ne fonctionnent pas en matière de programmation".
Il y a une raison à cela, la programmation nécessite quelque chose que les autres disciplines n'exigent pas nécessairement: la créativité et ... la fantaisie . La capacité à "imaginer les choses au travail". Personnellement, j'ai trouvé qu'une telle exigence est plus présente (bien sûr, à toutes les exceptions près) chez les personnes venant de l'école technique (électronique et électromécanique en particulier: ils doivent "imaginer les flux électriques et comment ils se contrôlent", car ils ne peuvent pas les voir!) que de la "science pure" (où tout ressemble à tourner autour des mathématiques).
Pour ces derniers cas, la "cognition visuelle" doit être aidée. Il est important non seulement de se concentrer sur la notion et le texte (le type -> compiler -> regarder les erreurs ne peut pas fonctionner si vous n'êtes pas en mesure de "lire" les erreurs) mais de fournir un moyen de visualiser les choses, soit au moment de la conception ( en simulant ce qui se passe sur la machine: être préparé avec un tableau blanc et un ensemble de post-it colorés) et au moment de l'exécution.
Pour que cette dernière partie soit réussie, il faut donner une notion essentielle des systèmes d'exploitation et «comment les programmes s'exécutent dans une machine» (et ce qu'est cette machine en fait). Et un IDE non intimidant doit être donné. J'ai normalement un "bloc de code personnalisé" avec beaucoup de choses supprimées pour "ne pas distraire". La notion de projet fait de sources pour générer des objets à relier à la bibliothèque doit être donnée AVANT de commencer à parler d'un langage.
Le monde bonjour traditionnel C ++ nécessite un point d'entrée et un périphérique de sortie. L'élève doit déjà le connaître. Le succès de ce type de cours dépend des premiers jours. Vous devez stimuler une visualisation de ce qui se passe à l'intérieur d'un ordinateur pour leur permettre de comprendre ce qu'est la programmation.
Le reste est la syntaxe (science) et l'abstraction (fantaisie)
la source