¿Dos líneas de código copiado constituyen plagio?

Copié (y no pude citar) dos líneas de código de la fuente OpenJDK para un proyecto de estructuras de datos de pregrado. Sin embargo, la comparación de códigos muestra una cantidad alarmante (40%) de similitud. Aquí está la comparación lado a lado con mi archivo.

Con base en estos motivos, mi profesor quiere darme un -100 % en la tarea, lo que reduciría mi calificación general en un 15 % en total, lo que probablemente provocaría que no llegue a la pared C (dependiendo de qué tan bien lo haga en la prueba). examen final). Por esta razón (y mi conciencia), decidí apelar.

Sin embargo, creo que la mayor parte de la similitud en el informe proviene de mi copia de las líneas 142-152:

static int hash(int h) {
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);
}

No cité estas dos líneas, pero tenía la intención de borrarlas más adelante.

De hecho, toda esta función se puede eliminar sin afectar en absoluto al programa, lo que da como resultado esta comparación de archivos.

Entonces, solo las líneas 114-126 son un problema:

MyEntry<K, V>[] newArr = new MyEntry[newSize];
// Copy
for (int i = 0; i < data.length; i++) {
    MyEntry<K, V> e = data[i];
    if (e != null) {
        data[i] = null;
        do {
            MyEntry<K, V> next = e.next;
            int j = e.hash % newSize;
            e.next = newArr[j];
            newArr[j] = e;
            e = next;
        } while (e != null);

Sin embargo, este fragmento es mío. Escribí estas líneas sin hacer referencia a HashMap.java , y este es un algoritmo común para encadenar que puedo explicar a fondo y que conozco desde hace años.

Sí, sé que el hecho de que copié las otras dos líneas compromete mi integridad y convertí el 20 % en un 40 % para empezar, entonces, ¿cómo puedo probar esto?

No estoy seguro de cómo defender todo este caso ante una Junta de Conducta Estudiantil que sabe muy poco sobre programación. Mi audiencia con la junta es dentro de un mes. ¿Estos dos fragmentos de código constituyen plagio de todo mi proyecto? ¿Es justo un -15 % de mi calificación general?

Notas al margen:

  • Nuestros proyectos son bastante extensos ya que no se nos permite usar java.util.*(como más de 1k líneas para cada proyecto en 8 días), y no copié ningún otro código. Diría que la implementación de la estructura de datos real solo debe tomar alrededor de 1/5 de nuestro tiempo invertido por proyecto.
  • Más del 30 % de la clase ha sido denunciado por violaciones de la integridad académica en proyectos durante el semestre, y el profesor recién graduado no parece pensar que él mismo o sus tareas sean el problema. Debería haberme dado cuenta de la advertencia antes de este último proyecto del semestre...
Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
Este es el tipo de lío que me hizo dejar la academia.
Quiero señalar que esta pieza en disputa está textual aquí y aquí .
@Gryph Hay una disputa más grande, vea el chat mencionado anteriormente.
Algunos de los comentarios más recientes sugieren que no se ha dado cuenta de las normas culturales sobre el plagio en Occidente. Así que no sé si esto podría estar completamente fuera de lugar, pero una razón por la que alguien podría no conocer las normas aquí es si es de Asia, por ejemplo, un estudiante internacional o un inmigrante que regresó a la escuela como adulto. Es comprensible que alguien que creció en Asia haya aprendido algunas de sus normas culturales sobre el plagio durante su educación temprana, que son muy diferentes de las normas occidentales. Esto no lo sacaría del apuro, pero podría ser un factor atenuante.
VTC como demasiado específico. No estamos aquí para evaluar diferencias de archivos.

Respuestas (10)

Parece muy probable que haya plagiado, y si este es el caso, sería mejor proceder reconociendo su error que continuar discutiendo.

Mirando su código, hay mucho que parece haber sido tomado del archivo HashMap.java. Sospecho firmemente que comenzó con este código y luego lo modificó para producir su propio código, o lo siguió de cerca como plantilla al escribir el suyo propio. Las secciones de código resaltadas han recogido algo de esto, pero otras secciones también se parecen mucho al otro archivo, aunque con comentarios y orden ligeramente alterados.

Si este es el caso, entonces el código que nos ha mostrado no es su propio trabajo original, sino una versión plagiada de HashMap.java. Dejar las dos líneas que no están conectadas es una prueba irrefutable del vínculo que probablemente sea concluyente para el panel. Su punto de que son innecesarios en realidad contará en su contra porque no podrá explicar por qué están allí en absoluto. Y ya sea que esta haya sido su intención o no, es probable que el panel (y su profesor) vean sus cambios en los comentarios y el orden como un intento de encubrir sus huellas y ocultar su plagio de las herramientas automatizadas.

Es más probable que el panel muestre indulgencia con un estudiante que parece al menos arrepentido y reconoce que ha cometido un error, que con un estudiante que niega haber actuado mal frente a pruebas aparentemente muy sólidas.

Oh, no niego usarlo como referencia, lo cual está permitido en el plan de estudios. Mi afirmación es que me olvidé de citar/no vi la necesidad de citar, porque soy nuevo en el mundo académico, la tarea se prestó para ello y estoy acostumbrado a tratar las tareas como esta con respecto a los proyectos más aficionados que pueden tomar prestados. libremente desde código GPL, no académicos que prohíban su uso. Sin embargo, los reclamos que mi profesor presentó contra mí solo apuntaban al MOSS, no al archivo en su totalidad, por eso solo pregunto sobre las dos líneas.
De hecho, tengo una buena razón para escribir esas líneas, para empezar. Tuvimos que codificar muchas cadenas de dos caracteres (es decir, "AB"). Sin la función de hash auxiliar, hubo muchas colisiones, y temía que mi código se agotara en la calificación automática, lo que retrasaría MUCHO el desarrollo en función de cómo funciona nuestro calificador Jenkins automatizado. Lo incluí porque una vez que supe cómo funcionaba, pensé que era genial y que mi proyecto podría usarlo. Sí, me siento arrepentido ahora, al darme cuenta de que la academia tiene diferentes estándares, que realmente no me quedaron claros.
@TheSmartWon, recomendaría que en el futuro, incluso para proyectos de aficionados en los que no tenga la intención de difundir el código, aún debe citar el código que ha tomado prestado de otro lugar. Si luego decide publicar o vender su código, sin estas citas, puede olvidar qué se tomó prestado y de dónde (y correr el riesgo de violar la licencia).
@TheSmartWon 1) El MOSS identificó mucho más que solo dos líneas. 2) debe saber que copiar el código que debe escribir usted mismo es hacer trampa en una tarea, eso es solo sentido común, 3) no escribió esas líneas, y 4) No creo que en realidad tuviera miedo de que se agotara el tiempo . Para mí, esa declaración huele a más intentos de encubrimiento.
@immibis 1) Mira el segundo MOSS en el OP. 2) Lo escribí yo mismo, usando una fuente y haciendo algunas de mis propias modificaciones. 3) De acuerdo. 4) No tengo por qué mentir aquí. Pienso como un ingeniero (¡pensé que la función era genial y que tenía un buen uso para ella!), Así que la usé, no como un estudiante que intenta entregar "su propio trabajo".
@TheSmartWon 1) ¿El mismo que identifica 3 secciones más? 2) "usar una fuente y hacer algunas modificaciones" no es "escribirlo usted mismo". 4) Tu razón para mentir es tratar de evitar el castigo. es una respuesta normal hacer todo lo posible para que parezca que no debe ser castigado. Un ingeniero tampoco usaría una función solo porque "pensó que se veía genial". También ya sabe que las asignaciones deben ser su propio trabajo; si no puede recordar no entregar el trabajo de otras personas, entonces tiene un problema.
1) Sí. Hable de ellos si lo desea. 2) Estoy de acuerdo. Sin embargo, se nos anima a utilizar la API de Java como plantilla. 4) Si estuviera tratando de evitar el castigo, no habría hecho esta publicación. Quiero lo que es justo a los ojos de la academia. 4.2) No reconoció mi segunda cláusula "... y yo [entendí la función] y tuve un buen uso para ella". Los ingenieros incluyen las optimizaciones de otras personas todo el tiempo, ¡especialmente en OSS!
Aquí es donde la intención es un tema tan difícil de tratar cuando se trata de plagio. ¿El acusado tuvo la intención de plagiar? Sabiendo que una idea, cita, código, pertenece a otra entidad, y a pesar de conocer las reglas todavía decide utilizar sin cita. Si la clase nunca hizo hincapié en la cita del código (y según la pregunta y los comentarios de OP hasta el momento), parecería que tales convenciones nunca se enseñaron pero aún se aplicaron. Si establece una regla sin explicarla, ¿cómo sería justo si los estudiantes no la entienden o la siguen?
@TheSmartWon No creo que los programadores serios de OSS sean tan casuales como usted sobre la propiedad intelectual. Soy miembro de la Apache Software Foundation y responsable de un par de proyectos de ASF. Para convertirme en un committer, tuve que firmar un acuerdo legal que dice, entre otras cosas, "Usted declara que cada una de Sus Contribuciones es Su creación original" y "Usted declara que los envíos de Sus Contribuciones incluyen detalles completos de cualquier licencia de terceros o otra restricción... de la cual usted es personalmente consciente y que está asociada con cualquier parte de sus contribuciones".
@FrankFYC "Parece que tales convenciones nunca se enseñaron pero aún así se aplicaron" el concepto de "no hagas trampa copiando el trabajo de otras personas" no es una "convención" y no necesita enseñarse. Es obvio (en realidad, se encuentra en prácticamente cualquier libro de reglas académico/universitario).
@AndreaLazzarotto No estoy en desacuerdo con la afirmación de que el plagio es incorrecto, poco ético y debe ser castigado (en algunos casos, severamente). Pero quizás mis palabras fueron más confusas que esclarecedoras. Si el reclamo aquí es plagio con las siguientes partes: conocimiento: ¿sabía el acusado qué es el plagio, intención? y aun así decidió plagiar, entonces el jurado (junta de estudiantes) puede encontrar culpable a OP de los cargos. La defensa que OP puede presentar es que la definición actual de plagio no funciona bien cuando se trata de programación de computadoras, así como el hecho de que (continuación)
El profesor no exigió un mecanismo de uso común para permitir a los estudiantes citar sus fuentes (una bibliografía, por ejemplo). Otro argumento sería que el profesor tenía presente a otro miembro de la facultad durante las revisiones de calificaciones, una posible violación de FERPA. Otro argumento es la cantidad bastante alta de reclamos por mala conducta académica en la clase, lo que puede indicar que el profesor no se ha esforzado en educar a su clase sobre el plagio, específicamente sobre citas de programación.
@FrankFYC No estoy de acuerdo con la defensa, es bastante discutible. Yo mismo estudié informática y nunca nos dieron instrucciones específicas para no plagiar. Sabíamos que estaba mal y también se aplica perfectamente al código. De acuerdo, estoy en un país diferente y aquí el plagio es un delito penal, por lo que la situación podría ser un poco diferente a la de los EE. UU.
@AndreaLazzarotto Exactamente mi punto. El plagio es un cargo serio. Determinar si una persona ha cometido o no un delito no es un asunto fácil de hacer. En este caso, el profesor solo usó una sola prueba para determinar si el estudiante plagió o no. ¿Sería eso justo? Además, el profesor supuestamente violó las leyes de privacidad de EE. UU. al permitir que otro miembro de la facultad viera la calificación del estudiante. El profesor también tiene una tasa absurdamente alta de casos de integridad académica en la clase. ¿No te preguntarías cómo el profesor está enseñando la clase (continuación)
puede estar afectando la toma de decisiones del estudiante? Si te fijas metas imposibles, por muy bien intencionadas que sean, sin un medio para alcanzarlas éticamente, ¿cuántos decidirían desviarse y 'engañar'? Tener solo una persona que tiene el poder unilateral de determinar quién ha hecho trampa está potencialmente plagado de abusos. Por último, y estoy totalmente de acuerdo contigo, el plagio es un tema serio. Pero eso no significa que alguien tenga automáticamente la culpa sin evidencia y sin una investigación exhaustiva. Inocente hasta que se demuestre lo contrario: así es el sistema de justicia estadounidense (imperfecto a veces, pero es todo lo que tenemos).
@PersonX También es muy útil tener esas citas si está mirando hacia atrás en su código dentro de un año. Es bastante fácil simplemente copiar y pegar el enlace que está viendo en un comentario. También brinda el beneficio adicional si desea que otros aprendan de su código para leer.
@FrankFYC: según el tamaño de la clase, esa tasa no es "absurdamente alta". Soy un calificador para una clase de una docena de personas por lo general, y la mayoría de los años he tenido 3 casos de plagio evidente (aquellos en los que los estudiantes copiaron las oraciones de los demás y cometieron errores en aritmética básica). Si el próximo año un estudiante adicional decide dividir sus esfuerzos con un compañero de clase, ¿de repente sería un evento extraordinario? (Sentamos a esos estudiantes, no les arrojamos el libro completo la primera vez, e invariablemente su justificación es que tienen demasiadas tareas de otras clases que no les dejan suficiente tiempo).

En mi opinión, el título de su pregunta "¿dos líneas de código copiado constituyen plagio?" no es exactamente exacto.

Creo que le resultará muy difícil argumentar que esto no es/no fue plagio. Las similitudes entre su código y HashMap.java no terminan en las dos líneas o en un solo "algoritmo común".

1) Escogió exactamente la misma capacidad y factor de carga predeterminados:

 /** Has to be a power of 2 */
 private static final int DEFAULT_CAPACITY = 16;

 /** The load factor */
 private static final float DEFAULT_LOAD_FACTOR = 0.75f;

versus

 // The default initial capacity - MUST be a power of two.
 static final int DEFAULT_INITIAL_CAPACITY = 16;

 // The load factor used when none specified in constructor.
 static final float DEFAULT_LOAD_FACTOR = 0.75f;

De hecho, el comentario "Tiene que ser una potencia de 2" ya significa que lo atraparon con las manos en la masa, porque, de hecho, no hay una buena razón para requerir que la capacidad sea una potencia de dos en su código. El hecho de que el tamaño sea una potencia de dos solo se usa para una optimización en la versión HashMap.java del código, y esta optimización no se usa en su código. Probablemente tengas suerte de que la junta de conducta estudiantil no sepa mucho sobre programación.

2) Los dos getmétodos son muy similares:

public V get(K key) {
    if (key == null)
        return null;
    int hash = key.hashCode() % data.length;
    // System.out.printf("Getting %d %d %s\n", key.hashCode(), hash,
    // key.toString());
    for (MyEntry<K, V> e = data[hash]; e != null; e = e.next) {
        if (e.hash == hash && (e.getKey() == key || key.equals(e.getKey())))
            return e.getValue();
    }

    return null;
}

versus

public V get(Object key) {
    if (key == null)
        return getForNullKey();
    int hash = hash(key.hashCode());
    for (Entry<K,V> e = table[indexFor(hash, table.length)];
         e != null;
         e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
            return e.value;
    }
    return null;
}

Parece extraño que ambos eligieran exactamente la misma forma muy específica de hacer la comparación de claves (primero comparando los hashes, luego los punteros de las claves y finalmente usando key.equals).

3) ...como es el put-método:

public MyEntry<K, V> put(K key, V value) {
    int hash = key.hashCode();
    // System.out.printf("Adding %d %d %s\n", key.hashCode(), hash, key.toString());
    int i = hash % data.length;

    // Collisions
    for (MyEntry<K, V> e = data[i]; e != null; e = e.next) {
        if (e.hash == hash && (e.getKey() == key || key.equals(e.getKey()))) {
            MyEntry<K, V> old = e;
            e.setValue(value);
            return old;
        }
    }

    addEntry(hash, key, value, i);

    return null;
}

versus

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}

4) ...como son los métodos addy grow:

void addEntry(int hash, K key, V value, int bucketIndex) {
    MyEntry<K, V> e = data[bucketIndex];
    data[bucketIndex] = new MyEntry<>(hash, key, value, e);
    keyList.add(key);

    if (size++ >= threshold)
        grow();
}

/**
 * Grows the array 2x current size
 */
private void grow() {
    int newSize = 2 * data.length;

    @SuppressWarnings("unchecked")

    MyEntry<K, V>[] newArr = new MyEntry[newSize];
    // Copy
    for (int i = 0; i < data.length; i++) {
        MyEntry<K, V> e = data[i];
        if (e != null) {
            data[i] = null;
            do {
                MyEntry<K, V> next = e.next;
                int j = e.hash % newSize;

                e.next = newArr[j];
                newArr[j] = e;
                e = next;
            } while (e != null);
        }
    }

    data = newArr;
    threshold = (int) (newSize * DEFAULT_LOAD_FACTOR);
}

versus

void addEntry(int hash, K key, V value, int bucketIndex) {
    Entry<K,V> e = table[bucketIndex];
    table[bucketIndex] = new Entry<>(hash, key, value, e);
    if (size++ >= threshold)
        resize(2 * table.length);
}

void transfer(Entry[] newTable) {
    Entry[] src = table;

    int newCapacity = newTable.length;
    for (int j = 0; j < src.length; j++) {
        Entry<K,V> e = src[j];
        if (e != null) {
            src[j] = null;
            do {
                Entry<K,V> next = e.next;
                int i = indexFor(e.hash, newCapacity);

                e.next = newTable[i];
                newTable[i] = e;
                e = next;
            } while (e != null);
        }
    }
}

Por supuesto, una HashTable es una estructura de datos bastante común y hay pocas formas de implementar un algoritmo dado. Sin embargo, las dos líneas copiadas muestran que definitivamente usó HashTable.java como punto de partida para su propia implementación, y las similitudes adicionales en el diseño, los comentarios ilógicos y la estructura del código lo llevarían a creer que tomó más que solo un pequeña "inspiración" de HashTable.java.

Tenga en cuenta que tanto su método como el método put y get utilizan un bucle for para iterar sobre una lista enlazada, mientras que los métodos de crecimiento/transferencia utilizan un bucle while para hacer lo mismo. Parece extraño que ambas piezas de código tomen esta misma decisión de forma independiente.

Nuestros proyectos son bastante extensos ya que no se nos permite usar java.util.* (como 1k+ líneas para cada proyecto en 8 días), y no copié ningún otro código. Diría que la implementación de la estructura de datos real solo debe tomar alrededor de 1/5 de nuestro tiempo invertido por proyecto.

Parece claro que no se le permitió usar HashMap.java y que, si hubiera querido usar una tabla hash, necesitaría implementar la suya propia. Al copiar grandes partes de HashMap.java, ha intentado eludir esta restricción. "Es solo una pequeña parte del proyecto" no quita el hecho de que tomó el código, que no era su propio trabajo, y trató de hacerlo pasar como propio (aunque la expectativa era que escribiría esto parte de la tarea usted mismo).

Si las asignaciones fueran realmente poco realistas dado el lapso de tiempo asignado, hubiera sido mejor entregar una solución fallida. Si muchos estudiantes entregaron una solución fallida, el profesor podría haber considerado la posibilidad de que la tarea fuera demasiado difícil. Si el plagio hubiera pasado desapercibido, entonces el profesor podría haber concluido (incorrectamente) que la tarea tenía la dificultad adecuada, penalizando a los estudiantes que (intentaron) completar la tarea de manera justa y de acuerdo con las reglas.

Las sanciones por plagio pueden variar mucho según la institución. -100% en su asignación podría ser una mano dura, pero en nuestra institución la sanción podría haber sido desde 0% en la asignación, una suspensión automática del curso en cuestión hasta la expulsión de sus estudios durante 12 meses. El plagio, en la mayoría de las instituciones, se trata de manera similar a hacer trampa en un examen y los castigos pueden ser estrictos. Si el único castigo fuera obtener 0% en la tarea plagiada, entonces no habría ningún daño en "intentar" plagiar si de todos modos reprobaras la tarea sin recurrir al plagio.

Me siento un poco incómodo al poner grandes cantidades de código fuente en una respuesta (no parece ser un tema para la academia.SE), pero esta parece ser la única forma de explicarle al autor de la pregunta qué tan grave es la copia (la declaración sobre "solo dos líneas" parece restarle importancia).
Además, por supuesto, la inconsistencia señalada por otros de que el OP afirmó que la parte copiada ni siquiera se usó. En parte, esto apunta a un problema porque entonces no tiene sentido por qué se incluye en primer lugar, y como también se señaló, la afirmación ni siquiera es cierta, lo que indica que el OP realmente no entiende el código.
Sí. Este estudiante sería un brindis si entregara este código en mi clase.
Para decirlo sin rodeos, en mi opinión, estos ejemplos de código parecen copiar y pegar con algunas refactorizaciones menores. Cada vez que se usa un bucle for simple en HashTable, el código de los estudiantes también lo usa. Cada vez que se usa un bucle for de estilo iterador, el código de los estudiantes también lo usa. (los bucles con e.next(), nunca me he encontrado con este estilo fuera del jdk en el código moderno). Incluso se copia el estilo peculiar de omitir llaves después de una línea si se copian declaraciones y bucles.
El OP debe ser consciente de que una Junta de Conducta Estudiantil que no tiene mucha experiencia en programación puede invitar a un programador de Java con experiencia para revisar el código. Si yo fuera el profesor y el estudiante mantuviera que el código no se derivó de HashMap, presionaría por una revisión experta.
No niego que mi código se deriva de HashMap.java. Niego que "parece claro que no se le permitió usar HashMap.java", y argumentaría firmemente que no sabía cuánto podía usar, que no quedó clara la necesidad de citar (Soy nuevo en la academia), y que no traté de eludir el aprendizaje en la tarea, sino que decidí no reinventar la rueda. Sostienes que no entiendo el código, pero lo hago.
@TheSmartWon 1) La ignorancia de las reglas con respecto al plagio probablemente no sea un argumento muy convincente para la junta de conducta. 2) Le dijeron que no podía usar nada en java.util.*. Para un observador externo, parece que básicamente copió las partes relevantes de la fuente de java.util.HashMap y las modificó ligeramente, sin trabajo propio. Incluso con una citación que lo meterá en problemas. 3) ¿Estoy en lo correcto, estás tomando un curso básico de estructuras de datos? En ese caso, básicamente estás tomando "construcción de ruedas 101" y reinventar la rueda es exactamente lo que debes hacer.
@TomvanderZanden 1) Estoy de acuerdo en general, pero en informática (donde la ingeniería y la ciencia se unen), diría que hay espacio para discutir, especialmente dado el plan de estudios poco claro. 2) No hay negación aquí. Sin embargo, si tuviera una citación, ¿por qué me metería en problemas? El profesor dijo que una cita "podría haber sido suficiente" en nuestra reunión. 3) Sí, estoy tomando un curso básico de estructuras de datos. Sin embargo, reinventar la rueda NO es exactamente lo que debemos hacer, sino que debemos reinventar la rueda y hacer una bicicleta completamente funcional con un trabajo de pintura y un estilo muy exactos. En clase, solo hablamos de teoría.
Además de los puntos de @TomvanderZanden, si pensó que estaba permitido derivar su código de java.util.HashMap sin atribución, es posible que deba explicar por qué realizó cada uno de los cambios que realizó. Por ejemplo, ¿por qué cambió el comentario de size()"Devuelve el número de asignaciones de clave-valor en este mapa"? al ambiguo "Devuelve el tamaño de la matriz"?
@TheSmartWon En educación, siempre se puede argumentar que "alguien ya resolvió este problema, ¿por qué debería resolverlo de nuevo?", Comenzando con ejercicios de matemáticas en la escuela primaria. Y el maestro allí también se enoja contigo si solo copias la solución o usas una calculadora en lugar de calcular por tu cuenta.
@Kapep Estoy totalmente de acuerdo con usted, solo una pequeña cosa ... "Incluso el estilo peculiar de omitir llaves después de una línea si se copian declaraciones y bucles".: ese estilo no es peculiar, es bastante normal.
@AndreaLazzarotto Ok, tal vez peculiar no sea la palabra correcta, pero asocio este estilo con el código heredado o tal vez el código Java escrito por programadores con experiencia en las convenciones de código Java de C. Sun de hace 20 años para evitar la omisión de llaves para declaraciones if y yo don No conozco ninguna pauta moderna de estilo de código Java que fomente esto. Sin embargo, creo que solo he visto un estilo similar, donde toda la declaración tiene que ir en una sola línea cuando se omiten las llaves.
Pero si lo vuelvo a pensar, puede que no sea justo para el estudiante señalar los estilos de codificación. La programación ya es lo suficientemente difícil para muchos principiantes y los estilos de código son algo en lo que debe obtener algo de experiencia antes de comprender los beneficios de un estilo sobre el otro. Realmente no puedo culpar a los estudiantes por apegarse a las convenciones de código (obsoletas) de las bibliotecas estándar.
@Kapep sí, después de todo, lo único importante es enseñar a los estudiantes a colocar la llave de apertura en la misma línea que if/for/class/whatever. Algunas personas insisten en ponerlo en una nueva línea. Cada vez que se hace esto, muere un cachorro. :(
@TomvanderZanden Realmente me gustan mucho las reglas de su institución para lidiar con el plagio. En mi universidad de pregrado, el castigo era como "¡chico malo! ¡No hagas eso!", así que me cansé de tratar de hacer lo correcto mientras todos hacían trampa y lo dejé por completo.

El plagio es hacer pasar el trabajo de otra persona como propio. Por lo que veo, has pasado el trabajo de otra persona como propio. En su defensa, proporciona una lista de declaraciones:

  • el fragmento de código plagiado es pequeño
  • el fragmento de código plagiado no es necesario
  • las tareas del profesor son dificiles
  • el profesor es recien graduado
  • la Junta de Conducta Estudiantil sabe poco sobre programación

No puedo ver cómo alguno de ellos es relevante para el problema en cuestión. La pregunta central es: ¿ha utilizado el trabajo de otra persona en el suyo propio sin referencias? Si lo hiciste, plagiaste y te enfrentas a las consecuencias. Aprende la lección y no vuelvas a repetir el error.

No todo el plagio es igual, y no debe ser tratado por igual. Los castigos de talla única suelen ser una mala idea.
No sabemos si -100% es un castigo único para todos, ya que no conocemos los detalles de otros casos de plagio en esta clase.
En este caso, es un castigo único para todos. Le hizo esto a otras 3 personas que conozco en la clase. Entiendo que plagié, simplemente no lo veo como un gran problema y hace que surjan otras preguntas.
@TheSmartWon Usted comenta "Simplemente no lo veo como un gran problema" es un argumento muy sólido a favor de una consecuencia lo suficientemente grave como para que lo vea como un gran problema en el futuro.
@PatriciaShanahan Bueno, déjame reformular. No veo por qué sería un gran problema en el mundo real. De hecho, aprendí más al usar esas dos líneas de código (¡aprendí cómo funcionan!) que si las omitiera. Simplemente creo que la pregunta es ¿qué merece mi plagio (involuntario)?
@TheSmartWon En el mundo real, comprender y cumplir con las reglas de licencia es un gran problema. La incorporación de código con reglas de licencia incompatibles en el producto de su empleador podría generar serios problemas legales.
@PatriciaShanahan Estoy de acuerdo, la licencia es importante y hay un código fuente de OSS que puedo y no puedo usar mientras trabajo para una determinada empresa en un determinado proyecto. Respeto y uso fácilmente las licencias tanto en el trabajo como en mi propio trabajo. En este caso, copié el código GPL2 , que estaría completamente bien siempre que incluyera una copia de la licencia con mi proyecto y publicara la fuente. Coincidentemente, ambos son ciertos con mi proyecto. Sin embargo, a la universidad no le importa.
@TheSmartWon El mundo académico se basa en dar crédito donde se debe. No tomas crédito de las obras de otros. Es por eso que la universidad lo considera un gran problema...
@TheSmartWon Siempre habrá reglas para usar el código de otras personas. Las reglas dependen de cómo esté utilizando el código, así como de los derechos de autor y las licencias del código. Al entregar un ejercicio en la universidad, la regla es reconocer todo el código que no escribiste.
En el caso más estricto, todo código que contenga una línea con i++;sería plagio excepto por el primer uso histórico de esta línea. Espero que sea obvio lo ridículo que sería si se manejara así. Debería haber un límite claramente definido, pero no he oído hablar de ninguno...
@vsz, la duplicación independiente no es plagio. El plagio es la copia intencional del trabajo de otra persona sin la anotación adecuada.
@vsz Usar i ++ no es un plagio, a menos que uno realmente lo haya plagiado. La pregunta central es: "¿el estudiante escribió el trabajo él mismo o pasó el trabajo de otra persona como propio?". La posición "sí, copié dos líneas, pero no es gran cosa y ¿cómo vas a probarlo?" es inmaduro, en mi humilde opinión.
Si uno de mis alumnos copiara dos líneas de código que no son realmente importantes para su trabajo, simplemente lo ignoraría. Puedo entender completamente por qué el estudiante considera que esto "no es gran cosa". En realidad, trato de enseñar a mis alumnos a citar menos , por ejemplo, a no escribir algo como "Java es un lenguaje de programación [13]". Es importante que todas las ideas principales (que no sean suyas) se citen y reconozcan correctamente, pero todas esas pequeñas cosas que son de conocimiento común o claras si piensa en ellas durante cinco minutos no necesitan una fuente.
@aeismail: El castigo leve aplicado en este caso ciertamente no es demasiado severo. Como en la mayoría de los casos, las universidades son demasiado generosas al tratar a los estudiantes que han plagiado o engañado de otras maneras. Simplemente aplicar una penalización basada en la tarea actual en lugar de reprobar todo el módulo es tan leve como una penalización por plagio.
@TheSmartWon: GPL2 requiere citación (es decir, cuando dice que debe publicar su trabajo derivado bajo la misma licencia, no significa "una copia nueva de la licencia GPL2 de la FSF", sino "la licencia que recibió con el código que usó, incluida su identificación de autor") La GPL tiene varias reglas relacionadas con la edición de la lista de autores al publicar un trabajo derivado: no puede dejarlo solo (lo que le echa la culpa de sus errores a los autores originales) y t eliminar a las personas de él (lo que le roba a los autores originales el crédito por su trabajo). Realmente deberías leer la licencia.

Preguntas que debes hacerte:

  • ¿Citaste tus fuentes?

Aunque el tema del plagio cruza diferentes campos, no todos los campos son iguales. Escribir un programa no es lo mismo que escribir un ensayo. Aunque ambos comparten componentes similares de pensamiento, gramática = tabuladores/espacios, sustantivos = objetos, preposiciones = punteros, etc. Funcionalmente son diferentes. Como parte de su tarea, ¿mencionó que obtuvo las secciones de código de una biblioteca de código abierto? Incluso si no fuera una cita formal, ¿tal vez dentro de los comentarios que vinculan a la biblioteca?

  • ¿De cuántas maneras puede una persona completar de manera realista una meta dada?

Si la tarea fuera sumar una lista de enteros. ¿Sería plagio si el código de 10 programadores usara sum (objeto)?

un algoritmo común para el encadenamiento que puedo explicar a fondo

Aquí es donde debe argumentar que hay un punto en el que una determinada pieza de código se ha convertido en información común, pero debe demostrar que, de hecho, es común. Un no experto no tendría el conocimiento previo para suponer que lo que dices es correcto. Tendrías que dar ejemplos. (Piense en Hello World, ¿quién realmente lo 'posee'?)

IANAL, pero parecería que la ley en sí misma es complicada.

Más del 30 % de la clase ha sido denunciado por violaciones de la integridad académica en proyectos durante el semestre, y el profesor recién graduado no parece pensar que él mismo o sus tareas sean el problema.

Un profesor de ciencias de la computación no es un abogado, pero él o ella ciertamente tiene la capacidad de comprender las preguntas de las ciencias de la computación y preguntarse a sí mismo si hay o no una intención maliciosa involucrada. Si los reclamos de plagio se pueden abordar con un documento simple donde cita sus fuentes (bibliotecas, proyectos de código abierto, repositorios de github), entonces los reclamos deberían disminuir.

El conocimiento y el aprendizaje no ocurren en el vacío.


Gracias por esto. Como dije antes, citar código es extraño para mí (y he estado programando desde los 8 años), y NO (pero DEBERÍA haber) citado esas líneas. Sin embargo, olvidar citar dos líneas y cometer plagio en todo el proyecto son dos cosas diferentes, especialmente en un proyecto de este tamaño. ¿Cómo abordarías eso?

Usted argumenta que las pruebas actuales para determinar el plagio (como en inglés) no funcionan bien cuando se trata de programación y secuencias de comandos, citar y documentar sus fuentes es funcionalmente diferente. En un ensayo, la cita es para demostrar de dónde sacaste la idea. En un programa, es para documentar cómo el fragmento de código lo ayudará a lograr sus objetivos. El propósito cambia de 'dar crédito donde se debe' a 'cómo va a ayudar esto y qué hace'.

Con esto en mente, mira "hola mundo". Es una introducción universalmente conocida a los lenguajes de programación. Pero ningún programador experimentado necesita 'citarlo' para entenderlo. Se ha vuelto 'común' en todos los idiomas. Sin embargo, un compilador específico en C que le permita controlar un brazo robótico no es lo suficientemente común como para que un programador experimentado (independientemente del idioma) lo reconozca fácilmente, de ahí la necesidad de documentación. Sin embargo, dentro del mundo de Java, depende de usted demostrar que el código que utiliza es lo suficientemente 'común' como para no requerir una cita.

En cuanto al caso en sí, puede argumentar que sus acciones no constituyen las definiciones tradicionales y prueban el plagio. Pero no espere que su audiencia (compañeros) entiendan dada la severidad y las credenciales del demandante (su profesor). Otra vía sería argumentar cómo la severidad del castigo -100% no es consistente con el alcance del presunto plagio. Se alega, no se prueba. Hasta que se emita un juicio definitivo, está abierto a debate.

Reprobar a un estudiante unilateralmente por plagio sería y debería ser apelado a una "autoridad superior" o, al menos, revisado por un panel de personas con conocimientos (en lugar de laicos). Dijo que esta clase tiene un porcentaje (en mi opinión, enorme) de reclamos de plagio. Si bien no tengo estadísticas para respaldar mi declaración, el 30% es ridículamente alto. En mi carrera académica, el plagio era un hecho RARO. Entonces, otro punto que puede señalar es si el profesor está aplicando incorrectamente el concepto de plagio tradicional a un campo en el que es fundamentalmente diferente.

Otro argumento que puede hacer es que el profesor de la clase nunca enseñó/enfatizó/esperaba la cita del código. Antes te enseñaron qué era el plagio, muy probablemente cuando se trataba de redactar ensayos, pero nunca te enseñaron cómo se aplicaba a la codificación. Aunque a este argumento puede faltarle una o dos patas (especialmente en el ámbito de, ya debería saberlo), pero ¿cómo sería razonable responsabilizarlo por algo que nunca le han enseñado a cuidar?


Gracias, ese es un buen punto para plantear. Simplemente usa MOSS de Stanford, como vinculé en el OP. No conozco su límite de porcentaje de similitud antes de acusar a la gente.

Un detector de plagio como ese es una herramienta para dar crédito a que X fue plagiado, una herramienta entre muchas. De ninguna manera es una prueba definitiva para determinar el plagio.

Tome una prueba de aliento para DUI, por ejemplo, si comí semillas de amapola y di positivo, ¿habría factores atenuantes ? Si todo lo que su profesor está usando para determinar el plagio es una herramienta, pregunte si las herramientas pueden tener fallas o no.

Aunque esto es más retórica y lógica que programación, estoy seguro de que nadie puede afirmar que un programa es perfecto. (Excepto COBOL, porque es 100% perfecto) Entonces, si de hecho es la única métrica que usa su profesor, ¿cuál es la posibilidad de falsos positivos ? ¿Sería justo castigar injustamente a los estudiantes si un programa determina que hicieron trampa?

Dicho esto, lea su manual del estudiante si puede tener un asesor académico durante el proceso. También comuníquese con los servicios de su ombudsman si su escuela tiene uno. Esta oficina puede arbitrar asuntos como este si la institución lo permite.

En mi opinión, un panel de compañeros de estudios (sin antecedentes legales o de programación) no sería el más adecuado para determinar si ocurrió un plagio de programación.


Aclare, ¿es -100% en realidad 0%? ¿O su profesor no solo le está dando un 0% por la tarea, sino que también lo está penalizando con una cantidad adicional? Es decir, A+B+C=100 (A=20,B=20,C=60), un 0 % en A significaría un total de 80 %, un -100 % en A significaría un total de 40 %. - Azulejo

Me está penalizando aún más con una cantidad adicional. No recibiría un cero en el proyecto (que mi calificación podría permitirse), pero en realidad mi calificación general se ve perjudicada MÁS que el 7% que vale el proyecto. –TheSmartWon

Algo complicado aquí... (dada la actualización) si la junta falla a su favor, esto no significa que el profesor lo trataría como lo haría con otros estudiantes en el futuro. Es posible que te encuentres bajo un escrutinio aún más cercano.


@ user2264247 Miró el MOSS conmigo durante unos 5 minutos hoy (exactamente el que publiqué en el OP), y solo se centró en esa función hash. Ni siquiera sabía qué hacía la función antes de que habláramos, así que no creo que la haya revisado previamente. Él y su colega (no sé por qué ella estaba en la habitación) dijeron que porque copié dos líneas, todo mi programa es culpable de plagio y que me acusarían. Realmente no parecían pensarlo dos veces ni preocuparse por ello, probablemente debido a la gran cantidad de casos por los que pasan. – TheSmartWon

@FrankFYC Ese colega y él también publican artículos juntos e imparten cursos complementarios. Ellos son buenos amigos. Es solo su nombre acusándome en el "informe de violación de la integridad", pero lo mencionaré con seguridad. No tengo idea de lo que estaba haciendo en la habitación, todo lo que hizo fue descartar rápidamente todos mis argumentos que, de lo contrario, mi profesor podría haber escuchado . Le trajo alegría demostrar que estaba equivocado en cada punto que planteé, fue un poco sádico. ¡Era como otro insecto atrapado en su red! – TheSmartWon

Si esto fuera Estados Unidos. Lea acerca de FERPA . No soy un experto, pero presumiría que si su profesor le permitiera a otro miembro de la facultad ver sus calificaciones, sería una violación. Este podría ser el acto que les explote en la cara. Si se encuentra en los EE. UU., asegúrese de establecer el hecho de que ambos profesores estaban en la misma sala que usted cuando discutieron el informe.

Consulte la respuesta de aeismail a una pregunta .

Dada la cantidad de otros casos, ¿supondría que el otro profesor también estuvo en esos casos? Como en, ¿el otro profesor estaba al tanto de la calificación de otro estudiante?

Pueden negarlo todo lo que quieran, pero si más de un estudiante afirma que ambos profesores estaban en la sala, esto sería en efecto, un problema de acción de clase (ja, perdón por el juego de palabras).

Documente todo y programe una cita con el coordinador de FERPA de su universidad (como un departamento creado para recibir quejas de FERPA).

Gracias por esto. Como dije antes, citar código es extraño para mí (y he estado programando desde los 8 años), y NO (pero DEBERÍA haber) citado esas líneas. Sin embargo, olvidar citar dos líneas y cometer plagio en todo el proyecto son dos cosas diferentes, especialmente en un proyecto de este tamaño. ¿Cómo abordarías eso?
Usted argumenta que las pruebas actuales para determinar el plagio (como en inglés) no funcionan bien cuando se trata de programación y secuencias de comandos. El grado de documentación es funcionalmente diferente. En un ensayo, la cita es para demostrar de dónde sacaste la idea. En un programa, es para documentar cómo el fragmento de código lo ayudará a lograr sus objetivos. El propósito cambia de 'dar crédito donde se debe' a 'cómo va a ayudar esto'.
Con esto en mente, mira "hola mundo". Es una introducción universalmente conocida a los lenguajes de programación. Pero ningún programador experimentado necesita 'citarlo' para entenderlo. Se ha vuelto 'común' en todos los idiomas. Sin embargo, un compilador específico en C que le permita controlar un brazo robótico no es lo suficientemente común como para que un programador experimentado (independientemente del idioma) lo reconozca fácilmente, de ahí la necesidad de documentación.
En cuanto al caso en sí, puede argumentar que sus acciones no constituyen las definiciones tradicionales y prueban el plagio. Pero no espere que su audiencia (compañeros) entiendan dada la severidad y las credenciales del demandante (su profesor). Otra vía sería argumentar cómo la severidad del castigo -100% no es consistente con el alcance del presunto plagio. Se alega, no se prueba.
Reprobar a un estudiante unilateralmente por plagio sería y debería ser apelado a una "autoridad superior" o, al menos, revisado por un panel de personas con conocimientos (en lugar de laicos). Dijo que esta clase tiene un porcentaje (en mi opinión, enorme) de reclamos de plagio. Si bien no tengo estadísticas para respaldar mi declaración, el 30% es ridículamente alto. En mi carrera académica, el plagio era un hecho RARO. Entonces, otro punto que puede señalar es si el profesor está aplicando incorrectamente el concepto de plagio tradicional a un campo en el que es fundamentalmente diferente.
Gracias, ese es un buen punto para plantear. Simplemente usa MOSS de Stanford, como vinculé en el OP. No conozco su límite de porcentaje de similitud antes de acusar a la gente.
¿Tu profesor ha dado razones más específicas de por qué te acusaron de plagio? Del enlace que proporcionó: "En particular, es un mal uso de Moss confiar únicamente en las puntuaciones de similitud. [...] Pero las puntuaciones ciertamente no son una prueba de plagio. Alguien aún debe mirar el código".
La función hash copiada me parece lo único condenatorio, pero son literalmente 2 líneas de código real que realizan una función puramente matemática. Si tu plagio se compara con un ensayo, es como olvidar citar una sola cita en todo el ensayo. En su defensa real, es posible que desee confiar en la inocencia hasta que se demuestre su culpabilidad y no citar estos contrapuntos a menos que él realmente los señale como razones de su culpabilidad. (es decir, el hachís puede pasar desapercibido, por lo que no hay razón para echarle leña al fuego). También podría quedar mal si sin darse cuenta admite haber considerado MOSS como prueba.
@ user2264247 Miró el MOSS conmigo durante unos 5 minutos hoy (exactamente el que publiqué en el OP), y solo se centró en esa función hash. Ni siquiera sabía qué hacía la función antes de que habláramos, así que no creo que la haya revisado previamente. Él y su colega (no sé por qué ella estaba en la habitación) dijeron que porque copié dos líneas, todo mi programa es culpable de plagio y que me acusarían. Realmente no parecían pensarlo dos veces ni preocuparse por ello, probablemente debido a la gran cantidad de casos por los que pasan.
Sí, un bibunal (tribunal de dos personas) no es necesariamente un juez imparcial. Definitivamente algo a destacar.
@FrankFYC Ese colega y él también publican artículos juntos e imparten cursos complementarios. Ellos son buenos amigos. Es solo su nombre acusándome en el "informe de violación de la integridad", pero lo mencionaré con seguridad. No tengo idea de lo que estaba haciendo en la habitación, todo lo que hizo fue descartar rápidamente todos mis argumentos que, de lo contrario, mi profesor podría haber escuchado. Le trajo alegría demostrar que estaba equivocado en cada punto que planteé, fue un poco sádico. ¡Era como otro insecto atrapado en su red!
@FrankFYC para responder a su última edición, la junta decide mi castigo. Pueden sancionarme hasta reprobar el curso, o renunciar por completo a las reclamaciones.
¿El profesor puede apelar la decisión de la junta?
Además, ¿cuál es tu país?
@FrankFYC Dios, gracias por toda la ayuda. Estoy en los EE. UU. y no estoy seguro de cuál es el papel del profesor en el futuro. Estoy revisando eso ahora. Todo lo que sé es que tiene que presentar evidencia (el primer MOSS que vinculé) a la oficina de conducta estudiantil, y que me enviarán un correo electrónico en dos días detallando más el proceso.
@FrankFYC Acabo de leer la descripción general del proceso por el que pasó. Curiosamente, durante el paso de la reunión, dice "No es necesario que otro miembro de la facultad o del personal lo acompañe como testigo". Su parte del informe parece terminar después de que envía el papeleo a la oficina, y supongo que la oficina se encargará de eso desde allí.
No es necesario =/= no está permitido. Usted puede, y yo lo recomiendo encarecidamente. Encuentre un miembro de la facultad de confianza que esté dispuesto a responder por usted. En cuanto al hecho de que se encuentra en los EE. UU., felicidades, ahora tiene una posible violación de FERPA por parte del profesor en cuestión.

Es posible que desee retirar su apelación (si puede)

A primera vista, su argumento parece totalmente razonable. Es decir, si copió dos líneas de código (suponiendo que eso estaba permitido) pero simplemente no incluyó una cita u olvidó eliminarla (como ha afirmado), entonces eso podría atribuirse básicamente a un error honesto, en -par con un error tipográfico. Tal error sería desafortunado, pero difícilmente merecería un castigo mayor.

Sin embargo, como otros han notado, una mirada más cercana al código hace que parezca que usted copió completamente el código original y luego hizo todo lo posible para tratar de ofuscar ese hecho. Esto hace que toda la simpatía se vaya por la ventana; en todo caso, es posible que te estés bajando demasiado a la ligera.

Pero, luego está su atractivo. La apelación en sí parece estar basada en una premisa deshonesta, al igual que esta pregunta. ¡Parece que estás mintiendo al consejo de honor!

Tal mentira parecería ser motivo de más castigo. Es decir, primero fue el engaño -cuya gravedad ahora ha llamado la atención- y luego también la defensa aparentemente fraudulenta.

no se que decirte Por un lado, esto es bastante asqueroso y en realidad podría ser mejor si aprendieras la lección ahora. Pero como respuesta a esta pregunta, suponiendo que está tratando de minimizar el castigo, parecería que desearía salir de la apelación y dejar las cosas en paz, en lugar de arriesgarse a empeorarlas.

Referencia: Sobre el derecho a no autoincriminarse

En el sistema legal estadounidense, a veces se piensa que los acusados ​​pueden alegar inocencia sin más sanciones si luego se descubre que esa afirmación es falsa. Esto se deriva de la Quinta Enmienda de la Constitución de los Estados Unidos , que otorga protección contra la autoincriminación.

La parte divertida de esto es que, si ve muchos programas del tipo Law-and-Order (como hacen muchos estadounidenses), puede estar acostumbrado a la idea de que los acusados ​​pueden mentir sobre no ser culpables sin recibir una sanción, lo cual podría inclinarse a aplicar a otros entornos similares a los de un tribunal, por ejemplo, una revisión del consejo de honor.

Lo que pasa es que los consejos de honor no son tribunales de justicia; no aplica el derecho a no autoincriminarse. Entonces, si mientes en tu defensa ante un consejo de honor, aún estás mintiendo ante las mismas personas que te juzgarán por esa mala conducta.

Editar: Fui a verificar los hechos sobre este punto, y parece que la Corte Suprema dictaminó que mentir en defensa propia puede aumentar las sentencias:

La Corte Suprema dictaminó hoy por unanimidad que los acusados ​​de delitos que suben al estrado y testifican falsamente en su propia defensa pueden estar constitucionalmente sujetos a tiempo adicional en prisión por obstruir la justicia.

La decisión revocó un fallo de un tribunal federal de apelaciones en Richmond, que sostuvo en 1991 que la Constitución prohíbe a los jueces imponer una sentencia adicional según las pautas federales como castigo por "una negación de culpabilidad bajo juramento incrédula".

- "La corte dice que el testimonio falso puede traer una sentencia más larga" , NYTimes (1993).

Entonces, aparentemente, los acusados ​​pueden ser sancionados por mentir en su propia defensa, incluso en los tribunales estadounidenses.

Puede que no haya muchos algoritmos razonables que implementen el encadenamiento, pero hay literalmente miles de millones de posibles algoritmos hash de 32 bits. No tiene sentido afirmar que uno de ellos en particular es "de conocimiento común", o que está publicado bajo GPL, o que estabas a punto de eliminarlo. Si lo eliminara , su caso se vería completamente diferente y diría que debería reclamar una duplicación independiente. En su posición actual, no creo que pueda convencer a nadie de que ha elegido el mismo algoritmo hash independientemente de OpenJDK.

Así que creo que su mejor opción es reconocer la irregularidad y luego argumentar que la cantidad de código realmente plagiado es relativamente pequeña y que la sanción que su profesor quiere aplicar es desproporcionada.

Tengo experiencia tanto en la enseñanza (y en el manejo del plagio) como en litigios y patentes de software.

He calificado grupos de tareas que muestran el mismo error o la misma imperfección. He visto a estudiantes que no pueden iniciar su IDE con soluciones de tarea concisas y expertas, donde todas las variables tenían nombres como "elContador", "variableA" y "yo mismo", pero aparte de eso, parecía que su autor ya tenía 10 años de experiencia en el campo, y claramente no necesita un título universitario.

Un caso de patente de software puede reducirse a probar que una sola línea como "x=0" ha sido plagiada. Esto incluye probar el motivo, las personas (el hecho de que la empresa A haya atraído a personas de la empresa B) y el estado del arte en el momento del presunto plagio (y no ahora, cuando el enfoque propuesto es obvio para todos). Los juicios de patentes de software no son discusiones estériles sobre cómo se desempeñó el algoritmo de Smith-Waterman en el código del demandante y del demandado.

En tu caso, parece que al menos "miraste" el código OpenJDK antes de iniciar el tuyo. La evidencia irrefutable es la función hash: la probabilidad de replicar esto por casualidad, según Mr. Data y C-3PO, es una en 67 billones de billones. Está más claro que no estaba buscando una función hash, sino una implementación de mapa hash. La búsqueda de "función hash para cadenas" o "función hash para cadenas java" no arroja ningún resultado de OpenJDK.

Una vez que haya visto la implementación OpenJDK de hashMap, el problema fue sencillo para usted. De todas las formas posibles de abordar el hashMap, consciente o no, has elegido la de OpenJDK, porque estabas terriblemente sesgado.

Sus comentarios de código son inútiles. Comentar "longitud" como "la longitud" demuestra que no comprendió el problema, y ​​el objetivo de comentar aquí es simplemente cumplir con un requisito de calificación. Pierdes el tiempo del calificador. Lo correcto sería: "hash = el Hash del elemento a buscar", "Longitud: el tamaño de la tabla hash" "devuelve la posición en la tabla hash de longitud especificada para el elemento de hash h. Nunca excede la longitud menos uno". Además, dice "obtener devuelve el valor en el índice", lo cual es flagrantemente incorrecto para un mapa hash. Get devolvería el valor en la clave. Mezclar clave e índice es un "delito capital" si hace estructuras de datos.

Mi juicio aquí sería "culpable de los cargos". No dedicó tiempo a pensar en la solución, pero tomó una solución existente y probablemente la implementó de forma independiente. Derrotó el propósito de la tarea, que tenía la intención de hacerte pensar en estructuras de datos. Citar la fuente de OpenJDK solo haría que su culpa sea más obvia (un caso clásico de autoincriminación durante la defensa). Es como si te dieran un problema de matemáticas y terminaras citando el libro y la página que muestra la solución del problema. Hiciste un buen trabajo de búsqueda, pero la intención del problema era que lo resolvieras.

Esta es una respuesta genial.

Otras respuestas han abordado cuestiones filosóficas/morales como "¿Es plagio?" "¿Está mal?" etc. Pero, diría que debería centrarse en el problema práctico en cuestión, que es:

No estoy seguro de cómo defender todo este caso ante una Junta de Conducta Estudiantil.

Así que tienes un caso que discutir...


Primero, lea los documentos legalmente relevantes:

  • Reglamento disciplinario de los estudiantes
  • procedimientos del consejo estudiantil
  • Listas de leyes externas que se aplican oficialmente
  • Declaración exacta de los cargos en su contra
  • Precedente: decisiones de la junta de conducta de estudiantes anteriores sobre tales asuntos.
  • Protocolos de sesión de sesiones anteriores de la junta de conducta de los estudiantes (si están disponibles, lo que puede no ser el caso).

Luego determine si se le permite, y si es una buena idea, ser representado por alguien: un abogado; un estudiante de derecho; un miembro de la facultad; un miembro del consejo estudiantil, etc. Si eso está disponible para ti, al menos deberías consultar a uno (incluso si no terminas llevándolos contigo), seguramente tienen más experiencia que tú.

Ahora, determina si realmente quieres argumentar que "esta parte de lo que copié no constituye plagio". Tal vez podrías hacer ese argumento, no lo sé. Incluso para los legos: si tiene suficiente tiempo (que puede que no tenga), puede explicar cómo se compilan los programas a partir del código fuente y cómo algunos códigos no se usan realmente. Podría presentar ejemplos de lo que parece un plagio, pero en realidad es un código casi idéntico escrito de forma independiente por diferentes personas.

Francamente, dudo que esto te lleve muy lejos considerando las circunstancias. Incluso si tiene razón teóricamente (una pregunta sobre la que no voy a comentar), e incluso si pudiera explicar esto a la junta, es posible que no quiera escuchar ese argumento.

Por otro lado, supongo (¡sin fundamento!) que un argumento más convincente podría ser algo como (breve resumen):

Lamento mucho lo que he hecho y no niego que fue desautorizado, inapropiado e inmoral.
Tuve la tentación de plagiar debido a ABC, que, si bien no excusa mi comportamiento, también ha llevado al 30% de la clase a tener la tentación de plagiar, lo que sugiere un problema objetivo además de mi falla personal.
He hecho las paces de maneras XYZ.
En los casos C1 y C2, que sostengo son comparables, la sanción fue mucho menor.
Finalmente, me gustaría que la junta tome en cuenta mis circunstancias personales DEF al considerar este caso.
Respetaré cualquier decisión que tome la junta.

Y dejar las cosas así.

La pregunta es que el título pregunta "¿es un plagio?" y no "¿cómo defiendo mi caso?" El problema, en mi humilde opinión, es que el estudiante no acepta que el hecho fue un plagio y tiende a descartarlo como "no es gran cosa". Esta posición, en mi humilde opinión, no vale la pena defenderla.
@DmitrySavostyanov: OP hizo varias preguntas, y la del título no es la única. Estoy de acuerdo, parece estar tratando de descartar lo que hizo como "no es gran cosa", pero tiene mucho tiempo para lidiar con el dilema moral y solo un mes para prepararse para su audiencia. Afirmo que eso debería ser un enfoque. Con suerte, también lo ayudará a dejar de bailar alrededor de lo que hizo.

Definitivamente debería protestar por el castigo propuesto, porque muchas instituciones no permiten un castigo como el que su profesor quiere evaluar. (En otras palabras, su instructor no puede darle una calificación de -100 %, o cualquier calificación inferior a cero para una parte determinada de su calificación).

En cuanto a la cuestión de copiar código como plagio, esa es una afirmación mucho más espinosa. Usar el código de otra persona es un problema, pero si realmente no hay otra manera de hacer algo, entonces, ¿cómo denuncias el plagio? El plagio no se extiende a declaraciones "obvias". Por ejemplo, no es plagio si dos libros de texto de cálculo resuelven una integral usando una serie de ecuaciones de la misma manera, porque básicamente es la única forma en que puedes hacerlo. Por otro lado, si escribes un montón de texto a su alrededor que es el mismo, entonces has cometido plagio.

No creo que "[en la mayoría de las instituciones] su instructor no pueda darle una calificación de -100%, o cualquier calificación inferior a cero para una parte determinada de su calificación" sea realmente cierto. No creo que sea raro que la sanción por plagiar sea más de lo que "vale" la tarea.
Las regulaciones de "la mayoría de las instituciones" son irrelevantes. Sólo importan en este caso los reglamentos de esta institución. Los miembros del personal generalmente conocen las reglas, pero si este castigo en particular va más allá de lo permitido, se puede apelar (pero no el caso de plagio en sí).
He cambiado "la mayoría" por "muchos", pero sin duda vale la pena comprobarlo. Sé que me han propuesto sanciones sustancialmente reducidas, y ni siquiera pude asignar un "0" en un examen debido a las trampas.
@DmitrySavostyanov: Soy consciente de que las políticas de otras instituciones son irrelevantes, pero le doy al OP una razón por la que se debe considerar una apelación, incluso si se admite que cometió plagio. (Y puede argumentar que el plagio ciertamente no es tan grave como se alega, lo que puede marcar la diferencia).
@aeismail: Me parece que su último comentario anterior sería una mejor respuesta que su respuesta. Si la sanción asignada por el instructor excede lo que permite la política de la institución, entonces el OP ciertamente debe objetarla. Si no (y definitivamente deberían averiguarlo antes), lo único que pueden argumentar es que no es proporcional a la gravedad de la ofensa, que en cualquier caso será una decisión subjetiva al final.

El plagio es un tema difícil en informática, ya que solo hay un número limitado de piezas de código que conducen al mismo resultado, y solo una de ellas puede considerarse una solución óptima.

De hecho, copió el código de las bibliotecas de Java, tanto el código real como el nombre de las variables lo sugieren. Por lo tanto, hubiera sido su deber citar esto correctamente. En este estricto punto de vista tu profesor tiene razón, y probablemente también lo tenga en los otros casos que mencionas. Si muchas personas cometen errores, sigue siendo el problema de la persona que comete el error, no de la que lo corrige.

Sin embargo, si es ético es un tema completamente diferente.

Al programar funciones complejas, es una buena práctica no reinventar la rueda , sino usar código existente y probado de otros. Sin embargo, según el artículo vinculado, "a menudo es necesario reinventar la rueda para solucionar las incompatibilidades de licencias de software".

Si tenía la orden específica de no copiar el código existente y no obedeció esa orden, el problema está de su lado. Las patentes de software son un problema grave en los Estados Unidos, varias empresas más pequeñas quebraron a causa de ello, las empresas más grandes poseen ciertas patentes solo para usarlas para contrademandar en caso de ser demandadas (ver Apple vs Samsung). Esencialmente, las patentes de software se han transformado en una especie de arma que se puede utilizar para eliminar la competencia no deseada del mercado. Por lo tanto, es importante que cualquier desarrollador de software (en su país) pueda detectar y solucionar estos problemas de licencia.

No conozco las intenciones de su profesor, pero es posible que haya agregado esa cláusula específicamente porque es consciente de las consecuencias del "robo de código", y su dura reacción es una forma de enseñarle a evitar esos problemas. en situaciones en las que realmente dolería.

En otras partes del mundo no tan estrechas de miras, las patentes de software o el 'plagio' como en su caso son un problema mucho menor. Esto significa que en otros países tu trabajo podría haber sido considerado de manera diferente, algunos incluso podrían haber reducido tus puntos por no copiar el código existente (reinvención innecesaria de la rueda). Pero usted no vive en "otros países", por lo que también desde un punto de vista ético, su profesor puede ser duro, pero aún tiene razón.