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