Являются ли две строки скопированного кода плагиатом?

Я скопировал (и не процитировал) две строки кода из исходного кода OpenJDK для студенческого проекта Data Structures. Тем не менее, сравнение кодов показывает тревожное количество (40%) сходства. Вот параллельное сравнение с моим файлом.

Основываясь на этих основаниях, мой профессор хочет дать мне -100% за задание, что снизит мою общую оценку на 15%, что, вероятно, заставит меня не пройти C-wall (в зависимости от того, насколько хорошо я справлюсь с заданием). итоговый экзамен). По этой причине (и моей сознательной) я решил обратиться.

Однако я полагаю, что большая часть сходства в отчете связана с тем, что я скопировал строки 142-152:

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

Я не цитировал эти две строчки, но собирался их потом вычеркнуть.

На самом деле всю эту функцию можно удалить, вообще не затрагивая программу, что и приводит к такому сравнению файлов.

Тогда только строки 114-126 являются проблемой:

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);

Тем не менее, этот фрагмент принадлежит мне. Я написал эти строки, не ссылаясь на HashMap.java , и это общий алгоритм создания цепочек, который я могу подробно объяснить и о котором знаю уже много лет.

Да, я знаю, что тот факт, что я скопировал две другие строки, ставит под угрозу мою честность и превратил 20% в 40% для начала, так как я могу это доказать?

Я не знаю, как защитить все это дело перед Советом по студенческому поведению, который очень мало знает о программировании. Мое слушание совета состоится через месяц. Являются ли эти два фрагмента кода плагиатом всего моего проекта? Справедливы ли -15% к моей общей оценке?

Примечания:

  • Наши проекты довольно обширны, так как нам не разрешено их использовать java.util.*(например, более 1000 строк для каждого проекта за 8 дней), и я не копировал какой-либо другой код. Я бы сказал, что фактическая реализация структуры данных должна занимать около 1/5 нашего времени, затрачиваемого на проект.
  • Более 30% класса были замечены в нарушениях академической честности в проектах в течение семестра, и только что получивший диплом профессор, похоже, не считает себя или свои задания проблемой. Я должен был уловить предупреждение перед этим последним проектом семестра...
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Из-за такого беспорядка я покинул академию.
Я хочу отметить, что эта спорная часть дословно здесь и здесь .
@Gryph Есть более крупный спор, см. чат, указанный выше.
Некоторые из новых комментариев предполагают, что вы не уловили культурные нормы, касающиеся плагиата на Западе. Так что я не знаю, может ли это быть совершенно неуместным, но одна из причин, по которой кто-то может не знать здешних норм, заключается в том, что они из Азии, например, иностранный студент или иммигрант, который вернулся в школу уже взрослым. Кто-то, кто вырос в Азии, мог по понятным причинам усвоить некоторые из их культурных норм о плагиате во время своего раннего образования, которые сильно отличаются от западных норм. Это не избавит вас от неприятностей, но может стать смягчающим фактором.
VTC слишком специфичен. Мы здесь не для того, чтобы оценивать различия файлов.

Ответы (10)

Весьма вероятно, что вы занимались плагиатом, и в этом случае вам лучше признать свою ошибку, чем продолжать спорить.

Глядя на ваш код, вы видите, что многое было взято из файла HashMap.java. Я сильно подозреваю, что вы начали с этого кода, а затем модифицировали его для создания своего кода или тщательно следовали ему как шаблону при написании собственного. Выделенные разделы кода содержат часть этого, но другие разделы также очень похожи на другой файл, хотя и с немного измененными комментариями и порядком.

Если это так, то код, который вы нам показали, не является вашей собственной оригинальной работой, а на самом деле является плагиатом версии HashMap.java. Если оставить две несоединенные линии, то это дымящийся пистолет связи, которая, вероятно, будет решающей для панели. Ваше замечание о том, что они не нужны, на самом деле будет считаться против вас, потому что вы не сможете объяснить, почему они вообще существуют. И независимо от того, было ли это вашим намерением или нет, вполне вероятно, что комиссия (и ваш профессор) увидит ваши измененные комментарии и порядок как попытку замести следы и скрыть ваш плагиат от автоматизированных инструментов.

Комиссия с большей вероятностью проявит снисходительность к учащемуся, который, по крайней мере, кажется раскаивающимся и признает, что совершил ошибку, чем к учащемуся, который отрицает неправомерность перед лицом явно очень веских доказательств.

О, я не отрицаю использования его в качестве справочного материала, что разрешено программой. Мое утверждение состоит в том, что я забыл процитировать/не видел необходимости цитировать, потому что я новичок в академических кругах, задание поддается этому, и я привык относиться к таким заданиям в отношении самых хобби-проектов, которые можно заимствовать. свободно из кода GPL, а не академических кругов, которые запрещают его использование. Претензии, выдвинутые против меня моим профессором, указывали только на МОСС, а не на файл в целом, поэтому я спрашиваю только о двух строчках.
У меня действительно есть веская причина для написания этих строк с самого начала. Нам пришлось хешировать много двухсимвольных строк (т.е. "AB"). Без вспомогательной хеш-функции было много коллизий, и я боялся, что мой код истечет по тайм-ауту при автоматической оценке, что НАМНОГО задержит разработку в зависимости от того, как работает наш автоматический оценщик Jenkins. Я включил его, потому что как только я узнал, как он работает, я подумал, что это круто, и мой проект может его использовать. Да, сейчас я раскаиваюсь, понимая, что академические круги придерживаются других стандартов, которые на самом деле не были мне ясны.
@TheSmartWon, я бы порекомендовал в будущем, даже для любительских проектов, где вы не собираетесь распространять код, вы все равно должны цитировать код, который вы позаимствовали из других источников. Если вы решите позже опубликовать или продать свой код, без этих ссылок вы можете забыть, что и откуда было заимствовано (и рискуете нарушить лицензию).
@TheSmartWon 1) MOSS определил гораздо больше, чем две строки. 2) вы должны знать, что копирование кода, который вы должны написать сами, является обманом при выполнении задания, это просто здравый смысл, 3) вы не писали эти строки и 4) я не верю, что вы действительно боялись тайм-аута . Для меня это заявление пахнет очередной попыткой сокрытия.
@immibis 1) Посмотрите на второй МОХ в ОП. 2) Я написал его сам, используя исходный код и внеся некоторые свои модификации. 3) Согласен. 4) У меня нет причин врать здесь. Я думаю как инженер (я думал, что функция классная и мне она пригодилась!), поэтому я ее использовал, а не студент, пытающийся сдать «свою работу».
@TheSmartWon 1) Тот же самый, который идентифицирует еще 3 раздела? 2) "использовать исходник и внести некоторые изменения" - это не "написать самому". 4) Ваша причина лгать — попытаться избежать наказания. это нормальная реакция - сделать все возможное, чтобы это выглядело так, как будто вас не должны наказывать. Инженер также не будет использовать функцию только потому, что он/она «думает, что это выглядит круто». Вы также уже знаете, что задания должны быть вашей собственной работой; если вы не можете вспомнить, что нельзя передавать работу других людей, у вас проблемы.
1) Да. Говорите о них, если хотите. 2) Я согласен. Тем не менее, мы рекомендуем использовать Java API в качестве шаблона. 4) Если бы я пытался избежать наказания, я бы не писал этот пост. Я хочу того, что справедливо в глазах научных кругов. 4.2) Вы не смогли распознать мое второе предложение «... и я [понял функцию] и хорошо использовал ее». Инженеры все время включают чужие оптимизации, особенно в OSS!
Вот где намерение является такой сложной проблемой, когда дело доходит до плагиата. Намерен ли обвиняемый заняться плагиатом? Зная, что идея, цитата, код принадлежат другому лицу, и, несмотря на знание правил, все равно решают использовать без цитирования. Если бы класс никогда не подчеркивал цитирование кода (и на основе вопроса и комментариев от OP до сих пор), могло бы показаться, что такие соглашения никогда не преподавались, но все еще применялись. Если вы устанавливаете правило, не объясняя его, как будет справедливо, если учащиеся не поймут/не будут следовать ему?
@TheSmartWon Я не думаю, что серьезные программисты OSS так же небрежно относятся к интеллектуальной собственности, как вы. Я одновременно являюсь членом Apache Software Foundation и коммитером нескольких проектов ASF. Чтобы стать коммиттером, я должен был подписать юридическое соглашение, в котором, среди прочего, говорилось: «Вы заявляете, что каждый из ваших вкладов является вашим оригинальным творением» и «вы подтверждаете, что отправленные вами вклады включают полную информацию о любой сторонней лицензии или другие ограничения... о которых вам лично известно и которые связаны с какой-либо частью ваших Вкладов».
@FrankFYC «похоже, что такие соглашения никогда не преподавались, но все еще применялись» концепция «не обманывать, копируя чужие работы» не является «соглашением», и этому не нужно учить. Это очевидно (на самом деле, это можно найти практически в любом академическом/университетском своде правил).
@AndreaLazzarotto Я не согласен с утверждением, что плагиат является неправильным, неэтичным и должен быть наказан (в некоторых случаях сурово). Но, возможно, мои слова больше сбили с толку, чем просветили. Если претензия здесь является плагиатом со следующими частями: знание - знал ли ответчик, что такое плагиат, умысел - и все же решил заняться плагиатом, то жюри (студенческий совет) может признать ОП виновным в предъявленном обвинении. Защита, которую может выдвинуть OP, заключается в том, что текущее определение плагиата не работает, когда дело доходит до компьютерного программирования, а также тот факт, что (продолжение)
Широко используемый механизм, позволяющий студентам цитировать свои источники (например, библиографию), не был востребован профессором. Другим аргументом может быть то, что профессор пригласил другого преподавателя во время проверки оценок, что является возможным нарушением FERPA. Другим аргументом является довольно большое количество жалоб на академические проступки в классе, которые могут свидетельствовать о том, что профессор не приложил усилий для обучения своего класса плагиату, особенно в отношении цитат по программированию.
@FrankFYC Я не согласен с защитой, это довольно спорно. Я сам изучал CS, и нам никогда не давали конкретных указаний не заниматься плагиатом. Мы знали, что это неправильно, и это прекрасно применимо и к коду. Конечно, я нахожусь в другой стране, и здесь плагиат является уголовным преступлением, поэтому ситуация может немного отличаться от ситуации в США.
@AndreaLazzarotto Именно это я и хочу сказать. Плагиат - серьезное обвинение. Определить, совершил ли человек преступление, не так-то просто. В этом случае профессор использовал только один тест, чтобы определить, занимается ли студент плагиатом. Было бы это справедливо? Кроме того, профессор якобы нарушил законы США о конфиденциальности, позволив другому преподавателю увидеть оценку студента. Профессор также имеет абсурдно высокий уровень случаев академической честности в классе. Вам не интересно, как профессор преподает в классе (продолжение)
может повлиять на принятие решения учеником? Если вы ставите перед собой невыполнимые цели, какими бы благими намерениями они ни обладали, не имея этических средств для их достижения, сколько людей решат отклониться и «обмануть»? Наличие только одного человека, который имеет одностороннюю власть определить, кто обманул, потенциально изобилует злоупотреблениями. Наконец, и я полностью с вами согласен, плагиат — серьезная проблема. Но это не означает, что кто-то автоматически виноват без доказательств и тщательного расследования. Невиновен, пока вина не доказана - такова американская система правосудия (иногда несовершенная, но это все, что у нас есть).
@PersonX Также очень полезно иметь эти цитаты, если вы оглядываетесь на свой код через год. Довольно легко просто скопировать и вставить ссылку, которую вы просматриваете, в комментарий. Это также дает дополнительное преимущество, если вы хотите, чтобы другие учились читать ваш код.
@FrankFYC: в зависимости от размера класса этот показатель не является «абсурдно высоким». Я учусь в классе, обычно состоящем из дюжины человек, и в большинстве лет у меня было 3 случая явного плагиата (те, когда ученики копировали предложения друг друга и ошибки в базовой арифметике). Если в следующем году еще один ученик решит разделить свои усилия с одноклассником, вдруг это будет экстраординарное событие? (Мы сажаем этих студентов, мы не бросаем им всю книгу с первого раза, и они всегда оправдываются тем, что у них слишком много заданий из других классов, на которые не остается достаточно времени.)

На мой взгляд, заголовок вашего вопроса «составляют ли две строки скопированного кода плагиат» не совсем точен.

Я думаю, что вам будет очень трудно утверждать, что это не/не было плагиатом. Сходство между вашим кодом и HashMap.java не ограничивается двумя строками или одним «общим алгоритмом».

1) Вы выбрали точно такую ​​же емкость и коэффициент загрузки по умолчанию:

 /** 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;

против

 // 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;

Фактически, комментарий «Должна быть степень двойки» уже означает, что вас поймали с поличным, потому что на самом деле нет веских причин требовать, чтобы емкость была степенью двойки в вашем коде. Тот факт, что размер является степенью двойки, используется только для оптимизации в версии кода HashMap.java, и эта оптимизация не используется в вашем коде. Вам, вероятно, повезло, что совет по поведению студентов мало что знает о программировании.

2) Эти два getметода очень похожи:

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;
}

против

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;
}

Кажется странным, что вы оба выбрали один и тот же, очень специфический способ сравнения ключей (сначала сравнение хэшей, затем указателей ключей и, наконец, использование key.equals).

3) ... как метод put:

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;
}

против

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) ... как addи 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);
}

против

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);
        }
    }
}

Конечно, HashTable — довольно распространенная структура данных, и существует ограниченное количество способов реализации данного алгоритма. Однако две скопированные строки показывают, что вы определенно использовали HashTable.java в качестве отправной точки для своей собственной реализации, а дальнейшее сходство в дизайне, нелогичных комментариях и структуре кода наводит на мысль, что вы действительно использовали нечто большее, чем просто немного «вдохновения» от HashTable.java.

Обратите внимание, что и ваш, и их методы put и get используют цикл for для перебора связанного списка, в то время как методы роста/передачи используют цикл while для выполнения того же самого. Кажется странным, что оба фрагмента кода принимают одно и то же решение независимо друг от друга.

Наши проекты довольно обширны, так как нам не разрешено использовать java.util.* (например, 1000+ строк для каждого проекта за 8 дней), и я не копировал никакой другой код. Я бы сказал, что фактическая реализация структуры данных должна занимать около 1/5 нашего времени, затрачиваемого на проект.

Кажется очевидным, что вам не разрешалось использовать HashMap.java, и что, если вы хотели использовать хеш-таблицу, вам нужно было реализовать свою собственную. Копируя большие части HashMap.java, вы пытались обойти это ограничение. «Это лишь малая часть проекта» не отменяет того факта, что вы взяли код, который не был вашей собственной работой, и попытались выдать его за свой собственный (хотя ожидалось, что вы напишете это часть задания самостоятельно).

Если бы задания были действительно нереалистичными с учетом выделенного промежутка времени, было бы лучше сдать неудачное решение. Если бы многие студенты сдали неудачное решение, профессор мог бы подумать, что задание слишком сложное. Если бы плагиат остался незамеченным, профессор мог бы (ошибочно) сделать вывод, что задание имеет соответствующую сложность, и наказать студентов, которые (попытались) выполнить задание честно и в соответствии с правилами.

Наказания за плагиат могут сильно различаться в зависимости от учреждения. -100% по вашему заданию может быть жестким, но в нашем учреждении штраф мог быть где угодно от 0% по заданию, автоматической неудачи для рассматриваемого курса до исключения из учебы на 12 месяцев. В большинстве учреждений к плагиату относятся так же, как к списыванию на экзамене, и наказания могут быть строгими. Если бы единственным наказанием было получение 0% за плагиатное задание, тогда не было бы никакого вреда в «попытке» плагиата, если вы все равно провалите задание, не прибегая к плагиату.

Мне немного неудобно помещать в ответ большие объемы исходного кода (кажется, это не по теме для academia.SE), но это кажется единственным способом объяснить задавшему вопрос, насколько серьезным является копирование (утверждение о «всего две строки», кажется, преуменьшают значение).
Плюс, конечно, несоответствие, на которое указывали другие, что ОП утверждал, что скопированная часть даже не использовалась. Отчасти это указывает на проблему, потому что тогда не имеет смысла, почему он включен в первую очередь, и, как также указывалось, утверждение даже не соответствует действительности, указывая на то, что ОП на самом деле не понимает код.
Ага. Этот ученик был бы в восторге, если бы сдал этот код в моем классе.
Грубо говоря, на мой взгляд, эти примеры кода выглядят как копирование и вставка с небольшим рефакторингом. Всякий раз, когда в HashTable используется простой цикл for, код учащихся также использует его. Всякий раз, когда используется цикл for в стиле итератора, код учащихся также использует его. (циклы с e.next(), я никогда не сталкивался с этим стилем вне jdk в современном коде). Копируется даже своеобразный стиль опускания фигурных скобок после одной строки операторов if и циклов.
ОП должен знать, что Совет по поведению студентов, не обладающий большим опытом программирования, может пригласить опытного программиста на Java для проверки кода. Если бы я был профессором, а студент утверждал, что код не был получен из HashMap, я бы потребовал экспертной оценки.
Я не отрицаю, что мой код получен из HashMap.java. Я отрицаю, что «кажется очевидным, что вам не разрешалось использовать HashMap.java», и я решительно возражаю, что я не знал, сколько из этого я мог бы использовать, что необходимость цитирования не была ясно указана. (я новичок в академических кругах), и что я не пытался обойти обучение по заданию, а вместо этого решил не изобретать велосипед. Вы считаете, что я не понимаю код, но я понимаю.
@TheSmartWon 1) Незнание правил, касающихся плагиата, вероятно, не станет очень убедительным аргументом для комиссии по поведению. 2) Вам сказали, что вы ничего не можете использовать в java.util.*. Для стороннего наблюдателя это выглядит так, как будто вы в основном скопировали соответствующие части исходного кода java.util.HashMap и немного изменили их, никакой собственной работы. Даже с цитатой, которая доставит вам неприятности. 3) Я правильно понимаю, что вы проходите базовый курс по структурам данных? В этом случае вы, по сути, берете «колесостроение 101», и заново изобретаете колесо — это именно то, что вы должны делать.
@TomvanderZanden 1) В целом я согласен, но в информатике (где инженерия и наука соединяются), я бы сказал, что есть место для споров, особенно с учетом неясной программы. 2) Здесь нет возражений. Но если бы у меня была цитата, почему бы это доставило мне неприятности? Профессор сказал, что цитаты «может быть достаточно» на нашей встрече. 3) Да, я прохожу базовый курс по структурам данных. Однако заново изобретать колесо — это НЕ совсем то, чем мы должны заниматься, скорее, мы должны заново изобретать колесо и сделать полностью функциональный велосипед с очень точной окраской и стилем. В классе мы просто говорим о теории
В дополнение к пунктам @TomvanderZanden, если вы считаете, что получение кода из java.util.HashMap без указания авторства разрешено, вам может потребоваться объяснить, почему вы внесли каждое из внесенных вами изменений. Например, почему вы изменили комментарий с size()точного «Возвращает количество сопоставлений ключ-значение на этой карте». к неоднозначному «Возвращает размер массива»?
@TheSmartWon В образовании всегда можно возразить, что «кто-то уже решал эту задачу, зачем мне решать ее снова?», начиная с математических упражнений в начальной школе. И учитель там тоже сердится на вас, если вы просто копируете решение или пользуетесь калькулятором вместо того, чтобы считать самостоятельно.
@Kapep Я полностью с вами согласен, только одна маленькая вещь ... «Даже своеобразный стиль опускания фигурных скобок после одной строки, если операторы и циклы копируются.»: этот стиль не является чем-то необычным, это вполне нормально.
@AndreaLazzarotto Хорошо, может быть, своеобразный - это не то слово, но я связываю этот стиль с устаревшим кодом или, возможно, с кодом Java, написанным программистами с опытом работы в C. В соглашениях Sun по коду Java 20 лет назад говорилось, что нельзя опускать фигурные скобки для операторов if, и я не не знаю никаких современных руководств по стилю кода Java, которые поощряют это. Я думаю, что видел только подобный стиль, когда все выражение должно располагаться на одной строке, когда фигурные скобки опущены.
Но если я подумаю еще раз, может быть несправедливо по отношению к студенту указывать стили кодирования. Программирование уже достаточно сложно для многих новичков, и стили кода — это то, где вам нужно получить некоторый опыт, прежде чем вы поймете преимущества одного стиля над другим. На самом деле нельзя винить студентов за то, что они придерживаются (устаревших) кодовых соглашений стандартных библиотек.
@Kapep да, в конце концов, единственное, что важно, это научить студентов ставить открывающую фигурную скобку на ту же строку, что и if/for/class/whatever. Некоторые люди настаивают на том, чтобы поставить его на новую строку. Каждый раз, когда это делается, щенок умирает. :(
@TomvanderZanden Мне очень, очень нравятся правила вашего учреждения по борьбе с плагиатом. В моем студенческом университете наказанием было что-то вроде «плохой мальчик!

Плагиат - это выдача чужой работы за свою. Насколько я вижу, вы выдали чужую работу за свою. В свою защиту вы приводите список утверждений:

  • плагиатный фрагмент кода мал
  • плагиатный фрагмент кода не нужен
  • задания профессора сложны
  • профессор только что закончил
  • Совет по студенческому поведению мало что знает о программировании

Я не вижу, как любой из них имеет отношение к рассматриваемому вопросу. Центральный вопрос: использовали ли вы чужую работу в своей собственной без ссылок. Если вы это сделали, вы занимаетесь плагиатом, и вам грозят последствия. Усвойте урок и больше не повторяйте ошибку.

Не весь плагиат одинаков, и к нему не следует относиться одинаково. Универсальные наказания обычно плохая идея.
Мы не знаем, является ли -100% универсальным наказанием, поскольку мы не знаем подробностей о других случаях плагиата в этом классе.
В данном случае это универсальное наказание. Он сделал это с 3 другими людьми, которых я знаю в классе. Я понимаю, что занимался плагиатом, я просто не вижу в этом ничего особенного, и это вызывает другие вопросы.
@TheSmartWon Вы комментируете: «Я просто не вижу в этом большой проблемы» — это очень сильный аргумент в пользу достаточно серьезных последствий, которые вы будете рассматривать в будущем как большую проблему.
@PatriciaShanahan Хорошо, позвольте мне перефразировать. Я не понимаю, почему это может иметь большое значение в реальном мире. На самом деле я узнал больше, используя эти две строки кода (я узнал, как они работают!), чем если бы я их пропустил. Я просто думаю, что вопрос в том, чего заслуживает мой (непреднамеренный) плагиат?
@TheSmartWon В реальном мире понимание и соблюдение правил лицензирования — это действительно большое дело. Включение кода с несовместимыми правилами лицензирования в продукт вашего работодателя может привести к серьезным юридическим проблемам.
@PatriciaShanahan Я согласен, лицензирование важно, и есть исходный код OSS, который я могу и не могу использовать, работая в определенной компании над определенным проектом. Я с готовностью уважаю и использую лицензии как на работе, так и в своей собственной работе. В данном случае я скопировал код GPL2 , что было бы совершенно нормально, если бы я включил копию лицензии в свой проект и опубликовал исходный код. Так совпало, что оба они верны с моим проектом. Впрочем, универу все равно.
@TheSmartWon Академический мир построен на том, чтобы отдавать должное там, где это необходимо. Вы не присваиваете себе заслуги в чужих работах. Вот почему университет считает это важным...
@TheSmartWon Всегда будут правила использования чужого кода. Правила зависят от того, как вы используете код, а также от авторских прав и лицензий на код. При сдаче упражнения в колледже правило состоит в том, чтобы подтвердить весь код, который вы не писали.
В самом строгом случае каждый код, содержащий строку с, i++;будет плагиатом, за исключением самого первого исторического использования этой строки. Надеюсь, понятно, насколько нелепо было бы, если бы с этим обращались вот так. Должна быть четко определенная граница, но я не слышал ни о какой...
@vsz, независимое копирование не является плагиатом. Плагиат — это умышленное копирование чужой работы без надлежащей аннотации.
@vsz Использование i ++ не является плагиатом, если только оно не было плагиатом на самом деле. Центральный вопрос: «Сам ли ученик написал работу или выдал чужую работу за свою». Позиция "да, я скопировал две строчки, но это ничего страшного и как ты собираешься это доказывать?" незрело, имхо.
Если бы один из моих студентов скопировал две строки кода, которые не очень важны для его/ее работы, я бы просто проигнорировал это. Я могу полностью понять, почему студент считает это «неважным». На самом деле, я стараюсь научить своих студентов меньше цитировать , например, не писать что-то вроде «Java — это язык программирования [13]». Важно, чтобы все основные идеи (которые не являются вашими собственными) были должным образом процитированы и подтверждены, но вся эта мелочь, которая либо общеизвестна, либо понятна, если вы подумаете об этом в течение пяти минут, не нуждается в источнике.
@aeismail: мягкое наказание, примененное в этом случае, конечно, не слишком суровое. Как и в большинстве случаев, университеты слишком великодушно относятся к студентам, занимающимся плагиатом или обманом другими способами. Простое применение штрафа на основе текущего задания вместо того, чтобы давать отказ по всему модулю, является примерно таким же мягким, как и должно быть наказание за плагиат.
@TheSmartWon: GPL2 требует цитирования (то есть, когда говорится, что вы должны выпустить свою производную работу под той же лицензией, это означает не «свежую копию лицензии GPL2 от FSF», а «лицензию, которую вы получили с кодом которую вы использовали, включая идентификацию автора») В GPL есть несколько правил, касающихся редактирования списка авторов при выпуске производной работы — вы не можете оставить ее в покое (что перекладывает вину за ваши ошибки на первоначальных авторов), и вы можете t удалять людей из него (что лишает первоначальных авторов кредита на их работу). Вы действительно должны прочитать лицензию.

Вопросы, которые вам нужно задать себе:

  • Вы ссылались на свои источники?

Хотя тема плагиата затрагивает разные области, не все области одинаковы. Написать программу — это не то же самое, что написать эссе. Хотя оба имеют схожие компоненты мышления, грамматика = табуляции/пробелы, существительные = объекты, предлоги = указатели и т. д. Функционально они разные. Как часть вашего задания, вы упомянули, что вы получили разделы кода из библиотеки с открытым исходным кодом? Даже если это не было формальной цитатой, то, возможно, в комментариях, ссылающихся на библиотеку?

  • Сколькими способами человек может реально достичь поставленной цели?

Если задача состояла в том, чтобы суммировать список целых чисел. Было бы плагиатом, если бы код 10 программистов использовал сумму (объект)?

общий алгоритм цепочки, который я могу подробно объяснить

Здесь вам нужно доказать, что есть момент, когда данный фрагмент кода стал общей информацией, но вам нужно продемонстрировать, что он на самом деле является общим. У неспециалиста не будет достаточных знаний, чтобы предположить, что то, что вы говорите, верно. Вы должны были бы привести примеры. (Вспомните Hello World, кто на самом деле «владеет» им?)

IANAL, но может показаться, что сам фактический закон сложен.

Более 30% класса были замечены в нарушениях академической честности в проектах в течение семестра, и только что получивший диплом профессор, похоже, не считает себя или свои задания проблемой.

Профессор компьютерных наук не является юристом, но он или она, безусловно, способны разбираться в вопросах компьютерных наук и задавать себе вопросы о наличии злого умысла. Если заявления о плагиате могут быть рассмотрены с помощью простого документа, в котором вы цитируете свои источники (библиотеки, проекты с открытым исходным кодом, репозитории github), то претензии должны быть отклонены.

Знания и обучение не возникают в вакууме.


Спасибо за это. Как я уже говорил, цитирование кода мне чуждо (а я программирую с 8 лет), и я НЕ цитировал (но ДОЛЖЕН) цитировать эти строки. Однако забыть процитировать две строчки и совершить плагиат по всему проекту — это две разные вещи, особенно в проекте такого масштаба. Как бы вы поступили с этим?

Вы приводите аргумент, что текущие тесты для определения плагиата (например, на английском языке) плохо работают, когда дело доходит до программирования и написания сценариев, цитирование и документирование ваших источников функционально отличается. В эссе цитирование должно продемонстрировать, откуда вы взяли идею. В программе это документирование того, как фрагмент кода поможет вам достичь ваших целей. Цель меняется с «воздать должное там, где это необходимо» на «как это поможет и что это даст».

Имея это в виду, посмотрите на «hello world». Это общеизвестное введение в языки программирования. Но опытному программисту не нужно «цитировать», чтобы понять. Он стал «общим» для всех языков. Однако конкретный компилятор на C, который позволит ему управлять манипулятором, недостаточно распространен, чтобы опытный (независимо от языка) программист мог легко его распознать, поэтому необходима документация. Однако в мире Java от вас будет зависеть, продемонстрируете ли вы, что ваш код будет достаточно «общим», чтобы не считаться требующим цитирования.

Что касается самого дела, вы можете аргументировать, что ваши действия не соответствуют традиционным определениям и тесту на плагиат. Но не ожидайте, что ваша аудитория (коллеги по работе) поймет, учитывая суровость и полномочия истца (вашего профессора). Другим способом было бы возразить, что суровость наказания -100% не соответствует масштабам предполагаемого плагиата. Утверждается, а не доказано. Пока не будет вынесено окончательное решение, оно открыто для обсуждения.

В случае отказа студента в одностороннем порядке на основании плагиата следует и следует обратиться к «высшему авторитету» или, по крайней мере, к рассмотрению группой знающих людей (а не непрофессионалов). Вы заявили, что этот класс имеет (на мой взгляд, огромный) процент заявлений о плагиате. Хотя у меня нет статистики для подтверждения моего заявления, 30% смехотворно много. В моей академической карьере плагиат был РЕДКИМ явлением. Таким образом, еще один момент, который вы можете сделать, заключается в том, неправильно ли профессор применяет концепцию традиционного плагиата к области, в которой она принципиально отличается.

Еще один аргумент, который вы можете привести, заключается в том, что цитирование кода никогда не преподавалось/не подчеркивалось/не ожидалось профессором в классе. Раньше вас учили, что такое плагиат, скорее всего, когда дело доходило до написания эссе, но никогда не учили, как его применять в кодировании. Хотя в этом аргументе может отсутствовать одна или две ноги (особенно в сфере того, что вы уже должны знать), но как было бы разумно привлечь вас к ответственности за то, на что вас никогда не учили обращать внимание?


Спасибо, хороший повод поднять. Он просто использует MOSS из Стэнфорда, как я упоминал в ОП. Я не знаю его предела процентного сходства, прежде чем он обвиняет людей.

Детектор плагиата, подобный этому, является Инструментом для подтверждения того, что X был плагиатом, одним из многих инструментов. Это ни в коем случае не окончательный тест для определения плагиата.

Например, сделайте анализ дыхания на вождение в нетрезвом состоянии, если я съел семена мака и дал положительный результат, были бы смягчающие факторы ? Если все, что ваш профессор использует для определения плагиата, — это инструмент, спросите, могут ли инструменты быть ошибочными.

Хотя это больше риторика и логика, чем программирование, я уверен, что никто никогда не может утверждать, что программа идеальна. (Кроме COBOL, потому что он на 100% идеален). Итак, если это действительно единственная метрика, которую использует ваш профессор, какова вероятность ложных срабатываний ? Будет ли несправедливо наказывать студентов, если программа определит, что они жульничали?

С учетом сказанного, прочитайте свой справочник для студентов, если у вас есть возможность иметь научного консультанта в процессе. Также обратитесь в службу омбудсмена, если она есть в вашей школе. Этот офис может рассматривать подобные вопросы в качестве арбитра, если это разрешено учреждением.

На мой взгляд, группа однокурсников (без юридического образования или образования в области программирования) не лучше всего подходит для определения того, имел ли место программный плагиат.


Уточните, а -100% на самом деле 0%? Или ваш профессор не только дает вам 0% за задание, но и дополнительно штрафует вас на дополнительную сумму? Т.е. A+B+C=100 (A=20,B=20,C=60), 0% на A будет означать всего 80%, -100% на A будет означать всего 40%. - Синяя птица

Кроме того, он штрафует меня на дополнительную сумму. Я не получил бы ноль за проект (что могла позволить моя оценка), но на самом деле моя общая оценка пострадала БОЛЬШЕ, чем 7% стоимости проекта. –TheSmartWon

Коварная вещь здесь... (учитывая обновление), если совет примет решение в вашу пользу, это не означает, что профессор будет относиться к вам так же, как к другим студентам, продвигающимся вперед. Вы можете оказаться под еще более пристальным вниманием.


@user2264247 user2264247 Сегодня он смотрел со мной на MOSS около 5 минут (именно то, что я разместил в OP), и он сосредоточился только на этой хеш-функции. Он даже не знал, что делает эта функция до того, как мы поговорили, так что я не думаю, что он предварительно просматривал ее. Он и его коллега (не знаю, почему она была в комнате) заявили, что из-за того, что я скопировал две строки, вся моя программа виновна в плагиате, и что они обвинят меня. Они действительно, казалось, не думали дважды или не заботились об этом, вероятно, из-за большого количества дел, через которые они проходят. – TheSmartWon

@FrankFYC Этот коллега и он также вместе публикуют статьи и проводят сопутствующие курсы. Они хорошие друзья. Это просто его имя обвиняет меня в "отчете о нарушении честности", но я обязательно подниму этот вопрос. Я понятия не имею, что она делала в комнате, все, что она сделала, это быстро отклонила все мои аргументы, которые в противном случае мой профессор мог бы выслушать . Ей доставляло удовольствие доказывать мою неправоту по каждому пункту, который я поднимал, это было своего рода садизмом. Я был как очередное насекомое, запутавшееся в их паутине! – TheSmartWon

Если бы это были Соединенные Штаты. Почитайте о ФЕРПА . Я не эксперт, но полагаю, что если бы ваш профессор позволил другому преподавателю увидеть ваши оценки, это было бы нарушением. Это может быть актом, который взорвется им в лицо. Если вы находитесь в США, убедитесь, что оба профессора находились в одной комнате с вами, когда вы обсуждали доклад.

См. ответ aeismail на вопрос .

Учитывая количество других дел, предположили бы вы, что другой профессор тоже участвовал в этих делах? Например, другой профессор был посвящен в оценку другого студента?

Они могут сколько угодно отрицать это, но если более одного студента заявят, что оба профессора были в комнате, это будет фактически групповым иском (ха, простите за каламбур).

Задокументируйте все и назначьте встречу с координатором FERPA вашего университета (например, отдел, созданный для приема жалоб FERPA).

Спасибо за это. Как я уже говорил, цитирование кода мне чуждо (а я программирую с 8 лет), и я НЕ цитировал (но ДОЛЖЕН) цитировать эти строки. Однако забыть процитировать две строчки и совершить плагиат по всему проекту — это две разные вещи, особенно в проекте такого масштаба. Как бы вы поступили с этим?
Вы приводите аргумент, что современные тесты для определения плагиата (например, в английском языке) плохо работают, когда речь идет о программировании и написании сценариев. Степень документирования функционально различна. В эссе цитирование должно продемонстрировать, откуда вы взяли идею. В программе это документирование того, как фрагмент кода поможет вам достичь ваших целей. Цель меняется с «воздать должное там, где это необходимо» на «как это поможет».
Имея это в виду, посмотрите на «hello world». Это общеизвестное введение в языки программирования. Но опытному программисту не нужно «цитировать», чтобы понять. Он стал «общим» для всех языков. Однако конкретный компилятор на C, который позволит ему управлять манипулятором, недостаточно распространен , чтобы опытный (независимо от языка) программист мог легко его распознать, поэтому необходима документация.
Что касается самого дела, вы можете аргументировать, что ваши действия не соответствуют традиционным определениям и тесту на плагиат. Но не ожидайте, что ваша аудитория (коллеги по работе) поймет, учитывая суровость и полномочия истца (вашего профессора). Другим способом было бы возразить, что суровость наказания -100% не соответствует масштабам предполагаемого плагиата. Утверждается, а не доказано.
В случае отказа студента в одностороннем порядке на основании плагиата следует и следует обратиться к «высшему авторитету» или, по крайней мере, к рассмотрению группой знающих людей (а не непрофессионалов). Вы заявили, что этот класс имеет (на мой взгляд, огромный) процент заявлений о плагиате. Хотя у меня нет статистики для подтверждения моего заявления, 30% смехотворно много. В моей академической карьере плагиат был РЕДКИМ явлением. Таким образом, еще один момент, который вы можете сделать, заключается в том, неправильно ли профессор применяет концепцию традиционного плагиата к области, в которой она принципиально отличается.
Спасибо, хороший повод поднять. Он просто использует MOSS из Стэнфорда, как я упоминал в ОП. Я не знаю его предела процентного сходства, прежде чем он обвиняет людей.
Ваш профессор назвал более конкретные причины, по которым вас обвинили в плагиате? Из предоставленной вами ссылки: «В частности, неправильно использовать Moss, чтобы полагаться исключительно на оценки сходства. […] Но оценки, безусловно, не являются доказательством плагиата. Кто-то все равно должен посмотреть код».
Скопированная хэш-функция кажется мне единственным проклятием, но это буквально 2 строки фактического кода, выполняющие чисто математическую функцию. Если ваш плагиат сравнивают с эссе, это все равно, что забыть процитировать одну-единственную цитату во всем эссе. В своей фактической защите вы можете полагаться на невиновность до тех пор, пока вина не будет доказана, и не ссылаться на эти контраргументы, если только он на самом деле не укажет на них как на причину вашей вины. (т.е. гашиш может остаться незамеченным, так что нет причин подливать масло в огонь). Он также может плохо выглядеть, если непреднамеренно признает, что рассматривает MOSS как доказательство.
@user2264247 user2264247 Сегодня он смотрел со мной на MOSS около 5 минут (именно то, что я разместил в OP), и он сосредоточился только на этой хэш-функции. Он даже не знал, что делает эта функция до того, как мы поговорили, так что я не думаю, что он предварительно просматривал ее. Он и его коллега (не знаю, почему она была в комнате) заявили, что из-за того, что я скопировал две строки, вся моя программа виновна в плагиате, и что они обвинят меня. Они действительно, казалось, не думали дважды или не заботились об этом, вероятно, из-за большого количества дел, через которые они проходят.
Да, бибунал (трибунал из двух человек) на самом деле не обязательно беспристрастный судья. Определенно есть что отметить.
@FrankFYC Этот коллега и он также вместе публикуют статьи и проводят сопутствующие курсы. Они хорошие друзья. Это просто его имя обвиняет меня в "отчете о нарушении честности", но я обязательно подниму этот вопрос. Я понятия не имею, что она делала в комнате, все, что она сделала, это быстро отвергла все мои аргументы, которые в противном случае мой профессор мог бы выслушать. Ей доставляло удовольствие доказывать мою неправоту по каждому пункту, который я поднимал, это было своего рода садизмом. Я был как очередное насекомое, запутавшееся в их паутине!
@FrankFYC, чтобы ответить на ваше последнее редактирование, правление должно решить мое наказание. Меня могут оштрафовать вплоть до провала курса или вообще отказаться от претензий.
Есть ли у профессора апелляция на решение совета?
Кроме того, какая у вас страна?
@FrankFYC Боже, спасибо за помощь. Я в США, и я не уверен, что роль профессора продвигается вперед. Я пересматриваю это сейчас. Все, что я знаю, это то, что он должен представить доказательства (первый MOSS, на который я ссылаюсь) в отдел поведения студентов, и что через два дня они пришлют мне электронное письмо с подробным описанием процесса.
@FrankFYC Я только что прочитал обзор процесса, через который он прошел. Интересно, что на этапе встречи говорится: «Не обязательно иметь с собой в качестве свидетеля другого преподавателя или сотрудника». Его часть отчета, кажется, заканчивается после того, как он подает документы в офис, и офис обрабатывает их оттуда, я полагаю.
Не обязательно =/= вам нельзя . Можно, и я очень рекомендую. Найдите доверенного преподавателя, который был бы готов поручиться за вас. Что касается того факта, что вы находитесь в США, поздравляю, теперь у вас есть возможное нарушение FERPA данным профессором.

Возможно, вы захотите отозвать свою апелляцию (если сможете)

На первый взгляд ваш аргумент выглядит вполне разумным. То есть, если вы скопировали две строки кода (при условии, что это разрешено), но просто не включили цитату или забыли удалить ее (как вы утверждали), то это можно было бы списать на честную ошибку, на -par с опечаткой. Такая ошибка была бы досадной, но вряд ли заслуживала серьезного наказания.

Однако, как отмечали другие, при более внимательном рассмотрении кода создается впечатление, что вы полностью скопировали исходный код, а затем изо всех сил пытались скрыть этот факт. Это заставляет всякое сочувствие исчезнуть; во всяком случае, вы можете слишком легко отделаться.

Но тогда есть ваша апелляция. Сама апелляция, похоже, основана на нечестной предпосылке, как и этот вопрос. Похоже, вы лжете совету чести!

Такая ложь, казалось бы, является основанием для дальнейшего наказания. То есть, сначала был обман, на серьезность которого вы сейчас обратили внимание, а потом еще явно мошенническая защита.

Я не знаю, что тебе сказать. С одной стороны, это довольно грубо, и было бы лучше, если бы вы усвоили урок сейчас. Но в качестве ответа на этот вопрос, предполагая, что вы пытаетесь свести к минимуму наказание, может показаться, что вы можете отказаться от апелляции и оставить все в покое, а не рисковать сделать их хуже.

Ссылка: О праве не свидетельствовать против себя

В американской правовой системе иногда считается, что подсудимые могут заявить о своей невиновности без дальнейшего наказания, если это утверждение впоследствии окажется ложным. Это следует из Пятой поправки к Конституции США , которая гарантирует защиту от самообвинения.

Самое забавное в этом то, что если вы смотрите много сериалов типа «Закон и порядок» (как это делают многие американцы), вы можете привыкнуть к мысли, что подсудимые могут лгать о своей невиновности без наказания, что может быть быть склонным обращаться к другим судебным инстанциям, например, к пересмотру совета чести.

Дело в том, что советы чести — это не суды; право не свидетельствовать против себя не применяется. Так что, если вы лжете в свою защиту совету чести, вы все равно лжете тем людям, которые будут судить вас именно за этот проступок.

Редактировать: Пошел проверить себя по этому вопросу, и, похоже, Верховный суд постановил, что ложь в свою защиту может увеличить приговор:

Сегодня Верховный суд единогласно постановил, что обвиняемые по уголовным делам, которые отстаивают свою позицию и дают ложные показания в свою защиту, могут по конституции быть подвергнуты дополнительному тюремному заключению за воспрепятствование правосудию.

Это решение отменило решение федерального апелляционного суда в Ричмонде, который в 1991 году постановил, что Конституция запрещает судьям выносить дополнительный приговор в соответствии с федеральными правилами в качестве наказания за «неверное отрицание вины под присягой».

- «Суд говорит, что ложные показания могут привести к более длительному приговору» , NYTimes (1993).

Таким образом, судя по всему, подсудимые могут быть наказаны за ложь в свою защиту даже в американских судах.

Может быть не так много разумных алгоритмов, которые реализуют цепочку, но есть буквально миллиарды возможных 32-битных алгоритмов хеширования. Нет смысла утверждать, что один из них является «общеизвестным», или что он выпущен под лицензией GPL, или что вы собирались его удалить. Если бы вы удалили его, ваше дело выглядело бы совершенно по-другому, и я бы сказал, что вы должны заявлять о независимом дублировании. В вашем нынешнем положении я не думаю, что вы сможете убедить кого-либо, что вы выбрали один и тот же алгоритм хеширования независимо от OpenJDK.

Так что я считаю, что лучший вариант для вас — признать правонарушение, а затем заявить, что объем действительно плагиатного кода относительно невелик, а наказание, которое хочет назначить ваш профессор, несоразмерно.

У меня есть опыт преподавания (и борьбы с плагиатом) и патентования программного обеспечения/судебных разбирательств.

Я оценивал группы домашних заданий, показывая одну и ту же ошибку или одно и то же несовершенство. Я видел студентов, которые не могли запустить свою IDE, придумывая краткие и опытные решения домашних заданий, где все переменные имели такие имена, как «theCounter», «variableA» и «myself», но в остальном их автор выглядел так, будто уже имел 10 лет опыта работы в этой области, и явно не нуждается в степени бакалавра.

Дело о патенте на программное обеспечение может быть сведено к доказательству того, что одна строка, например «x = 0», была плагиатом. Это включает в себя доказательство мотива, людей (тот факт, что компания А привлекла людей из компании Б) и состояние дел на момент предполагаемого плагиата (а не сейчас, когда предлагаемый подход очевиден для всех). Испытания патентов на программы — это не бесплодные дискуссии о том, как алгоритм Смита-Уотермана работает с кодом истца и ответчика.

В вашем случае кажется, что вы хотя бы «просмотрели» код OpenJDK, прежде чем запускать свой. Неопровержимым доказательством является хеш-функция: вероятность ее случайного воспроизведения, согласно г-ну Дейте и C-3PO, составляет один к 67 триллионам миллиардов. Далее ясно, что вы искали не хэш-функцию, а реализацию хэш-карты. Поиск «хеш-функции для строк» ​​или «хеш-функции для строк java» не дает результата из OpenJDK.

Как только вы увидели реализацию hashMap в OpenJDK, проблема сразу же стала очевидной. Из всех возможных способов приблизиться к hashMap, сознательному или нет, вы выбрали тот, что от OpenJDK, потому что вы были ужасно предвзяты.

Ваши комментарии к коду бесполезны. Комментарий «длина» как «длина» доказывает, что вы не поняли проблему, и комментарий здесь был предназначен просто для выполнения требования оценки. Вы тратите время классника. Правильным будет: "хэш = хэш искомого элемента", "Длина: размер хеш-таблицы", "возвращает позицию в хеш-таблице указанной длины для элемента хеша h. Он никогда не превышает длину минус один". Кроме того, вы говорите, что «get возвращает значение по индексу», что в корне неверно для хэш-карты. Get вернет значение ключа. Смешивание ключа и индекса является "тяжким преступлением", если вы создаете структуры данных.

Мое суждение здесь было бы «виновен по обвинению». Вы не тратили время на обдумывание решения, а взяли существующее решение и, вероятно, внедрили его самостоятельно. Это разрушило цель домашнего задания, которое должно было заставить вас думать о структурах данных. Ссылка на источник OpenJDK только сделает вашу вину более очевидной (классический случай самооговора во время защиты). Это как если бы вам дали математическую задачу, и в итоге вы цитируете книгу и страницу, показывающую решение задачи. Вы проделали хорошую работу по поиску, но цель проблемы состояла в том, чтобы заставить вас решить ее.

Это отличный ответ.

Другие ответы касались философских / моральных вопросов, таких как «Это плагиат?» "Это неправильно?" и т. д. Но - я бы сказал, что вы должны сосредоточиться на практической проблеме, а именно:

Я не знаю, как защитить все это дело перед Советом по поведению студентов.

Так что есть с чем спорить...


Во-первых, ознакомьтесь с юридически значимыми документами:

  • Студенческие дисциплинарные правила
  • Процедуры студенческого совета
  • Списки внешних законов, которые официально применяются
  • Точное изложение обвинений против вас
  • Прецедент - прошлые решения студенческого совета по таким вопросам.
  • Протоколы сессий прошлых студенческих сессий правления (если они доступны, что может быть не так).

Затем определите, разрешено ли вам, и хорошо ли это, чтобы вас представлял кто-то: Юрист; студент юридического факультета; член факультета; член студенческого совета и т. д. Если это доступно для вас, вы должны по крайней мере проконсультироваться с одним (даже если вы в конечном итоге не приведете их с собой) - у них наверняка больше опыта, чем у вас.

Теперь определите, действительно ли вы хотите утверждать, что «эта часть того, что я скопировал, не является плагиатом». Может быть, вы могли бы привести этот аргумент, я не знаю. Даже неспециалистам - если у вас есть достаточно времени (которого у вас может не быть), вы можете объяснить, как программы компилируются из исходного кода и как какой-то код на самом деле не используется. Вы могли бы привести примеры того, что кажется плагиатом, но на самом деле это почти идентичный код, написанный независимо друг от друга разными людьми.

Честно говоря, я сомневаюсь, что это продвинет вас далеко вперед, учитывая обстоятельства. Даже если вы теоретически правы (вопрос, который я не комментирую), и даже если бы вы могли объяснить это правлению - оно может не захотеть услышать такой аргумент.

С другой стороны, я бы предположил (безосновательно!), что более убедительным аргументом могло бы быть что-то вроде (краткое резюме):

Я очень сожалею о содеянном и не отрицаю, что это было недопустимо, неуместно и аморально.
У меня возник соблазн заняться плагиатом из-за ABC, который, не оправдывая моего поведения, также привел к тому, что 30% класса поддались искушению заняться плагиатом, предполагая объективную проблему в дополнение к моей личной неудаче.
Я загладил свою вину способами XYZ.
В случаях C1 и C2, которые, как я утверждаю, сопоставимы, штраф был намного меньше.
Наконец, я хотел бы, чтобы правление приняло во внимание мои личные обстоятельства DEF при рассмотрении этого дела.
Я буду соблюдать любое решение правления.

и оставьте это на этом.

Вопрос в заголовке спрашивает: «Это плагиат?» а не "как мне защищать свое дело?" Проблема, имхо, в том, что студент не принимает тот факт, что это был плагиат, и склонен отмахиваться от него как от «неважного». Эту позицию, имхо, защищать не стоит.
@DmitrySavostyanov: ОП задал несколько вопросов, и вопрос в заголовке не единственный. Я согласен, он, кажется, пытается отмахнуться от того, что он сделал, как от «не большого дела», но у него есть много времени, чтобы бороться с моральной дилеммой, и всего один месяц, чтобы подготовиться к слушанию. Я утверждаю, что это должно быть в центре внимания. Надеюсь, это также поможет ему перестать танцевать вокруг того, что он сделал.

Вы обязательно должны опротестовать предлагаемое наказание, потому что многие учреждения не допускают такого наказания, какое хочет назначить ваш профессор. (Другими словами, ваш преподаватель не может поставить вам оценку -100 % или оценку ниже нуля за определенную часть вашей оценки.)

Что касается копирования кода как плагиата, то это гораздо более острое утверждение. Использование чужого кода — это проблема, но если действительно нет другого способа что-то сделать, то как вы заявляете о плагиате? Плагиат не распространяется на «очевидные» утверждения. Например, это не плагиат, если два учебника по математическому анализу решают интеграл, используя ряд уравнений одним и тем же способом, потому что, по сути, это единственный способ, которым вы можете это сделать. С другой стороны, если вы напишете вокруг него кучу одинакового текста, то вы совершили плагиат.

Я не думаю, что «[в большинстве учреждений] ваш преподаватель не может поставить вам оценку -100% или любую оценку ниже нуля за данную часть вашей оценки» на самом деле верно. Я не думаю, что штраф за плагиат может быть больше, чем «стоит» задание.
Правила «большинства учреждений» не имеют значения. В данном случае имеют значение только правила этого учреждения. Сотрудники обычно осведомлены о правилах, но если это конкретное наказание выходит за рамки допустимого, оно может быть обжаловано (но не само дело о плагиате).
Я изменил «большинство» на «многие», но это, безусловно, стоит проверить. Я знаю, что мне предложили значительно снизить штрафы, и я даже не мог поставить «0» на экзамене из-за списывания.
@DmitrySavostyanov: Я знаю, что политика других учреждений не имеет значения, но я сообщаю ОП причину, по которой следует рассмотреть апелляцию, даже если он признался в плагиате. (И он может возразить, что плагиат, конечно, не такой серьезный, как утверждается, что может иметь значение).
@aeismail: Мне кажется, что ваш последний комментарий выше был бы лучшим ответом, чем ваш ответ. Если наказание, назначенное инструктором, превышает то, что разрешено политикой учреждения, то ОП, безусловно, должен возражать против него. Если нет (а они обязательно должны выяснить это заранее), то все, что они могут возразить, это то, что это несоразмерно тяжести правонарушения, которое в любом случае будет в конечном итоге субъективным вызовом.

Плагиат — сложная тема в компьютерных науках, так как существует лишь ограниченное количество фрагментов кода, приводящих к одному и тому же результату, и только один из них можно считать оптимальным решением.

На самом деле вы скопировали код из библиотек Java, и сам код, и имена переменных предполагают это. Поэтому вашим долгом было процитировать это должным образом. В этой строгой точке зрения ваш профессор прав, и, вероятно, он прав и в других упомянутых вами случаях. Если многие люди делают ошибки, это все равно проблема того, кто делает ошибку, а не тот, кто ее исправляет.

Если это этично, то это совсем другая тема.

При программировании сложных функций рекомендуется не изобретать велосипед заново , а вместо этого использовать существующий, хорошо протестированный код других разработчиков. Однако, как следует из связанной статьи, «часто необходимо заново изобретать колесо, чтобы обойти несовместимости лицензирования программного обеспечения».

Если у вас был конкретный приказ не копировать существующий код, и вы не выполнили этот приказ, проблема на вашей стороне. Патентование программного обеспечения является серьезной проблемой в Соединенных Штатах, несколько небольших компаний обанкротились из-за этого, более крупные компании владеют определенными патентами только для того, чтобы использовать их для подачи встречного иска в случае подачи иска (см. Apple против Samsung). По сути, патенты на программы превратились в своего рода оружие, которое можно использовать для устранения нежелательной конкуренции с рынка. Поэтому для любого разработчика программного обеспечения (в вашей стране) важно уметь обнаруживать и устранять такие проблемы с лицензированием.

Я не знаю намерений вашего профессора, но вполне возможно, что он добавил этот пункт специально, потому что он знает о последствиях «кражи кода», и его резкая реакция — это способ научить вас избегать этих проблем. в ситуациях, когда это было бы действительно больно.

В других, не столь ограниченных частях мира, патенты на программы или «плагиат», как в вашем случае, представляют гораздо меньшую проблему. Это означает, что в других странах вашу работу могли расценить по-другому, возможно, вам даже снизили баллы за то, что вы не копируете существующий код (ненужное изобретение велосипеда). Но вы не живете в «других странах», так что с этической точки зрения ваш профессор может быть резким, но он все же прав.