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

  最近开始看一些大工程量的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 模式,一直深入到最底层,给能了解作用的底层函数一个一个的写文档。当然这时的文档是完全底层的观点。

一些心得体会

  • 将代码当作阅读理解来读!
    文章尚且是有逻辑的,代码也是。我们读文章的时候最重要的不是记住里面优美的句子,而是要能够理解作者所说(也就是文章的内涵、中心思想)。代码也是一样,将它看作优美的文章,想象着自己在探索一个真理、在读一个有趣的故事,这样看起来就不会太枯燥无味了。
  • 带着目标去读,往往效率高而且不容易困!
    如果只是消遣,那往往就是读完文章后总结一些内容就作罢。但是要想学习到文章中更深刻的内容,就需要另一种方式。给自己提问题,比如:这段代码什么作用、参数怎么调用的、代码整体逻辑是什么样的等等,这样在读代码的过程中就会有针对性地去学习,也比较容易能记住。

最后,最重要的,一定是动手去练、去写!

  • 可以对每一小步、每一个小语句或每一个代码块进行输出,看结果,来熟悉语句
  • 训练整体的模型
  • 35
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 学生管理系统是一种非常实用的软件,可以方便地管理学生信息,提高学校管理效率。在编写这个系统源代码,需要考虑到以下几个方面。 首先,要考虑到系统的用户是谁,他们需要什么功能。比如说,学生需要查看自己的成绩,课程表等,教师需要录入成绩,管理课程等等。因此,在设计系统需要根据不同用户需求进行分类,提供不同的功能。 其次,在设计需要考虑数据结构,数据库等方面。例如,学生信息需要包含姓名、学号、班级、电话等等信息,可以使用数据结构来进行存储和管理。同,系统中还需要储存成绩信息,班级信息,课程信息等等,需要使用数据库来进行管理。 最后,在编写源代码,需要注意代码的可读性,功能的实现效率,代码的安全性等等。在编写代码,遵循良好的编码规范可以使代码更加可读性强,而选择高效的算法,则可以使系统功能更加优秀。另外,对于用户输入的数据,需要进行安全验证,防止出现非法操作。 总的来说,学生管理系统是一个比较复杂的软件,需要考虑到多方面的因素。但只要遵循系统设计的基本原则,并不断进行完善,就能够开发出一款优秀的学生管理系统。 ### 回答2: 学生管理系统是一款可以管理学校学生信息的软件工具。它可以帮助学校管理学生的基本信息、学籍信息、成绩信息等内容,方便学校、老师以及学生本人进行必要的学习管理。 在编写学生管理系统的源代码的过程中,需要考虑以下几个方面: 1.用户界面:一个良好的用户界面可以方便用户使用系统。在设计界面,要考虑用户的使用习惯和界面的美观性。 2.数据存储:学生管理系统需要存储大的数据,包括学生信息、班级信息和成绩信息等。在设计数据存储方案,要考虑数据的安全性和可扩展性。 3.权限管理:学生管理系统需要限制不同用户的权限。管理员可以对学生信息进行增、删、改和查的操作,而学生本人只能查看自己的信息。在设计权限管理,必须确保各种角色的权限都得到了合理的限制。 4. 数据的可视化展示:该系统不仅可以借助图表展示学生的成绩、学习排名,也可以展示学生的课堂表现以及日常综合素质等。 总的来说,学生管理系统源代码的设计包含了多个方面,涉及到用户界面、数据存储、权限管理等多个方面。只有在考虑周全的基础上,才能设计出一个高质的学生管理系统,为学校及学生管理提供更好的服务。 ### 回答3: 学生管理系统是一种管理学生信息的软件系统,主要包含学生信息的录入、查询、修改、删除等功能。其源代码主要由各种编程语言编写而成,如C语言、Java、Python等。其中,使用C语言编写学生管理系统源代码具有如下优点: 首先,C语言是一种高效且易于掌握的编程语言,其代码执行速度较快,可以有效提升学生管理系统的运行效率。 其次,学生管理系统源代码的编写需要采用模块化设计思想,C语言中的模块化编程方式可以方便地划分功能模块,并利用结构体、指针等数据类型实现不同模块之间的数据传递。 再次,学生管理系统源代码中需要进行大的数据库操作,C语言中可以使用MySQL等数据库操作库,方便进行数据库的连接、查询等操作。 最后,C语言具有跨平台性能,可以在不同的操作系统上运行,这对于多用户使用学生管理系统的情景非常有利。 需要注意的是,学生管理系统源代码的编写需要遵循一定的规范,例如采用良好的变命名、注释等方式,以便于他人阅读和维护。同,也需要考虑系统的安全性,防止恶意攻击等威胁。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值