即使您不擅长产品等,以这种方式阅读源代码也很困难。可以说阅读源代码是程序员的基本功。这个基本功扎实与否,会极大地影响一个程序员技术成长的速度。2014年写《Qt on Android核心编程》和《Qt Quick核心编程》的时候,通过分析Qt源码理解了很多内容。这几天对CEF和PPAPI的研究,主要还是靠研究源码了解用法。最近想修改已有项目的某个子系统,必须先看代码。总之,在过去十年的开发工作中,阅读了太多的源代码,从源代码中学到了太多的东西。不看源码,真不知道自己能不能长高。写代码从模仿开始,改进也从观察别人优秀的设计和代码开始。所以阅读源码非常重要。接下来,我们从以下几个方面来谈谈阅读源码。目的工具知识准备运行和开发环境注意事项实用技巧心理调试(走在各个环节)目的当我们阅读眼前的源码时,我们有以下目的:纯粹学习增加新功能重构旧代码修复别人的bug不同的目的会有不同的心情,会影响工作的进度。修别人的bug之类的事情,就好比一只没弯腰的雄猿捏着鼻子给别人擦屁股。令人厌恶,容易让人拒绝。因此,针对这种目标阅读源码,往往是一种拒迎,欲言又止,效率低下。但是,在实际的修复工作中,帮助别人修复bug,十有八九会遇到,也是不可避免的。因此,心理调整非常重要。学习阅读源码,这是最享受和放松的。但是提醒一下,只有设定了可验证的目标,你才会得到回报,否则你会像走在街上看到美女路过一样惊奇,然后这段感情就没了。其他目的,重构旧代码,增加新功能,比帮别人清沟(陕西话,屁股)稍微好一点,因为他有创意,创意活动能给人带来强烈的快感,所以虽然这两个目的也有很多不愉快的地方,但想到我可以让一棵老树重新焕发活力,不愉快逐渐减弱。工欲善其事,必先利其器。这是一个永恒的真理。要很好地完成阅读源码的任务,我们大概需要以下工具:SourceInsight,最好的源码浏览工具,可以维护符号库,动态显示上下文,绘制调用关系图,最好的,没有之一其中Paper笔记本,随时记录心得和疑惑,随时画各种图(类图、时序图、框图),比UML工具还快,比VisioNeutralNotepad、Notepad++、有道云笔记、微知笔记还快等,记录阅读源码过程中的重点、心得和分析过程。Visio用于绘制简单的框图,表达源代码的模块划分和层级结构等。StartUML用于最终绘制类图、时序图等,方便交流扫描CamScanner,一个可以实现的app拍照扫描效果,你可以用它扫描你写在纸质笔记本上的文字,画出框架图,分享给其他人。如果你懒得用软件画图标,那么手绘之后扫描成电子文件是最适合你的。为知识做准备是非常重要的。准备好之后,自然而然,快感也随之而来。否则,你会屡屡受挫,觉得路漫漫其修远兮。商业基础。每一个有意义的源代码都离不开业务。您必须首先具有业务的概念技术基础。这段源码使用了哪些语言、框架和第三方模块?需要先看懂文档,尽量找业务、需求、摘要、细节等文档会有很大的帮助。但是,我们经常面临只有源码,只有源码,只有源码,没有单字文档的情况,所以我们要坚信源码是最好的文档。这个心理门槛其实很容易过。你就想象一下,源码只是一个神仙姐姐的画像。无论看多少人像,都抵不上一个正视的强大效果——要么破坏三观,要么萦绕心头。找出哪个程序员维护了这个。代码方便后面不懂的时候求教。有的时候人家点一下你就想了一天运行开发环境配置开发环境。目的是调试。对于一些程序员来说,调试是了解软件内部机制的最好途径。方法,按F5、F10、F11、F9,一切搞定配置运行环境,准备使用软件,体验软件,站在用户的角度,从外面看软件里面发生了什么,所以搞清楚内部逻辑笔记在阅读源码的过程中,做笔记是必须的。我有这样的经历,因为代码不是自己写的,所以很难快速印在脑海里。我经常看着这个而忘记那里。早上感觉数据的流向还懂,吃完午饭就忘记了。因此,笔记尤为重要。找一个适合自己的记录方式,不管是小本子还是软件。使用软件(Notepad++、有道笔记、微知笔记等)记录有个缺点——必须切换屏幕,形式上会打断代码阅读过程。所以我常常在紧张得停不下来的时候,在本子上写一些断句断章。走到尽头,我整理一下,用软件记录下来。记录的越详细越好,但是不一定要看记录的是什么,需要隔段时间记录,比如当你理解了某个子模块的逻辑,某个类的功能,某个类的调用关系的时候功能,否则记录这个动作会在每天工作结束时打断思考,记录进度(想通的部分),记录问题,记录第二天想通的东西,这样你的工作状态就会被推入栈中,第二天到来时很容易出栈,快速进入工作状态,记录你看到的优秀设计,提升审美,学习他人,成长为传承者自我成长。在漫长的代码阅读生涯中积累了一些经验。一个业务如何映射到代码执行流程上很关键。弄清楚不同模块之间的业务关系和代码调用之间的关系是非常重要的。调试是了解代码调用过程最快的方式。其中之一是找出关键代码(代表实际对象的类、连接不同模块的类、关键业务节点)类)分析日志可以帮助分析代码执行过程和业务流程。首先,使用现有的可运行软件来体验业务,并思考当您点击这里或那里时代码可能会如何响应。读书要以目的为重,把实现目标放在首位,比如修改bug。如果有deadline的话,在deadline之前搞定是重中之重,有空再继续阅读源码或者完善bug修复方案,力求没有副作用和后遗症。有空修别人留下的破窗(也可以顺便鄙视一下以前的maintainer)问千遍,记住要弄清楚自己想看的代码是谁维护的,别不好意思,问,问,问,看看设计文档,接口文档或测试用例前的代码心理调试,不怕困难,不放弃。有时候看代码,两天都不知道看什么。迷茫是常事,有时我真的感到迷茫。那是因为你找错了入口。要知道,任何代码都是用一条看不见的线串起来的。耐心点,你总会找到的。这个不行就做那个,多换角度,多换方法,看不懂就调试,调试不了就运行,不行干活,就研究一下log,不行,我靠,while(!i.isDead())i.analyzeCode(),死Y!总之一句话,你不放弃自己,就没有人能放弃你!给自己设置小奖励,奖励自己搞清楚某个逻辑或某个模块的代码后休息一下,走出办公室走走5到10分钟,或者干脆上网浏览一下,浏览一下自己喜欢的网站就不要了理解他们。一定要看,看不懂就想想。这是进步和成长的开始。那些挡在你路上的人会蹂躏你,但不会杀死你,最终会帮助你成长,让你变得更强大。
