Jak bezpiecznie pisać kod własnymi „słowami” i nie plagiatować?

18

Rozumiem plagiat i parafrazę dość dobrze, jeśli chodzi o pisanie pracy badawczej, ale te równoważne obszary programowania wydają mi się obce. Przejrzałem tematy online i, co zaskakujące, nie ma na ten temat tyle materiałów, ile można by się spodziewać.

Kiedy piszę kod i muszę zaimplementować coś, czego nigdy wcześniej nie implementowałem, przejdę do trybu online, aby poszukać przykładu. Staram się wcześniej przeczytać dokumentację, ale czasem trudno mi się na nią opierać. Więc jeśli to się nie powiedzie, przeszukam temat online i przedstawię dziesiątki przykładów (czy to na czyimś osobistym blogu, czy na stronie z pytaniami i odpowiedziami takimi jak SO). Teraz zwykle otrzymuję 5-10 linii kodu. Mam i NIGDY nie kopiuję i wklejam tego do mojego własnego kodu, ale wciąż martwię się o skopiowanie go dosłownie. Trudno jest przeredagować pewien fragment kodu, zwłaszcza gdy jest na to tylko tyle sposobów. Zmieniam nazwy zmiennych, zmieniam formatowanie itp. - ale czy to wystarczy?

Zawsze chciałem zrozumieć ten temat, ale teraz, gdy pracuję z nowym językiem i w środowisku korporacyjnym, myślę, że jest on szczególnie istotny. Jeśli ktokolwiek mógłby wyjaśnić lub odnieść się do dobrego wyjaśnienia w innym miejscu, byłbym bardzo wdzięczny!

tl; dr Nie rozumiem, ile trzeba zmienić i przeredagować 5-10 fragmentów kodu znalezionych w Internecie, aby uniknąć plagiatu. Co jeśli jest bardzo niewiele, co możesz zmienić?

Ixrec
źródło
Jeśli musisz aktywnie myśleć o unikaniu plagiatu, coś jest nie tak z systemem. Jasne, nigdy nie powinieneś po prostu kopiować czegoś, ale nie powinieneś o tym myśleć.
Anto
1
@anto, chyba rozumiem, co oznacza OP. OP skądś wziął jakiś kod, chce go użyć lub zintegrować z pracą, którą wykonuje. moją sugestią, aby OP mógł w wiarygodny sposób przejąć na własność coś uzyskanego gdzie indziej, to (1) nauczyć się / zrozumieć, (2) poprawić kod zarówno funkcjonalnie (refaktoryzacja), jak i kosmetycznie (lepsze, bardziej spójne nazwy symboli) i (3) uruchomić go w ramach własnego projektu. zrobiłem to z tym szybkim (O (log2 (N)) algorytmem przesuwnym maks. mój kod jest mój, ale nauczyłem się alg gdzie indziej.
Robert Bristol-Johnson
Chociaż rozumiem, że pytanie jest szersze, ten link może być istotny: Czy mogę legalnie używać kodu znalezionego na forum?
John Wu,

Odpowiedzi:

30

Plagiat to nie to samo, co naruszenie praw autorskich. Plagiat jest przekazywaniem czyjejś pracy jako własnej. Możliwe jest popełnienie naruszenia praw autorskich bez plagiatowania:

// The following code is lifted, without permission, from Windows 2000.
// Copyright © 2000 Company-metonymous-with-Redmond.
// ...

i możliwe jest popełnienie plagiatu bez naruszenia praw autorskich:

/* I wrote this function. */
int sqlite3Strlen30(const char *z){
  const char *z2 = z;
  if( z==0 ) return 0;
  while( *z2 ){ z2++; }
  return 0x3fffffff & (int)(z2 - z);
}

(przeniesiony z bezobsługowego serwera bazy danych SQL w domenie publicznej)

Aby uniknąć plagiatu, możesz zacytować swoje źródło. Oto przykład (którego jest wiele) z PostgreSQL :

/* datebsearch()
 * Binary search -- from Knuth (6.2.1) Algorithm B.  Special case like this
 * is WAY faster than the generic bsearch().
 */
static const datetkn *
datebsearch(const char *key, const datetkn *base, int nel)
Joey Adams
źródło
4

Korzystanie z korepetytorów / tutoriali nie jest plagiatem. Gdybym tutaj skopiował czyjąś odpowiedź, byłby to plagiat. Gdybym się z tym powiązał, pokazując cytat, nie byłby to plagiat.

Sprawdź, czy twoje źródło pozwala na (ponowne) wykorzystanie (licencja, pisemne pozwolenie). Myślę, że (trzeba sprawdzić) wszystko na SO będzie domyślnie domeną pubu (lub kreatywnymi dobrami wspólnymi, dzielić się podobnymi itp.), Inaczej tak naprawdę nie będzie w stanie działać. (Po co uzyskiwać odpowiedź, o której wiesz, że nie możesz użyć)

Krótko mówiąc, wydaje mi się, że może nie rozumiesz plagiatu aż tak dobrze, chyba że definicje różnią się bardzo w dziedzinie naukowców?

Moja ogólna zasada: używaj wszystkich odpowiedzi, które i tak przyspieszają uzyskiwane wyniki. Jeśli jednak znajdziesz próbkę, która działa magicznie, ale tak naprawdę nie wiesz, jak (i ​​dlaczego) przekraczasz linię etyki.

W kwestii modyfikowania małych fragmentów argumentowałbym na odwrót; w jaki sposób zintegrowałbyś małe fragmenty w swoim kodzie bez reorganizacji: szanse, że się zmieściłyby, są dość niewielkie i mam dość silną opinię na temat tego, jak powinien wyglądać mój kod. Być może brakuje ci tej „opinii” (czytaj: doświadczenie) i sugeruję napisanie więcej kodu, aby zyskać zaufanie. Inną techniką zdobywania doświadczenia jest przeczytanie odpowiedzi, a następnie przejście i zastosowanie jej bez dostępu do żadnego przykładowego kodu . Popełnisz błędy, ale nauczysz się także wystarczająco

  • odtworzyć to następnym razem
  • uzyskaj pewność, czy rozumiesz kod
  • czuć się dobrze ze sobą

Wysłano z mojego HTC; proszę oddać literówkę lub dwie

sehe
źródło
Posty SO są licencjonowane jako CC-BY-SA 3.0 (przewiń w dół na sam dół strony), więc jeśli ktoś napisze kompletne rozwiązanie twojego problemu, możesz go skopiować dosłownie tylko wtedy, gdy wspominasz o autorze i swoim kod jest publikowany na tej samej licencji (lub w ogóle nie publikowany). Ale, jak mówisz, tego rodzaju kodowanie kopiuj i wklej to przede wszystkim zła praktyka.
5gon12eder
4

Jeśli zmienisz i przeredagujesz kod tylko w celu uniknięcia plagiatu, unikniesz tylko wykrycia plagiatu. Wszystko zależy od tego, jaki fragment kodu skopiujesz. Jedną z możliwości jest docenienie danego fragmentu kodu jako pomocnego przewodnika o ograniczonej oryginalności twórczej lub powszechnej praktyki, której nikt nie może rościć sobie prawa do autorstwa. Inną możliwością jest docenienie tego na tyle ważnego, aby dać kredyt. Możesz przypisać kredyt na kilku poziomach, od prostego komentarza kodu do uczynienia kodu oficjalnym rozwidleniem / gałęzią oryginalnego kodu. Podsumowując, mniej mówi o tym, co możesz zrobić, ale o tym, jak oryginalnie bierzesz pod uwagę kod i jak udzielasz kredytu w razie potrzeby. Plagiat to nie kopiowanie, ale kopiowanie bez uznania.

Jakob
źródło
1

Sugeruję skorzystanie ze wszystkich dostępnych źródeł, aby dowiedzieć się, jak rozwiązać problem. A kiedy już to wymyślisz, usuwasz wszystkie te źródła z ekranu i piszesz własne rozwiązanie.

Jeśli nie masz pamięci fotograficznej i nie skopiujesz jednego z istniejących rozwiązań, rozwiązuje to problem plagiatu i / lub naruszenia praw autorskich. Pomaga również, zmuszając cię do faktycznego zrozumienia problemu.

Możesz pójść o krok dalej: większość rozwiązań, które znajdziesz w Internecie, ma jedną wadę lub inną. To, że jest w Internecie, nie oznacza, że ​​jest idealny. Dowiedz się, co nie jest całkiem poprawne i napraw to. W ten sposób uzyskasz lepsze zrozumienie, lepszy kod i zdecydowanie unikniesz oskarżeń o naruszenie praw autorskich lub plagiat.

gnasher729
źródło
0

Jeśli nie kodujesz w środowisku akademickim, dlaczego miałbyś się martwić plagiatem? W środowisku zawodowym ma to znaczenie tylko wtedy, gdy plagiatujesz innych pracowników w swojej firmie. Plagiat dotyczy tego, kto zyskuje uznanie. W każdym razie rozwiązanie problemu plagiatu jest proste - cokolwiek weźmiesz, uznaj oryginalnego autora. Jeśli pochodzi ze strony internetowej, podaj adres URL. Jest to korzystne dla Ciebie, ponieważ jeśli masz jakieś pytania, być może będziesz w stanie ponownie znaleźć oryginalne źródło.

Jeśli Twoje pytanie dotyczy naruszenia praw autorskich, pamiętaj, że prawo autorskie nie obejmuje aspektów funkcjonalnych. Obejmuje tylko kreatywne wybory, w których istnieje bardzo duża liczba równie przydatnych wyborów. Jeśli nie możesz łatwo zmienić kodu bez zerwania funkcjonalności, oznacza to, że nie dotyczy to praw autorskich (zgodnie z zasadą fuzji lub scènes à faire).

David Schwartz
źródło