优秀的程序员借钱,优秀的程序员偷窃

2020-05-23 01:56:13

在Stack Overflow上作为答案的一部分发布的一些示例代码最终变成了产品代码,这在程序员中是一个公开的秘密。也许你问了一个问题,得到了完美的for循环作为交换。也许您找到了一个很好的答案,它已经有了适合您的应用程序的确切的异步等待实现。

因此,当我看到这条推文宣传窃取代码的好处时,我想知道,复制和粘贴代码真的会有好处吗?

复制和粘贴可能是危险的,但话又说回来,软件开发的许多方面如果做得不小心,也会有危险。在这篇文章中,我将看看代码复制实际上对软件开发意味着什么,好的代码窃取意味着什么,以及复制不好的陷阱。

郑重声明,我并不是主张你随意地从我们的公共问答网站上复制和粘贴代码,有些情况下这可能会给你带来麻烦。但是,正如我们的播客Anna Lytic向我们展示的那样,快速生产功能原型是可以做得很好的。

如果您复制代码示例,请记住提供属性。根据上次在Stack Overflow上编辑代码的时间,它使用Creative Commons许可证的一个版本进行许可,最新的版本是CC by-SA 4.0,它需要属性。

从堆栈溢出复制代码是代码克隆的一种形式;即从项目内部或项目之间复制代码并重用它。根据您询问的对象不同,从其他地方克隆的代码少则5-10%,多则7-23%。这些克隆是好是坏还有待讨论。

不管确切的数量如何,代码克隆都是非常常见的。样板代码本质上是在整个项目中定期重复的代码。这些编码员很有可能不是逐个手工打字。像Lombok这样的工具试图减少对样板的需求,但事实仍然是:

将会有一些代码片段在项目中一遍又一遍地出现

因为它们可能需要稍作修改,所以不能将这些代码片段分流到单独的函数或依赖项中。

说到这一点,库和外部依赖项是在不重用代码的情况下重用功能的有效方法。这几乎就像复制代码,只不过您不负责维护它。见鬼,今天的大多数网络都运行在各种简化开发的框架和插件库上。以库的形式重用代码的效率令人难以置信,并且允许每个重点关注的库非常擅长它所做的事情,而且仅此而已。而且与学术界不同的是,许多库甚至不需要任何东西来表明您正在使用或基于其他人的代码进行构建。

JavaScript包管理器NPM将这一点发挥到了极致。您可以通过命令行将微小的单个函数库-有些只有一行代码那么小-安装到您的项目中。您可以从100多万个开源软件包中选择任何一个,并开始将它们的功能构建到您的应用程序中。

当然,就像每种工作方法一样,这种方法也有缺点。通过安装软件包,您放弃了对代码的某些控制。一些恶意的编码者创建了合法有用的软件包,等到他们有了不错的采用率,然后更新代码来窃取比特币钱包。值得称赞的是,NPM工作人员设法相当快地阻止了这类攻击,但您的外部依赖越多,您呈现的攻击面就越大。

即使是堆栈溢出答案本身也不能幸免于代码克隆。一位独立研究人员发现了几个堆栈溢出答案从其他地方复制代码的情况。一个Java代码片段出现在40多个答案中。

在艺术界,盗窃是伟大作品产生的一部分。我记得去了阿姆斯特丹的梵高博物馆,看到了他的一些早期作品。我被震撼了,但我当时不知道的是,这些其实是日本艺术和木刻的研究。我曾经认为是那个时代独一无二的风格实际上是一个连续体的一部分,而不是我所认为的连续体。他没有沿着荷兰大师摆在他面前的道路前进,而是从他在巴黎找到的日本版画中汲取了构图、笔触的想法,并将它们融合在一起。

毕加索有一句名言归功于他:“优秀的艺术家借用,伟大的艺术家偷窃。”毕加索本人从非洲和波利尼西亚艺术中汲取了很多思想,并将其与自己的研究相结合。偷窃听起来是不对的,事实上,声称别人的作品是你的作品就是剽窃。但是这句话是用“偷”这个词来表达一些不同的东西..。借用的对象仍然属于其他人;复制样式后,它仍然属于其他人。然而,偷窃就是把这个想法变成你自己的想法。把别人的想法归功于借用;理解一个想法并把它编织到你自己的工作中,这就是他所说的偷窃的意思。史蒂夫·乔布斯是这句话的忠实粉丝,苹果在他的领导下取得了成功,因为他们窃取、合并和完善了这句话。

当你克隆代码时,你只是冒着借用它的风险。借用的代码会批量进入项目,只要它没有编译或抛出错误,但是它可能有您没有意识到的bug或恶意意图。复制错误的代码-或通过修改复制的代码-的风险很大。事实上,大多数关于克隆代码的投诉都可以追溯到借款人。如果您不理解代码,那么您很可能会在本应只是概念演示的内容中留下安全漏洞。即使是从Stack Overflow复制最多的代码片段也有一个错误。

另一方面,当您窃取代码时,您确切地知道它是做什么的。它的核心,怪癖,所有这些都成为您自己代码中无缝的一部分。如果你能凭记忆再写一遍,这是一个很好的偷窃的迹象;一次重写给你留下的不仅仅是克隆的东西,还有一些原创的东西。

所以,是的,窃取代码。接受它,理解它,并在您自己的项目中实现它。把它变成你的。你可以变得更有效率,改进你的项目,甚至可以改进你的简历(也就是你的ctrl+C ctrl+V)。但是,如果您在没有完全了解新获得的代码及其功能的情况下进行复制,则可能会使您的代码变得更糟。

标签:公告、复制代码、安全性、堆栈溢出