程序员必备素质:代码整洁之道

news/2023/6/9 19:30:42

本次分享的内容是《代码整洁之道》,书中是以现实案例,以讲故事形式来总结归纳问题,并给出解决方案,很容易与我们产生共鸣。文中会有大量书中内容摘抄,都是个人认为很值得分享的内容。当然,也会有个人感悟,作为学习记录及简单分享。


翻开书,前言章节,映入眼帘的就是下面这一张图

代码质量的唯一有效度量是:WTFs(what the fuck)/minute

真的太精辟了,不管哪个项目,代码都避免不了存在 bad code的情况了,我们应该怎么面对这种情况呢?

每个项目组的规范还不一样,本文是读书笔记,不会说明太多的代码规范,只是阐明我们应该怎样做或者抱着什么样的心态来写代码吧

如果你看到这里,我要引用书中的一句话:

第一,你是个程序员;第二;你想成为更好的程序员。我们需要更好的程序员

代码整洁有什么用?

  1. 思路清晰,降低bug几率

  1. 更容易维护,利于团队协作

  1. 看起来舒服,提高效率

  1. ......

引用作者一句话

软件质量与代码整洁度成正比 --Robert.C.Martin(作者)

软件设计3R层次结构: readable, reusable, and refactorable 可读性、可重用性、可重构性

这些原则是作者提出的一些最佳实践,但不是强制约束

我们应该如何保持代码的整洁?

破窗理论:环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉

为了我们代码的整洁,我们需要为他花费一定的时间来进行优化。

整洁的代码就是作者着力照料的代码。有人曾花时间让它保持简单有序。他们适当的关注到了细节,他们在意过。

一般来说,除了linter等用于规范代码格式的工具之外,还有一些需要自己进行关注的方面:

  • 代码逻辑直接了当

  • 减少依赖便于维护

  • 根据分层战略完善错误处理

  • 单元测试覆盖全面

  • 有意义的命名(做到名副其实)

  • 提供一种而非多种做某件事的途径(没有重复代码)

专业的态度

做项目/产品,通常都是指明deadline的,但是截止到deadline之前,需求量的多少是不固定的,说白了是“以deadline不变应需求万变”,美其名曰「敏捷」

我们经常要面对短期内开发出大量需求的请求,很可能为了快速完成这些需求,胡乱的堆叠代码,上线之后一声长叹庆幸这个功能开发的结束。过了好久,有关这个功能的需求有所变化,重新查看代码时,直接就 WTF 了......,再一看是自己写的,你说尴尬不?

如果是因为任务多胡乱叠加代码,我们就应该在接受需求的时候提出我们的看法:

过多的需求在短期内上线的代码质量不能得到保证

编程是工艺

这就是《代码整洁之道》的中心思想。贯穿全书的要点是:软件是一门艺术,做软件就像“画画”。作者认为编程的本质是一门工艺。

但如何让编程从单纯地写代码变成“工艺”呢?

马丁认为,程序员掌握的主要工具是持续重构和测试驱动开发(TDD)。两者像硬币的两面般协同工作。来看一些概念:

重构是在不更改输出的情况下调整现有计算机代码结构的过程。

测试驱动开发是将需求转换为特定测试用例,再添加代码以使测试通过的过程。

因此,制作软件的过程可能如下所示:

1. 编写测试代码以验证所需但未实现的功能。

2. 编写有效代码(可能不整洁),并通过测试。

3. 逐步重构代码(保证每次通过测试),使代码在每次开发迭代中都更加清晰。

“不要想着一次性编程后系统就能正确、漂亮地运行。今日的任务仅仅是让程序运行起来,而重构和扩展系统是明天的任务。这是迭代和增量敏捷的本质。”——罗伯特·C·马丁

因此,本书的中心思想是,整洁代码是在开发和实践中实现的,而非简单地一口气创建出来。

整洁的边界

所谓的“边界”是指外来代码(三方程序包、开放源代码、其他团队打造的组件和子系统)和自己写的代码之间进行整合的连接区域

1.使用第三方代码

1.第三方程序包和框架提供者追求普适性,这样就能在多个环境中工作,吸引广泛的用户。

2.我们建议不要将Map(或在边界上的其他接口)在系统中传递,把它保留在类或近亲类中,避免从API中返回边界接口,或将接口作为参数传递给公共API。

比如应用程序可能构造一个map对象并传递它。我们的初衷可能是map对象的所有接收者都不要删除映射图中的任何东西。但map正好有一个clear方法

2.使用尚不存在的代码

还有一种边界,那种将已知和未知分隔开的边界。在代码中总有许多地方是我们的知识未及之处。有时我们并不往边界那边看过去

编写我们想得到的接口,好处之一是它在我们控制之下。这有助于保持客户代码更可读,集中于它该完成的工作。

这里我觉得书里的例子就非常的好,如图:

结语

《代码整洁之道》中,并非每个想法都是Bob叔叔提出的,他在书中的各部分都承认了这一点。而这反而是使本书如此成功的一个原因——它是编程界智慧的汇聚,并附有实例,值得大家一看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4562495.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

word删除任意单个字符_如何从Word中的单个页面中删除页眉或页脚

word删除任意单个字符You can remove or make changes to headers or footers on any page in Microsoft Word. This is handy if, for example, you want to hide the header or footer on a specific page. The process is a bit different if you want to delete a header o…

PDF页眉页脚怎么设置

页眉和页脚:通常显示文档的附加信息,常用来插入时间、日期、页码、单位名称、微标等。其中,页眉在页面的顶部,页脚在页面的底部。相信在Word里面添加页眉页脚大家都知道该怎么做的,那么现在我们经常使用的另一种文件PD…

联合证券|未来五年是“大信创”发展的关键时期 发展空间广阔

机构指出,展望2023年,信创将从党政信创走向全面信创(28N),叠加方针催化及疫情预期转变,泛信创范畴有望成为板块主线,孕育出许多板块的出资机会。 中心逻辑 1、2022年计算机职业大都子板块的增长…

111、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

题目描述 解题思路 本题的关键是用好递归这个结构,用好每次他向下的遍历和返回的值。每一次递归时,相当于解决与之前相同的问题,因此先按某一种类子问题进行讨论(仅有三个结点的满二叉树),当递归的方式向下…

i7 12650h怎么样 相当于什么水平

i712650h采用10nm制作工艺 拥有10核心16线程主频为2.3GHz,睿频为4.7GHz,三级缓存高达24MB 功耗 45wi7 12650h怎么样这些点很重要看过你就懂了 http://www.adiannao.cn/dy

i5 11320h怎么样 相当于什么水平

酷睿i5-11320H是一款适用于轻薄游戏笔记本电脑和移动工作站的中端SoC。 基本频率速度取决于TDP设置,并且可以从2.5(28 W TDP)到3.2 GHz(35 W)不等。 单核和双核在负载下的提升可以达到4.5 GHz。 所有四个内核均可达到4…

i7 12700H怎么样?相当于什么级别

i7-12700H 是一款 H45 处理器,具有六个性能 内核和八个效率 (E) 内核 (14C/20T),属于我们现在所知的 Alder Lake-P系列。i7 12700H怎么样这些点很重要 http://www.adiannao.cn/dy 处理器基本频率为2.7GHz,最大频率可达4.6GHz,配…

i9 12900H 怎么样相当于什么水平

i9 12900H采用7nm 制作工艺14核心20线程,主频为2.5GHz,睿频为5GHz,三级缓存高达24MB TDP 45W 支持最大内存 64GB 内存类型 DDR5 4800MHz,DDR4 3200MHz,LPDDR5 5200MHz,LPDDR4X 4267MHz i9 12900H 怎么样这些…