知方号

知方号

如何学习别人的代码(代码量较大时)

如何学习别人的代码(代码量较大时)

  最近开始看一些大工程量的python代码,作为深度学习小白,每次看着那么多份文件、遇到几千行代码就很头疼,无从下手。而且经常会遇到看了后边忘前面、看不下去等问题。   搜了一些博客和知乎,看到了大神们提出的阅读代码的方法,就想着整理一下,可帮助自己梳理代码逻辑和进阶写代码。最近也有在实践,感觉比硬着头皮看要好多了,希望以后能更加熟练!   以下只涉及阅读学习的一些方法。当然,想要掌握得更好,光阅读是不够的,一定要动手写、训练模型!!!调参、调bug的过程也是吸收的过程。(就像高中做题一样)

  首先,想要解决一个问题,最先要分析出现问题的原因

影响阅读速度可能的原因 对整体的思路没有概念不熟悉常用的类库、函数,包括方法调用不熟悉不熟悉python常用的编程技巧不理解里面的一些算法中途停顿时间太长,接过来后没有形成一个系统的思路。

  接下来,就是具体的一些方法和技巧。

阅读方法 1.整体到局部 把握整体。有个大体的框架在脑海中,此时根据里面的文件名和文件夹,从入口文件大段大段看就可以,知道这段或者这个文件的作用就可以。找到入口后,可以顺着入口来看每个函数的作用和意思;或者可以先看看核心模型部分的算法,标注每个类、函数的作用。 2.熟悉类库、编程模块 首先,影响代码阅读的最核心的问题是对类库不熟悉会带来的问题:引起阅读时左右查资料,精力太分散,一句一句读,经常需要上网查语法,没有办法把精力放在代码的整体结构上,即使是每行代码都看明白了还是不知道整个程序的逻辑,同时耗费精力比较大,很快就累了,效率很低。整理学习。把不熟悉的类库全部整理出来,到官网查用法,一次性过一遍。注意,此时不用全部看,只需要查调用到的地方什么意思,弄明白调用的意思即可。 略读,逻辑很重要。熟悉了常用库和编程技巧之后读代码的时候很多功能自己都实现过类似的,或者之前见过,扫一眼就看明白了,很多函数扫一眼就知道什么功能,思路不会被不懂得语法或者编程技巧打断,一直停留在程序的逻辑上,这样看代码就轻松多了,而且很快。总结建立自己的代码库。代码看的多了就会发现有些语句是非常常用的,而且已经形成套路了,在阅读的过程中可以将这些代码段总结下来,便于以后使用。 3.静心看算法,及时看论文 遇到不熟悉的算法一定要提醒自己静下心来。如果有注释可以根据注释来理解。如果没有,一方面可以先跳过,继续了解整体,然后再细分了解这个算法;另一方面及时返回论文,去看模型的思路或实验中的一些细节等,论文相当于部分代码注释,而且还能帮助加深模型的理解。 4.连续性 趁热打铁。最好不要今天看一点点,隔了非常长的时间再看其他部分。如果实在看不完就先把一个较完整的模块看完,有必要一定要做记录,方便明天再看。 5.好记性不如烂笔头-阅读代码的两种模式

这个部分参考了一位大神的回答: https://www.zhihu.com/question/21186887/answer/18195570

top-down 模式:就是先设定一个 use case,比如说打开一个文件。然后静态跟着代码看,或者用 debugger 跟着看。每次出现函数调用的时候,把函数的执行层次纪录下来。把重要的「实际参数」一直标下来,这样阅读深层次代码不用再回头查形式参数到底指什么。大致如下: f1( para1, para2, … ) f2( para1, para2, … ) f4( para1, para2, … ) f3( para1, para2, … ) bottom-up 模式:top-down 模式进行到一定层次,往往会发现虽然图画了出来,但还是无法了解程序再干什么。这时需要转入 bottom-up 模式,一直深入到最底层,给能了解作用的底层函数一个一个的写文档。当然这时的文档是完全底层的观点。 一些心得体会 将代码当作阅读理解来读! 文章尚且是有逻辑的,代码也是。我们读文章的时候最重要的不是记住里面优美的句子,而是要能够理解作者所说(也就是文章的内涵、中心思想)。代码也是一样,将它看作优美的文章,想象着自己在探索一个真理、在读一个有趣的故事,这样看起来就不会太枯燥无味了。带着目标去读,往往效率高而且不容易困! 如果只是消遣,那往往就是读完文章后总结一些内容就作罢。但是要想学习到文章中更深刻的内容,就需要另一种方式。给自己提问题,比如:这段代码什么作用、参数怎么调用的、代码整体逻辑是什么样的等等,这样在读代码的过程中就会有针对性地去学习,也比较容易能记住。 最后,最重要的,一定是动手去练、去写! 可以对每一小步、每一个小语句或每一个代码块进行输出,看结果,来熟悉语句训练整体的模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。