当我们谈论提升编程能力的时候,我们在谈论什么?
首先就是,向别人学习,去读别人写的代码。读那些你常用的库、编程框架的源代码,那些业界公认大牛的源代码,以及代码里的测试,总而言之,就是,读代码、改代码、运行代码。
论阅读代码的重要性
大多数人认为,提高编程能力的最佳方法便是写更多的代码。其实,我们大部分时间都是花在读代码上,“写”的时间花费不多。因此,要想大幅度提升自己的编程能力,你更需要阅读代码。
1、哪些代码适合你的阅读?
阅读什么样的代码,与自己的工作内容息息相关,而以下的代码将给你提供最佳参考。
总有一款适合你
阅读使用的插件或库是一个很好的开始。
一个你真正喜欢的 WordPress 插件
一个你发现有用的 Ruby gem
一个你一直使用的 jQuery 插件
这些都是很好的选择。你已经很熟悉它们的公共 API,这样会降低对内部工作机制的理解障碍。此外,作为代码的使用者,你有机会添加文档、实现新功能或以某种方式为项目贡献代码。
2、哪些代码令你印象深刻?
第一次看到 280 Slides 的时候,令我印象深刻,随后我就了解到它是一个由开源 Cappuccino 项目框架开发的网站,我将它牢记于心,当我再次遇到一个印象深刻的 app 也使用 Cappuccino 框架时,我知道我可以从这个项目中学到很多。最近令你印象深刻的是什么?它是开源代码吗?如果是,那么它将是一个很好的选择,因为代码可能会与应用一样令你印象深刻。
3、对大师最好的崇拜方式,就是向他们学习
那些被人们顶礼膜拜的程序员大牛们,总是令人向往,而最明智的做法就是阅读他们的代码,向他们学习!
4、由浅入深,从你理解的代码开始
冒险是一步步的深入过程,如果一开始就深入思考一个大型项目,如 Ruby on Rails、Drupal、或者 jQuery。可能效果反而不大,只有扎实的走好每一步,一步一个脚印,才能慢慢增进,向深处探索。当然,如果你自认大牛,那么请忽略以上所说。
对于新手,大项目纷繁多杂的模块,可能会令你陷入混乱的概念中,而没有学到实质性和有价值的内容;同时无法解决的困惑也会使人的热情受挫,产生消极情绪。阅读小项目的好处,就是你可以很快的了解整个程序的逻辑,集中精力发现和学习其中的细节,攻克一个个难关,向真正的项目靠近。
5、纵观全局,才能深入把握细节
阅读代码的最佳方式是什么呢?
那就是从宏观层面,以全局的视角去了解你所读的代码。如果不了解,建议你阅读项目网站、教程、文档或者任何资料(除代码以外的)。
了解以后,再对项目的结构进行了解。这项工作所花的时间取决于你你所选择代码的规模,任何多于一个文件的项目都需要时间。
还要注意文件结构。这一步可以使用一个有文件夹层次结构视图的编辑器(如 TextMate),比如,这是一个很好的Twitter Ruby gem 总览。
这么做的目标是熟悉源代码。找出哪些文件包含/需要/加载其它文件,大部分代码在哪?使用的命名空间是什么?等等。有了全局的掌控,将极大的有助于深入挖掘细节。
6、化被动为主动,记录每一个发现
阅读代码的时候,你可以添加注释,在开始了解程序流程时,记录你的假设和结论。评论刚开始可能是这样的:
# I think this function is called after 'initialize'
# 我认为这个函数在“初始化”之后调用
# What does this equation even do?
# 这个公式是做什么用的?
# Pretty sure this variable loses scope after line 17
# 非常确定这个变量在 17 行后失去作用域
但是,随着你的深入理解,你可以删除自己的用户评论,写出可以反馈给项目的更有意义、更权威的评论。
7、执行的过程,体会的是亲身的感悟
当你亲手打破一切,再将它们重新整合在一起,你才能有更深刻的体验,并且明白其中的奥秘。
记得你做过的那些测试吗?使测试失败,添加一些新功能,或者尝试在不破坏的情况下改变执行。尝试着添加一些你觉得很酷的小功能,或者设置项目范围的日志记录,这样可以在代码各个阶段打印输出。这种感觉就像身临其境,感受着冒险带来的激情和快感。
8、重复的过程,增进的是自己的能力
当你读完一个代码库,选择另外一个代码库重新开始这个过程。代码读的越多、读的越好,完成的时间就越短。这样,你的编程能力也在潜移默化中,得到了质的飞跃!