Question:
Empêcher les réponses verbatim qui correspondent aux exemples?
merlinpatt
2018-09-11 01:02:17 UTC
view on stackexchange narkive permalink

Lorsque vous enseignez aux élèves (en particulier dans le code, mais cela peut s'appliquer à n'importe quel sujet), comment éviter les réponses quasi textuelles qui correspondent à vos exemples?

Par exemple, je dis aux élèves comment trouver un document par ID dans un tableau de documents. Je leur montre le code foundDocument = documentArray.find (singleDocument = > singleDocument._id = id) . Je demande ensuite aux élèves de trouver un fruit dans fruitArray . La réponse que j'obtiendrai est foundDocument = fruitArray.find (singleDocument = > singleDocument._id = id) , ce qui fonctionne, mais pas la réponse idéale.

Quelques notes basées sur la discussion sur le contenu et les réponses jusqu'à présent:

C'est en quelque sorte pour un projet. J'enseigne à la fois des cours uniques le week-end et du mentorat de codage à long terme et cela se produit dans les deux. Le but du cours du week-end est de créer un site Web d'ici la fin. Le but du mentorat est que l'étudiant singulier ait construit un MVP de son produit.

L'exemple de tableau ci-dessus était l'exemple le plus simple et le plus court auquel je puisse penser pour démontrer mon problème. Je constate également que cela se produit lorsque des fichiers entiers sont copiés et que les élèves s'attendent à ce que quelque chose de différent se produise.

Ce que j'espère éviter, c'est la correspondance de modèles que les élèves font parfois, mais ils ne comprennent pas pleinement pourquoi de ce qu’ils font. J'ai également vu (et fait moi-même) souvent dans les domaines STEM. Vous trouvez une formule qui fonctionne et la réappliquez, mais vous ne comprenez pas ce que vous faites.

Quelle est selon vous la réponse idéale?Si vous me donniez cet exemple et cette instruction, je produirais exactement ce qui vous dérange.Je considérerais probablement toute autre approche comme un travail inutile.
Hmmm.Je pense que vous avez besoin d'une leçon sur «l'intention révélant des noms».J'espère que vous insistez sur cela et que vous les faites pratiquer.Sinon, copier, coller, réparer, est toujours la stratégie préférée de l'élève.Certains professionnels aussi, c'est triste à dire.
Ce type de question fonctionne beaucoup mieux et obtiendra des réponses plus pertinentes si vous la postez à la place sur CSEducators: https://cseducators.stackexchange.com/.Ce site est optimisé pour des questions comme celle-ci.
Je pense que la plupart d'entre nous n'ont pas pleinement réalisé la valeur d'une dénomination claire et explicite (ou à quoi cela ressemblerait réellement) lorsque nous avons appris à coder pour la première fois.Vous pouvez essayer d'enseigner cela, mais il vous faut plusieurs fois du mal à comprendre le code que vous avez vous-même écrit il y a 6 à 12 mois pour vraiment intérioriser la leçon.
Je ne savais pas qu'il y avait un site d'éducateurs CS.J'essaierai là aussi.Cependant, je pense que cela est toujours pertinent pour le milieu universitaire en général, car les étudiants peuvent souvent correspondre à des modèles sans vraiment comprendre le matériel.J'ai peut-être mal formulé le terme / l'idée, alors s'il y a une meilleure façon de le formuler, veuillez aider.D'après ce que j'ai vu, c'est plus courant dans les domaines STEM, mais vous pouvez faire correspondre les modèles dans n'importe quel sujet
@merlinpatt: Avant de poser sur [cseducators.se], notez que [le copier-coller des questions est mal vu ici] (https://meta.stackexchange.com/q/64068/255554) (oh, l'ironie), mais c'estHabituellement, vous pouvez poser à nouveau une question si vous voulez une perspective différente d'une autre communauté pour une raison quelconque, insister sur cela et faire référence à l'incarnation précédente de votre question.Je ne migrerai pas la question (comme demandé par les drapeaux) car je ne la considère pas hors sujet et plusieurs réponses ne sont pas spécifiques à CS.
Je suis programmeur et je ne comprends pas vraiment à quel genre de réponse vous vous attendiez ici.`foundFruit = fruitArray.find (singleFruit => singleFruit._id = id)`?`x = fruitArray.find (y => y.z = z)`?Il n'y a pas vraiment de place pour la variation autre que le changement des noms de variables.(en ignorant que cela devrait être == dans la plupart des langues)
Que voulez-vous que je clarifie de plus?
@immibis - En tant que réponse simple à une question, ne pas changer les noms des variables pour correspondre au contexte ne serait pas un problème.Cependant, si l'on copiait une ligne de code comme celle-ci dans un plus gros morceau de code, le fait d'avoir des noms de variables référençant des documents alors que le code dans son ensemble traite des fruits rendrait le code plus confus et plus difficile à maintenir.Copiez trois exemples non connectés dans ce morceau de code et vous auriez un vrai chaos.
Six réponses:
JeffE
2018-09-11 05:25:25 UTC
view on stackexchange narkive permalink

Lorsque vous enseignez aux élèves ... comment éviter les réponses quasi verbatim qui correspondent à vos exemples?

Je pose des questions auxquelles les correspondances quasi verbatim de mon exemples.

Bien que généralement une bonne idée, cette réponse ne fonctionne pas entièrement pour le génie logiciel.L'exemple donné dans la question montre l'utilisation d'un lambda pour localiser un élément dans un tableau basé sur une propriété spécifique.Il n'y a pas vraiment de moyen de faire en sorte qu'une copie textuelle de l'exemple ne fonctionne pas;l'exemple montre la syntaxe correcte, donc ça fonctionnera, c'est juste comment fonctionne le langage de programmation.
@anaximander: Dans ce cas, vous posez une autre question simple qui nécessite de comprendre comment fonctionnent les lambdas et `find`.Le génie logiciel n'est pas spécial à cet égard.
@anaximander Je pense que dans l'exemple donné, il serait utile d'utiliser au moins différentes propriétés (par exemple, demander à trouver par "nom" au lieu de "id").Au lieu de ces propriétés génériques, vous pouvez également utiliser quelque chose de plus réaliste (par exemple, `document.charCount`,` fruit.calories`).Ensuite, vous pouvez faire des exemples un peu plus complexes, comme * trouver tous les documents avec plus de X caractères * et demander * trouver tous les fruits avec moins de X calories * dans l'espoir qu'au moins certains élèves remarquent que document.calories ne rapporte pas grand-chosesens.
Vladhagen
2018-09-11 01:29:22 UTC
view on stackexchange narkive permalink

Cette réponse est spécifique au domaine de l'informatique, conformément à la question du PO. Évidemment, la réponse est très différente si nous parlions d'un cours d'écriture créative ou quelque chose du genre.

Dans le domaine de l'informatique, il existe parfois une «meilleure façon» de faire quelque chose. Dans votre exemple, vous recherchez un tableau pour un objet spécifié. Dans la plupart des langages, les objets de type tableau ont une fonction find () . C'est la "meilleure façon" d'accéder au tableau. Je considérerais en fait que ce serait plus faux si un étudiant utilisait une autre approche pour parcourir un tableau à la recherche d'un élément spécifique.

Je vais aborder la nuance de l'utilisation de l'identifiant singleDocument à la recherche d'un fruit dans une gamme de fruits. C'est peut-être ce qui vous inquiète? Oui, idéalement, un étudiant devrait changer singleDocument en quelque chose comme singleFruit . Peut-être faire un commentaire parallèle aux élèves de la classe sur ces pratiques, car il importe en effet que nous nous soucions du code intelligible. J'en resterais alors là. Les étudiants qui persistent à utiliser de mauvaises pratiques de dénomination dans leur code finissent généralement par se tordre dans des projets plus longs et apprennent la folie de leurs manières.

J'ajouterai en aparté que lorsque j'ai appris à écrire du code informatique (Java), j'ai parfois fait des "erreurs" comme celle que vous montrez (pas de changement de nom d'identifiant). Cela était dû au fait que je ne comprenais pas complètement ce qui pouvait être changé dans le code et ce qui ne pouvait pas l'être. J'étais plus inquiète de terminer le projet et moins inquiète d'écrire du code vraiment propre. Au fur et à mesure que je devenais plus avancé, j'ai rapidement appris à résoudre des problèmes tels que la modification des noms d'identifiants pour qu'ils soient plus significatifs.

_Les étudiants qui persistent à utiliser de mauvaises pratiques de dénomination dans leur code finissent généralement par se tordre dans des projets plus longs et apprennent la folie de leurs manières._ - Est-ce vrai?Je n'enseigne pas beaucoup de codage, alors peut-être que je ne le vois pas, mais ce n'est pas mon expérience que «les étudiants apprennent généralement la folie de leurs manières».
@Kimball Cela dépend beaucoup de la mesure dans laquelle ils vont dans le sujet.Dans le cas de CS, bien sûr, vous pouvez avoir de mauvaises pratiques de codage et terminer les solutions de 150 lignes dans CS 101. Mais lorsque vous arrivez à CS 201, 202, 203, etc. et devez produire des projets de plus de 1000 lignes et plusieurs classes, vous corrigez vos manières ou échouez.
Concernant les «mauvaises pratiques de dénomination»: la longueur d'un nom de variable doit être directement proportionnelle à la quantité de code qui peut interagir avec elle.Dans ce cas, le paramètre est utilisé exactement une fois, juste à côté de sa définition.Il ne doit s'agir ni de `singleDocument` ni de` singleFruit`, mais plutôt de quelque chose de court comme `x`.Ensuite, vous n'auriez pas ce problème de copier-coller en premier lieu, car il n'y aurait rien à changer.
@Kimball - Je ne suis pas sûr d'être d'accord avec le commentaire de Vladhagen selon lequel l'écriture de projets avec de plus longs morceaux de code brisera les étudiants des mauvaises habitudes comme les identifiants inappropriés.Dans la pratique, la plupart des cours sont suffisamment courts pour que si vous pouvez écrire votre code en premier lieu, vous ne vous en éloignerez peut-être pas assez longtemps pour oublier ce que les choses signifient, même avec plusieurs cours.Le maintien du code écrit il y a quelques mois fera cela.Cependant, les cours dans lesquels vous programmez en équipe avec d'autres étudiants peuvent également le faire, et il est probable que cela se produise dans au moins un cours.
@RDFozz Au moins dans les cours CS que j'ai suivis, les cours de division supérieure avaient des projets 1) beaucoup trop longs pour s'en tirer avec de mauvaises conventions de dénomination et 2) généralement collaboratifs.Il n'y a évidemment aucun moyen de * forcer * de bonnes conventions de dénomination, mais j'ai trouvé que très, très, très peu de gens ont atteint le cours CS de la division supérieure et avaient encore de mauvaises conventions de dénomination.
@Vladhagen - Étant donné que j'ai obtenu mon diplôme de CS en 1986, les choses auraient pu beaucoup changer.:-) D'après mon expérience (principalement depuis l'université), pendant que vous êtes immergé dans un projet (même si vous faites aussi d'autres choses), vous pourrez peut-être vous souvenir de ce que vous faites et de ce que signifient les noms,pour quelques mois.La collaboration aurait un impact rapide sur cela, car les autres ne sauront pas ce que vous pensez.Et, revenir à votre propre code après que suffisamment de temps se soit écoulé (peut être aussi peu qu'un mois; 6 à 12 mois devraient faire l'affaire pour tout le monde) se termine par la visualisation du code * comme si quelqu'un d'autre l'avait écrit *.
Rosemary7391
2018-09-11 16:55:21 UTC
view on stackexchange narkive permalink

Il semble que le problème soit la correction de la sortie par rapport à la clarté du code? Dans ce cas, un système de notation systématiquement utilisé qui donne des points pour une sortie correcte et des points supplémentaires pour une utilisation correcte des noms de variables et de toute autre convention pertinente motiverait les élèves à prêter attention à ces problèmes, de la même manière que, par exemple, les professeurs d'anglais donnent / points d'ancrage pour la grammaire et l'orthographe, les professeurs de mathématiques pour montrer le travail, les professeurs de physique pour dessiner des diagrammes ...

S'ils ne sont pas des étudiants de première année, vous pouvez également motiver la pratique en leur demandant d'apporter du code des années précédentes et les amener à le modifier / l'étendre. Ou en fournissant des exemples avec la même fonctionnalité mais une lisibilité différente à modifier.

Solar Mike
2018-09-11 01:24:53 UTC
view on stackexchange narkive permalink

Pourquoi ne pas poser une question à choix multiples "laquelle des propositions suivantes fera x?" avec une version correcte et de légères erreurs dans les autres - peut même faire un marquage partiel en fonction de l'erreur.

J'ai ceci dans des fonctions Excel comme vlookup avec une liste qui demande quelle version renverra le nom ou le prix, etc.

Ander Biguri
2018-09-11 19:50:52 UTC
view on stackexchange narkive permalink

Si vous marquez les réponses / projets / exercices des élèves (qui contiennent du code), une astuce consiste à laisser 5% à la qualité du code.

Cela signifie des commentaires propres, des noms de variables sensés et pas de code inutile . C'est mineur et il est peu probable que ce soit la limite entre l'échec et la réussite, mais cela aide à encourager les bonnes pratiques (et la plupart du temps les étudiants se rendent compte qu'il est en fait plus facile pour eux d'utiliser les bonnes pratiques!)

Kilian
2018-09-12 13:37:02 UTC
view on stackexchange narkive permalink

Lors du tutorat de mes camarades, il est de la plus haute importance qu'ils comprennent le concept de base derrière ce qu'ils font, sinon ils reviendront simplement me poser la question la semaine prochaine. Pour autant que j'en ai l'expérience, l'apprentissage n'a vraiment lieu que s'ils trouvent la solution par eux-mêmes au lieu de copier-coller. Cela demandera beaucoup plus d'efforts et de temps au début, mais le gain en vaut la peine.

En fonction de l'âge de vos élèves, vous devez les orienter vers la documentation d'une fonction / d'un objet et les laisser comprendre par eux-mêmes. S'ils veulent programmer correctement la lecture de la documentation est l'une des parties les plus essentielles, si cela est trop difficile (surtout au début), vous pouvez leur donner la signature de la méthode et une explication abstraite.

  Tableaux .find (item = > item.property == aiguille) haystack = .... item = .... aiguille = ...  

Dans ce cas, ils doivent au moins remplacer les noms de variables avec les noms correspondants et abstrait la partie affectation. Si des lambdas sont nécessaires, assurez-vous de les avoir couverts dans un exemple précédent et référencez-le, dans ce cas, vous pouvez même garder l'exemple plus général



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...