学会写「好」的代码

                                                  “阅读本文大约需要 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研发产品,在业界获得很高的占有量。

如果感兴趣可以加我公众号,搜索“且把金针度与人”或个人微信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280