您当前的位置:首页 > 电脑百科 > 程序开发 > 程序员

好的程序员“借”,伟大的程序员“偷”

时间:2020-05-31 11:55:10  来源:CSDN  作者:

【CSDN编者按】复制和粘贴可能是不安全的,同样地,如果做得不小心,处处会给软件开发埋下祸端。在这篇文章中,作者将研究一下代码复制对软件开发的实际意义,并讨论一下如何高明地“窃取”代码,以及复制错误的陷阱。

好的程序员“借”,伟大的程序员“偷”

作者 | Ryan Donovan

翻译 | 苏本如,责编 | 夕颜

头图 | CSDN付费下载自视觉中国

出品 | CSDN(ID:CSDNnews)

以下为译文:

对于程序员来说,一个公开的秘密是,在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.00,这个版本需要提供归属信息。

一次编码,数百万次运行

从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)。但是,如果你没有完全理解你新复制的代码和它的功能,你就有可能让你的代码变得更糟。

原文链接:

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

本文为CSDN翻译文章,转载请注明出处。



Tags:程序员   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
我 2010 年开始在 Github 上开源自己的代码。在 push 代码之前我根本没想过为什么。只是因为我当时学了 git,而且我又觉得 Github 很方便,可以用来备份自己的代码。而后我就参...【详细内容】
2021-12-28  Tags: 程序员  点击:(2)  评论:(0)  加入收藏
JAVA开发工程师(北京)本科 3-5年经验 面议 (招1人)岗位职责:1.负责我行应用系统的设计,完成软件编码工作,负责管理代码设计规范等工作;2.根据应用需求分析说明书,评估需求研发的可行...【详细内容】
2021-12-27  Tags: 程序员  点击:(2)  评论:(0)  加入收藏
今天聊聊编程的本质。程序就是数据结构+控制+逻辑,程序员编程工作的本质是翻译,翻译机要来了,程序员怎么办?黑客帝国中的程序黑客帝国4就要上映了,不知道前三部你看懂了么?值得多...【详细内容】
2021-12-17  Tags: 程序员  点击:(9)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  Tags: 程序员  点击:(18)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  Tags: 程序员  点击:(21)  评论:(0)  加入收藏
梦醒之后,每个人对于这份职业的未来、互联网行业的未来,以及更重要的,自己的未来都有了更现实的判断 文 | 祝颖丽编辑 | 黄俊杰一个生于 1986 年的人,他所走过的前半生:从出生起,...【详细内容】
2021-12-03  Tags: 程序员  点击:(16)  评论:(0)  加入收藏
前些天在头条看到一个八二年的哥们,述说自己找工作屡次被拒的问题,在网上引起了广泛的讨论,这件事给我留下了很深的印象,因为这哥们和我同是程序员,都人到中年,上有老下有小。唯一...【详细内容】
2021-12-01  Tags: 程序员  点击:(20)  评论:(0)  加入收藏
很多读者都问过一个问题:程序员如何实现高速成长?之前也写过相关的文章,强调的主要是夯实计算机体系基础知识。 再说另一个诀窍:多看经典开源项目,这些项目大多是众多顶尖程序员...【详细内容】
2021-11-30  Tags: 程序员  点击:(15)  评论:(0)  加入收藏
序言:前段时间织梦因为版权的问题在网上闹得沸沸扬扬,也提醒了众多开发者选择cms上应该谨慎使用,今天给大家展示一款自己搭建的内容管理系统,不用担心版权的问题,而且非常容易维...【详细内容】
2021-11-30  Tags: 程序员  点击:(34)  评论:(0)  加入收藏
近日,一位45岁的网民在中国政府网留言求职,引发关注。该网民自称是一名软件开发人员,今年45岁,精通各种技术体系,“而我辞职回家半年后再回来寻找工作机会的时候,却发现连个面试...【详细内容】
2021-11-17  Tags: 程序员  点击:(42)  评论:(0)  加入收藏
▌简易百科推荐
我 2010 年开始在 Github 上开源自己的代码。在 push 代码之前我根本没想过为什么。只是因为我当时学了 git,而且我又觉得 Github 很方便,可以用来备份自己的代码。而后我就参...【详细内容】
2021-12-28  程序员的喵    Tags:Github   点击:(2)  评论:(0)  加入收藏
JAVA开发工程师(北京)本科 3-5年经验 面议 (招1人)岗位职责:1.负责我行应用系统的设计,完成软件编码工作,负责管理代码设计规范等工作;2.根据应用需求分析说明书,评估需求研发的可行...【详细内容】
2021-12-27  just do丶IT公众号    Tags:国企   点击:(2)  评论:(0)  加入收藏
今天聊聊编程的本质。程序就是数据结构+控制+逻辑,程序员编程工作的本质是翻译,翻译机要来了,程序员怎么办?黑客帝国中的程序黑客帝国4就要上映了,不知道前三部你看懂了么?值得多...【详细内容】
2021-12-17  博士聊IT    Tags:程序员   点击:(9)  评论:(0)  加入收藏
梦醒之后,每个人对于这份职业的未来、互联网行业的未来,以及更重要的,自己的未来都有了更现实的判断 文 | 祝颖丽编辑 | 黄俊杰一个生于 1986 年的人,他所走过的前半生:从出生起,...【详细内容】
2021-12-03    财经杂志  Tags:程序员   点击:(16)  评论:(0)  加入收藏
前些天在头条看到一个八二年的哥们,述说自己找工作屡次被拒的问题,在网上引起了广泛的讨论,这件事给我留下了很深的印象,因为这哥们和我同是程序员,都人到中年,上有老下有小。唯一...【详细内容】
2021-12-01  云南贤哥在深圳    Tags:程序员   点击:(20)  评论:(0)  加入收藏
很多读者都问过一个问题:程序员如何实现高速成长?之前也写过相关的文章,强调的主要是夯实计算机体系基础知识。 再说另一个诀窍:多看经典开源项目,这些项目大多是众多顶尖程序员...【详细内容】
2021-11-30  findyi    Tags:程序员   点击:(15)  评论:(0)  加入收藏
近日,一位45岁的网民在中国政府网留言求职,引发关注。该网民自称是一名软件开发人员,今年45岁,精通各种技术体系,“而我辞职回家半年后再回来寻找工作机会的时候,却发现连个面试...【详细内容】
2021-11-17  郭主任    Tags:程序员   点击:(42)  评论:(0)  加入收藏
即使在安全技术取得进步之后,网络犯罪仍在不断增加。据统计,网络犯罪每分钟给企业造成约 290 万美元的损失。主要是因为新技术不断涌现,难以维护安全。随着网络威胁的增加,网络...【详细内容】
2021-11-04  章大千    Tags:编程语言   点击:(40)  评论:(0)  加入收藏
北漂小伙李强(化名),在北京互联网大厂工作7年,月薪3万,离职回老家开摄影店,亏了200万。李强出生于山西一座名不经传的小城市,互联网专业大学毕业的他,没有听父母的劝言回到家乡考公...【详细内容】
2021-10-29  霸王课  今日头条  Tags:程序员   点击:(53)  评论:(0)  加入收藏
程序员是青春饭,这在国内似乎是公认的。所以很多公司不愿招大龄程序员,很多程序员也“知趣”地及早转型。有的做管理,有的做架构,我还见过改行卖保险的。总之,年龄大了不想敲代码...【详细内容】
2021-10-27  编程的艺术    Tags:   点击:(30)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条