作者:京东零售 刘慧卿
一 前言
在日常工作中,我经常听到部分同学抱怨代码质量问题,潜台词是:“除了自己的代码,其他人写的都是垃圾,得送到绞刑架上,重构!”。今天就来聊一聊,如何写的一手好代码。要回答这个问题之前,得先弄清楚一个问题,好代码的标准是什么?易阅读,可扩展,高内聚,低耦合,编程范式,设计原则......,要求不少,却很难度量。实则代码和文章一样,正所谓文无第一,武无第二。
这里不打算从规则宝典,最佳实践等方面入手,因为那将陷入到无数的规则细节中去,容易不得要领。这也是很多同学,学了很多当下最新技术,掌握了N门编程语言,却始终没有明显提升的原因。对于技术而言,底层的原理和运行规律是根本,它和编程语言,语法等应用层的重要程度是不一样的,切记不要进入这个误区。
技能的掌握一般需要经历学习、模仿、思考、创新四个过程,下面就分几个阶段来探讨一下,到底该如何快速学习成长。
二 学习出来的代码
学习意识
如果说人生有什么捷径,寻找前人走出来的路,就算是捷径了吧。前人需要花了几年,甚至穷其一生研究的成果,摆在那里,用还是不用?答案应该是肯定的,接下来要做的,只是如何把它们找出来,结合当下的情形,在众多的解决方案中选出行之有效的就可以了。 Henry Spencer曾说:“不懂 Unix 的人注定最终还要重复发明一个撇脚的 Unix”。
所以有必要建立这种意识:有效的学习是降低目标成本的最佳策略之一。这比自己摸着石头过河,在时间成本上,会有很大的节省,这还没考虑物质和精力上的投入,各种试错,就更划算了。
选择榜样
既然是取经学习,就要学习优秀的,成功的经验,如此,相同的精力投入,获得的回报往往更高。半路出家,或者正在和你同行的都不是好的选择,你不知道他们最终会不会误入歧途。所以选择榜样时,一定要跳出圈子,去找你能找到的最优质的的那些,你的选择可以涵盖历史上,行业里,公司中各个维度。
学习的过程中,带着批判的思维去消化,只有这样才能改进创新,所有的金科玉律都有其限定范围,当限定边界打破了,之前的正确性,就值得你去怀疑。举个例子,很多编码规范里都有那么一条:“一行代码长度,不超过80个字符”。
它的来历是这样的:在很久很久以前,有一个很流行的人机交互接口(终端) 叫 VT100,用来处理字符/文本,后来其它的很多终端都是以它为标准。这个终端屏幕24行、80列,编辑器菜单还占了 4 行。所以,代码编写建议是一个逻辑的处理代码,20行最佳、每行字符长度不超过80列。目的就是为了可视性(目之所能及)、可维护性。而如今显示终端的分辨率普遍提高了,所以升级调整规范并无不可,比如:“每行 120 个字符,每个函数体代码 80 行以内”。
所以,很多历史经验,了解其背后的运行逻辑,才能发挥出它原本的作用。
学以致用
大家常说万事开头难,究竟难在哪里?难在决心上,难在门槛上。决心可以通过痛点和目标来牵引,门槛可以通过目标拆解来降低。高质量的完成某件事情,有很多科学的工具和方法,比如:PDCA循环,SMART原则等,有兴趣的,可以拓展学习。
这里想要表达的是,拥有痛点和目标是能够持之以恒的前提,因为在学习实践的过程中,能够练习中进行应用,并能获得真实反馈和回报,这是能够坚持精进的原动力。否则就容易陷入,类似我们背诵四级应用单词‘’“abandon”的魔咒,也不知道从它开始背诵了多少遍了。
再举个例子,我们需要做系统模块解耦,调研下来,使用消息队列MQ中间件,能够很好的解决我们目前面临的问题。