Domanda:
Prevenire risposte letterali che corrispondono agli esempi?
merlinpatt
2018-09-11 01:02:17 UTC
view on stackexchange narkive permalink

Quando insegni agli studenti (specialmente in codice, ma questo può applicarsi a qualsiasi materia), come impedisci risposte quasi letterali che corrispondono ai tuoi esempi?

Ad esempio, dico agli studenti come trovare un documento per ID in una matrice di documenti. Mostro loro il codice foundDocument = documentArray.find (singleDocument = > singleDocument._id = id) . Chiedo quindi agli studenti di trovare un frutto in fruitArray . La risposta che otterrò è foundDocument = fruitArray.find (singleDocument = > singleDocument._id = id) , che funziona, ma non è la risposta ideale.

Alcune note basate su la discussione sui contenuti e le risposte finora:

Questa è una specie di per un progetto. Insegno sia in lezioni una tantum nel fine settimana che in tutoraggio di programmazione a lungo termine e questo si presenta in entrambi. L'obiettivo della lezione del fine settimana è costruire un sito web entro la fine. L'obiettivo del tutoraggio è che il singolo studente abbia costruito un MVP del proprio prodotto.

L'esempio di array sopra è stato l'esempio più semplice e breve a cui potessi pensare per dimostrare il mio problema. Lo vedo anche accadere quando interi file vengono copiati e gli studenti si aspettano che accada qualcosa di diverso.

Quello che spero di impedire è il pattern matching che gli studenti a volte fanno ma non capiscono appieno il motivo di quello che stanno facendo. Ho anche visto (e l'ho fatto io stesso) spesso nei campi STEM. Trovi una formula che funziona e la riapplichi ma non capisci cosa stai facendo.

Quale pensi sia la risposta ideale?Se mi fornissi quell'esempio e quell'istruzione, produrrei esattamente ciò che ti dà fastidio.Probabilmente considererei qualsiasi altro approccio un lavoro inutile.
Hmmm.Penso che tu abbia bisogno di una lezione sui "nomi che rivelano l'intenzione".Spero che lo enfatizzi e che lo faccia praticare.Altrimenti, copia, incolla, aggiusta, è sempre la strategia preferita dallo studente.Anche alcuni professionisti, purtroppo.
Questo tipo di domanda funziona molto meglio e otterrà risposte più pertinenti se la pubblichi invece su CSEducators: https://cseducators.stackexchange.com/.Quel sito è ottimizzato per domande come questa.
Penso che la maggior parte di noi non si rendesse pienamente conto del valore di una denominazione chiara e autoesplicativa (o di come sarebbe stata effettivamente) quando abbiamo iniziato a imparare a programmare.Puoi provare a insegnarlo, ma ci vogliono un paio di volte faticando a capire il codice che hai scritto 6-12 mesi fa per interiorizzare davvero la lezione.
Non mi ero accorto che esistesse un sito per educatori CS.Ci proverò anche lì.Tuttavia, penso che questo sia ancora rilevante per il mondo accademico in generale perché gli studenti possono spesso abbinare modelli senza comprendere effettivamente il materiale.Potrei aver espresso il termine / idea in modo sbagliato, quindi se c'è un modo migliore per esprimerlo, per favore aiutatemi.Da quello che ho visto, questo è più comune nei campi STEM ma puoi trovare una corrispondenza in qualsiasi soggetto
@merlinpatt: Prima di chiedere su [cseducators.se], nota che [il copia-incolla delle domande è disapprovato qui] (https://meta.stackexchange.com/q/64068/255554) (oh, ironia), ma èdi solito va bene porre nuovamente una domanda se, per qualche motivo, desideri una prospettiva diversa da un'altra comunità, enfatizza questo e fai riferimento alla precedente incarnazione della tua domanda.Non migrerò la domanda (come richiesto dai flag) poiché non la considero fuori tema e diverse risposte non sono specifiche del CS.
Sono un programmatore e non capisco davvero che tipo di risposta ti aspettavi qui.`foundFruit = fruitArray.find (singleFruit => singleFruit._id = id)`?`x = fruitArray.find (y => y.z = z)`?Non c'è davvero spazio per la variazione se non cambiare i nomi delle variabili.(ignorando che dovrebbe essere == nella maggior parte delle lingue)
Cos'altro vuoi che chiarisca?
@immibis - Come semplice risposta a una domanda, non modificare i nomi delle variabili in base al contesto non sarebbe un problema.Tuttavia, se si copia una riga di codice come questa in una porzione di codice più grande, avere nomi di variabili che fanno riferimento a documenti quando il codice nel suo complesso si occupa di frutta renderebbe il codice più confuso e più difficile da mantenere.Copia tre esempi non collegati in quel pezzo di codice e avrai un vero caos.
Sei risposte:
JeffE
2018-09-11 05:25:25 UTC
view on stackexchange narkive permalink

Quando insegni agli studenti ... come impedisci risposte quasi letterali che corrispondono ai tuoi esempi?

Faccio domande a cui non è possibile rispondere correttamente con corrispondenze quasi letterali dei miei esempi.

Sebbene sia generalmente una buona idea, questa risposta non funziona interamente per l'ingegneria del software.L'esempio fornito nella domanda dimostra l'utilizzo di un lambda per individuare un elemento in un array basato su una proprietà specifica.Non c'è davvero un modo per fare in modo che una copia letterale dell'esempio non funzioni;l'esempio mostra la sintassi corretta, quindi funzionerà, è così che funziona il linguaggio di programmazione.
@anaximander: In questo caso si pone una semplice domanda diversa che richiede la comprensione di come funzionano lambda e "find".L'ingegneria del software non è speciale in questo senso.
@anaximander Penso che nell'esempio fornito sarebbe utile almeno usare proprietà diverse (ad esempio chiedere di trovare per "nome" invece di "id").Invece di queste proprietà generiche potresti anche usare qualcosa di più realistico (ad esempio `document.charCount`,` fruit.calories`).Quindi puoi fare esempi leggermente più complessi, come * trova tutti i documenti con più di X caratteri * e chiedi * trova tutti i frutti con meno di X calorie * nella speranza che almeno alcuni studenti notino che document.calories non fa moltosenso.
Vladhagen
2018-09-11 01:29:22 UTC
view on stackexchange narkive permalink

Questa risposta è specifica per il campo dell'informatica, in linea con la domanda del PO. Ovviamente la risposta è molto diversa se stessimo parlando di un corso di scrittura creativa o qualcosa del genere.

Nel campo dell'informatica, a volte c'è un "modo migliore" per fare qualcosa. Nel tuo esempio, stai cercando un array per un oggetto specificato. Nella maggior parte delle lingue, gli oggetti di tipo array hanno una funzione find () . Questo è il "modo migliore" per accedere all'array. In realtà lo considererei più sbagliato se uno studente usasse un altro approccio per iterare su un array alla ricerca di un elemento specifico.

Toccherò la sfumatura dell'utilizzo dell'identificatore singleDocument nella ricerca di un frutto in un assortimento di frutta. Forse è questo che ti preoccupa? Sì, idealmente uno studente dovrebbe cambiare singleDocument in qualcosa come singleFruit . Forse fare un commento a margine agli studenti in classe su tali pratiche, poiché è davvero importante se ci interessa il codice intelligibile. Allora lo lascerei a quello. Gli studenti che persistono nell'usare cattive pratiche di denominazione nel loro codice di solito finiscono per essere coinvolti in progetti più lunghi e imparano la follia dei loro modi.

Aggiungerò a parte che quando stavo imparando a scrivere codice per computer (Java), a volte ho fatto "errori" come quello che mostri (nessun cambio di nome dell'identificatore). Ciò era dovuto al fatto che non capivo appieno cosa poteva essere cambiato nel codice e cosa non poteva essere. Ero più preoccupato di finire il progetto e meno preoccupato di scrivere codice veramente pulito. Man mano che sono diventato più avanzato, ho imparato rapidamente come correggere problemi come la modifica dei nomi degli identificatori per essere più significativi.

_Gli studenti che persistono nell'usare cattive pratiche di denominazione nel loro codice di solito finiscono per farsi coinvolgere in progetti più lunghi e imparano la follia dei loro modi. _ - È vero?Non insegno molto codice, quindi forse non lo vedo, ma non è stata la mia esperienza che "gli studenti di solito imparano la follia dei loro modi".
@Kimball Questo dipende molto da quanto lontano si spingono nell'argomento.Nel caso di CS, certo, puoi avere cattive pratiche di codifica e completare le 150 soluzioni di linee in CS 101. Ma quando arrivi a CS 201, 202, 203, ecc. E devi produrre progetti di oltre 1000 linee e più classi, o correggi i tuoi modi o fallisci.
Ri "cattive pratiche di denominazione": la lunghezza del nome di una variabile dovrebbe essere direttamente proporzionale alla quantità di codice che può interagire con essa.In questo caso, il parametro viene utilizzato esattamente una volta, proprio accanto alla sua definizione.Non dovrebbe essere né `singleDocument` né` singleFruit`, ma piuttosto qualcosa di breve come `x`.Quindi non avresti questo problema di copia e incolla in primo luogo, perché non ci sarebbe nulla da cambiare.
@Kimball - Non sono sicuro di essere d'accordo con il commento di Vladhagen secondo cui scrivere progetti con blocchi di codice più lunghi interromperà gli studenti di cattive abitudini come identificatori inappropriati.In pratica, la maggior parte dei corsi è abbastanza breve che se puoi scrivere il tuo codice in primo luogo, potresti non esserne lontano abbastanza a lungo da dimenticare cosa significano le cose, anche con più corsi.Mantenere il codice scritto pochi mesi fa lo farà.Tuttavia, anche i corsi in cui stai programmando in team con altri studenti possono farlo, ed è probabile che si verifichino in almeno un corso.
@RDFozz Almeno nelle classi CS che ho seguito, i corsi della divisione superiore avevano progetti che erano 1) troppo lunghi per farla franca con pessime convenzioni sui nomi e 2) solitamente collaborativi.Ovviamente non c'è modo di * forzare * buone convenzioni di denominazione, ma ho scoperto che pochissime persone sono arrivate al corso CS della divisione superiore e avevano ancora cattive convenzioni di denominazione.
@Vladhagen - Dato che mi sono laureato in scienze informatiche nel 1986, le cose sarebbero potute cambiare molto.:-) Dalla mia esperienza (principalmente dall'università), mentre sei immerso in un progetto (anche se stai facendo anche altre cose), potresti essere in grado di ricordare cosa stai facendo e cosa significano i nomi,per alcuni mesi.La collaborazione avrebbe un impatto su questo rapidamente, poiché gli altri non sapranno cosa stai pensando.E, tornando al tuo codice dopo che è trascorso abbastanza tempo (potrebbe essere anche un mese; 6-12 mesi dovrebbero andare bene per chiunque) ti ritroverai a visualizzare il codice * come se qualcun altro lo avesse scritto *.
Rosemary7391
2018-09-11 16:55:21 UTC
view on stackexchange narkive permalink

Sembra che il problema sia la correttezza dell'output rispetto alla chiarezza del codice? In tal caso, uno schema di valutazione utilizzato in modo coerente che fornisce / aggancia punti per un output corretto e ulteriori punti per un uso corretto dei nomi delle variabili e qualsiasi altra convenzione pertinente motiverà gli studenti a prestare attenzione a tali questioni, nello stesso modo in cui ad esempio gli insegnanti di inglese danno / punti di aggancio per grammatica e ortografia, insegnanti di matematica per mostrare il lavoro, insegnanti di fisica per disegnare diagrammi ...

Se non sono studenti del primo anno, potresti anche motivare la pratica chiedendo loro di portare con te del codice dagli anni precedenti e convincendoli a modificarlo / estenderlo. O fornendo esempi con la stessa funzionalità ma diversa leggibilità da modificare.

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

Perché non fare una domanda a scelta multipla "quale delle seguenti opzioni farà x?" con una versione corretta e lievi errori nelle altre - può anche fare una marcatura parziale a seconda dell'errore.

Ho questo in funzioni Excel come vlookup con un elenco che chiede quale versione restituirà il nome o il prezzo ecc.

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

Se stai contrassegnando le risposte / il progetto / gli esercizi degli studenti (che contengono codice), un trucco è lasciare il 5% alla qualità del codice.

Ciò significa commenti puliti, nomi di variabili sensibili e nessun codice inutile . È minore ed è improbabile che sia il confine tra fallire e superare, ma aiuta a incoraggiare le buone pratiche (e la maggior parte delle volte gli studenti si rendono conto che è in effetti più facile per loro usare le buone pratiche!)

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

Quando faccio da tutore ai miei compagni studenti è della massima importanza che comprendano il concetto di base dietro quello che stanno facendo, altrimenti verranno di nuovo e me lo chiederanno la prossima settimana. Per quanto ne so, l'apprendimento avviene davvero solo se trovano la soluzione da soli invece di copiare e incollare. Questo richiederà molto più impegno e tempo all'inizio, ma ne vale la pena.

A seconda dell'età dei tuoi studenti dovresti indicarli alla documentazione di una funzione / oggetto e fargli capire da soli. Se vogliono programmare correttamente la lettura della documentazione è una delle parti più essenziali, se questo è troppo difficile (soprattutto all'inizio) puoi dare loro la firma del metodo e una spiegazione astratta.

  Arrays .find (item = > item.property == needle) haystack = .... item = .... needle = ...  

In questo caso devono almeno sostituire i nomi delle variabili con nomi corrispondenti e astraggono la parte di assegnazione. Se sono necessari lambda, assicurati di averli trattati in un esempio precedente e di fare riferimento ad esso, in questo caso puoi anche mantenere l'esempio più generale



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...