我该如何用自己的“话语”安全地编写代码而不抄袭?


18

在撰写研究论文时,我非常了解窃和措辞,但编程方面的这些等效领域对我来说似乎很陌生。我在网上查找了这些主题,令人惊讶的是,关于该主题的材料并不像人们期望的那么多。

在编写代码并必须实现以前从未实现的功能时,我将上网查找示例。我尝试先通读文档,但是有时我觉得很难遵循。因此,如果失败了,我将在网上搜索该主题,并提供许多示例(无论它们是在某个人的个人博客上还是诸如SO这样的问答网站)上。现在,通常为我提供5-10行代码。我已经并将永远不会将其复制并粘贴到自己的代码中,但是我仍然担心会逐字复制。我发现很难重新编写某些代码,尤其是在只有这么多种方法的情况下。我确保重命名变量,更改格式等-这就足够了吗?

我一直想了解这个主题,但是现在我正在使用一种新的语言,并且在公司环境中,我认为它特别相关。如果有人可以在其他地方解释或链接到一个好的解释,我将不胜感激!

tl;博士, 我不知道您需要更改多少内容并重新编写网上找到的5-10条代码段,以免遭到窃。如果您几乎没有改变可以怎么办?


如果您必须积极考虑避免窃,则系统存在问题。当然,您永远不应只复制某些内容,而不必考虑它。
安托

1
@anto,我想我了解OP的含义。OP已从某个地方获取了一些代码,想要使用它或将其与他/她正在做的某些工作集成。我的建议是,OP可靠地拥有在其他地方获得的东西的所有权是(1)学习/理解它,(2)在功能上(重构)和外观上改进代码(更好,更一致的符号名称),以及(3)在他/她自己的项目中运行它。。我已经(O(LOG 2(N))滑动最大算法我的代码是我的,但我从其他地方学到的ALG这个快速做到了这一点
罗伯特·布里斯托-约翰逊

尽管我理解的问题更广泛,但此链接可能是相关的:我可以合法使用在论坛上找到的代码吗?
John Wu,

Answers:


30

gi窃与版权侵权不同。 gi窃正在将别人的作品当作您自己的作品。可以在不窃的情况下侵犯版权:

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

并且有可能without窃而不会侵犯版权:

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

使用家教/教程不是窃。如果我要在这里复制别人的答案,那将是窃。如果我链接到它并显示报价,那将不是be窃。

检查您的来源是否允许(重复)使用(许可证,书面许可)。我认为(需要检查)SO上的任何内容都将隐式属于发布域(或知识共享,共享相同等),否则它实际上将无法工作。(什么使用会得到您知道无法使用的答案)

简而言之,除非您在学术领域的定义大相径庭,否则我觉得您可能不太了解窃?

我的经验法则:使用所有答案只会加速您获得的结果。但是,如果您发现一个可以神奇地起作用的示例,但是您真的不知道您如何(或为什么)越过了道德准则。

关于修改小片段的主题,我会提出相反的观点。您如何在不进行重组的情况下将小的代码片段集成到您的代码中:它将适合的机会很小,而且我对代码的外观有很强的见解。也许您缺乏那种“意见”(阅读:经验),我建议编写更多代码以增强信心。获得经验的另一种技术是阅读答案,然后在不访问任何示例代码的情况下应用它。您会犯错误,但是您还将学到足够的知识来

  • 下次再生产
  • 对您是否了解代码有信心
  • 对自己感觉良好

从我的HTC发送;请放一两个错字


这样的帖子被许可为CC-BY-SA 3.0(向下滚动到页面的最底部),因此,如果有人为您的问题写出完整的解决方案,则仅当您提及作者和您的作者时,才可以逐字复制该帖子代码以相同的许可证发布(或完全不发布)。但是正如您所说,这种复制和粘贴编码首先是不好的做法。
5gon12eder'5

4

如果仅为了避免re窃而更改并重新编写代码,则仅(尝试)避免检测到窃。这完全取决于您要复制的代码段。一种可能是将给定的代码片段视为仅是有限的创造性原创的有用指南,或者是没有人可以要求作者身份的常见实践。另一种可能性是将其重视至足以给予信誉。从简单的代码注释到使您的代码成为原始代码的正式分支/分支,您可以在几个级别上功劳。总而言之,它与您可以做什么无关,而与您考虑代码的原始性以及在需要时如何给予好评有关。抄袭不是复制,而是在没有给予信任的情况下复制。


1

我建议您使用任何可以找到的资源来找出解决问题的方法。一旦弄清楚了,就从屏幕上删除所有这些源,并编写自己的解决方案。

除非您有照片记忆并复制现有解决方案之一,否则这将解决窃和/或侵犯版权的问题。它也可以通过迫使您真正理解问题来帮助您。

您可以再走一步:在互联网上找到的大多数解决方案都有一个或另一个故障。仅仅因为它在互联网上并不意味着它是完美的。找出不太正确的地方并进行修复。你得到一个更好的理解这种方式,有更好的代码,并且绝对避免侵犯版权或剽窃的指控任何。


0

如果您不是在学术环境中编码,为什么还要担心窃?在专业环境中,只有you亵公司中的其他员工才有意义。gi窃是关于谁能获得信誉。无论如何,窃的解决方案都很简单-无论您采取什么措施,都应归功于原始作者。如果来自网页,则包括URL。这使您受益,因为如果您有任何疑问,您也许可以再次找到原始来源。

如果您的问题确实与侵犯版权有关,请记住,版权不涵盖功能方面。它仅涵盖具有大量同样有用的选择的创意选择。如果您在不破坏功能的情况下不能轻松地更改代码,那么版权保护就不算什么了(根据合并或自由裁量规则)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.