写点什么

复制粘贴代码,很可能会带来灾难性的后果

  • 2022-03-21
  • 本文字数:1420 字

    阅读完需:约 5 分钟

复制粘贴代码,很可能会带来灾难性的后果

很多人都有过复制粘贴代码的经历,但如果你经常盲目地复制粘贴代码,甚至是复制粘贴自己不理解的代码,很可能会带来灾难性的后果。

当你复制粘贴自己不理解的代码时会发生什么

产生垃圾


这是复制粘贴代码的最大问题。复制粘贴的代码往往包含很多你的程序不需要的额外代码行。如果开发者在没有理解代码的情况下就进行复制,那么代码就会变得很复杂,很难理解。

重用性差


开发软件的真正资产并非代码,而是可重用的代码。因此,从长远来看,简单地复制代码并不能提高生产力。


如果你找到一段代码,却没有理解,仅仅是复制、粘贴,那么你就无法正确地重用这段代码,因为你不知道它的可用性。另外,你也失去了收集可重用代码的机会。

复制 Bug


复制代码的同时,也在复制 Bug。你所复制的代码片段可以在特定的环境下使用,但是你的问题会有所不同。所以,如果你没有理解代码就去复制代码,那么你就会制造出某些 Bug,这些 Bug 会暂时被掩盖。

安全漏洞


我知道有个学弟把 GitHub 的一些代码片段复制和粘贴到了他的项目中,因为他必须查看他公司发送给用户的最后一条信息。


他确实是把那些代码片段复制和粘贴了,但是却没有理解那些代码。他运行了这段代码,并且工作得很好。但问题在于,这段代码可以读取智能手机的所有信息。这个问题影响很大,会让你的应用变得缓慢。

引入新的错误


当你在你的项目中粘贴代码时,重复的代码还可能会产生额外的错误。有时候,可能是你没有把代码粘贴在正确的地方,也可能是你粘贴的代码覆盖了以前的一些代码。如果你不明白这些代码,那么会有很多复制粘贴的方式带来灾难。

许可证问题


开发者经常从一个开源项目中复制粘贴代码。如何不了解复制的源码许可影响,那么就会有很大的问题,对于嵌入式设备来说更是如此,因为在嵌入式设备中,板载软件被认为是一个新的和唯一的副本。这不是 GrammaTech 专攻的领域,但其他公司提供这些类型的分析工具。

一些建议


如果你经常习惯复制粘贴代码,那么以下六点建议希望能对你有所帮助。


  1. 花时间去解决一个问题。你今天花的时间越多,明天要花的时间就越少。

  2. 对复制粘贴的代码进行调试,以便更好地理解。

  3. 在复制的代码中添加一些有用的注释,以便 QA 团队能够更好地查看。

  4. 尝试将代码分解成可重复使用的函数。这将有助于你更好地理解。

  5. 在从开源项目中复制之前,请看清许可证。

  6. 请不要在项目中留下任何复制粘贴的代码的垃圾代码。


额外提示:


一些资深的开发者建议,与其从网站上复制粘贴代码,不如通过重新敲入代码来重写。通过这样做,你可能会发现一些垃圾或无用的东西,并把它从你的代码中删除。这将使代码变得干净,并帮助你更好地理解它。再一个就是,它将帮助你一步一步地理解执行程序。


如果我们仅仅是简单地复制和粘贴,就会失去这些宝贵的经验。请相信我,一点小小的努力,就能使你从好的开发者变成伟大的开发者。

最后几句话


复制代码使我们的生活变得更轻松。但如果不去理解代码的话,就不会让我们成为更好的开发者。一个伟大的程序员,就是在大多数人不能解决困难问题的时候,能够解决困难的程序员。


而一个伟大的开发者并非在一日之内造就的。通过理解代码来解决问题,是提高自己的最好方法之一。


因此,尽管复制粘贴代码的做法很诱人,但在不理解的情况下就复制代码,是不值得开发者花费宝贵的时间。在我看来,这是在自欺欺人。


作者介绍:


Entreprogrammer,科技企业家、变革创造者,热衷于人工智能和区块链。


原文链接:


https://levelup.gitconnected.com/copy-pasting-code-can-be-devastating-ae1c8252c8fa

2022-03-21 15:516046

评论 2 条评论

发布
用户头像
推荐低代码服务编排库 Commander
https://xie.infoq.cn/article/1adf7327403affd58aadb67a4
2022-03-26 09:03
回复
用户头像
复制粘贴就是程序员最卑微的行为,没有之一。
2022-03-23 11:00
回复
没有更多了
发现更多内容

精选2021互联网大厂Java核心面试题库(金三银四面试必备)

比伯

Java 编程 架构 面试 程序人生

技术实践丨Prometheus+Grafana搭建HBase监控仪表盘

华为云开发者联盟

开源 Grafana Prometheus HBase 开源数据库

【LeetCode】位1的个数Java题解

Albert

算法 LeetCode 3月日更

墨天轮精选:数据库问答集萃第一期-2021

墨天轮

MySQL 数据库 sql dba

书单|互联网企业面试案头书之架构师篇

博文视点Broadview

架构

对于移动开发,人工智能的到来意味着什么?

故胤道长

人工智能 机器学习 ios开发 Android开发

力扣(LeetCode)刷题,简单题(第16期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

基于感染原理判断图的连通性算法

大奎

图算法 子图 连通性

揭秘盒马鲜生,如何打破收益增长天花板!

博文视点Broadview

分布式任务 + 消息队列框架 go-queue

万俊峰Kevin

微服务 分布式任务 消息队列 Go 语言

彩色图像的二值化,取经之旅第 6 天

梦想橡皮擦

28天写作 3月日更

uni-app跨端开发H5、小程序、IOS、Android(六):uni-app事件绑定

黑马腾云

微信小程序 uni-app 大前端 iOS Developer 3月日更

一文了解数据库资源管理技术

华为云开发者联盟

数据库 存储 GaussDB(DWS) 资源管理

基于NA公链(Nirvana)的应用和NAC公链社区共识探究公链的发展未来

区块链第一资讯

跟随报文,开启一段奇妙之旅

华为云开发者联盟

报文 Windows主机 路由器 Linux主机 路由表

力扣(LeetCode)刷题,简单题(第15期)

不脱发的程序猿

LeetCode 编程之路 28天写作 算法面经 3月日更

【Doris Weekly】2020.03.08~2021.03.21

ApacheDoris

【Doris Weekly】

微信聊天记录里的文件又失效了?试试这个文件同步开源项目吧

HelloGitHub

开源 文件传输 Go 语言

Flink SQL 在网易云音乐的产品化实践

Apache Flink

flink

字节跳动单点恢复功能及 Regional CheckPoint 优化实践

Apache Flink

flink

【遇见Doris】基于Apache Doris的小米增长分析平台实践

ApacheDoris

ThreadLocal 慌不慌?

叫练

JVM ThreadLocal 引用 软引用

【IstioCon 2021】最佳实践:从Spring Cloud 到 Istio

华为云原生团队

开源 Kubernetes 云原生 istio 服务网格

数据库周刊62丨央企2021年数据库成交公告,国产占90%;流数据库HStreamDB开源;MySQL主从双写导致数据丢失;Oracle 19c升级最佳实践;PG日常工作分享;MySQL MGR运维指南;SQL语法手册……

墨天轮

MySQL 数据库 sql postgre

Cobar SQL审计的设计与实现

捉虫大师

Disruptor Skywalking cobar 数据库中间件

java好还是嵌入式好?做IT开发该如何选择

cdhqyj

Java 编程 发展 开发 嵌入式

LiteOS:剖析时间管理模块源代码

华为云开发者联盟

时间管理 时间 LiteOS huawei 任务

vivo 应用商店推荐系统探索与实践

vivo互联网技术

架构 推荐系统 服务器

EGG公链强势来袭!去中心化社交革命先驱EFTalk

币圈那点事

开发也要防“沉迷”?IDEA插件教程详解

京东科技开发者

Java 开发 IntelliJ IDEA

终于有阿里高工把SpringBoot+SpringCloud+Docker+MQ整合在一起了

Java架构追梦

Java 架构 微服务 springboot SpringCloud

复制粘贴代码,很可能会带来灾难性的后果_其他_Entreprogrammer_InfoQ精选文章