Tenemos un curso de programación universitaria y otros estudiantes están haciendo algunas preguntas de programación en nuestro grupo de Facebook. Dudo un poco en compartir todos mis programas, especialmente si es algo bueno para una de las tareas, ya que estos son analizados por los TA y pueden notar si alguien tiene el mismo programa y comenzar a hacer preguntas sobre dónde vino desde. Aún así, a veces me gustaría compartir mi código para ayudar a otros, pero no quiero que la gente simplemente tome mi trabajo. (Aclaración: se nos permite colaborar con las tareas) Esto es, por supuesto, una línea delgada. Si bien quiero ayudar a algunas personas, me preocupa que no tengan la honestidad académica para reescribir el código por sí mismas.
La mayoría de mis compañeros estudiantes no están muy avanzados en sus habilidades, por lo que me saldría con la posibilidad de ocultar mi nombre en una cadena codificada en Base-64 diseñada en un lugar discreto. Aún así, puede ser demasiado obvio que una cadena aleatoria esté sentada.
¿Qué opciones existen para ocultar mi nombre en un programa sin que parezca sospechoso?
En CodeGolf, he visto que han hecho que el arte ascii se convierta en otras cosas cuando se evalúa. ¿Hay estrategias similares que podría utilizar? La solución ideal sería algo que se parezca a algo que se ajuste discretamente, pero en realidad tiene una función para demostrar que lo codifiqué desde el principio.
Aclaración: (Lo siento, debería haber dicho esto antes) Se nos permite colaborar, pero tenemos que explicar nuestros programas a los TA para obtener los puntos. Es solo por satisfacción esconder algunos Huevos de Pascua en el código de otros si se filtra, especialmente porque puede ser tentador intercambiar programas para verificar que las respuestas a los problemas que generan son equivalentes, etc. o para ver cómo otros resuelven el problema.
Respuestas:
Use su firma no en su código, sino en un registro de desarrollo de acceso público.
Publique su código en un repositorio público de Github. Incluya un Docblock con su nombre en el campo "Autor". De esta manera, hay un registro público de que usted es el autor real del programa.
Es posible que esto no califique como "oculto", pero en mi opinión, sí. Si un estudiante decide copiar su código, pensará que solo tiene que cambiar su firma por la suya. Imagine su sorpresa cuando presente evidencia pública de su fechoría. Para empeorar las cosas para ellos, es accesible en línea. ¡Incluso puede usar una herramienta en línea, como Diffchecker , para demostrar qué partes de su código fueron robadas!
EDITAR: Como se señaló en los comentarios, ¡ asegúrese de que su escuela permita compartir su trabajo de esta manera! OP indicó que su institución está de acuerdo con esto, ¡pero la suya podría no estarlo!
fuente
"dado que estos son analizados por los AT y pueden notar si alguien tiene el mismo programa"
Espero que sí, es parte de su trabajo detectar y castigar el engaño, el plagio y otros fraudes.
Y duplicar el trabajo de otros y pasarlo como tuyo es eso, engaño y plagio.
Muy simple: no des tu trabajo a otros. Ayúdelos a escribir los suyos si lo desea dándoles ideas sobre cómo resolver problemas, luego permítales hacer su propia codificación.
fuente
Al igual que la respuesta anterior, animo a usar algo como Github para registrar su desarrollo del código, hay otros métodos que podría usar para cubrir su espalda, como enviarse la fuente por correo electrónico antes de compartirlo, aunque un repositorio visible públicamente es Lo que sugeriría encarecidamente.
Eso es, por supuesto, si compartir código es muy necesario. ¿Qué pasa con el pseudocódigo? o como dijo "monstruo de trinquete", comparte la idea, no la implementación. (esto tiene más sentido para un código más complejo)
fuente
También podría usar uno de los trucos más antiguos para ocultar mensajes. Haga que la primera letra de cada variable oculte un mensaje. Por ejemplo,
fuente
Creo que GitHub o una solución similar está bien, PERO hay dos cosas a considerar:
fuente
Los cartógrafos tienen el mismo problema . Un par de técnicas:
Introduzca una desviación improbable del estilo tradicional de su idioma, por ejemplo, siempre tenga espacios desequilibrados alrededor de los operadores
if (lefthand== righthand)
Distribuya las no-operaciones en su código, si son parte del lenguaje que está utilizando.
lefthand = righthand;;
fuente
Prevenir el plagio en NO su trabajo como estudiante, eso es puramente en manos de un instructor / TA.
En términos generales, tratar a la escuela como si fuera un negocio de código cerrado. Sus compañeros estudiantes son colegas de otros empleadores. No puede compartir código más allá de líneas simples y cosas así, y NUNCA comparte clases o proyectos completos.
Ocultar los "Huevos de Pascua" en el código generalmente se considera poco profesional. (Las opiniones pueden variar aquí)
No hagas del código maloliente tu firma
Su "firma" o cómo diferencia su código de los demás debe ser de buen gusto y no obstaculizar su "olor" de código de ninguna manera. Es por eso que desaconsejo fuertemente lo siguiente:
Entonces, ¿cómo protejo mi código?
En términos generales, restringir la disponibilidad es su mejor manera de proteger su código. Si no lo hace público y nadie piratea su computadora, su código generalmente es seguro. Claro que podría descompilarse, realizar ingeniería inversa, etc. En ese momento, no es como si coincidiera con el código que lo generó de todos modos.
Quiero hacerlo público, pero evitar que sea plagiado
Simplemente no ... Por supuesto, la magia desordenada en su código podría hacer que un plagio se destaque suponiendo que también hagan que su código esté disponible ... y no lo harán .
También te hará ver terrible cuando otros revisen tu código y se vayan. "¿Qué demonios pasa con todos los errores tipográficos y no operacionales?"
Pero quiero una firma de código, algo que pueda mirar el código y decir que hice esto, fui yo, esto es mío
Honestamente, si codifica bien, generalmente no debe distinguirse de ningún otro código en los proyectos en los que trabaja. Seguro que pueden ser matices que le permiten saber en qué trabajó en comparación con lo que hizo Bob, pero estos deberían ser bastante leves.
El único código de tiempo que se destaca en gran medida entre los pares es si algo es nuevo y nunca se ha hecho antes dentro de su círculo, o si huele de una manera única en su círculo.
fuente
Dado que el problema es ocultar una firma en el código fuente donde
Una variación interesante en esteganografía .
No puede utilizar el formato o el espacio en blanco, ya que cualquier IDE competente puede eliminarlo trivialmente.
Eso realmente deja solo el nombramiento de variables y funciones. No puede usar una subcadena distintiva común, porque se elimina con demasiada facilidad mediante una búsqueda y reemplazo. Eso deja el uso de nombres de variables distintivos y originales que tendrían que eliminarse individualmente. Los errores de ortografía y las palabras en idiomas extranjeros son buenos candidatos.
¡Las oportunidades para la creatividad son ilimitadas!
Luego, un simple procesamiento de texto para extraer y comparar tokens descubrirá rápidamente a los plagiarios.
fuente
La sugerencia de duozmo de noops posiblemente generará malas marcas por descuido, pero eso podría ser algo bueno para incluir en el código de ejemplo que no se supone que se use literalmente.
Eso me inspiró a pensar en un patrón de alternancia de pestañas y espacios en los espacios en blanco iniciales y finales.
fuente
Algo similar que he usado antes es crear variables con el mismo nombre que otras variables importantes pero dejar sus nombres en función del editor de texto para que el cambio no sea fácilmente obvio, o usar letras con acentos. Llame a varias funciones, a las que envía muchas de las variables importantes del programa desde una instrucción if, utilizando sus variables, que nunca serán verdaderas, por ejemplo, if (1eft == wrōng) Establezca alguna variable importante en una función inútil para su firma ofuscada.
Debería poder encontrar varios tutoriales sobre 'Cómo escribir código que no se pueda mantener' que podrían ayudar.
fuente