阅读优秀源码是提升技能的绝佳途径

见识比常识更重要

  不少程序员几乎不重构自己的代码,他们觉得代码只要能运行起来就可以了,即使他们的代码写得一团糟,耦合性高,缺乏必要的注释,命名不规范,过了一周连自己都不知道写的是什么东西。这种编码习惯,就算有十年的工作经验,也只是一个底层的码农而已。
  编码如同写作,要成就优秀的作品,必须阅读足够多的优秀作品。试想一下:一个只读了小学六年级的人,所看的书只局限于语文课文,有可能创作出优秀的文学作品吗?很显然这是不可能的,即便他天赋异禀,也很难用优秀的文字将心中的想法所表达出来,写一篇优秀的作文是没问题的,但要创作浩瀚的文学作品是不可能的。同理,一个只学了基本语法,只看官方文档的程序员,写一个小程序是没问题,但要写出优秀的项目也是不可能的。一个只会盖茅草屋的人,从来没看过别人是如何建大楼的,只在影视作品中看到摩天大厦,给他所有建筑材料和工程队,他也绝对不可能构建起大楼。
  如果你没有读过优秀的源代码,没有认真地研究这些优秀项目是如何设计的,只是重复着自己拙劣的代码,即使你重复了一千遍,一万遍,也只是在原地打转。没见过优秀源码的人,只会坐井观天地重复自己拙劣的代码。从这方面来讲:见识比常识更重要!

如何阅读优秀源码

  那么现在问题来了,如何阅读优秀的源码呢?
  以 PHP 为例,PHP 有很多优秀的开源框架,这些开源框架的文件动辄上千个,数十万行代码,对于初级程序员来说,要读懂这些代码太难了,就如同叫一个普通人读一本晦涩的数学专著一样(每个字都认识,就是不知道讲的是什么)在此分享我的一些读源码的方法:(以ThinkPHP 为例)
  1. 先将框架搭建运行起来,大致阅读一遍文档,对该框架的架构,目录文件的摆放,运行的流程有个整体的大概了解
  2. 根据文档的说明做一个小项目,如一个留言板的功能,此阶段主要是为了熟悉框架封装好的方法,感受框架的设计理念
  3. 从框架的入口文件开始阅读源码,一边阅读一边用 xmind 作笔记,读到哪些不懂的就进行调试,或在源码处进行注释,以便再次阅读时加深理解。第一遍读源码时,不必追求每一句都读懂,也不可能达到这种程度,第一遍主要是熟悉框架的代码风格,了解其运行流程,最好自己画一张草图,将程序的运行流程记录下来。并一边想:为什么要这样设计?如果是我来设计框架,我会怎么做,怎样兼顾安全与效率,如何让开发人员更加容易使用?
  4. 模块化读源码,框架中最重要的是其核心代码,将核心代码按功能模块切割,如切割成:配置模块、缓存模块、日志模块、公用函数、模型类、控制器类、视图类等。然后精读每个模块。务必将这些模块的代码都读懂,最好是边读边跟着写。以我的经验:有些代码总是看不懂,但跟着写,通常就能懂得其原理了。因为在写的时候,我们的精力会更加集中,更容易得到思维上的突破。
  5. 将读源码的总结记录成文字,这点特别重要!即使你以为自己真的懂了,但是如果你没能做到将你所理解的知识表达,你就不是真正地理解了,而是只有粗浅的认识,很快就会遗忘。整理思绪,书写记录,是另一种思考,在这过程中,你将脑中的相关知识点进行联系,在碰撞中会产生更多的想法。而且发表出来的资料可能会得到他人的反馈评价,修正自己的某些错误。