学会写「好」的代码
“阅读本文大约需要 4 分钟
你是一个工作了 2,3 年的软件工程师,已经度过了刚入职场的混沌期。
你参与了一些项目,有成功的,有失败的,但是失败的原因绝不是你程序的问题,而是那些产品经理异想天开的需求。
你对一些主流框架能够熟练使用,甚至对部分框架还修改了源码,简直可以称为精通。
你学会了很多工程技巧,知道如何高效的 debug,能够轻松的处理各种乱码问题,还学会了快速高效的搭建一个小集群来提供高可用的服务。
你还了解了一些底层的系统知识,学会了用 tcpdump 来抓包,学会了用 jheap 来做 JVM 的内存 dump,像模像样的解决了不少性能问题。
你有了自己的类库和框架,同事们用了之后觉得还不错,的确解决了不会工作中的问题,你也因此心中有些得意。
但你觉得总是有哪些地方不对。
你觉得自己写的代码很难维护,过了一段日子后自己看了也有些陌生。而同事在维护你代码时总是要跑来问这问那,你心里觉得,怎么同事就不明白你的想法呢?
你的代码有很多重复的地方,有时候需求有些小小的变动你就要改一堆地方。还好你的手足够快,能够赶上需求的变更,你心想,如果需求从不变化该多好。
你想把代码写的更好些。
你知道了有种东西叫设计模式,你看了 GOF 的那本原汁原味的 Design Pattern,你看了那本有些「插科打诨」的 Head First Design Pattern,你还看了好几本同胞们写的设计模式的书。你还是觉得似懂非懂,你可以把 23 种经典的设计模式倒背如流,随手都可以把代码写出来,但是在工作里用的最多的还是工厂法和单例法。你尝试在项目的工作流模块里使用 Command 模式来改善维护度,写了半天你自己都看不明白在写些什么。
你明白了抽象能力对编程很重要,于是你又看了企业架构模式,看了分析模式,看的书越多,你越迷糊,你不知道为什么代码一层套一层,架构越来越复杂,你只为写一个简单的 CRUD,却已经创建了 4 个接口,7 个实现类。
你想起了那个全世界最大的同性交友网站,上面有无数神奇的代码等着你探索和学习。你看了一个上千 star 的项目,你貌似看出了些门道,觉得相同的功能,写出来的代码确实不一样,看看他的代码,再看看自己的代码,若有所思。
你只是想把代码写的更好些,但是如何做呢?
有一天,一个新来的同事看了你的代码,微笑着对你说了一句英语,
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
你心中似乎有些感悟,你问新同事这句话是哪里来的,新同事给介绍了一个人和一本书,那个人叫 马丁.福勒,大家都叫他老马,而那本书则叫重构
你如饥似渴的开始阅读这本有趣的书,每看一些你都觉得深有感触。那些编码中的坏味道 仿佛就是给自己写的,而那些重构的手法又是那么简单易懂,切实可行。你突然发现即使一个最简单的 Rename 手法也是如此有用,虽然缓存和命名是计算机界的两大难题,但你还是搜肠刮肚要想出一个好的类名或是方法名。你也慢慢学会了如何使用 IntelliJ Refactor 菜单下的每个功能,看着自己的代码你觉得越来越顺眼,有时候一起吃午饭的时候你的同事也会说你的代码很容易读懂。
因为有了单元测试和重构,你觉得需求变更不再那么烦人,不知不觉你的代码似乎有那么些扩展性了,每次都能把修改限制在一个范围内,不用再翻天覆地的修改。
你终于学会了如何编写「好」的代码!
这次要介绍的书是 重构。当一个程序员熟练的掌握了一门编程语言,一些框架后,往往面临了一个问题,如何提升自己的「架构」能力?在阅读了很多书籍,博文之后,许多程序员被那些设计模式,分层架构,「高内聚,低耦合」东西搞的非常茫然,所谓道理我都懂,但是落实不到代码上。这是为什么呢?
因为有一条很难觉察的鸿沟横卧其中。很多的书籍来教授如何使用一门编程语言,但是却没有告诉你如何用「好」它。也有很多的书籍教授了你好的架构模式是怎样的,但是却没有教你如何做到这个架构模式。中间缺乏的是如何编写可读性强,健壮可扩展代码的实践步骤。代码是软件的基石,只有好的代码才能组成好的架构,所以要成为好的架构师,先要能写出好的代码!
重构 可以教你。
书中列出了面向对象程序设计容易出现的问题,称之为 坏味道,以及相应的修改方式,称之为 手法。每一个手法都详细到手把手教你的地步,且都有对应的代码加以说明,简明易懂,实践性超强。初版的 重构 是在 20 年前出版,放在今天来看仍然是金科玉律般的教导,每一条都可谓切中要害,对照自己工作中编写的代码,更能加强学习的效果。
更值得庆幸的是,时隔 20 年后,重构 出了第二版!结合最近几年编程技术的发展,新版的 重构 不仅把实例的编程语言从 Java 改成了 Javascript,还对以前的条目做了精心的修订和补充,可谓与时俱进。我强烈推荐所有的读者能够仔细的阅读这本书,关注我的个人号可以获取我的 重构 读书笔记,让你更好的提升编程技巧!
也许你和优秀架构师之差一本 重构 的距离。
15年从业经验,不仅在国内著名的大型金融集团做过甲方,担任高级系统架构专家角色,也在第一梯队的互联网公司金融部门做过数据智能相关工作。
也曾任职于大型系统集成商,负责保险,银行核心系统的落地和实施,也在创业团队从0到1研发产品,在业界获得很高的占有量。
如果感兴趣可以加我公众号,搜索“且把金针度与人”或个人微信