如何阅读源代码

来源:互联网 发布:旺材 知乎 编辑:程序博客网 时间:2024/05/30 23:45
  个人认为, 一个编程初学者在初期应该经过大量的编程训练, 阅读大量经典的编程、技术书籍, 来掌握基本的软件开发技能, 能够使用各种框架、库、组件等以及常用编程工具开发出实用的功能, 并熟悉基本的开发流程。 这大约应该需要2-3年时间完成。 之后, 就应该通过大量的阅读, 思考、 揣摩来增强见识, 汲取更优秀的做法, 提升实践的高度。  每天 8 个小时编程的时间, 真的很足够了。 按说, 如果编程真的用心而且努力去创新的话, 6 个小时都足够。  再多的时间, 其实不过是磨磨蹭蹭的低效率而已。


        一个真正优秀的程序员,  是不需要加班的,除非自愿; 因为他将以  6-8 小时的时间, 产出 12-16 小时的价值; 其它的时间, 用来产出其它方面的价值,或者从侧面(比如增强身体素质, 大脑思考活跃度)来提高产能效率(产出价值/时间)。  同样, 别人走在你前面, 并不是别人比你聪明, 比你富裕, 而是别人掌握了某种方法, 这种方法能够像滚雪球一样拉开彼此之间的差距。 

  

        开发方法:    阅读 API 文档, 学会如何使用; 阅读源代码, 理解内部实现原理; 
                            与同行交流探讨, 向高手请教; 勤于思考、总结和提炼。   
 
 

   1.    先整体后局部

         优秀的开源项目通常会有清晰而有层次化的项目组织结构。

         拿到项目源代码, 第一件事:概览项目组织结构, 弄清楚哪些主要模块(包),  各个模块(包) 下面的主要作用;各个模块(包) 下面哪些主要类, 其作用如何。

 

   2.     有目标性的阅读

        在开始阅读源代码之前, 心里要定一个目标去驱动阅读。 要定位软件运行时的BUG , 还是要弄清楚感兴趣的某个点的内部实现原理? 抑或者做一些修改?  先攻取一个小分支。 就像一个人说的, 物理学家一上来也不是能一下子弄懂整个宇宙的。

 

   3.    直攻核心与常用

          任何设计都会隐式或显式地有“关键角色” 与 “支撑角色” 的分工, 也会划分出 “常用” 与 “不常用”的界限。 对于理解原理来说, 应该直接去学习和探索 “关键角色” 部分; 对于使用来说, 应该直接去学习和探索“常用”部分。

 

   4.    边阅读边注释

         这个做法也挺好, 毕竟人确实容易看后面忘前面。 对读过的地方做些必要的注释, 主要突出其用途,必要的实现细节;

 

   5.    搭建环境, 运行, 调试

          搭建好源码环境, 运行起来, 然后设置断点调试, 观察结果, 很好的跟踪方式;

 

   6.    从简单着手, 善于分解小任务

          对 Spring ,  Tomcat 的源代码无从下手?  从 JDK, Junit 看起;  看不懂 Extjs Grid 的代码? 从 Label, ComboBox  着手; 一个庞大的类看的吃力? 不妨将其分解成多个小任务, 各个击破。

         就像任何一门技艺一样, 阅读源代码的技能也要从基础一点一点的训练, 直到娴熟、炉火纯青的境界。

 

   7.    认清本源, 主动思考,  大胆猜测和仔细验证

        遇到复杂框架或组件时, 首先认清楚其本源。 比如, 无论多么复杂华丽的前端框架, 最终都将转化为 HTML/Javascript/CSS, 只是该框架做了一层适配和转化; 无论多么复杂的Web服务器,无非是并发接收请求,处理请求和返回响应, 只是占用资源、性能、吞吐量、适应范围、可扩展性、易用性、易学性等诸方面有所考虑和权衡;

        根据自己的开发经验和才智, 主动思考和大胆猜测:  如果是自己, 将会如何实现?  可能是通过何种方式来实现?

 

   8.   难以看懂的地方是挑战和提升的机会

         总会遇到看不懂,想不通的地方;  这时, 可能需要弥补下基础知识, 也可能学习到某种高级技巧, 一定不要放过这种学习机会。

 

   9.    找点其它的事情做做

          阅读源代码可不是这世界最美妙的事情。 如果起初不是很适应的话, 可以先读若干函数, 然后做点其它事, 比如活动活动, 听听歌看看视频, 然后再回来阅读, 反复如此, 来逐渐增强这种耐心和适应感。        

 

   10.    耐心, 毅力,  攻城之战

         这是必过的槛, 必须攻克的城池。 有些艰难, 需要很大的耐心和毅力, 但是, 一旦攻下, 就为后面的前进打下很好的铺垫了。
 
 
原文链接:http://www.csdn123.com/html/blogs/20130606/20157.htm
原创粉丝点击