百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

细节中有上帝,论精简代码(代码精简之道)

csdh11 2025-01-26 21:48 48 浏览

本文最初发布于 Medium 网站,经原作者授权由 InfoQ 中文站翻译并分享。

在我开始担任软件工程师的那一年(2007),Bob 叔叔出版了他的第一本书《代码整洁之道》的首版。那时,我在一家制造业公司工作。由于那是一家制造公司,所以工作中会接触很多精益实践和方法论,于是我决定深入学习了解一下相关知识,并获得了六西格玛绿带认证。

大约在我获得认证的那年,我也读到了这本书,但那时候它并没有给我带来任何启迪。等到我第四遍读这本书时,我正在为一些接受我培训的开发人员准备一组关于整洁代码的培训课。就在那时,精益与整洁代码两种方法论的一点一滴开始在我的脑中交织融合在一起,我开始领悟了。

首先定义“精益”。从最纯粹的意义上讲,它是一种旨在 组织 人类活动,以在消除浪费的同时提供更多价值的方法。

人们采用了许多不同的方式来定义精益方法论,只不过他们选择的名称可能不太一样。所有这些 规范 都多少会关注精益原则。

为了 组织纪律,你首先必须 看到 要组织和遵循纪律的事物。而且由于我们谈论的是代码,所以当你看到它时,实际上是在 阅读 它。稍后我们继续这个话题。

现在我们来定义“整洁”。回想一下你的童年,妈妈曾经(或仍然如此)说:“你必须打扫完房间才能出去(是的,当年我们真的是出去玩,而如今你是要上网娱乐)和朋友一起玩”。

当你开始打扫房间时,你会意识到要提高效率,第一步是先把所有乱糟糟的东西分门别类(Sort),把电子游戏放在这一边,杂志归拢到另一处,玩具收纳在那里,等等。然后为每组分好类的东西分配一个位置(Set in order)。现在你就可以更轻松地做清理工作了(Shine)。最后你意识到,为了让房间中的各种东西保持(Sustain)整洁,更简单的做法是先制定一套日常管理规则(Standardize),这样你就用不着打扫房间了,可以快点出去和小伙伴们玩耍。

这就是众所周知的 5 步方法论,它与我们的整洁(精益)代码模型完全一致。

5 步方法论是:

  • 一种方法,可以让工作场所整洁有序,井井有条,以帮助减少浪费并提高生产率。
  • 通过标识和存储所使用的物品,管理区域和物品并保持秩序来组织管理工作场所,以提高效率和有效性。

将它与整洁代码方法论结合起来是这样的:

说实话,每个人都可以成为一名程序员。如今有这么多现成的工具、友好的框架和编程语言,任何人都可以观看免费视频并学着编写一段计算机可以理解的代码。但真正困难的部分在于:将软件工程付诸实践并编写出人类也可以理解的代码。

继续说实话:如果你写的不是“整洁代码”(至少不是受人尊敬的代码),你就不能称自己为软件工程师。你能想象一位医生的办公室是乱糟糟无法驻足的场景吗?书躺在地上,桌子上有垃圾,衣服不整洁。你愿意和他一起做一次心脏手术吗?

现在,我们来谈一谈为什么整洁代码如此重要的原因所在:

  • 代码更具可维护性。
  • 建立可持续发展的业务
  • 它使你看起来更专业。
  • 易于阅读和理解。
  • 提高生产率。
  • 避免重新设计的恶性循环。
  • 令人愉悦。

“上帝在细节中”,建筑师:路德维希·密斯·凡德罗

如前所述,精益是一种方法论,是一组旨在组织人类活动以在消除浪费的同时提供更多价值的规范。但是,你无法整理和约束看不见的东西,而要真正能 " 看到 " 代码,代码就必须是可读的。你无法改进看不见(无法阅读)的内容。所以我们先来讨论整洁(精益)代码原则的第一个支柱。

可读性

下面 可读性 的完美定义:

  • 清晰。“如果想快速执行,如果想快速完成,如果想让代码易于编写,请让代码易于阅读”—— Robert C.Martin
  • 简单。不要过度设计。
  • 表达的密度。使用最少的资源和交互以获得最多结果的艺术。

有意义的名称:

  • 可以揭示意图的名称(为什么存在,其用途以及使用方式)。
  • 使用动词表示函数名称,使用名词表示类和属性。
  • 变量应表达自身的创建目的。(避免使用 var x,而应使用 var customersIndex)

命名约定:

?一定要选择易于理解的标识符名称。

?一定要先考虑可读性再考虑简洁。

?一定要使用语义上有意义的名称,而不要使用特定于编程语言的关键字来写类型名称。例如,GetLength 就比 GetInt 更好。

X 请不要将缩写用作标识符名称的一部分。比如应该使用 GetWindow 而不是 GetWin。

X 请不要使用与广泛使用的编程语言的关键字冲突的标识符。

X 请不要使用任何不被广泛接受的首字母缩写词,就算它们被广泛接纳,也只在必要时才使用它们。

小方法:

  • 一个方法应该是一个只做一件事情的可测试单元。
  • 保持在 10 到 15 行代码之内。
  • 如果你的方法更大,那么它可能正在做很多不该它来负责的事情。
  • “尽早返回”。

接下来,我们继续讨论整洁(精益)代码原则的第二大支柱。

组织

由于我们在谈论的是代码,因此我们将专注于开发人员的工作,而开发人员会经常使用类。架构师的工作位于更高的层次上,不涉及代码,而是处理项目或服务(也称为域,微服务等)等等。因此我们将专注谈类。

源文件就像报纸的标题,其名称应该简单明了,光看名称就知道是什么模块。源文件的顶部应该提供关于高级概念和算法的信息,往下走逐渐展开细节,最后则是底层函数和细节。

3C 原则:

耦合:软件模块之间的关联性。

内聚:模块内部元素结合在一起的紧密程度。

组合:类应该根据其组合而非继承来实现多态。例如,一辆车不是一个发动机,而是集成了一个发动机,所以发动机之类的组件通过外部 API 组合起来形成高级抽象。

最后,我们来谈整洁(精益)代码原则的第三大支柱。

纪律

  • 能力 = 纪律 + 技能
  • 拥有良好的态度胜过拥有多年经验。
  • 良好的态度是有感染力的。它会激励整个团队。

“你的态度,而不是你的才能,将决定你的高度。”——Zig Ziglar

纪律是一套标准、规则、试探法、原则和实践等。下面我来定义一些保持你的代码整洁的最佳方法:

  • 童子军规则。离开营地时先打扫干净。每次编写代码时,我们应该稍微清理一下旧代码,是否是别人编写的都没关系。整理一下就可以做出一点贡献。只是不要疯狂清洗一大堆东西,否则你可能会破坏某些内容。
  • 一定要非常简洁。记住,不要过度设计;不要用牛刀杀鸡。
  • YAGNI(你并不需要它)。不要因为将来可能添加更多功能就写一个工厂设计模式。等到需要的时候再创建工厂,不要提前行事。
  • 最小意外原则。为每件事物找到一个地方,然后将其放置在其他开发人员更容易找到的地方。尽量不要放在会让别人感到意外的去处。
  • “如果没有测试,那就默认它坏了”。编写大量测试,尤其是单元测试,否则你会后悔的。
  • 类和函数应该尽量小一些,并遵守单一责任原则(SRP)。函数不应超过 4 行,而类不应超过 100 行代码。是的你没看错。它们也应该只做一件事。
  • 函数应该没有副作用。副作用(例如修改输入参数)是有害的。确保你的代码中没有副作用。尽可能在函数合约中明确这一点(例如,传递原生类型或没有 setter 的对象)。
  • 避免重复。抽象出常见的事物并将它们放在一个位置,从而避免重复的代码。如何避免重复
  • 以后再做等于永远不会做。你有长长的待办事项列表,但你内心深知你永远不会完成它们。一个好办法是,每次加入新的待办事项时都写一条自己正在处理的事项。
  • 4 人代码审查规则。为了确保你完全遵循所有标准和最佳实践等,你应该总是要求 4 个人来审查代码:身边找两位开发人员,你的技术主管以及最重要的是 你自己。你审查自己代码的时候应该和审查别人代码时一样严谨。
  • 代码分析工具。Resharper、IDE 企业版、SonarQube、SpotBugs 之类的工具可以帮助你遵守最常见和关键的代码准则。

总结

不要学其他那些只看什么线上免费课程,并从某些公共仓库复制粘贴的程序员。要有专业工程师的样子,让自己编写最好的代码,写出可读、有条理且遵循所有规范(内部和外部规范)的代码。

感谢阅读。感兴趣的话可以关注我( https://medium.com/@hugeponkce )。

参考阅读

https://medium.com/swlh/c-lean-code-db84f8e312d4

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书!

相关推荐

知名软件变“木马”:2小时感染10万电脑

近日,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受攻击用户就高达10万。腾讯电脑管家可精准拦截该病毒攻击,管家团队也将持续跟踪该款...

腾讯电脑管家发布病毒预警:“驱动人生木马”爆发,2小时感染10万台电脑

新华网天津12月15日电(记者周润健)腾讯电脑管家15日紧急发布病毒预警,14日下午,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受...

全新“撒旦”勒索病毒来袭 瑞星推出独家解密工具

新华社北京7月26日电瑞星威胁情报平台近日发现多起国内用户感染“撒旦”勒索病毒事件。据瑞星安全研究人员介绍,该病毒运行后会加密受害者计算机文件,加密完成后会用中英韩三国语言索取1个比特币作为赎金,并...

新勒索病毒“WannaCry”疯狂来袭 乌克兰副总理电脑中招

据外媒报道,从6月27日开始,一种新勒索病毒再次疯狂来袭,已席卷欧洲多个国家,连乌克兰副总理的电脑都已中招。报道称,这轮病毒足以与五月席卷全球的勒索病毒“WannaCry”的攻击性相提并论。该病毒代号...

蠕虫病毒利用“永恒之蓝”漏洞传播 单位局域网受威胁最大

日前,火绒安全团队通过“火绒威胁情报系统”发现蠕虫病毒“Worm/Sharp”正在全网传播,其中在政府、企业、学校、医院等单位的局域网具有非常强的传播能力。该病毒通过“永恒之蓝”漏洞、多个电脑常用端口...

新病毒爆发:利用“永恒之蓝”传播,2小时感染10万台电脑挖矿

驱动人生发布的声明。据腾讯安全专家介绍,通过追溯病毒传播链发现,该病毒自12月14日约14点,利用“驱动人生”、“人生日历”等软件最早开始传播,另有约30%的传播通过“永恒之蓝”漏洞在局域网内进行主动...

逍遥安卓模拟器定制手游电脑版 手机电脑账号完全互通

从今年起大量回合制端游转向手游方向,无论是《梦幻西游》、《大话西游》、《神武》还是刚刚发行的《问道》手游,都是非常重度需要大量时间来做任务挂机升级的游戏。很多人习惯了端游的时候一个电脑可以多开的玩法,...

安卓模拟器绿色U盘移动版 公司玩游戏无痕迹

安卓模拟器已经不稀奇了!随着安卓手游的盛行,特别是《梦幻西游手游》之类的重度手游发布,玩手游花的时间也越来越多。用手机玩这些游戏存在着屏幕小、点量少、费流量还有容易被电话打断,在电脑上用安卓模拟器玩游...

苹果推出 iCloud 照片和视频转移服务:可转移至谷歌相册

IT之家3月4日消息据MacRumors今日报道,苹果公司本周推出了一项新服务,帮助iCloud用户方便快捷的将其存储的照片和视频转移到谷歌照片上。苹果在其支持文档中表示,用户可以登...

NAS PK台,4核带m.2的威联通TS-264C vs 双核TS-462C

因为618年中大促看到威联通TS-264C和TS-462C这两机型售价差不多,就做个比较以供参考。毕竟作为自2007年以来就一直卖威联通的NAS老油来说,对威联通各NAS机型的识别还是相当全面的,对不...

前端学AI(七):构造 RAG 系统评估测试数据集

引言在基于DeepSeek+Chroma+LangChain开发一个简单RAG系统...

惨重教训!调查显示挪威“英斯塔”号宙斯盾舰撞油轮后本不必“丧命”

最新公布的调查报告显示,挪威皇家海军“英斯塔”号护卫舰2018年11月与油轮相撞后,如果其舰员接受了更好的损管训练,并且对舰艇的稳定特性更加熟悉的话,这艘宙斯盾型战舰本来是可以挽救的。↑挪威“英斯塔”...

「必买」盘点2021年男人们的败家清单,越“败”越香

心里总想买点啥?看看《必买》,全网最有料的场景种草指南。草原割不尽,春风吹又生。在过去的2021年,不断被各种数码产品种草,一直在买买买,剁手不停。大部分产品都经过详细的对比做足了功课,也有部分是一时...

实现浏览器播放rtsp视频流的解决方案

有同学问道:需要实时播放摄像头rtsp视频流,而浏览器不能直接播放,怎样解决?实现这个需求可以通过插件或者转码来实现。要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的...

ISO9000你知道多少?

1ISO9000族标准是什么?ISO9000族标准是指由国际标准化质量管理和质量保证技术委员会(ISO/TC176)制订的所有国际标准。ISO9000族标准可帮助各种类型和规模的组织实施并有效运行质...