如何快速读懂别人的Python代码?新手程序员如何学会读代码,怎么才算说是会阅读代码?

【看文件结构,文件名字,doc,官方文档,做笔记,在源代码中找到答案,多开优质代码】
以下是网上摘抄
在阅读代码的时候,需要先找到主体逻辑,当这个反复总结出来后,再去找到一条线索,进行分析,调研,画流程,类图,时序图。我把阅读代码总结成这几个步骤:

① 看参考文档,快速理清源码结构。

② 打开每个目录,熟悉下源代码名字。

③ 用代码工具打开,建立工程(Source Insight)。

④ 看文件里面的方法,以及方法继承,方法前面的注释。

⑤ 相关联的文件。

⑥ 打通入口,对外的接口。

⑦ 测试验证。

⑧ 网上看别人的分析,以及对照着跑一遍。

⑨ 做笔记,总结。

注意的是,不要上来就追求细节,这样子会让你理不清楚整体框架流程,这个会导致自己越跟越细节,只见树木不见森林的感觉。在一份代码出来后,第一件事就是看它的文件目录下,有没有类似Docs,Sample这类目录,这个代表着你能够直接看到官方的文档,是最直接的一手资料。

像很多人问安卓 NDK 怎么学,我想说的是 NDK 工具包下面,已经给了全部资料,非常详尽,每个参数都给出了注释,说明,还有就是Google 官方的 GitHub 上,也给出了示例代码,这个就是你的一手资料。我们学习网上的开源代码,第一件事就是找官方文档和示例代码。

官方文档会给你解决这个库能做什么,怎么编译,移植的平台这类信息,让你对这个代码的用途有个初步的印象,可以判定是否是自己需要的。如果官方的文档是英文的,你英文阅读能力一般,可以用在线翻译工具直译,大致也能猜到它的意思。或者自己百度搜索,看看国内有没人做了翻译,写了博客。

我们就自然而然的进入系统源码中,开始了探索源码的历程,关于阅读代码,这里有一些总结,分享给大家:

① 不要追细枝末节,在刚开始时候追两三级嵌套即可

记住要做总结,要知道你不跟下去的的输入,输出是什么。这个就跟我们学习堆栈一样,压入栈太多,引起了栈溢出。代码不可能一次就吃透全部,我们的策略是不断地渗透,今天一个方法,明天一个文件,然后是一个目录,最后是一个项目。

在一个文件结束后,有可能不是目录,而是一个功能。比如我们看了一个查询系统当前的进程列表方法,进而了解了这个文件,那么我们就可以直接检索系统调用这个方法的地方,看看它的用法,以及它是在哪些文件中使用的,这样子就可以找到下一个切入点,再次深入源码当中学习。

② 画流程图,时序图

可以是在线画图软件,本地的话我用的 StarUML工具,可以满足平时的使用。画这个是方便我们总结,也会加深记忆,同时还能让自己有成就感,学习下去的动力。

我们需要激励源,画图如果让同事看到,会让你有成就感,有了炫耀的资本,这样会更激发自己的战斗欲,这就像是好学生因为老师的表扬,会更加拼命学习,为的就是保持这个好学生的身份。

我们对于分析的代码,随着画图会理解的更精准。从记忆深度来说,文字不如图,图不如视频。我们看项目文档,很多时候都是画的图,清晰,并且让你很好理解。你下次遇见问题,就会想起这个图,然后拿出来进行参考。

③ 笔和纸

我自己喜欢写写画画,于是买了一盒中性笔,同时买了一袋打印纸,也不贵,可以用很久很久。用这个的目的是,很多时候我们工具用的不熟,画起来不符合我们的思维,所以需要个东西去乱画,记录下来当前的疑问。

用笔记录疑问,简单的画下流程,为的是让一闪而过的想法留存下来。画流程图和时序图,实际是已经有了一些掌握,不是一抹黑的阶段。当你对整个流程还不是熟悉的时候,最好的方式就是先随意画,记录下来,然后慢慢消化,最后画出来,变成文档。

④ 带着问题进入,有目的性

没有问题的跟进代码,会让自己不知道在干什么,于是我在学习代码的时候,都是先设定问题,有自己的目标。比如分析完这个文件的所有接口,从接口能分析出这个源文件的对外方法都有哪些,这个文件是做什么用的?比如FileUtil.java ,我们一看就知道是文件相关方法,里面有打开,关闭,追加,删除等方法,这个接口列表就是我的目的。

再比如安卓启动过程的入口是哪个文件,这个文件都有什么方法,都有哪些接口可以调用,记录下来,做总结。

如果有官网 API,那么就上去看,然后发现哪个解释自己能看懂,就先看这个,然后顺着这个进行未知的方法探究,这样子可以做到信心满满,不会被满屏不懂的技术打倒。

⑤ 在解决具体问题后,多看看其他方法

这个在学习过程中非常重要,我平时看见很多人阅读代码只看下自己解决的地方,其他地方不怎么仔细看,于是下次遇到一个需求就不知道有没有支持了。

只有你打开好奇心,在时间充足的时候,对你掌握的代码,进行扩充代码领域,从你熟悉的一个流程里,进行不断扩充边界,这样子你最终就攻下了整个模块。

也就是先找一条线跟进这个模块,然后在这个线上找每个细节,继续扩充知识,最后就出现了知识体系,一个参天大树。很多理论都是可以迁移的,比如目标管理里面强调的,目标,拆解,验证,复盘。

先制定可以测量的目标,然后分解成一个个小节,然后一个个小节验证,最终复盘发现新的问题,再制定新的目标。做项目,做需求,阅读代码,都是可以使用的。源码阅读需要一个线,也就是一个目标,设定了目标,就可以去执行。比如跟踪马达从上层到最终驱动,硬件的流程,绘制出来一个时序图。

然后发现这里还有霍尔器件,还有光感传感器,触摸屏,然后在做完了马达的整个逻辑,是不是就可以探索进入其他模块,继续分析。

只有这么去做,你的知识体系才能日渐丰满。

⑥ 总结,写笔记

多去写,多去思考。只有你去写,有机会的时候,最好要去讲。写和讲这两个方向都会将自己模糊的知识点逼出来,更好地认清自己的不足,从而这些就是你下次阅读代码的目标。

同时写笔记,发到网络上,还是建立自己影响力的一个环节。如果你写的好,那么在当下互联网时代,你的机会就会比其他人大很多。

我们要做到喜欢阅读代码,并且有自己的方法,不是胡乱看看,而是有目的,是解决问题,还是深入研究?是总结文档,还是流程分析?

在编程领域,“高质量的实际案例” = 好的代码。

接触大量、高质量的实际案例,在个人学习中的重要性
O’Reilly “深入浅出”系列书籍的合著者之一,凯西·赛拉(Kathy Sierra)在她的新书《用户思维+好产品让用户为自己尖叫》(Badass: Making Users Awesome)中提到,接触大量、高质量的专业实例,是决定人们能否快速有效地学习新技能的两个主要因素之一(另一个因素是坚持练习)。

“你观看(或倾听)专业实例的次数越多,你就能变得更好。你接触的专家或专家的工作结果越少,你培养专业技能的可能性就越小。”
让我们来看看这个显而易见(并不)的,和本文的主题非常相关(才怪)的例子:如何区分小鸡的性别。

别笑,事实上,它是上述概念的一个很好的证明。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值