`

转 如何读懂源码

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



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



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



    规则三,调试。我认为调试程序员最重要的功底,而不是最重要的之一。断点下在哪里最有可能定位问题所在,但又不浪费时间,记住断点并不是越多越好。什么时候应该用条件断点。碰到一个新的程序,你肯定要在入口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.
分享到:
评论

相关推荐

    易语言汇编实现文本和双精度小数转换源码

    易语言是一种基于中文编程的程序设计语言,旨在降低编程难度,让不懂英文的用户也能进行计算机编程。在易语言中,汇编语言模块提供了一种更底层、更高效的编程方式,尤其是在处理数值转换等特定任务时。本资源主要...

    谈谈jQuery之Deferred源码剖析

    ### jQuery之Deferred源码剖析知识点 #### 一、Deferred和Promise简介 jQuery的Deferred对象是jQuery在ES6的Promise概念出现之前的一种实现,它允许开发者将异步操作的结果通过链式调用的方式处理,避免了传统的...

    易语言源码易语言备份还原剪贴板源码.rar

    理解这些基本语法元素是读懂源码的关键。 2. 剪贴板操作: 在Windows操作系统中,剪贴板是用于临时存储数据的共享内存区域。易语言提供了操作剪贴板的内置函数,如“复制到剪贴板”、“从剪贴板获取文本”等。源码...

    易语言源码易语言优化字节集与16进制文本互换源码.rar

    易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程的难度,让不懂英文的用户也能进行软件开发。在易语言中,字节集和16进制文本是两个重要的概念,它们在数据处理和存储中发挥着关键作用。 **字节集:...

    易语言源码易语言MD5自检源码.rar

    理解易语言的基本语法结构,如变量定义、控制流程、函数调用等,是读懂并修改源码的基础。 2. **MD5算法**:MD5算法的核心在于将输入数据通过一系列的位操作(如异或、旋转、加法等)和散列函数,最终生成一个128位...

    易语言源码易语言公式取时间文本源码.rar

    易语言的核心理念是“易学易用”,它采用汉字作为编程关键字,使得不懂英文的用户也能编写程序。易语言支持基本的数据类型(如整型、实型、字符串等),控制结构(如条件语句、循环语句),以及丰富的函数库。它的...

    易语言转动的眼睛源码.7z

    易语言的核心设计理念是“易学、易用、易读”,它的语法结构直观,类似汉语的语句形式,例如“设置窗口位置”、“获取鼠标位置”等,使得不懂英文的程序员也能快速上手。易语言支持多种数据类型,包括整型、实型、...

    倩女幽魂源码易语言成品

    源码是程序的核心部分,它包含了编写程序时的人类可读指令,通过编译或解释器转换成计算机可执行的机器语言。对于《倩女幽魂源码易语言成品》,源码分析可以为我们揭示游戏辅助工具的工作原理,如何与游戏服务器通信...

    python编程快速上手源码

    最后,记得在学习过程中,不仅要读懂源码,还要动手实践,尝试修改和扩展代码,这样可以更好地巩固和提升你的编程能力。同时,结合书籍的讲解,理解源码背后的逻辑,将理论与实践相结合,会让你在Python编程的道路上...

    C#生辰八字生成器源码

    6. 源码阅读与分析:学习如何读懂他人的代码,提升编程技能。 这个项目对于初学者来说是一个很好的实践案例,不仅可以加深对C#和GUI编程的理解,还能接触和学习到中国传统文化中的历法知识。同时,源码的开源性质也...

    易语言读HEX文件源码.7z

    在“易语言读HEX文件源码.7z”这个压缩包中,包含的是使用易语言编写的读取HEX文件的源代码。HEX文件,也称为十六进制文件,通常用于存储二进制数据,例如编程器或调试器使用的程序内存映像。 在了解这段源码之前,...

    易语言源码易语言WMI取主板温度源码.rar

    易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程技术门槛,让不懂英文的用户也能进行软件开发。在本压缩包“易语言源码易语言WMI取主板温度源码.rar”中,包含了一个易语言编写的程序,该程序能够...

    Verilog源码.zip

    同时,理解图像处理的基本原理和算法也很重要,以便于你能够读懂代码逻辑并进行修改或扩展。 总的来说,这个压缩包提供了一个实践性的学习平台,让你能将理论知识与实际的硬件实现相结合,对于提升FPGA开发和数字...

    易语言学习进阶读字段值源码

    易语言是一种基于中文编程的计算机...如果遇到不懂的概念或语法,可以查阅易语言的相关文档或在线教程。同时,尝试自己动手修改和运行代码,实践是最好的老师,这将加深你对易语言读字段值的理解,并提升你的编程能力。

    数位影像处理教程源码

    这样,你不仅能读懂代码,还能理解为什么要这样做,从而能够根据实际需求进行修改和扩展。 总的来说,《数位影像处理教程源码》提供了一个实践性的平台,帮助开发者将理论知识转化为实际应用,对于想要在图像处理...

    RichEdit 控件源码

    这涉及到Windows编程的基础知识,如窗口消息机制、控件管理和文本格式化技术,同时也需要一定的C++编程经验,以便能读懂和修改源代码。通过学习和实践,开发者可以创造出更加符合用户需求的界面控件,提升应用程序的...

    易语言源码易语言反汇编模块源码.rar

    易语言是一种基于中文图形界面的编程语言,旨在降低编程难度,让不懂英文的用户也能进行程序开发。"易语言源码易语言反汇编模块源码.rar" 是一个压缩包,其中包含了易语言的反汇编模块的源代码。这个模块主要用于将...

    易语言文本与字节集转换源码.7z

    易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程技术门槛,让不懂英文的用户也能进行软件开发。在易语言中,处理文本和字节集是非常常见的操作,尤其是在数据传输、加密解密以及文件读写等场景。本文...

    易语言DLL函数查看器源码.zip

    1. **中文编程**:使用全中文的语法,使得不懂英文的程序员也能轻松上手。 2. **易学易用**:通过直观的图形化界面和简单的语句结构,降低了编程的门槛。 3. **组件化编程**:提供大量内置组件,用户可以直接调用,...

    易语言源码图片转超级列表框大图标.rar

    1. **读图片文件转超级列表框大图标.e**:这是一个易语言编写的源代码文件,很可能包含了实现图片到超级列表框大图标转换的核心算法和逻辑。用户可以打开此文件,查看并学习如何在易语言中读取图片,并将图片数据...

Global site tag (gtag.js) - Google Analytics