web-dev-qa-db-fra.com

Tutorat d'étudiants qui ont des luttes avec les bases de C ++

Je suis en train de tutorater quelques étudiants qui ont des difficultés considérables à apprendre les bases de leur premier langage de programmation: C++. J'ai connu de nombreux étudiants excellents et brillants qui ont échoué ou laissé tomber leur premier cours CS. Tout le monde que je suis tutorat donne un récit similaire de son expérience en classe: l'instructeur se déplace trop rapidement, rien dans les conférences n'a aucun sens, et al. Avant cette classe CS, la plupart de ces élèves en difficulté n'avaient exprimé aucun intérêt pour les ordinateurs comme rien de plus que des processeurs de mots, des navigateurs Web ou une autre forme de divertissement. L'ordinateur est une boîte blackbox qui fonctionne, alors pourquoi gâcher?

Ma meilleure estimation est qu'ils ont des difficultés à connecter les abstractions d'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 lors de la programmation.

Est-ce que quelqu'un a des suggestions ou des conseils? Les étudiants que j'aident ne méritent pas d'échouer cette classe. Il est clair que l'instructeur ne prend pas en compte le style d'apprentissage de ces étudiants. C'est-à-dire que l'instructeur ne manque pas ses étudiants.

26
AdmCrunch

Il y a quelques points que pratiquement tous les débutants se battent avec. Les étudiants doivent savoir comment lire le code Avant de pouvoir apprendre à écrire du code.

  • La nature séquentielle des langues impératives. Les gens ont du mal à comprendre que les fonctions sont exécutées en séquence, un élément à la fois, comme une recette. Un moyen de surmonter ceci est de montrer du code de travail à travers un débogueur.
  • L'opérateur d'affectation (=) Dans les langues de style C est extrêmement trompeuse. Vous devez expliquer très soigneusement que a = 5 signifie "assigner 5 à la variable a, non " A est égal à 5 ​​".
  • Pour les débutants, il est prudent de décrire des fonctions comme des blocs structurés de code que d'autres fonctions peuvent passer à. De plus, les débutants ont du mal à comprendre qu'en C++, les arguments de fonction sont identifiés par ordre, et non par leur nom.
  • La plupart des langages de programmation impérative ont des composants déclaratifs et certains composants de procédure, et C++ ne fait pas exception. Assurez-vous que l'élève comprend que certaines parties du code décrivent la structure du programme, et d'autres parties (fonctions) décrivent ce que le programme devrait faire.
  • Traversement d'un programme avec le débogueur est un outil d'enseignement extrêmement important et souvent négligé.
  • Les expressions ont types . 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'étudiant est complètement à l'aise avec cette notion.
  • La portée variable est quelque chose que les débutants sont confus tout le temps. Expliquez à l'étudiant comment fonctionne la portée et assurez-vous qu'ils savent qu'un x défini dans une seule portée est différent d'un x défini dans une autre portée.
  • Chaque variable est référencée au moins trois fois dans sa durée de vie: déclaration, affectation (souvent faite sur la même ligne que la déclaration), la consommation. Si certains d'entre eux manquent, il y a une erreur conceptuelle quelque part. Pour la même raison, si vous analysez un programme de travail, vous pouvez toujours rechercher ces trois éléments du code pour déterminer le but d'une variable.
  • for Les boucles ne doivent pas être enseignées tant que des exemples d'itération adéquats en utilisant des boucles while sont donnés. La syntaxe sténographique est confuse et laisse les étudiants qui se demandent pourquoi ils ne peuvent pas simplement utiliser des boucles while. Avoir une feuille de triche décrivant une boucle for en termes de boucle while peut être utile.
  • Les tableaux et les pointeurs sont assez faciles à enseigner, mais un cauchemar à apprendre. En d'autres termes, jusqu'à ce que cela clique, la pratique est importante.
  • L'idée que le code est un texte et qu'un programme compilé est en fait un fichier est insaisissable à certains débutants. Assurez-vous de leur montrer les fichiers .CPP, .h et binaires dans la coquille.

The OOP Composants de C++ sont entièrement une bête différente, et je espère que l'instructeur n'entre pas là-bas - car OOP est mieux enseigné en utilisant Les langues qui ont été conçues à partir de la terre jusqu'à OOP. Dans mon expérience, enseignement OOP à C++ n'est jamais bien passé.

42
Rei Miyasaka

Avez-vous enseigné la programmation avant?

J'ai enseigné la programmation aux majors CS et non-CS pendant quatre ans. Le premier semestre, mon expérience était comme la vôtre, jusqu'à ce que j'ai appris quelques choses.

Ce qui semblait vous-même seul à moi n'était pas du tout simple aux débutants.

Indépendamment du 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 un parallélisme et une pipeline, partiez-vous. Revenez lorsque les élèves savent quelque chose.) Les ordinateurs ne peuvent faire qu'un petit nombre de choses différentes, et ils ne peuvent pas commencer à faire une étape jusqu'à ce que le précédent soit terminé. Je ne dis que cela, car les ordinateurs semblent faire autant de choses, et les faire instantanément, qu'à un débutant, on dirait qu'ils tout font à la fois et à lire votre esprit aussi.

  • 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 luttent avec cela. Si je dis "Ecrivez un programme pour entrer votre nom, puis dites bonjour à vous", ils doivent comprendre qu'ils ont besoin d'une variable pour tenir leur nom, et ils doivent penser à un nom pour la variable et ils sont tentés Nommez-le après eux-mêmes et se demander ce que signifie "entrée".

  • Il y a une énorme différence entre le moment où vous écrivez/éditez le programme et l'heure à laquelle il exécute. Au cours de leurs premiers exercices, ils doivent être rappelés de cela assez souvent.

La langue que j'ai utilisée était basique, car elle est très simple pour les débutants. Il n'est pas difficile de passer à d'autres langues après avoir construit un ensemble de capacités de programmation de base.

Nous écrivions souvent un programme sur le tableau, puis "jouer à l'ordinateur". C'est-à-dire, mettez un x à côté de la déclaration actuelle, faites-le manuellement, puis déplacez le X dans la déclaration suivante. Les variables étaient des rectangles sur la planche, où nous écririons le contenu actuel. Lorsqu'une mission s'est produite, nous l'effacerions et mettait la nouvelle valeur.

Un astuce que j'ai développé é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 de "opcodes" comme charger l'accumulateur, ajouter, le magasin, le saut, etc. Je voudrais qu'ils écrivent de petits programmes dans cette "langue de la machine" puis une étape unique pour le voir travailler. Ensuite, plus tard, des concepts comme les variables, sauter, etc. sont beaucoup plus faciles à expliquer.

J'espère que cela pourra aider.

19
Mike Dunlavey

À mon avis C++, une overcilleuse est une première langue.

Si j'étais vous et si j'avais 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 quand ils sont à l'aise avec des structures de données de base, une indirection, des algorithmes de base, etc., j'introduisais lentement C++ et ils seront très rapidement en mesure de se rapporter à ce qu'ils auraient déjà appris.

12
yati sagade

Voici ce que je conseillerais:

  1. Donnez-leur tous les détails dont ils ont besoin pour le comprendre
  2. Encouragez-les à essayer de comprendre les détails
  3. Assurez-vous qu'ils ont les détails stockés sous forme compacte chaque fois qu'ils en ont besoin

Fondamentalement, je vous conseillerais de créer un document A4 unique qui dispose de tous les détails nécessaires. Une sorte de manuel de référence qui a tous les détails. Certains livres peuvent également aider, par exemple, "le langage de programmation C" a contribué énormément car il disposait de tous les détails nécessaires disponibles sous forme compacte. La compression des informations est nécessaire à la création du papier A4 qui contient tous les détails.

4
tp1

Quand j'étais au collège, j'étais un tuteur pour l'introduction au cours de programmation parmi d'autres cours. Le problème que vous décrivez n'est pas rare. En fonction de votre rôle spécifique, vous pouvez avoir différentes approches que vous souhaitez prendre.

Premièrement, s'il s'agit d'un problème généralisé affectant des portions importantes des élèves de la classe, si vous avez accès à le faire, je m'approcherais au professeur enseignant le cours avec des commentaires spécifiques sur quels concepts les élèves ne saisent pas, de sorte qu'il ou Elle peut soit incorporer un examen supplémentaire de ce matériel tel qu'il revient à la durée, ou à améliorer le programme d'études pour les termes futurs.

Si vous enseignez une section de discussion pour le parcours en plus de votre temps de laboratoire, ce serait un moment merveilleux d'exposer sur les choses qui confondent de la confusion et de les rendre plus concrètes et de s'assurer que les fondamentaux étaient tous compris.

Si la seule fois que vous travaillez avec ces étudiants est pendant votre séjour dans le laboratoire de tutorat, vous pouvez toujours utiliser cette fois pour enseigner aux élèves un sur un, ou quelques-uns à la fois, les blocs de construction conceptuels dont ils ont besoin pour comprendre et compléter leurs devoirs.

Ils peuvent se sentir tellement perdu en classe, ils ne savent même pas où arrêter et poser des questions. Si tel est le cas, revenez aux bases avec eux. Où étaient-ils dans le cours quand ils ont compris ce qui se passait? S'ils ne sont pas sûrs ou "jamais" compris, vous devrez peut-être aller jusqu'au début pour expliquer Bonjour World, leur apprendre des choses comme quelle variable est, comment l'ordinateur prend sa liste de "instructions" et essaie de Faites-les dans l'ordre, mais l'ordinateur n'est pas aussi "intelligent" comme nous, vous devez donc être très littéral et dire des choses exactement correctement pour que l'ordinateur comprenne, etc.

C'est en fait un point de lutte et de frustration que j'ai connus assez souvent dans les cours de programmation des non-majors. Les étudiants écrivent du code. Il semble "à propos" à droite, mais ils vont ensuite 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 avec ça. Et regarder leur code pendant des heures. Ensuite, déterminez enfin que c'était quelque chose qui semble trivial, comme un demi-cône manquant, ou une attelle au mauvais endroit. Ensuite, ils vont la compiler à nouveau, et il y a toujours une erreur, c'est autre chose. Ils ont orthographié un nom de variable différemment la deuxième fois qu'ils l'utilisaient. Etc. Donc, ils demandent à un ami ou à un tuteur ou à une personne de l'aide, et ils peuvent répondre au sommet de leur tête "Oh, ajoutez-y, alors cela fonctionnera." Donc, leur expérience est que la programmation est un peu "mystérieuse" et extrêmement frustrante et une erreur plus frustrante et une erreur plus frustrante que nécessaire.

C'est une région comme tuteur, où vous avez beaucoup de place pour aider. En fonction de leur niveau de frustration, je pourrais avoir des approches différentes pour les aider à comprendre pourquoi leur code ne fonctionne pas. Si elles sont en quelque sorte, je pourrais leur donner des allusions et essayer de les aider à comprendre eux-mêmes. Mais s'ils sont juste à la fin de leur corde sur le point d'abandonner frustré, je leur donnerai souvent quelques réponses de Freebie, puis essayez au moins de leur demander des questions comme "Comprenez-vous pourquoi cette modification corrige votre programme ? "

Pour certains étudiants, en particulier des non-majors, ils n'ont peut-être pas l'attention méthodique aux détails nécessaires pour être un bon programmeur ou pour profiter de la programmation. Vous pouvez les maintenir à la main grâce à des stratégies pour les aider à faire attention aux détails et à être suffisamment méthodique pour résoudre les problèmes même s'il s'agit d'un défi pour eux.

Mais anal fait rapport sur les élèves indentant leur code "correctement" - souvent, les programmeurs de départ créent des problèmes liés à la nidification et à la portée, car ils ont des accolades non assorties ou similaires, car ils ne font pas attention à ce qui est imbriqué sous quoi. Donnez-leur une liste de contrôle de "Things à vérifier lorsque votre programme ne compilera pas", comme indentez tout le code correctement et assurez-vous que toutes les lignes se terminent, 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 affiche up, etc.

Apprenez-leur à compiler rapidement et compilez souvent. Écrivez le code squelette minimum (disons, bonjour monde), compiler/tester. Ajoutez quelques lignes, compiler à nouveau. Il est beaucoup plus facile de trouver des erreurs si vous regardez seulement un petit seau de changements, pas un gros seau.

Aidez-les à apprendre à décomposer un problème dans des problèmes sensibles plus modestes. C'est la même chose que nous faisons en tant que programmeurs professionnels résolvant beaucoup de problèmes plus difficiles que nous ne savons pas résoudre. Vous continuez à le casser en morceaux jusqu'à ce que vous soyez sur quelque chose que vous savez soit résoudre ou que vous puissiez faire des recherches pour apprendre à résoudre. "Quelles mesures auriez-vous besoin pour aller à une solution de travail?" Eh bien, vous aurez d'abord besoin d'un code squelette (Hello World). Savez-vous comment faire cela? Oui, génial, alors quand nous avons fini de parler, vous pouvez commencer par le faire! Ensuite, il doit lire un fichier comme entrée. Vous souvenez-vous de lire à ce sujet au chapitre 4? Pas vraiment? Pourquoi n'allez-vous pas jeter un coup d'œil qu'après avoir eu un bonjour World Crener et voyez à quel point vous pouvez vous rapprocher de l'obtention de ce travail, puis appelle-moi et je vous aiderai d'autres quand vous êtes coincé à ce sujet. Les premières fois, vous devrez peut-être simplement effectuer une liste numérotée pour les étapes nécessaires pour résoudre le problème, de sorte qu'ils puissent apprendre de l'exemple comment décomposer le problème.

S'ils obtiennent des éléments mais pas tous les éléments de la classe, encouragez-les à poser des questions en classe, car neuf fois sur dix, ils ne sont pas le seul élève qui ne comprend pas et que le professeur a probablement fait briller quelque chose d'important.

S'ils dépensent des "heures" fixant un bug mais ne pas le comprendre, c'est une perte de temps, ils n'en apprennent pas beaucoup. Souvent, les insectes sont des problèmes de perspicacité, et c'est une question d'approximation de la bonne idée de le résoudre, et ils ne peuvent pas avoir un talent pour ces types de problèmes. Suggérer d'autres approches générales à prendre lorsqu'ils sont bloqués: Demandez à un autre ami dans la classe de l'aide (faire connaissance avec des camarades de classe si nécessaire pour le faire), commencez leur voie à suivre à l'avance pour avoir le temps de s'arrêter, et il est plus tard dans le temps 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 à recouvrir, ce qui fonctionne bien pour les sujets de mémorisation, ils frapperont un mur de frustration lorsqu'ils sont confrontés à la programmation, ce qui est davantage sur la résolution de problèmes que la mémorisation. Montrez-leur comment rechercher des exemples de syntaxe depuis leur manuel, Stackoverflow, etc. Encouragez-les à poster une question sur un forum de questions de classe privée s'il en existe un.

Apprenez-leur comment réduire l'endroit où le code cesse de fonctionner. Commentaire Stuff dehors jusqu'à ce que vous reveniez à quelque chose qui fonctionne, puis ajoutez lentement des objets jusqu'à ce que vous obteniez à nouveau ce Segfault.

Beaucoup de ces idées pourraient être transformées en documentations si elles montent beaucoup. Les stratégies sont généralement les professeurs de la pièce brillent - 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 passé sur "Qu'est-ce que je fais quand j'essaye Pour exécuter mon code et cela ne compile pas ou ne se bloque pas 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 pouvoir suivre le reste du parcours. Dans un cours basé sur la conférence, le professeur n'a peut-être pas le temps de répondre à toutes les questions ou d'aider que Lightbulb s'éteigne pour chaque élève. Et cela fait partie de la raison pour laquelle les tuteurs sont si importants pour l'apprentissage de la programmation. Ils peuvent avoir besoin d'une instruction individualisée avec des analogies supplémentaires pour faire un béton particulier.

Depuis que vous enseignez en C++, je voudrais imaginer des cours comme un sujet abstrait que certains élèves ont du mal à "obtenir". Souvent, l'abstraction des classes est enseignée avec des exemples correspondant à un objet mondial réel aléatoire, comme une "machine ATM" et des analogies sont fabriquées à l'objet du monde réel. Vous pourriez avoir des variables à garder une trace de combien d'argent est à l'intérieur, vous avez des méthodes telles que 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 d'autres étudiants saisissent une différence meilleure.

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 à voir la grande image de ce qu'elles écrivent le code. 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 contiennent qu'un chiffre, et des pointeurs comme des flèches pointant vers l'adresse "adresse" à l'avant de la boîte. Etc.

3
Jessica Brown

La programmation est sensiblement différente des autres domaines communs, une rencontre des étudiants. Beaucoup d'étudiants avant le collège ont réussi à ne faire preuve d'attention en classe et à faire quelques devoirs de devoirs avec des problèmes faciles et les réponses à l'arrière du livre. Il s'agit davantage de mémoriser les processus, puis de les créer. C'est aussi la première fois que beaucoup d'élèves d'obtenir une mauvaise réponse à plusieurs reprises (erreurs de syntaxe, erreurs de logique, défauts SEG, etc.). Cela peut drainer la motivation des élèves lorsque vous travaillez sur des programmes.

Pour vraiment savoir ce qui se passe avec la programmation, ils devront pratiquer beaucoup. Une technique souvent négligée consiste à les faire écrire du code PSEDEO dans toute leur langue maternelle. Demandez-leur de continuer à élargir cela jusqu'à ce qu'ils aient une solution assez détaillée au problème. Alors c'est une question de traduire cela en un code réel.

3
Peter Smith

Ce qui m'a aidé quand j'ai traversé CS 101 apprenait la logique avant même de regarder le code. Nous avons traversé des tables de vérité et des calculs prépositionniens, alors nous commencerions à penser "c'est vrai ou faux" et non "Cela équivaut à ce que ce soit ou que".

Ce droit il y avait quand tout cliquait pour moi. Une fois que j'ai compris que la programmation consiste essentiellement à manipuler des valeurs vraies/fausses à son noyau, il est donc devenu relativement simple.

Et cela l'a fait de sorte que peu importait la langue que j'utilisais, la logique est la même partout. La syntaxe pourrait être déroutante, mais je peux dire des choses comme "OK, dans Obj C I, j'envoie des messages aux classes comme celui-ci et dans les messages C++ ont été envoyés comme cette autre voie. Mais l'algorithme n'a pas du tout changé." etc.

2
OghmaOsiris

Il y a un article ACM ou IEEE quelque part qui entre dans certains des détails de la raison pour laquelle les débutants (même des diplômés de CS commençant sur le terrain) doivent s'asseoir derrière un programmeur principal et les regarder du code un problème.

Les professionnels pairent souvent pour des problèmes difficiles. Les étudiants sont trop souvent informés de ne pas le faire. Avantages de l'appariement (à tour de rôle au clavier): 1. L'élève se fait raconter ce qu'il fait mal immédiatement. Rétroaction instantanée. 2. Lorsque l'apprenant regarde l'enseignant, l'apprenant reprend sur des choses que l'enseignant n'aurait jamais pensé signaler.

Plutôt que de laisser un élève développer de mauvaises pratiques, elles sont nitruées dans le bourgeon. (Je retournerais n ° 1 avec n ° 2 ici et laissez l'étudiant regarder l'instructeur/ta [~ # ~ ~] d'abord [~ # ~]) ==)

Enseigner CS avec un ensemble statique de diapositives PowerPoint ne prête pas à bien le processus temporel d'écrire un programme. (Accordé il y a des astuces que vous pouvez faire avec des fonctions de croissance ligne par ligne, mais elles sont généralement maladroites.)

Les apprenants doivent savoir où commencer à écrire et où arrêter et compiler. Nos cerveaux sont principalement câblés pour lire de gauche au haut à droite en bas, mais un programme est comme un ensemble de choisir votre propre livre d'aventure entassé dans une seule page!

Trop souvent, un débutant copiera un programme complet puis compilera. Même un professionnel peut donner une première fissure de cette façon, avant de se rendre compte qu'elles devraient avoir laissé toutes les fonctions vides et compilé le programme, puis a ajouté de manière itérative dans un squelette de travail.

En outre, il est associé à l'idée ridicule que cs devrait être enseigné sans ordinateur et juste un crayon et du papier. Je me demande combien de professionnels de la programmation employés pensent vraiment que c'est la meilleure façon, ou si c'est exactement ce que font les instructeurs CS parce qu'ils n'aiment pas travailler avec des ordinateurs? Toute tentative de supprimer un ordinateur de la photo est une moyenne. Cela rend la programmation moins amusante et moins interactive qu'elle ne devrait l'être. Nous passons depuis longtemps les jours de saisir des données dans une carte de frappe et attendez patiemment. Les développeurs professionnels d'aujourd'hui sont des fans de gratification instantanée. Heureusement, la plupart des étudiants sont aussi.

Évidemment, le dessin des jolis conceptions avec un crayon et du papier avant et pendant le processus de développement est un outil puissant pour les programmeurs professionnels et débutants. Ceci comme le temps "Mains sur le clavier" devrait également être dépensé d'appariement! Peut-être que cela pourrait être logique de laisser l'élève tenter le premier tour avant de regarder l'enseignant, même si même avec cela, il vaut probablement la peine d'être vu le processus de pensée réel de l'enseignant.

Enfin, les touches de raccourci et les astuces d'édition que le développeur professionnel emploie ne sont pas "bruit" à l'apprentissage de l'élève. Plus important encore, ils engagent et intéresseront l'étudiant. Deuxièmement, ils sensibilisent aux besoins de développement communs. De plus, les plus fondamentales de ces pratiques sont souvent faciles à exécuter mais pas évidentes initialement. Un jeune étudiant en bois de bois peut facilement apprendre à éliminer un clou avec la griffe d'un marteau, mais dans la plupart des cas, il faut d'abord dire que c'est ce que la griffe est pour. Certaines choses extrêmement faciles à faire ne sont tout simplement pas triviales pour apprendre sans être enseignées. Même les développeurs professionnels oublient ces "astuces" tout le temps et bénéficient d'outils de refactorisation tels que Restomer pour supprimer le code redondant ou non atteint, etc.

2
David

De tous les beaux choix pour les langages de programmation, ce collège utilise C++ comme classe Intro CS pour les majors non CS ?? Dans les mains de l'instructeur talentueux, il pourrait être concevable à distance, mais pourquoi le rendre si dur?

Quand j'ai appris "Pascal" dans la classe Intro-Cs College, nous avons passé les 3 premières semaines à travailler avec " Karel the Robot ". C'était un environnement de programmation de logo de sandbox très simple dans lequel tous les concepts de base (y compris la récursivité) ont été explorés à fond avant de le faire à Pascal. Dans "Karel the Robot", vous contrôlez un robot dans l'espace 2D en utilisant un petit ensemble de commandes simples. Cela donne aux élèves une mise à la terre utile en béton qu'ils peuvent s'appuyer sur ce qui se passe ensuite.

Peut-être que des langages de programmation pédagogique davantage moderne remplissent le rôle de "Karel le robot"? Probablement trop tard pour vos étudiants maintenant, cependant.

2
Angelo

La programmation informatique est souvent l'un des premiers cours où la compétence cognitive de synthèse est requise pour une note de passage. Cette compétence est très difficile à conférer à quelqu'un d'autre. Vous pouvez expliquer tous les composants qu'ils ont à leur disposition et leur fonctionnement. Vous pouvez donner une multitude d'exemples de la manière dont d'autres personnes ont utilisé la synthèse pour combiner ces composants dans un ensemble plus utile, mais il n'y a que tant que vous pouvez faire sans quelque chose de "en cliquant" dans l'esprit de l'élève.

Dans mon expérience, il s'agit de la compétence de la synthèse qui élude le plus souvent les personnes qui n'ont pas "obtiennent" la programmation. Ils ont une compréhension parfaite des pièces, comme des variables, des fonctions et des boucles, mais ils posent des questions comme: "Je comprends pourquoi cela fonctionne, mais comment saviez-vous que vous aviez besoin de mettre une boucle là-bas?" Vous avez simplement une simple pratiquer jusqu'à ce que vous l'obtenez.

2
Karl Bielefeldt

En plus de ce qui a été dit, je suppose que, comme des débutants dont ils n'ont besoin que de gratter la surface, vous adaptez donc votre curriculum en conséquence pour éviter les trucs complexes.

0-Donnez-leur un problème simple (par exemple, évaluez une expression).

1-Donnez-leur du temps pour le comprendre.

2-Donnez-leur la réponse.

3-passez par la ligne de réponse par ligne

4-Demandez-leur de comparer votre réponse avec leur ATTMPT

5-Demandez-leur de dériver la leçon de ce problème

6-Ajoutez une étape supplémentaire au même problème, dites une condition nécessitant une instruction IF

7-Répétez la tâche ci-dessus sur plusieurs problèmes. À ce moment-là, ils auraient saisi les bases de la langue et comment utiliser l'environnement. Le serait prêt pour ce qui vient ensuite.

Aussi,

-Avoir un problème de bonus simple pour eux d'essayer à la maison toutes les 2 classes ou donc

-engage avec chaque étudiant pour voir quel est le point qui l'arrête d'aller plus loin

-Provider un matériau de référence facile, oublier des sujets complexes et des livres complexes

-Gettez leurs commentaires fréquemment et utilisez-le

-destruction pour préparer le sujet suivant avant de venir en classe

2
NoChance

Pour désquier l'Aaron Hillegass, rappelez-leur qu'ils ne sont pas stupides, c'est juste difficile. La programmation est difficile à entraîner votre esprit, c'est toute une autre façon de penser, et tout en se débattant avec les bases, ils sont probablement tout à fait conscients qu'ils sont et qu'ils les rendent assez découragés.

Je dis cela comme une personne qui a également échoué au cours de la première année CS, j'avais programmé beaucoup d'avant et que tous les concepts (VB, Yeah Baby) mais C++ ne cliqueraient pas pour moi. J'ai fini par retourner aux bases mêmes et le travaillant à partir de là, puis il clique dessus, mais si quelqu'un avait dit "tu n'es pas un idiot, c'est juste difficile" ça aurait rendu ma vie plus facile.

2
Nicholas Smith

Vous avez dit: "Ces étudiants savent peut-être apprendre les mathématiques, la biologie ou la physique, mais ces techniques ne fonctionnent pas lors de la programmation".

Il y a une raison pour cela, la programmation nécessite quelque chose que ces autres disciplines n'exigent pas nécessairement: créativité et ... Fantasy. La capacité de "imaginer des choses au travail". J'ai personnellement trouvé une telle exigence est plus présente (bien sûr, avec toutes les exceptions appropriées) former des personnes issues de l'école technique (électronique et électromécanique en particulier: elles doivent "imaginer des flux électriques et comment ils se contrôlent", car ils ne peuvent pas voyez-les!) 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 de ne pas seulement se concentrer sur la notion et le texte (le type -> compiler -> regarder les erreurs ne peut pas fonctionner si vous ne pouvez pas "lire" les erreurs) mais pour fournir un moyen de visualiser Les choses, soit au moment de la conception (en simulant ce qui se passe sur la machine: préparez-vous avec une carte blanche et un ensemble de post-it coloré) et au moment de l'exécution.

Pour que cette dernière partie soit réussie, une notion essentielle des systèmes d'exploitation et "Comment les programmes s'inscrivent dans une machine" (et ce que cette machine est en fait) doit être donnée. Et un nd non intimidant IDE doit être donné. Je suis normalement un "bloc de code personnalisé" avec de nombreuses choses supprimées pour "ne pas distraire". La notion de projet fait de sources pour générer des objets À être liés à la bibliothèque doit être donnée avant de commencer à parler d'une langue.

Le monde Hello traditionnel C++ nécessite un point d'entrée et un périphérique de sortie. L'étudiant doit être déjà familier avec cela. 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 quelle est la programmation.
[.____] Le reste est la syntaxe (science) et l'abstraction (fantasy)

0
Emilio Garavaglia