当前位置:首页 > 公众号精选 > 嵌入式微处理器
[导读]对于程序员来说,一个公开的秘密是,在Stack Overflow网站上发布的一些作为问题答案的示例代码,最终会出现在生产环境中。也许你在Stack Overflow上问了一个问题,得到了完美的循环交换。也许你找到了一个很好的答案,它包含了完全适合你的应用程序的async aw

对于程序员来说,一个公开的秘密是,在Stack Overflow网站上发布的一些作为问题答案的示例代码,最终会出现在生产环境中。也许你在Stack Overflow上问了一个问题,得到了完美的循环交换。也许你找到了一个很好的答案,它包含了完全适合你的应用程序的async await实现。

你需要的最后一本编程书

 pic.twitter.com/cnObD8GYGZ

— 开发社区(@ThePracticalDev) 2016年3月4日

因此,当我在推特上看到这条宣传代码窃取好处的推文时,我情不自禁地想:复制和粘贴代码真的有好处吗?
更聪明地工作。
窃取代码。
— Laurie (@laurieontech)  2020年5月14日
复制和粘贴代码可能是不安全的,同样地,如果做得不小心,软件开发的许多方面也可能是危险的。在这篇文章中,我将研究一下代码复制对软件开发的实际意义,并且解释什么是好的代码窃取,以及复制错误的陷阱。

在此申明,我并不主张你随意地从我们的公共Q&A网站复制和粘贴代码,在某些情况下, 这样做会给你带来麻烦 。然而, 正如我们的播客嘉宾Anna Lytical向我们展示的那样 ,借助此方法确实是可以快速制作出一个功能原型。

如果你复制了示例代码,请记住提供其归属信息。 根据代码最后一次在网站上编辑时间 的不同,示例代码的归属和许可是依据Creative Commons许可证的某个版本授予的,Creative Commons许可证的最近的一个版本是 CC BY-SA 4.0 0,这个版本需要提供归属信息。

一次编码,数百万次运行

从Stack Overflow上复制代码是代码克隆(复制)的一种形式;从项目内部或项目之间复制代码并重用是代码克隆的另一种行式。取决于你提问的对象,少至 5-10% ,多至 7-23% 的代码都是从其他地方克隆过来的。至于克隆代码的方式是 ,尚有待商榷。

不管确切的数量是多少,代码克隆都是非常常见的。 样板模版 代码本质上是在整个项目中定期重复的代码。很有可能有些编码人员在项目过程中从来没有手工输入过一行这样的代码。像Lombok这样的工具试图减少对样板模版的需求,但现实的情况依然是:

  • 一些代码片段在项目中反复出现。

而且:

  • 由于这些代码片段在不同的地方可能需要稍做不同的修改,因此无法将它们归并到单独的函数或依赖项中。

说到库和依赖项,它们是一种在不重用代码的情况下重用功能的有效方法。这几乎就和代码复制一样,只是你不需要负责维护它。今天的大多数Web应用都运行在各种框架和插件库上,这些框架和插件库简化了开发过程。以库的形式重用代码是非常高效的,它让每个功能明确的库非常擅长它所做的事情,并且只做它所擅长的事情。与学术界不同的是,许多库甚至不需要任何东西来表明你正在使用或基于其他人的代码进行构建。

JavaScript包管理器 npm 将这一点发挥到了极致。你可以通过命令行在项目中安装一些很小的单函数库 –  有些甚至小到只有单行代码 。你可以从超过一百万个开源软件包中抓取任意一个你需要的函数库,然后开始在你的应用中构建它们的功能。

当然,和每一种工作方法一样,这种方法也有缺点。通过安装一个软件包,你放弃了对代码的一些控制。一些恶意代码编写者先是创建一个合法有用的软件包,等到这个软件包有了一个像样的采用率后, 他们就更新代码来窃取比特币钱包 。值得称赞的是,npm的工作人员很快就成功地阻止了这种攻击,然而,你拥有的外部依赖项越多,你的受攻击面就越大。

即使Stack Overflow答案本身也不能免受代码克隆的影响。一位独立的研究人员发现了几个例子,其中一些Stack Overflow的答案是从其他地方复制过来的代码。比如说,一个Java代码片段就在超过40个Stack Overflow答案中出现了。

好的艺术家“借”,伟大的艺术家“偷”

在艺术界,“偷”是伟大作品产生的一部分。我记得去阿姆斯特丹的梵高博物馆看他的一些早期作品的时候。我被震惊了,但当时我不知道的是,这些早期的作品实际上是 对日本艺术和木版画的研究 。我所认为的在那个时代独居一格的风格,实际上是一个连续统一体的一部分,而且也不是我所认为的连续统一体。梵高并没有沿着荷兰大师们摆在他面前的道路前进,而是从他在巴黎发现的日本版画中汲取构图和笔法的思想,并将其融合进他的绘画作品中。

毕加索有句名言:“好的艺术家‘借’,伟大的艺术家‘偷’”。毕加索本人从 非洲和波利尼西亚艺术 中汲取了许多思想,并将其与自己的研究结合起来。“偷”听起来是不对的,但是事实上,把别人的作品声称是你自己的才是剽窃。毕加索的这句名言是用“偷”这个词表达了一些不同的意思。一个“借”来的东西仍然属于他人;你复制了一种风格,这种风格仍然属于他人。然而,“偷”是把这个想法变成你自己的想法。把别人的想法拿来自己用是“借”;理解一个想法并将其融入自己的作品,这就是他所说的“偷”。 史蒂夫·乔布斯是这句名言的粉丝 ,苹果在他的领导下获得了成功,因为他们“偷”来了一个好主意,并其它融合和改良。

当你克隆代码时,你冒着仅仅“借”用它的风险。“借”来的代码会大量进入项目中,虽然它能够成功编译或者不抛出错误,但是它可能有你不知道的错误或恶意意图。错误地复制代码或代码复制后进行修改的风险是巨大的。事实上,大多数关于克隆代码的投诉都可以追溯到“借”用人身上。如果你不理解代码,你可能会在原本只是一个概念演示的地方 留下安全漏洞 。因为即使是 从Stack Overflow上复制一个被复制最多的代码片段也可能有一个bug在其中

另一方面,当你“偷”代码时,你了解代码的作用。代码的核心和它的不同寻常的思路,都将和你自己的代码无缝地融合在一起。如果你可以依靠你的记忆再写一次,那就是一个很好的“偷”的迹象;一次重写给你留下的不仅仅是一个克隆,还有一些原创的东西。

所以是的,我们要学会“偷”代码。接受它,理解它,并在自己的项目中实现它。让它成为你自己的代码。这样做可以让你变得更高效,可以改进你的项目,甚至可以充实你的简历(亦即你自己的ctrl+C和ctrl+V)。但是,如果你没有完全理解你新复制的代码和它的功能,你就有可能让你的代码变得更糟。

作者 |  Ryan Donovan

翻译 | 苏本如
出品 | CSDN(ID:CSDNnews)

原文链接:
https://stackoverflow.blog/2020/05/20/good-coders-borrow-great-coders-steal/?cb=1

-END-




推荐阅读



【01】C语言十大经典排序算法(动态演示+代码,值得收藏)
【02】C语言、嵌入式中几个非常实用的宏技巧
【03】C语言最全入门笔记
【04】绝对能检测你C语言基础水平的5个面试题
【05】C语言为何不会过时?你需要掌握多少种语言?

免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭