阅读源代码之“那是我的青春”

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

                                                                                                                                                                    --Martin Fowler

  首先借用重构大师Martin Fowler的一句话来提升下我这篇博文的逼格。能写出漂亮的代码固然重要,但代码更多时候是用来让人阅读的。《代码大全》上有过统计,花费在代码上的时间,写代码的时间相对较短,代码写好后,90%是用来阅读的,所以阅读代码的本领对一个程序员来说相当重要。下面,我就自己的经历,来谈谈如何阅读源代码。先来看看几张图:

1、这TM的是什么?是一堆毫无意义的方格?

 

2、这TM的又是什么?看起来像是一个球?

 

3、这TM的又是什么啊?只知道篮球的妹子应该知道,这是一个人拿着篮球;嘴边常挂住一句“这TM的是我的青春”的球迷朋友应该知道,这TM的就是是TMC,但可能仍需看下一张图才知道是怎么回事(超铁杆粉丝除外)。

 

4、这图你还看不懂不怪你了,因为你可能没有足够的背景知识(Java世界中随处可见的Context)。
 
我们总结一下,要看懂这些图,需做这些准备:
1、了解必要的背景知识(如知道什么是篮球,什么是TMC,什么是干拔)
2、体验过其中描绘的场景(如打过球,打三人半场4:4绝杀过对方,看过这段视频等等),类似对背景知识的实践和应用。
3、如果能从4-3-2-1的顺序来看这图就更明确了,其实我想说的是,不要过早的陷入细节的泥潭,那样你只会看到一个个毫无意义的像素方格。
 
好了,引子做得够长了,我们阅读源代码也按照这样的步骤来准备:
1、了解必要的背景知识,举例:
看spring的核心功能的源代码:什么是IOC和DI?什么是AOP?
看hibernate:什么是ORM?为什么要用ORM,相对直接使用JDBC有什么优缺点?
2、体验过其中描绘的场景,举例:
建立一个UnitTest,找一些demo,改改,测试一下跑一跑,观察下输出。
找一个现行的系统,如公司的系统,从前台操作一些功能,测试一下跑一跑,观察下输出。
 
有了以上充分的准备,我们再开始阅读源代码,难度就小很多,我们也是有背景的人了,有背景的人好办事,有背景的人可自行“脑补”。下面我就如何阅读优秀代码,列举如下步骤:
1、观察代码的抽象层次,明确本次代码关注的层级。
写得好的代码,一定是有一种层次感,在某一个层面上,不用关注在这个层次下面隐藏的各项复杂细节,就能明白大体这段代码是在干什么。就好像公司的总经理不用关注每个开发人员在干什么,只需管理好他下面的几个部门经理即可,再由部门经理去管理他下一层次的人员。我们明确了阅读代码关注的层次,就可以专注于这个层次而不受其他因素的干扰,必须承认,人类无法同一时刻记住太多东西。
 
2、在层次明确后,选择主干线路,沿这条线路线逐层往下阅读,一直到最底层最后逐级再回来。
代码中有很多对其他情况的处理,如各种前置校验、异常处理、后置资源回收等,这些不是主干线路的功能要学会在看代码的时候暂时忽视他。当阅读到最底层后回来,发现已经走完一趟完整的旅程,会有一个完整的体验。
 
3、最后,也是最重要的:反复阅读。无他,唯手熟尔。
走的人多了也就成路了,读得代码多了,自然也就熟悉了里面的套路、章法和潜规则。
 
优秀的开源代码读起来行云流水,每每泡上一杯咖啡,在阳光明媚的午后,欣赏着社区牛人的源代码,总有一种相见恨晚的感觉。但现实世界远没有这么简单,在真实的公司产品级源代码里面,由于需求的变动,业务逻辑的变态复杂,经过无数良莠不一程序员的维护,代码的阅读没有这么惬意。由于工作的需要也需要阅读这样的代码,跟着也要修改。虽然不好读,但天天接触后,始终也能看明白。对待这样的代码,我个人是秉承着这样的观点:在完全把握了一段代码的情况下,用良好的命名、封装、重用来简单重构一下。在不熟悉的情况下,谨慎修改,增加或修改的代码不影响以前的代码。不让代码更难看,在有把握的情况下让它变更好,程序员不为难程序员。作为一个程序员,或者说得更宽泛一点,作为一个有着聪明大脑的人类,认识事物要有举一反三的能力,这篇文章里面列举的方法,我认为也可以用到这些事情上:
1、进入一家新公司,如何熟悉他已有的系统?
2、如何开始学习一门新的编程语言?
………………
 
按照惯例,又到了卖萌时刻。
很多年以后,在程序员界,有这样一位大师,写了无数优秀的代码。初出茅庐的30后,40后程序员们,一个个兴致勃勃的阅读着这位80后大师写过的源代码,看到一些精妙之处后生们都不太懂,就来请教这位大师。大师眯缝着眼,侧身抛出一个挤满皱纹的媚笑,留下了一句话:“不要问我那是什么,那是我的青春。”
 
 
 
 
 
 
 
 
 
 
 
 
posted on 2015-03-13 14:50  可少  阅读(241)  评论(0编辑  收藏  举报