书写可维护性代码的重要性。

本文是个人对书写可维护代码的一点点思考。

(一)整洁代码的重要性。

《代码整洁之道》、《实现模式》、《设计模式》、《重构》、《重构和模式》这些书中,都指出书写可维护代码是十分重要的。想必每位开发者都能说出几条原因吧,这里我也梳理一下自己的逻辑。

什么是好代码?概括地说就两条:第一,能实现需求,第二,可维护性高。

1.1 能实现需求是第一要满足的。

程序员工作的本质是代码交付。这是我们工作的基本,若代码不能实现需求,肯定不是好的代码。这一点是无需置疑的,任何其他方面的工作,都需要为它让路。因此有很多公司,把这一点作为绩效考核的唯一要求。

1.2 书写可维护性代码是老鸟和新手的本质区别。

怎么衡量自己成长了呢?有一个看似开玩笑的方法是,当你去看自己以前写的代码,如果你觉得垃圾时,就表明自己进步了。

那么,什么样的代码是可维护性高的代码呢?《代码整洁之道》给出的观点是,代码可维护性与其整洁度成正比。当然也给出了整洁的代码是什么样的,并给出了原则和各种细则。在我看来,作者只是把“可维护”重新定义成了“整洁”而已。

我总结的可维护性代码的三大特点是:

  • 可读性高。
  • 可扩展性高。
  • 可复用性高。

1 代码要可读性高。

《代码整洁之道》中说,如果你把敲代码的过程进行录屏,就会发现大部分时间都是读代码的过程。

往往大部分代码都是自己最近写的,因此没有理解上的难度。此时,我们很少去关注代码是否具有高可读性。变量名字叫什么无关紧要,是否有注释也无关紧要,是否有优化的空间更无关紧要。我们下意识的心理逻辑是这样的:反正都是自己写的代码,自己看得懂,明天看这个代码的人还是自己。而完成任务是首要的,毕竟公司看重的还是任务完成指标,因为这点是影响绩效。

对待自己的代码是这个态度,而对待他人的呢?对于非自己写的代码,比如要使用别人的接口时,基本上会问一下同事,“发起某某请求的方法,在哪个文件,叫什么名字?”,因为我们知道这样做来得快,要自己去找,那可费劲了。

但是一直这么做会有问题的。正如《第五项修炼》说的那样,你要解决的问题,很可能于来自上一次其他问题的解决方案,其实它们原本就不该出现。

问题出现的场景一般都发生在维护时。自己写的代码,半年后能会去读它的人仍可能是你本人。届时,你会想,自己当初为啥要这么写呢?那么长的一坨,竟然还没有注释,当初的思路又是什么呢?这个变量名是什么意思呢?恨不能穿越回过去,告诉自己:你现在的偷懒,以后还会由你来买单的。

最可怕的是,当你去维护别人写的垃圾代码,心里骂着别人时。其实,很可能现在的你同样会坑以后的另外一个人。当你每敲一段代码时,都要想一想那句名言:

代码是给人看的,只是偶尔运行一下。

2 代码要可扩展性高。

写出来的代码,不会一成不变的。在迭代过程中,可能会多次修改。所以写代码时,不能只聚焦于眼下,只要完成功能就行了。想一想,如果一个月后,Boss说你要在某某功能模块里添加一个小功能时,要怎么能快速定位到你的代码。此时就要考虑代码的可读性以及设计模式了。

这一点,其实目前流行的mvvm框架,本身就是为了解决此问题的。就跟画画一样,别人画好了轮廓,我们只需要去着色就行了。高内聚低耦合的代码,一直是我们追求的设计目标。封装变化、多用组合等思想,良好的框架在这点上帮我们解决了不少问题。

3 代码要可复用性高。

既然一些代码能够复用,说明它们能解决一些通用的问题。比如流行的框架和库,本身就是让别人复用的。可复用也是设计模式存在的原因。你遇到的问题,大多少数时,前人就遇到过,并且给出了通用方案。而我们要做的就是“拿来主义”。

具体到项目时,项目结构必然要分层,底层代码自然要抽出来。这个道理我们都懂。《代码整洁之道》中说,重复是软件一切邪恶的根源。所以,Dont repeat youself。


(二) 为什么我们写出的代码不是整洁代码。

养成写整洁的代码,需要形成习惯。但是新习惯的养成就是要克服掉旧习惯。大道理,谁都懂。难的是,知行合一。为何自己写的代码那么糟糕,我们能找到两个常见的原因是:没时间和没反馈。

2.1 没时间。

最常找的理由之一就是,时间不够。

我们前端工作的时间比例大致是这么划分的。书写代码和调试代码的比例大概是3:7。

想必我们都有这种经验。要实现一个页面,不到两三个小时就能实现大部分功能,然后发现一些小问题,即那些难缠的bug,此时我们剩下的大部分时间都在对付这些可恶的“虫子”,代码改来改去。有时一个问题的定位、技术调研和与人沟通时间就能占据整个下午。真等到解决完这些小问题时,也差不多到下班的时间了。

这是我们常见的一天里,没有让代码整洁的时间。

项目完事了,马上开始又启动下一个项目。当你愁眉苦脸地思考当前如何完成功能时,此时你被通知要维护一下之前的项目。再次修改自己之前的代码,你可能会感慨,以后这块需要好好修正修正。可惜手里项目太紧了,没有时间。事实上通常是真没有时间了。

这是我们项目周期间,没有让代码整洁的时间。

2.2 没反馈。

比写糟糕代码的更糟糕的事情是:你不知道你写的代码很垃圾。每个人都很忙,没人帮我看代码,我也觉得自己写得不好,但我又不知道如何改进。这是很多新人的困境,没有反馈的练习,练习再多也成不了高手的。

(三) 如何书写整洁代码。

没时间,会导致代码写不好,代码糟糕,会导致更没时间,这是一个死循环。

没反馈,就不知如何提高代码质量,进而一直这样持续下去。把第一年的经验再重复几年。这是一汪死水。

如何破这个局呢?


3.1 微习惯。

其实,代码要保持整洁,就跟你屋子里保持清洁的方法一样。让屋子清洁很容易,你只需要进行一次大扫除就可以了。但是要一直保持清洁,那么需要养成微习惯。看完的书,不能随便在桌子上一摆,要换洗的衣物,要放到固定的地方等等。每一个都是微习惯。

从小事做起,比如变量名或方法名。好的代码是不需要大量注释的,因为好的变量名称就起到了注释的效果。《代码整洁之道》一书中,给出各个方面的整洁代码是什么样的。比如函数该怎么写,注释该怎么写等等需要养成的微习惯。

3.2 清单思维。

养成微习惯是重要的,但如何养成呢?答案是清单思维。

清单,除了我们熟悉的todo list之外,还又一种核查清单。在清单上列出哪些我们需要注意的地方,然后我们一条条去核对。做到了就打勾,这点对形成微习惯很有帮助的。

比如,我每次出门都不会丢三落四。因为我记住一句话,伸手要钱买烟火。

这里,我建立了一个核查清单:身份证、手机、钥匙、钱包、烟和打火。同样的道理,在我们日常代码的开发中,提交代码之前,拿出清单对一对,直到自己养成习惯。

3.3 code review。

旁观者清,当局者迷。从人性的角度来说,每个人或多或少都有双向标准。相对于自己,要求别人就严苛一点。这一人性却可以为我们所用。同事之间进行代码回顾,是对每个人都有好处的。开始时看似浪费时间,其实减少日后不该浪费的时间。也可以配合利用核查清单,毕竟每个人对一个个具体的核查点的理解程度时不一样的,这样能帮助彼此更快地成长。而不是你向他人请教时,只会得到”你去看某某书就行了“这样的答案。

本文完。

整洁代码的核查清单:
https://github.com/ryanmcdermott/clean-code-javascript#introduction

vue代码的核查清单:
https://cn.vuejs.org/v2/style-guide/

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