如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

重构时应避免过度思考

  • 2012-02-11
  • 本文字数:1043 字

    阅读完需:约 3 分钟

重构是一门在不改变软件外部行为情况下,改善既有代码内部结构的一门技术。从表面来看,重构需要引入大量的思考行为,然而,过度地思考同样会产生不利的影响。

Kent Beck 提到,重构中面临最大的挑战就是如何做到循序渐进,循序渐进指的是如何将工作分解为可控的步骤,并且每个步骤都易于管理。重构步伐过快会导致不稳定代码的出现。此外,想得越多,越是谨慎反而会严重减慢重构的步伐。

正如许多与我结对编程的伙伴都会告诉你的那样,我有一个非常不招人喜欢的习惯:在重构时总会说“不要再想啦”。我知道这并不是我真正要说的,因为我不可能去故意表达这个意思,但是直到现在,我才有机会可以给出一个更好的解释。

Kent 解释了“水平和垂直重构”的概念。垂直重构是指调整方法或代码块在调用堆栈中的上下顺序,然而水平重构则指的是在类似于同级别的对象间所做的调整。依 Kent 所述,重构时应避免同时做上述两种调整。

当需要重构具有多重调用或是多重实现的对象时,就要额外小心,并且重新回到垂直和水平方法,将这两者操作分开进行,并且要时刻注意代码重构的深度。

话虽如此,做到并不容易⋯⋯

比较好的一个办法就是使用索引卡(Index Cards):

在电脑旁放置索引卡会帮助我保持专注。当我在处理水平重构时突然意识到还可以做垂直重构时,我会迅速记在索引卡上,然后马上回到刚才正在进行的工作中。这种方法不仅可以使我在进行下一步工作前,有效地先将手头的工作结束,同时,又不会导致某些好点子被遗忘。方法之好用,整个过程感觉就像是在做冥想,技能感受到自己的呼吸,又不会被完全自我的意识所牵绊。

J. B. Rainsberger 同意这种观点并同时指出:

无论你在做什么,想要专注时,手边准备一张卡片和一支笔。当有奇思妙想突然在脑海中闪现,而这些事情又不需要立刻处理时,就可以用 5 个或更少的字将它写下来,然后继续回到刚才所作的事情中。效果甚是神奇。

这与 Joshua Kerievsky 所提倡的 Narrow Changem 模式非常相似。每次只专注于一小部分的变化点,然后再继续在后续的重构中应用 Narrow Change 或是 Parallel Change 原则。

尽管重构中需要思考,但是,保持专注并避免潜在的干扰对良好的重构行为是很有必要的。Kent 说道:

我的同伴经常会在重构的过程中产生一些好的想法,比如如何将一些函数挪到 B 中。这时我就会告诉他停止思考。我真实的目的并不是不想让他去思考,我只想让他专注的把手头的事情先做完。就像我们往墙上钉钉子,钉子才刚钉进去了一半,我们没有理由放下手里的活去钉另外一个。

查看英文原文: Stop Thinking During Refactoring

2012-02-11 21:024252
用户头像

发布了 156 篇内容, 共 57.6 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

大模型应用新范式:统一特征表示优化(UFO)

百度开发者中心

延迟任务场景,该如何提高吞吐量和时效性

华为云开发者联盟

redis 延迟任务 低延迟 Redis 消费队列

【网络安全】一款针对Flutter的逆向工程分析工具

H

网络安全 逆向分析

FinClip 的 2021 与 2022

王字 Wannz

finclip 小程序容器 小程序开发 小程序管理平台

OCR技术用于在线身份认证的运营效果分析

OCR

各项结果排名第一!百度内容技术架构团队在国际向量检索大赛BigANN中斩获佳绩

百度Geek说

百度 内容 前端 后端

小程序框架与平台编译对比

王字 Wannz

小程序 百度智能小程序 头条小程序 finclip 小程序框架

圆桌会议:如何避免踩到移动研发中,效能提升那些坑

王字 Wannz

移动开发 迭代

远程办公团队如何沟通?

王字 Wannz

远程办公 wrh 居家办公 线下办公 soho

架构实战营:模块七作业

Geek_93ffb0

「架构实战营」

有奖调查| 2022 Apache Pulsar 怎么过,你们说了算

Apache Pulsar

开源 云原生 中间件 Apache Pulsar Apache Pulsar 社区

新版上线|能力中心打造全新视角

钉钉开发者

钉钉能力中心 钉钉开放平台能力中心 钉钉开放平台 能力中心

“热搜”中的分布式数据库

OceanBase 数据库

oceanbase 客户案例 四川农信

利用鸿蒙JavaUI 框架的 WebView 加载本地冰墩墩网页

宇宙之一粟

鸿蒙开发 2月月更

【连接平台」企业告警信息通过机器人同步至钉钉群

钉钉开发者

连接器 钉钉应用开发 钉群

Linux之at命令

入门小站

Linux

阿里云EMAS 1月产品动态

移动研发平台EMAS

阿里云 程序人生 移动开发 #EMAS

2022年低代码的变化与趋势

BeeWorks

在线YAML转Properties工具

入门小站

工具

手把手教你使用HarmonyOS本地模拟器

HarmonyOS开发者

HarmonyOS DevEco Studio

Java如何实现消费数据隔离?

CRMEB

FinClip 与 mPaaS:轻应用平台与移动应用开发平台

王字 Wannz

小程序 移动开发 mPaaS finclip 小程序容器

2021盘点 | 云主机年度榜单出炉,Top5花落谁家?

博睿数据

FinClip 与 uniapp:轻应用平台与前端开发框架

王字 Wannz

小程序 uniapp 移动开发 finclip

IT人的笔记本——全面了解 Jupyter

dongge

jupyterlab

分布式进阶(二十三):Nginx 服务器应用详解

No Silver Bullet

nginx https 正向代理与反向代理 SSL证书 2月月更

低代码OR零代码,企业如何选择自身所需的软件开发平台?

BeeWorks

开源商业模式促进金融业科技生态的发展

王字 Wannz

小程序 开源 IT 金融

我与音视频的故事 | 社区征文

Changing Lin

音视频

MySQL 是如何实现RC事务隔离级别的

华为云开发者联盟

MySQL ReadView 事务隔离 RC事务隔离 Read Committed

恒源云(GPUSHARE)_替代MLM的预训练任务,真的超简单吗?

恒源云

人工智能 自然语言处理 深度学习

重构时应避免过度思考_研发效能_Vikas Hazrati_InfoQ精选文章