你最需阅读的一本编程书籍(其实编程书留下这本就够了!)
代码许可问题
在复制和粘贴代码之前,您必须确保拥有复制和粘贴该代码的合法权利。没有这种合法权利,你就会偷走其他人的知识产权。那只是懒惰。
Stack Overflow上的大多数代码都是“代码片段”。它们不符合原创性标准,因此没有版权保护。您可以自由复制和粘贴它们,而无需担心会丢失诉讼。
Stack Overflow上的一些代码比'snippets'长得多。因此,他们有资格获得版权保护。默认情况下,Stack Overflow上的所有内容(包括代码)都是根据CC-BY-SA 3.0许可证获得许可的。
建议不要在软件中使用此许可证,因此SO目前正在寻求将此许可证替换为其网站上发布的未来代码。但就目前而言,CC-BY-SA 3.0是法律。即使SO确实改变了其未来的许可政策,所有以前的代码仍将保留在CC-BY-SA 3.0下。
CC-BY-SA 3.0就像GPL 3.0一样是一个copyleft许可证。基本上,您可以使用CC-BY-SA 3.0下许可的所有代码,只要:
-
您将归因于您获得代码的网站。
-
您使用与CC-BY-SA 3.0相同的条款许可您的代码库。同样,建议不要在软件中使用CC-BY-SA 3.0,因此在CC-BY-SA 3.0下许可您的软件几乎不是首发。
但是,您可以执行一些法律向导,将您的Stack Overflow代码从丑陋的CC-BY-SA 3.0重新许可为适用于软件的适当开源许可证。这是怎么回事。
-
任何根据CC-BY-SA 3.0许可的创意作品都可以自动升级到CC-BY-SA 4.0。
-
根据Creative Commons网站的说法,CC-BY-SA 4.0兼容GPL 3.0和免费艺术许可。GPL 3.0和免费艺术许可都是左撇子许可。
有一个“代码段”无版权保护的代码,一个更大的块来区分没有真正的方法不包含版权保护(从而在CC-BY-SA 3.0许可)。您可以使用常识来判断某些代码是否有资格作为“代码段”,但如果法院对您的“代码段”的定义不同,那么您就是运气不好。
如果您正在使用许可或专有代码库,则有四种选择。
-
将代码库更改为GPL 3.0或免费艺术许可证,并轻松开始复制和粘贴代码。
-
聘请一位昂贵的律师来捍卫您使用Stack Overflow代码片段的权利......
-
希望您复制和粘贴的人对您违反CC-BY-SA 3.0许可证的行为不够全意起诉。
-
我推荐这种方法,因为其他用户绊倒你的代码库并抱怨你不遵守CC-BY-SA 3.0条款的可能性低于O'Reilly实际发布这本书的可能性。如果你非常不走运(这可能会发生),那么你可以直接道歉,然后重写有问题的代码。
-
-
...或编写自己的Stack Overflow代码的伪Clean Room实现。
这是一个循序渐进的指南:
-
写下一些关于Stack Overflow代码的注释,特别是它是如何工作的,你应该如何实现它等等。
-
关闭Web浏览器。
-
等几分钟,以免忘记密码。
-
使用笔记中的信息重新实现相关的Stack Overflow代码。
-
您现在拥有相关代码的版权...即使最终代码与原始Stack Overflow答案完全相同。由于您现在拥有此代码的版权,因此您可以将其集成到许可或专有代码库中。
这种方法比传统的“CTRL-C,CTRL-V”复制和粘贴方法慢。但是,它确实有助于您更深入地了解Stack Overflow代码。这可能会有所帮助,因为您将来可能需要维护此代码。
最后一点在本章中得出结论。某些用户可能会向其向Stack Overflow提交代码提交许可许可。在这种情况下,您可以选择遵守此许可许可的条款,而不是担心Copyleft CC-BY-SA 3.0。检查发布“代码”的用户的配置文件,以查看代码是否在其他许可证下可用。
代码归因
从Stack Overflow复制和粘贴代码时,最佳做法是提供指向您获得该代码的位置的链接。这有两个原因:
-
这个人通过给你一些有价值的代码帮助你。你应该通过给程序员在代码库中给他们永远不会看到的评论来奖励他们。
-
如果您需要稍后调试代码,请回顾一下答案。如果相关代码的作者也写了他的代码的详细解释,这非常有用。
有时,在项目过程中,原始的SO代码会被您严格修改。在这种情况下,保留归属是没有意义的,因为你彻底破坏了原作者的工作。没有理由再赞美作者了,由于你自己的修改,作者的详细解释可能无济于事。尽快从代码中删除评论。
在决定何时给予归属以及何时将其删除时,请使用您的专业判断。
请注意,虽然“代码段”通常不需要归属,但如果您遵守许可条款(默认CC-BY-SA 3.0或许可许可),则通常需要它们。
要复制什么代码?
通常,当您在Stack Overflow上搜索问题时,通常可以找到问题的答案。这并不总是一件好事。
-
Stack Overflow上的一些答案可能是完全错误的。任何人都可以回答有关Stack Overflow的问题,所以只是因为它在线并不意味着它是真的。虽然明显错误的答案可能被低估,但不是那么明显的答案可能会被高度评价。此外,在您自己尝试之前,通常无法确定相关代码是否实际编译或工作。
-
有些答案可能没有解释,只能由代码组成。虽然这对于热切的复制贴纸似乎是一个好主意,但事实并非如此。你需要知道什么代码实际上做。毕竟,您将来必须维护该代码。
-
一些答案是遗留答案。他们过去曾工作过,但现在不再是最佳实践。Stack Overflow受到“西方最快的枪”综合症的影响,无论谁首先回答这个问题,通常都会得到最多的选票,因此首先会看到。更“现代”的答案通常不会获得尽可能多的选票,而且往往会在页面底部萎缩。
这就是为什么盲目地将第一个答案复制并粘贴到Stack Overflow问题上是一个绝对可怕的想法。我做到了 它永远不会奏效。
相反,向下滚动以阅读问题的所有答案,以及对答案的所有评论。它们将为您提供更多信息和说明,以便您可以更明智地选择要复制和粘贴的代码。另外,请考虑查看Stack Overflow的侧边栏,并查看链接的问题和相关问题。
查看问题的日期及其答案也很有帮助。Stack Overflow是一个历史悠久的网站,了解内容的发布日期确实有助于了解内容是否是最新的,或者是否可能被更新的内容过时。这并不意味着你应该仅仅因为一年或两年就拒绝回答。但它确实为您提供了额外的数据点,以帮助您进行专业判断。
如果您对问题及其答案不满意,请不要担心。进一步搜索。Stack Overflow倾向于对一遍又一遍地问同一个问题的人皱眉头。但它仍然经常发生。通常这些问题最终会被关闭为“重复”,但它们不会被删除,仍然可以正常访问。搜索这些“重复”的问题,您可能会发现比所谓的“规范”版本更好的答案。
最后,请记住,您不必仅复制和粘贴一个代码段。你当然可以混合搭配不同的方法。如果您希望为复制和粘贴的所有不同代码段提供归因,则可能会出现问题,但如果出现此问题,通常可以解决此问题。
附录:现成代码
Stack Overflow结构为Q&A网站。用户提问,人们回答问题。该网站正式劝阻“讨论”,人们在谈论无休止地解决问题的正确方法。相反,你应该迅速得到你真正的问题的答案。
因此,在Stack Overflow上,很难偶然发现现成的程序,你可以盲目地复制和粘贴。在Stack Overflow上,代码旨在解决独特和专业的问题,而不仅仅是呕吐出一个完整的工作程序。
这不,如果你去到位于更广泛的协议栈Exchange平台上的其它Q&A网站(这是“堆栈溢出”在托管)的情况。诸如“Code Review”或“Code Golf”之类的问答网站充当“现成代码”的存储库。
-
“code review”是一个网站,编码人员会审查其他人的工作计划,并就如何改进这些计划提出建议。(例如:使用Python,JavaScript,PHP和HTML工作井字游戏)
-
“Code Golf”是一个网站,用户接受挑战以产生符合特定标准(例如,大小)的工作程序。(例如:NaïveMarkovChain Word Generation)
位于“Code Review”或“Code Golf”上的所有代码均在CC-BY-SA 3.0下获得许可(就像“Stack Overflow”上的代码一样)。它们中的大多数都不是代码片段......毕竟,它们通常是完全成熟的工作程序,而不是一行或两行代码。
将有问题的代码翻译成另一种语言也算作衍生作品(毕竟,你受到某人编写自己版本代码的启发),所以你仍然必须遵守CC-BY-的条款SA 3.0许可证。
如果您正在运行copyleft代码库,则在“Code Review”或“Code Golf”上使用代码不会涉及法律问题。如果您正在使用专有或许可的代码库,那么您可能已经考虑执行我在代码许可章节中讨论过的伪“洁净室”实现。
使用Code Review和Code Golf查找“现成代码”并不是一个好主意。代码托管网站(例如SourceForge,BitBucket和GitHub)已经存在“现成代码”,其形式为具有适当软件许可的开源软件。在那些符合您自己独特需求的网站上找到“现成代码”更容易。
使用Code Review和Code Golf中的代码也可能相当不道德,因为您只是利用了所有内容在CC-BY-SA 3.0下的Stack Exchange上自动获得许可的事实。在“代码审查”上发布FizzBuzz代码的人希望审查自己的代码,而不是让您重复使用它。
但是,您可以合法地复制和粘贴Code Review和Code Golf中的代码。有关所提供代码的答案和评论也非常有用,理论上可以提高您自己的编码能力。
我的意见
程序员遇到问题,在网络中搜索,必然会遇到,学习如果更好的使用这个网站,能够提升自己解决问题的能力。
英文版书籍pdf 下载方法,关注微信公众号:什么技术值得学 , 回复:stackoverflow 获得
你觉得文章有用,请给个“好看”
一个会思考的胖子
扫码关注“什么技术值得学”,获得更多技术知识