背景
上文介绍了我所看来的 “编码总诀” —— 要有一颗 “为食用者着想的心”。
可具体要怎样 “着想” 呢,还没有详细说明。
本文就以此作为出发点,介绍我常用的第一个编码技巧。
不过在这之前,我们需对编程本身,进行一些讨论。
编码活动
首先,以编程作为工作的话,那么写代码的目的就不应该是为了好玩,
而是应该是为了解决问题,
这就好比汽车公司造车一样,并不是因为制造汽车很有趣,而是因为它能赚钱。
所以代码至少要能解决问题,
之后才有余地来讨论够不够好。
其次,虽然解决正确的问题,要比正确的解决问题重要得多,
但本系列文章,却不打算讨论前者,
讨论后者也有价值,我们需要有一些侧重点。
我们将仅限于考虑给定问题,应如何更好的去解决它。
通常人们将问题视为 “业务”,将解决方案视为 “技术”。
业务也有可能是纯技术性质的,技术也可能会用到非编码手段。
最后,编码可看做是一件知识生产活动,我们总是处在中间层,
底层是我们可利用的各种 “技术” 工具,上层是我们需解决的 “业务” 问题,
我们将连接上下两层的逻辑过程,固化成代码,交给计算机运行。
同时这些代码,还得好理解,不然别人就没法更新它了,
所以,代码中必须包含足够多的信息,这些信息还得被清晰的表达出来才行。
总结一下,
(1)代码首先要能解决问题,才能谈论写的好不好
(2)有所侧重,并不代表不懂其他方面的重要性
(3)编码是将知识固化下来的过程
信息表达
接上文,我们说 “编码是将知识固化下来的过程”,代码中的确包含了很大的信息量。
于是问题就来了,怎样将这么大的信息量合理的表达出来?
是一股脑的都放到一起么?不行,这就像流水账一样,读起来很费劲。
所以,更好的写法,应该得有层次性,有主次之分。
让阅读者容易找到它感兴趣的那部分内容。
现代很多书籍的内容编排,都采用了这种方式。
一本书的开头,往往不是第一章的第一句话,而是要先有一个目录,
目录使人方便查找,降低了学习成本。
在写代码时,我们也可以这么干。
这就得出了我常用的第一个编程技巧:让主流程清晰。
代码中的信息量虽然大,但大多数阅读者肯定并不想全部了解它,
所以有些信息就得隐藏起来,暂时先不告诉他。
这样阅读起来就轻松多了,我们只提供给他最言简意赅的 “主流程”。
跟 “主流程” 无关的事情,尽量隐藏起来,放到别的地方去。
主流程
那么什么是主流程呢?
或者,到底应该把哪些事情作为主流程呢?
这就是需要记起我们的 “编码总诀” 了 —— “为食用者着想”。
一个对当前工作并不了解的新人,最可能关注什么?
以后我们自己来改代码时,怎样才能以最快的速度想起来当时做了什么。
就拿向别人介绍,早晨上班前做了几件事来说吧,
起床、洗漱、整理、出行。
一般人在不了解总共有几件事之前,其实并不关心我从哪颗牙齿开始刷牙。
而当他对刷牙感兴趣的时候,我可以在刷牙的主流程中,再给出说明。
这就是我们需要的层次感。
交代每一件事情的时候,都点到为止,不向外透露过多没用的信息。
题外话是,面向对象编程之所以这么流行,
是因为它确实在处理信息隐藏方面,起到了模范作用,
面向对象编程方式,很容易下意识的就把信息藏好了,有利于开发大型项目。
当然,不了解背后之原因的话,用什么语言都能写出烂代码来。
结语
本文介绍了我常用的第一个编程技巧:让主流程清晰。
所采用的的办法是,不要把过多暂时没啥用的信息透露给阅读者,
而是,放到其他地方去。
这样从阅读者角度来看,一次性接受的信息量变小了,
也就更容易了解我们到底想做什么了。
这无疑是 “为食用者着想” 的真实写照。
当我们开始考虑别人的时候,好代码之旅也就悄然开始了。