众所周知,要想写出好的程序,除了要经常写之外,还有看看别人是怎么写的,所以读别人的程序是非常重要的;如今是个信息交换十分发达的时代,你可以轻易的就看到顶尖级选手的代码;开源事业蒸蒸日上,确实是所有程序员的福音。但如何阅读别人的代码呢?尤其对于初学者而言,确实是个难题,就像碰到一漂亮的刺猬,实在不知道如何下嘴。

规则一,你读的越多,你就越容易读懂,因为高手写程序的思维都是趋同的,正所谓万剑归宗;当然你要找到这个“同”,是需要功力的。设计模式是“同”之一,一般碰到同类型问题,大家都倾向于用同样的“模式”处理,所以你了解了这种模式,下次你看某个源程序时,其中有类似问题,你肯定就会想到作者很可能是用这种模式处理的。这样你就会更容易看清作者的思路,理清程序的脉络。

规则二,由上之下,逐步求精。不要一开始就想把所有的细节搞清楚,否则你就会陷入“只见树木,不见森林”的困境。先要理清程序的脉络,知道那个包是干什么的,那个类是干什么的,他们之间有什么样的联系。然后在一个一个问题深究。其思想就是,大而化下,再大而化小...你要细到什么程度,取决于你的要求及期望。一般我看到包,类一层就不会看了,除非我对某个算法感兴趣,我也会仔细在研究之。其实这也是面向对象的设计思想,由上至下,而不是由下至上。无论你看到哪一层,你都可以说“我了解这个框架的实现”,只是看到的粒度不同而已。

规则三,调试。我认为调试程序员最重要的功底,而不是最重要的之一。断点下在哪里最有可能定位问题所在,但又不浪费时间,记住断点并不是越多越好。什么时候应该用条件断点。碰到一个新的程序,你肯定要在入口Main里面下个断点,这个Main就会分几个枝出来,然后对你感兴趣的枝再设断点(Main中也许就不需要设了),依次类推。当然,如何用更好的方法调试某个程序,是需要具体问题具体分析的。这需要经验的积累。曾经有2两个3年经验的兄弟问我同一个问题"这个IF为什么不进去?", 我说只有一种可能就是“IF的条件不满足。”,在IF那设个断点,一个一个条件看。

我也曾阅读过一些源码,如Cindy(一个跟Mina差不多的NIO框架,国人写的),2007年我花了大概一周的晚上,搞清楚了所有细节,然后abbot,一个Java写的自动化测试工具,我研究了一个月,最终肢解并扩展用在我的项目中,还有Mina实现的Ftp,差不多两天就弄清楚了。最近扩展了csvddbc, 增加了cache功能,实现了类似mysql的LIMIT语法。每读一个程序,我都会有收获,"原来这个问题可以这样处理,或是这样处理更好,效率更高"。把别人好的思想装到自己的脑袋了,按老俞的说法,就是"让自己更有价值。"

与其天天记Struct,Spring的配置,还不如了解其思想,当你拥有了足够多的思想时,学习新的框架就会更简单,因为你会觉得"要是是我,我一定会这样处理",结果作者果然就是如你所然,这其实就是规则一。

对刚进公司的新人也是一样,组长给你一个项目代码,让你自己看,也许有些过时的文档;你会非常头大,组长说"你有问题来问我。"经验告诉我,你其实有问题但是都不知道该怎么问。所以你可以依据以上规则,静下心来,耐心的调试,分析,总结,记得要记笔记。不断的假设、猜想,然后证实、证伪。终于你发现,原来是这样,也没想的那么难。

----------------------------------------------------------------------

Mybeautiful, zhangyu0182@sina.com.

如何阅读python源码_如何阅读源代码(转)相关推荐

  1. 面试有没有看过spring源码_怎么阅读Spring源码?

    此问必是有心人,有心人必有心答. --题记 当我看到这个问题的时候,不禁心里一问,为何要阅读spring源码? 在我们的生活之中,有形形色色的万物(Object),有飞机,有汽车,有轮船,还有我这个沧 ...

  2. 如何快速阅读java源码_如何速读?--如何快速阅读

    下面这些资料是我刚才在整理电脑硬盘的时候发现的,是以前自己刚刚开始关注自己阅读速度和质量的时候收集的资料.因为但是上面不方便,所以全是整理成了TXT文件保存下来,现在发到Blog里面,做个记录.速读要 ...

  3. 跳一跳python源码_使用Python实现跳一跳自动跳跃功能

    使用Python实现跳一跳自动跳跃功能 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  使用Python实现跳一跳自动跳跃功能.txt ] (友情提示:右键点上行 ...

  4. 文件管理系统源码_【程序源代码】人力资源管理系统

    " 关键字:精简.实用的管理系统,适合开发." 正文:人力资源系统,覆盖了人力资源管理的六大模块 01 - 技术框架 技术框架 技术上采用了目前比较流行的java技术框架,主要包含 ...

  5. 如何快速阅读java源码_如何进行快速阅读代码

    每个程序员所写的代码都有自己的风格,而我们在参考别人的代码的时候,如何能更快速更好地读懂和自己编程风格的代码呢?下面小编为你整理如何快速阅读代码,希望能帮到你. 快速阅读代码方法 1.阅读源代码的说明 ...

  6. 如何快速阅读java源码_程序员如何快速阅读源代码

    科学研究已经证明:人类进行传统阅读时,主要使用左脑的功能;而在采用速读方式阅读时,则充分调动了是左右脑的功能作用,各自发挥左右脑的优势共同进行文字信息的形象辨识.意义记忆和理解,所以速读又被称之为全脑 ...

  7. echarts python源码_基于Echarts的微代码开发平台SmartChart, 免费开源使用

    A platform that Connect Data to Echarts. 简介 SmartChart基于Echarts/Django的微代码开发平台,适用于任何WEB项目 简单, 敏捷, 高效 ...

  8. arcgis工具python源码_面向Arcgis的python脚本编程_数据

    [实例简介] <面向ArcGIS的Python脚本编程>是一本指导ArcGIS for Desktop专业用户进行Python开发的指南.该书将教会您如何通过编写Python代码处理空间数 ...

  9. 量化交易系统 python源码_零起点TensorFlow与量化交易[PDF+源码][238.77MB]

    内容简介 Python量化回溯.TensorFlow.PyTorch.MXNet深度学习平台以及神经网络模型,都是近年来兴起的前沿科技项目,相关理论.平台.工具目前尚处于摸索阶段. TensorFlo ...

最新文章

  1. 爱立信2015谋变之路:结盟思科聚焦IT业务
  2. 使用Silverlight4无边窗口
  3. matlab神经模糊推理系统
  4. darknet-训练自己的yolov3模型
  5. DOMBOM(source、methods、contents、Application)
  6. [译]ASP.NET Core 2.0 带初始参数的中间件
  7. Maven笔记——依赖管理
  8. 湖北经济学院的计算机怎么样,湖北经济学院怎么样名气高吗?真实排名及实力如何?是一本吗...
  9. java 获取年 两位,java使用jxl读取日期年份只显示前两位的解决方法
  10. 电大计算机应用基础考试复习,电大 《计算机应用基础》形考作业2
  11. idea下以及git如何快速切换remote远端服务器
  12. WPF--ContextMenu绑定命令的一个问题
  13. UIScrollerView ,UIPageControl混搭使用,添加定时器,无限循环滚动
  14. Python读写文本文件
  15. 一拳超人手游显示服务器断开,一拳超人最强之男游戏无法登陆怎么办 解决方案一览...
  16. html页面设置过期时间,meta标签http-equiv=Expires属性写法及用法
  17. SpringBoot 集成 ES 7.6.2 并对字段进行中文和拼音分词处理
  18. python仿360界面_python实现360的字符显示界面
  19. 黎曼积分并非战无不胜
  20. Uncaught TypeError: ‘set‘ on proxy: trap returned falsish for property ‘visible‘

热门文章

  1. opencv 图像傅里叶变换
  2. 运行支持kubernetes原生调度的Spark程序
  3. xilinx sdk对文本内容进行查找(find/replace)的快捷键ctrl+f
  4. 数电六十分通关法则(更新中)
  5. 贺利坚老师汇编课程37笔记:把六个字符串里的头一个字母改写成大写字母
  6. dell 服务器r410装系统,dell r410安装windows2003系统
  7. c语言鸢尾花智能分类,基于LogisticRegression的鸢尾花分类
  8. mysql 物理删除 索引_MySQL 索引重建
  9. poj 3040 Allowance (贪心
  10. WebDriverAgent安装