Cómo lidiar con el estudiante que pone su trabajo (en casa) en github

Si bien el uso de github para el código fuente es generalmente algo que me encanta alentar, si un estudiante pone su tarea (de ciencias de la computación) allí, generalmente es fácil para otros encontrar y copiar, lo que crea la tentación de usarlo como una "línea de base" para su propia tarea (idéntica en la mayoría de los casos), aunque entiendo los beneficios de usar github (versiones, transición entre máquinas fácilmente, capacidades de trabajo en equipo), y el estudiante individual que lo está usando ha verificado que es realmente su cuenta y puede explicar el código bien, todavía me siento incómodo con él.

¿Alguien más se ha ocupado de este problema? ¿Cómo lo manejaste? ¿Tiene la universidad algún tipo de política sobre la publicación abierta de trabajos creados por estudiantes? (incluso si es parte de una tarea)?

Como nota al margen, mi política general con respecto a las tareas "muy similares" es que quien las envió primero obtiene los puntos, y las demás entregas no reciben ningún punto, sin embargo, tiendo a pedirles a los estudiantes que expliquen su código y cómo funciona. , por qué eligieron X sobre Y, etc. en tales casos primero.

editar: me informaron que existe una versión gratuita de github que los estudiantes pueden usar para alojar repositorios privados, y este es probablemente el curso de acción que seguiré en el futuro cercano, sin embargo, hay varios inconvenientes:

  1. El estudiante no podrá mostrar su trabajo (es decir, un enlace a su github en su currículum)
  2. El estudiante no será estudiante para siempre, y por lo tanto el repositorio no podrá ser privado de forma gratuita indefinidamente.
  3. Tengo muy poco control (e interés en vigilarlo) una vez que finaliza la clase, por lo que el estudiante podría decidir hacer público el repositorio una vez que finalice la clase.
Bitbucket es gratis.
¿No pueden publicarlo en github en un repositorio privado al que no pueden acceder otros estudiantes?
Los repositorios privados de GitHub son gratuitos para los estudiantes: github.com/edu . Como profesor, es posible que también puedas obtener cosas. Lo llaman "Solicitar un descuento", pero para los estudiantes el trato es "Microcuenta (normalmente $7/mes) con cinco repositorios privados mientras eres estudiante"
@yakatz: creo que esa sería la solución, lo investigaré, ¡gracias!
Tenga en cuenta que Github tarda una eternidad en procesar una cuenta educativa.
¿Qué pasa con un repositorio local de git? Si desea una copia de seguridad en la nube, puede usarla junto con Dropbox, etc.
Para ser franco, los puntos 2 y 3 no tienen absolutamente ningún control sobre ellos. Lo más fácil sería cambiar sutilmente la tarea para que la "solución del año pasado" no funcione.
"¿Tiene la universidad algún tipo de política sobre la publicación abierta de trabajos creados por estudiantes?" Eso es para que usted nos diga: ¿ su universidad tiene esa política?
@fkraiem no, actualmente no lo hace y permite que los profesores se ocupen de ellos como mejor les parezca, por lo tanto, mi política personal en asignaciones similares. Estoy preguntando qué políticas tienen otras instituciones.
No veo una gran diferencia con discutir la tarea con sus compañeros durante el almuerzo, excepto que el código está más disponible.
Veo una enorme diferencia con respecto a discutir la tarea con sus compañeros durante el almuerzo, porque el código está más disponible.
"no hacer nada" parece una opción razonable aquí.

Respuestas (8)

Asigne tareas a los estudiantes en las que su trabajo deba abordar uno de sus intereses personales. Por ejemplo, en lugar de que cada estudiante programe la máquina para hacer pizza, haga que cada estudiante programe una máquina para hacer su comida favorita. Esto hará que las trampas de copiar y pegar sean más difíciles. También hará que los estudiantes se interesen más y que sus calificaciones sean más interesantes.

Hace que sea mucho más difícil para el autonivelador
@user2813274 Proporcionar comentarios individualizados ayudará a los estudiantes a aprender más, por lo que vale la pena.
@user2813274: ¿Qué es exactamente eso? No soy informático, pero codifico por diversión. ¿Accede de alguna manera a la complejidad del código?
@user1997744 un autograder es un sitio donde los estudiantes pueden cargar su código, ejecutarlo y dar retroalimentación si pasa/falla - básicamente lo mismo que un caso de prueba de unidad, sin embargo, puedo mantener los casos de prueba ocultos para los estudiantes de modo que no codifique contra escenarios específicos y pierda la solución general.
@ user2813274: Supongo que después de eso, ¿usted mismo examina el código? Porque dos estudiantes pueden obtener la solución general, pero una pieza de código puede no estar tan bien escrita, ser eficiente, etc.
@ user1997744, el calificador automático es una herramienta opcional para que los estudiantes la usen antes de entregar una tarea (aunque se correlaciona bastante bien con la forma en que lo hacen normalmente ...)
@ user2813274 Una forma es poner cualquier información personal (como intereses personales) en un bloque de comentarios y luego usar algún software como MOSS de Stanford (y también enviar cualquier otra versión de la tarea que encuentre en línea).

Creo que su punto 1 está fundamentalmente en desacuerdo con la prevención de compartir/copiar la tarea. Si alguien puede mostrar su trabajo, puede mostrárselo a sus compañeros de estudios. Sus puntos 2 y 3 sugieren que desea reutilizar la misma tarea una y otra vez cuando vuelva a enseñar la clase, lo que hace que este conflicto sea aún más inevitable. No hay forma de permitir que los estudiantes compartan su trabajo públicamente con cualquiera que quiera contratarlos, y al mismo tiempo mantenerlo en secreto para sus compañeros de estudios.

No hay nada que puedas hacer para mantener oculto para siempre todo lo que hace un estudiante en tu clase. Creo que la mejor solución es pedirles a los estudiantes que mantengan su trabajo en privado durante la clase (usando una cuenta de Github edu, Bitbucket, un repositorio local de git, lo que sea), y luego dejar que hagan lo que quieran más tarde. Eso significa que tendrás que hacer nuevas asignaciones cada vez que enseñes la clase, pero creo que es una buena práctica de todos modos.

Hay muchas cosas que equilibrar aquí, y la "mejor" solución es algo subjetiva.

Sin embargo, en mi opinión, el beneficio educativo de permitir que los estudiantes aprendan el control de versiones temprano supera con creces el mayor riesgo de exponer su código a otros que harían trampa. Si sus estudiantes planean continuar trabajando como programadores en la industria, ser experto en control de versiones es casi tan valioso como ser experto en codificación. La programación no es una tarea solitaria en estos días, después de todo.

Otra cosa a considerar: en mi universidad de pregrado, no había una política en todo el departamento sobre el control de versiones públicas (y no recuerdo que ningún profesor tuviera tal política). Sin embargo, recuerdo haber escuchado que se sugería que publicar código en un GitHub público violaba la política general contra el plagio. Este tipo de ambigüedad es mala para todos. Independientemente de lo que decida que es el camino correcto a seguir, le recomendaría que establezca sus expectativas explícitamente con respecto al control de versiones públicas.

Parece que un punto que falta en esta discusión es que, al menos en EE. UU., los estudiantes poseen los derechos de autor de su trabajo (no trivial). Como titulares de derechos de autor, pueden reproducir, distribuir y exhibir sus obras. Por supuesto, también pueden crear obras derivadas. Así que la restricción de los derechos de los estudiantes puede que ni siquiera sea legal.

Los derechos de autor exigen que se supere un cierto "umbral de originalidad". Una solución a una tarea de programación simple puede no ser lo suficientemente original como para justificar los derechos de autor.
Si una solución para una tarea de programación simple no es lo suficientemente original como para merecer los derechos de autor, probablemente no sea lo suficientemente original como para que este estudiante publique su trabajo en el esquema de subvenciones de las cosas: las soluciones para tareas de programación simples como esa están disponibles en línea.

Puede probar la detección automática de plagio, como MOSS desarrollado por Stanford. Detecta similitudes entre archivos de código, independientemente de cómo se nombren las variables, el orden de ejecución, etc. Luego, un humano podría observar manualmente las similitudes y juzgar si se trata de un caso de plagio. Además, según recuerdo, MOSS permite la entrada de código base compartido, lo que significa que el "código de inicio" proporcionado a todos los estudiantes no contaría para la similitud.

Se "intenta" detectar el plagio. Existen algunos otros programas, pero ninguno detecta realmente todos los plagios.

Mi enfoque en las tareas de programación se ha movido a hacer que los estudiantes copien todo lo que quieran de todos los repositorios de GitHub en el mundo, pero para hacer referencia a ellos en un informe sobre el proceso mediante el cual resolvieron el problema, escrito en oraciones completas. Esto es visto como un castigo cruel e inusual por parte de los estudiantes de primer año, pero cuando los exalumnos se encuentran conmigo en la ciudad después de la graduación, eso es lo que me agradecen, que les enseñé a escribir informes. Y que sus reportajes sean una gran referencia para ellos mismos.

No podemos vigilar este comportamiento, así que tenemos que tratar de educar a la gente. Les enseñamos a valorar el trabajo de otras personas citándolo o dando crédito, e insistimos en que reflexionen sobre lo que hicieron. Así que está bien decir: obtuve este código de Nancy, y luego le pregunté a Steve cómo poner widgets en esto, y como resultado finalmente logré que esto funcionara. Eso me facilita juzgar cuál es la contribución del estudiante.

Es más trabajo para mí, así que hice que los estudiantes hicieran programación en parejas, asignándoles parejas al azar cada semana. Ese es un buen ejercicio para ellos también, y llegan a conocerse mejor.

Ignoralo.

Es una tarea y no un examen. Los estudiantes que simplemente lo usan sin entenderlo corren el riesgo de reprobar el examen y ese es su problema, no el tuyo. Todos son adultos y necesitan decidir por sí mismos si quieren aprender algo o simplemente copiar algo.

Como los deberes no suelen influir en la nota final sino solo en la admisión al examen, no vale la pena intentar impedirlo.

Y github es una cosa, pero los estudiantes tienen servidores de archivos internos y wikis y otras formas de organizar cómo intercambiar la tarea actual o incluso un conjunto completo de tareas del año pasado.

Asegúrese de que todo lo que obtenga una calificación realmente relevante no se haga sin supervisión y esté un poco más relajado con la tarea que solo debería ayudar a los estudiantes a aprender y no se usa para documentar su habilidad como un examen calificado.

Si realmente ve que el código se copia entre dos estudiantes, es posible que no lo acepte. Pero esto debe hacerse comparando sus soluciones, no monitoreando github. Pueden copiar en privado o pueden haber trabajado juntos y debe decidirlo en función de la presentación de su trabajo.

Cuando realmente puedan reutilizar el código del año anterior, puede considerar cambiar las asignaciones de manera que el código no se pueda usar sin al menos entenderlo.

La solución óptima es acompañar la calificación automática del código con una revisión del código cara a cara humana, donde los estudiantes deben explicarle su código, y también puede pedirles que realicen cambios menores en línea para verificar que saben lo que saben. hizo. Si hace esto, no tiene que preocuparse por copiar, ya que la revisión del código le dirá qué tan bien conocen el material.

El problema es que esta solución requiere mucho trabajo, al menos 15 minutos por estudiante por semana. No tengo suficiente presupuesto para esto, así que utilizo una solución subóptima: hago que las tareas semanales sean solo el 10%-20% de la calificación final, de modo que el incentivo para copiar sea mínimo. Mientras tanto, me aseguro de que el examen final contenga preguntas que sean muy similares a las tareas. Así, los alumnos que hayan hecho los deberes por sí mismos tendrán una nota más alta en el examen final que los fotocopiadores.