本博文为《编写高质量代码—改善Java程序的151个建议》一书的阅读笔记。该书从很多方面给予了编写高质量代码的宝贵经验。而且该书应该是那种开发经验越丰富,体会越深的书籍。在阅读过程中,从该书中收获良多,这里主要作下书籍笔记,有体会的地方加点自己的想法。受限于知识水平,部分内容还没能深刻体会,所以更多更好的内容和具体实例还需要从书中去找寻。
编码不仅仅是把代码写出来,还要求清晰地表达出编码者头脑中的逻辑,准确地传递到计算机中执行,同时也能被其它编码者轻松阅读,而要实现这些目标,则要求代码有清晰、正确的思想,即编程思想。——秦小波(书籍作者)
一、提倡良好的代码风格
优秀团队的编码风格应该具有如下几个特征:
- 整洁:这样可读性好;
- 统一:这样减少代码的差异性,更易于理解;
- 流行:流行必有基因,风格值得参考;
- 便捷:有通用工具支持,这样降低统一风格的成本。
这部分内容我写过一篇博文《Java编码规范—"约定"也要"配置"》,算是一个具体的实现思路。
二、不要完全依靠单元测试来发现问题
主要有四个原因:
- 单元测试不可能测试所有的场景(路径):单元测试必须测试的三种数据场景是:正常场景、边界场景、异常场景。但是单元测试的代码覆盖率达到60%都很困难。覆盖不全则难免会有缺陷。
- 代码整合错误是不可避免的:单元测试往往测试的是一个独立单元,这样在不同单元间整合测试时难免出现错误。
- 部分代码无法(或很难)测试
- 单元测试验证的是编码人员的假设:有点自已验证自己的意思,难免因为思维局限或者理解偏差等原因验证不正确。
所以不能完全靠单元测试来发现问题,但单元测试是很重要的一环。以个从的经验而言:大的项目一般测试可能从需求阶段就开始介入,对于开发而言可能有单元测试,冒烟测试,集成测试,系统间联调测试,性能测试等等,而且很多测试工作是配合专门的测试团队完成。
三、让注释正确、清晰、简洁
注释是为了帮助代码阅读者更好地理解代码的,良好的注释习惯包括:
- 不要废话:只写与代码相关的注释,不要抒情。
- 不要用注释写故事:例如书中的汉诺塔算法注释把算法的故事分析应用比较都写上去了,没有必要。应该准确简单地表达。
- 不要添加不必要的注释:过于简单的注释,地球人都知道的就不要添加注释了。
- 注释及时更新:代码有变化时注意注释的更新。
- 注释不要写太多:注释写太多往往就喧宾夺主了,影响了代码的可读性。
- 不要用注释记流水帐:例如不要用注释记录代码版本的变迁,这应该交给版本管理工具。
- 为JavaDoc编写的注释也要考虑可读性:写注释也是为了人看的,标签写太多同样影响可读性。
四、让接口的职责保持单一
单一职责原则要示接口定义的时候尽可能保持单一,这样能最大程度地保证接口的稳定性,降低类的复杂度,同时也能增加可读性和可维护性。
五、增加类的可替换性
为了增加类的可替换性,在设计时需要考虑以下三点:
- 子类型必须完全实现父类型的方法:即子类型应该更多地是增强父类 的功能。
- 前置条件可以放大:即子类的方法参数可以比父类的范围大。
- 后置条件可以放小:即子类的返回值可以比父类的范围小。
六、依赖抽象而不是实现
- 尽量抽象:每个类都尽量有接口或抽象类,或两者都有。
- 表明类型必须是抽象的:比如对象申明时最好用接口声明。
- 尽量不要覆写父类的方法。
- 抽象不关注细节:抽象负责定义关系与公共部分的实现,具体业务逻辑应该由具体的实现类去实现。
七、抛弃7条不良的编码习惯
- 不良一:自由格式的代码
- 不良二:不使用抽象的代码
- 不良三:彰显个性的代码
- 不良四:死代码,即不可能被执行到的代码。
- 不良五:冗余代码,没有用的代码要及时删除。
- 不良六:拒绝变化的代码,旧的代码要注意重构更新。
- 不良七:自以为是的代码,即不写测试代码的代码,这样不便于质量检查。
八、以技术员自律而不是工人
提高技术修养的20条建议:
- 熟悉工具:工欲善其事,必先利其器。
- 使用IDE:能够提高编码效率。
- 坚持编码:只要是技术圈,不论什么岗位,都应该坚持。
- 编码前思考:即先设计后开发。
- 坚持重构:没有最好只有更好。
- 多写文档:写文档也是一个很好的整理思路的过程。
- 保持程序版本的简单性:多版本时注意合并。
- 做好备份:以防万一。
- 做单元测试:单元测试非常特别很必要。
- 不要重复发明轮子:在项目中使用已经成熟的工具或者框架,这样能大大减轻项目风险及工作量。当然研究性质的情况除外。
- 不要拷贝:不做代码搬运工。
- 让代码充满灵性:注意命名规范、注释等等。
- 测试自动化:合理地“偷懒”。
- 做压力测试:测试代码的健壮性。
- “剽窃”不可耻:多向优秀的开源项目学习。
- 坚持向敏捷学习。
- 重里更重面:注重UI设计。
- 分享:分享出去收获得更多。
- 刨根问底:不仅要解决问题,还得知道前因后果。多问几个为什么,在答案后面加上“是因为....”。
- 横向扩展:要扩展知识面,JVM、操作系统、硬件、网络、存储、协议都要去学习。
相关推荐
这份名为“安卓笔记——安卓详细笔记汇总”的资源,无疑是安卓开发者或者学习者的重要参考资料。以下将对这个压缩包中可能包含的知识点进行深入解析。 首先,Android系统是基于Linux内核的开源操作系统,广泛应用于...
11. **JAVA 8及以上版本的新特性**:例如Lambda表达式、Stream API、Optional类、日期时间API的改进等,这些新特性极大地提升了JAVA的编程效率和代码质量。 通过阅读和学习这些JAVA学习笔记,开发者不仅可以掌握...
通过学习LINQ,开发者可以更高效、更安全地处理数据,减少与数据交互的代码量,提升代码质量。无论是在数据库、XML还是自定义数据结构上,LINQ都提供了统一的查询方式,使得.NET开发变得更加便利。这份笔记将帮助你...
这些知识点是JAVA编程基础的重要组成部分,对于理解和编写高质量的JAVA代码至关重要。 首先,我们来讨论访问修饰符。在JAVA中,访问修饰符决定了类、方法和变量的可访问性。主要有四种:public、private、protected...
Python进阶的读书笔记,实际是编写高质量代码:改善Python的九十一个建议; 对于入门后的童鞋来说,读完此书又可以上升一个层次了!
新东方是中国知名的教育机构,以其高质量的英语教学资源而闻名,尤其是在英语口语方面有着深入的研究和实践。这份“英语学习——新东方口语笔记”显然是从新东方的教学体系中提炼出来的精华,旨在帮助学习者提高日常...
还有很多时候,一种场景我们知道应该如何编写代码却从来没有深入想过为什么需要这样写,这时我们对代码的把控能力将会大大降低,产生了异常也将极难排查。并且,在参加面试时,很多语言上的细节问题也常常会问倒应聘...
因此,在学习过程中需要注意避免使用这样的代码,并掌握如何编写高质量的代码。 #### 三、让一个LED闪烁的简单例程 这是一个非常基础的例子,用来说明如何控制LED的亮灭。这个例程通常用于初学者快速入门FPGA编程...
以上知识点是Java编程中的基础且核心的部分,理解和掌握它们对于编写高质量的Java代码至关重要。学习这些内容可以帮助开发者更好地设计和实现复杂的应用程序,提升编程效率。通过深入研究和实践,你可以将这些理论...
该压缩包文件“IOS应用源码——录音笔记for ipad(录完上传到dropbox).zip”包含了开发一款iOS应用的源代码,该应用专为iPad设计,具有录音功能,并且能够将录制的笔记自动上传至Dropbox云存储服务。这个项目可能是...
3. 编写代码:使用C++编写游戏逻辑,包括初始化、更新、渲染、事件处理等函数。 4. 资源管理:导入图片、音频等资源,使用Cocos2d-x的纹理、音频管理器进行加载和管理。 5. 动画和特效:通过Action和Transition实现...
阅读《算法笔记》,你将能够学习到如何运用算法高效地解决问题,如何设计和优化算法,以及如何在有限的时间内编写出高质量的代码。书中的详细书签系统使得学习过程更加有序,方便读者随时回顾和复习关键知识点。这是...
- 开发人员:编写代码实现功能。 - 测试人员:设计测试用例,执行测试,报告缺陷。 - 配置管理员:负责系统部署和环境配置。 - QA(质量保证):全程参与,制定规范,辅助审计。 5. **软件开发模型**: - **...
Python是一种高级编程语言,以其简洁明了的语法和强大的...这些是Python高级编程中的一些核心概念,掌握它们将有助于编写更高效、更清晰的代码。在实际编程中,理解并灵活运用这些知识点,能够提高代码质量和维护性。
JDBC是Java API的一部分,由Sun Microsystems(现为Oracle公司)开发,它提供了一套标准接口,使得Java开发者可以编写与数据库无关的代码。JDBC支持多种数据库,如MySQL、Oracle、SQL Server等,通过数据库驱动实现...
此外,还能了解如何在实际项目中运用软件工程方法,如如何编写高质量的注释、如何进行版本控制以及如何进行单元测试。 总之,这个“白金级的某新物流系统商业版”不仅是一个ASP网站开发实例,也是一个深度学习和...
### WPF学习笔记——主流桌面应用开发技术 #### 一、WPF简介 **Windows Presentation Foundation (WPF)** 是微软推出的下一代图形用户界面系统,它主要用于构建具备卓越视觉体验的Windows客户端应用程序。WPF不仅...
在本篇【原创】Mybatis学习笔记(一)——Spring集成Mybatis中,我们将探讨如何将流行的持久层框架Mybatis与Spring框架进行整合,以便在实际项目开发中实现灵活、高效的数据库操作。以下是对相关知识点的详细说明: ...