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.