盗用しないで自分の「言葉」で安全にコードを書くにはどうすればよいですか?


18

研究論文の執筆に関しては、盗作と言い換えをかなりよく理解していますが、プログラミングのそれらの同等の分野は私には異質のようです。オンラインでトピックを調べましたが、驚くべきことに、このテーマに関する資料は予想したほど多くありません。

コードを書いて、今までに実装したことがないものを実装しなければならないときは、オンラインで例を探します。事前にドキュメントを読み通そうとしますが、従うのが難しい場合があります。したがって、それが失敗した場合、トピックをオンラインで検索し、多数の例が提示されます(誰かの個人的なブログやSOのようなQ&Aサイトなど)。現在、通常5〜10行のコードが表示されています。これを自分のコードにコピーアンドペーストすることはありませんが、それをそのままコピーダウンすることを心配しています。特定のコードを言い換えることは、特にそうする方法が非常に多くある場合は難しいと思います。変数の名前を変更したり、フォーマットを変更したりするようにします-しかし、これで十分ですか?

私は常にこのトピックを理解したいと思っていましたが、今では新しい言語で作業しており、企業環境では特に適切だと思います。誰かが説明したり、他の場所で良い説明にリンクしたりできるなら、私はそれを大いに感謝します!

tl; dr 盗用を避けるために、オンラインで見つけた5〜10個のコードスニペットを変更し、書き直さなければならないことがわかりません。変更できるものがほとんどない場合はどうなりますか?


盗作を避けることを積極的に考えなければならない場合、システムに何か問題があります。もちろん、コピーするだけではいけませんが、それについて考える必要はありません。
アント

1
@ anto、OPの意味を理解していると思います。OPはどこかからいくつかのコードを取得し、それを使用するか、または彼/彼女が行っている作業と統合したいと考えています。私の提案は、OPが他の場所で得られたものの所有権を信頼できるものにするために、(1)それを学習/理解し、(2)機能的に(リファクタリング)および表面的に(より良く、より一貫したシンボル名)コードを改善することです(3)自分のプロジェクト内で実行します。。私は私のコードは私ですマックスアルゴリズムをスライディングこの速い(O(LOG2(N))でこれをやったが、私はどこかからALGを学んだ。
ロバート・ブリストウ・ジョンソン

質問はより広範であると理解していますが、このリンクは関連している可能性があります:フォーラムで見つけたコードを合法的に使用できますか?
ジョン・ウー

回答:


30

盗作は著作権侵害と同じではありません。 盗作は、他人の仕事をあなた自身のものとして偽装しています。盗用せずに著作権侵害を犯すことは可能です:

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

そして著作権を侵害することなく盗作を犯す可能性があります。

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

(パブリックドメインサーバーレスSQLデータベースエンジンから解除)

盗作を避けるために、情報源を引用することを検討できます。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)

4

チューター/チュートリアルを使用することは盗作ではありません。ここで他の人の答えをコピーするとしたら、それは盗作です。私がそれにリンクして、引用を示していれば、それは盗作ではないでしょう。

ソースが(再)使用(ライセンス、書面による許可)を許可していることを確認してください。SO上のすべてのものは暗黙的にパブドメイン(またはクリエイティブコモンズ、共有など)になるか、実際には機能しないと思います(チェックする必要があります)。(使用できないのは、使用できないことがわかっている回答を得るためです)

要するに、学問の分野で定義が大きく異なる場合を除き、盗作をそれほどよく理解していないのではないかと感じています。

私の経験則:とにかくあなたが得ていた結果を加速するだけのすべての答えを使用してください。ただし、魔法のように機能するサンプルを見つけたとしても、倫理ラインをどのように(またはなぜ)越えているのかが本当にわからない場合。

小さなスニペットを修正することに関して、私は逆を主張します。再編成せずに小さなスニペットをコードにどのように統合しますか。それが収まる可能性はかなり小さく、私のコードがどのように見えるべきかについてかなり強い意見があります。たぶん、あなたはその「意見」(読み:経験)に欠けているので、自信を得るためにもっとコードを書くことをお勧めします。経験を積むもう1つの手法は、回答を読んでから、サンプルコードにアクセスせずに回答を適用することです。あなたは間違いを犯しますが、次のことも十分に学びます。

  • 次回それを再現する
  • コードを理解しているかどうかについて自信を得る
  • あなた自身について気分が良い

HTCから送信。タイプミスをお楽しみください


SO投稿はCC-BY-SA 3.0(ページの一番下までスクロール)としてライセンスされているため、誰かがあなたの問題の完全な解決策を書き上げた場合、著者とコードは同じライセンスの下で公開されます(またはまったく公開されません)。しかし、あなたが言うように、そもそもそのようなコピー&ペーストのコーディングは悪い習慣です。
5gon12eder

4

盗作を避けるためだけにコードを変更し、書き直した場合、盗作の検出のみを回避しようとします。それはすべて、コピーするコードに依存します。可能性の1つは、特定のコードスニペットを、創造的な独創性が限られた有用なガイドとして、または誰も作者を主張できない一般的な慣行として評価することです。他の可能性は、信用を与えるのに十分に重要であると評価することです。単純なコードのコメントから、元のコードの公式のフォーク/ブランチにするまで、いくつかのレベルでクレジットを与えることができます。要約すると、何ができるかということではなく、コードをどのように独創的に考え、必要に応じてクレジットを与えるかについてです。盗作はコピーではなく、信用を与えずにコピーすることです。


1

問題を解決する方法を見つけるために、見つけられるあらゆるソースを使用することをお勧めします。そして、それを理解したら、これらのソースをすべて画面から削除し、独自のソリューションを作成します。

写真の記憶があり、既存の解決策の1つをコピーしない限り、これは盗作や著作権侵害の問題を解決します。また、問題を実際に理解するように強制することにより、役立ちます。

さらに少しステップを進めることができます。インターネットで見つけたほとんどのソリューションには、何らかの欠陥があります。インターネット上にあるからといって、完璧だとは限りません。まったく正しくないものを見つけて修正します。そうすれば、あなたはより良い理解を得て、より良いコードを持ち、著作権侵害や盗作の非難を確実に避けることができます。


0

学術環境でコーディングしていない場合、盗作を心配するのはなぜですか?プロフェッショナルな環境では、社内の他の従業員を盗用した場合にのみ問題になります。盗作は、誰が信用を得るかについてです。いずれにせよ、盗作の解決策は簡単です-あなたが取るものは何でも、元の作者に信用を与えてください。Webページからのものである場合は、URLを含めます。質問がある場合、元のソースを再度検索できる可能性があるため、これは有益です。

あなたの質問が本当に著作権侵害に関するものである場合、著作権は機能的な側面をカバーしていないことに注意してください。非常に多数の同等に有用な選択肢がある創造的な選択肢のみを対象としています。機能を壊さずにコードを簡単に変更できない場合、それは著作権で保護されているものではありません(合併またはシーンフェアルール)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.