读什么样的代码?
这个问题非常重要,但同时也难以解答。这里没有具体标准的答案告诉大家应该阅读哪些代码,因为要根据个人条件而定。
以下是一些好的建议:
1.阅读相关性高的代码
最好的起点就是阅读您正在使用的插件或者库中的代码。
◉您喜爱的WordPress插件代码。
◉您经常使用的Ruby gem代码。
◉您不断重复使用的jQuery插件代码。
这些都是良好的学习素材。由于已经熟悉其公共API,因此了解其内部工作原理会变得更加简单。另外,作为代码用户,大家也可以为项目添加文档、实现新功能或者以其它方式作出贡献。
2.阅读令您印象深刻的代码
我还记得自己第一次看到280 Slides时的感受,用“印象深刻”这个词来形容绝对不夸张。接着我就去了解该站点的驱动代码源自开源Cappuccino项目,之后我将这些知识牢记心中,并在我以后的道路也受益很多。相信在大家的从业经历中,也一定会见到过令您印象深刻的代码,如果,它属于开源项目,请务必认真研究并将其融入自己的应用开发当中。
3.阅读您所尊敬的人编写的代码
如果大家已经拥有一定开源软件编写经历,那么无疑已经结识了不少值得膜拜的大牛。我们可以认真阅读他们编写的代码,并在赞叹之余借此充实自己的头脑。当然,即使没有,想要找到理想的学习对象也绝非难事。
4.阅读您能够切实理解的代码
很多有冒险精神的朋友,可能更喜欢直接投身于Ruby on Rails、Drupal或者jQuery等大型项目当中。但是建议大家最好能先从易于理解的代码入手。
大型项目的活动组件太多,大家可能挣扎于概念当中而无法快速汲取经验。这种混乱会导致沮丧,甚至在理解当中消磨了自己的学习热情。这时如果先挑选小型项目进行阅读,会让您能够立刻掌握业务逻辑,并专注于研究其中的技术细节。
2
如何阅读?
新的问题来了——我们该如何阅读代码?
阅读代码,应该是既需要广度也需要深度
◉广度:看的是代码的整体架构,比如模块划分与组织,设计模式的运用 等等
◉深度:挑选自己感兴趣的模块,深入理解学习他的具体实现。
1.着眼于宏观
假设大家已经了解了所要阅读代码的宏观作用。如果还没有,那建议大家通过网站、教程、文档乃至其它来源先弄清手头这些代码的基本用处。
第一步应该是着眼于项目结构。根据您所选择的实际代码库规模,这第一步的实际强度也有所区别,不过一般来讲应该不会耗费太多时间。
首先,关注文件结构。大家可以使用TextMate等拥有文件夹层级视图的编辑器作为辅助手段。上图所示即为一份清晰的TwitterRuby gem视图。
这一步的目的是熟悉源代码。了解哪些文件包含/要求/加载其它文件,主体代码在哪里,是否使用了命名空间等等。了解了这些基本情况下,开始深入细节。
2.记录下您的发现
阅读代码不应该是一种被动的行为。建议大家随时添加评论,记录下您的假设并总结您理解中的程序流程。
3.进行测试
希望您选定的项目拥有测试套件。如果没有,大家可以直接跳过此章节(或者另选一个包含测试套件的项目)。
将测试作为代码阅读起点非常重要,因为其中记录了代码所应完成的既定目标。而且无论代码质量多高,查看测试结果都能帮助我们更清晰地理解原程序员的意图。在阅读时,确保测试套件能够正常运行,这将保证您当前的开发环境配置正确。
4.执行、变更、再执行
谁说阅读代码就没法动手参与?大家可以尝试改动现有项目再重新调整,从而真正理解其设计思路。大家不妨添加一项小功能,或者设置更为广泛的日志记录机制,从而输出各个阶段的代码。如此一来,我们的阅读过程就更像是参与一场冒险,而非面对一本晦涩的小说。相信我,这种方法非常有效。
5.重复再重复
在读完一套代码库后,选择另一套继续进行。您阅读过的代码越多,您的学习速度就越快,并越能够享受这种愉快的学习方式。
从哪里入手?
推荐GitHub。只要找个适合自己的项目,马上就可以开始学习——GitHub是一座巨大的宝库,感谢开源精神让我们拥有如此珍贵的资源可供利用!