`
FPGA_学渣
  • 浏览: 8008 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何看懂别人的代码(上)

阅读更多
对于IT相关从业人员来说,看别人代码是必不可少的磨难。在学习阶段,我们经常需要从书上看别人的代码以吸取宝贵经验,这是相当枯燥无趣的过程,也时常无法领会作者的意图。在实际工作中,不可避免的出现需要接手做到一半的项目或是团队合作的项目,这时候就必须看以前的工程师的代码。如果说看书上的代码用痛苦来形容的话,那么这种情况时遇到代码不够规范或者设计不合理,简直就是苦不堪言。还有一些神一般的选手,设计者在编写代码时的“灵机一动”,其结果只有他自己和上帝才看得懂。这些代码能看得你觉得生不如死,甚至开始怀疑人生:到底是代码写得混乱or我水平不行?!你以为这是最痛苦的吗?NO!还有一种情况足以令你看得生不如死,甚至开始怀疑人生。那就是遇到运行不正常的代码,对问题排查错误花的时间和精力还不如重新写一遍,这时你的内心完全是崩溃的!

有一件事非常无奈,我们不可能要求别人的代码都非常规范。所以,正确的学习方法和思维方式尤为重要。怎样看他人代码才是正确的方式?看代码之前应该做些什么准备工作?看代码用正向思维还是逆向思维?如何判断代码中哪些地方是否值得借鉴?由此,掌握到一种通用的去看懂别人代码的技巧显得非常重要。下面我们就来谈谈这方面。

我们知道,而实现功能可能有很多种方法,所以不同的人写出的代码不相同。通过看代码去知道它要实现的是什么功能是一件很困难的事情。有些初学者会想到采取仿真一下、看电路图、流程图、时序图、注释等等方法,都是不可取的,通过这些你还是无法知道它的功能,以及有没有错误。

那么正确的方法是什么呢?我们采取一种可称之为“反推法”或是“逆向法”的方式,这个问题就迎刃而解了。要知道,代码的目的是实现功能。无论你用那种代码,有一点完全相同的就是“实现功能”这个最终结果。了解到这一点,我们就可以通过结果(功能)去反推过程(代码),代码的思路、流程、用途就抽丝剥茧清晰的显露出来。好的,下面我们举个实例来说明怎么通过反推法有步骤的去看懂别人的代码。

代码1。

如果我们按照自上而下的顺序去看这个代码,通过代码的过程去看实现的功能会是很困难的事,甚至看不明白它要实现的是什么功能。Ok,我们现在从功能看起,这个代码要实现的是“帧率采样计算”这个功能,可以理解为图片每秒显示多少帧数。

1.从代码中我们可以看出,CMOS_FPS_DATA 这个信号是我们所要求的信号(一秒内的帧数率);
2.CMOS_FPS_DATA <= fps_data >>1在一段时间内保持不变,才是我们所要的结果;
3.从CMOS_FPS_DATA <= fps_data >>1中可以看出,CMOS_FPS_DATA是通过fps_data 这个信号来实现;
4.fps_data这个信号是怎么来的?反推到fps_data <= 0和fps_data <= fps_data + 1'b1这两个信号。fps_data复位为零,在else if(Frame_valid)条件下加1;因此fps_data为帧数率标志信号;
5.从CMOS_FPS_DATA <= fps_data >>1中可以看出是通过<= fps_data >>1右移一位,也就是说除以2得到这个值的;
6.为什么要fps_data除以2来得到这个值?于是反推到if(delay_2s == 0)这个条件。

现在作者的意图就非常清晰了。满足帧数率的情况下不断+1,到2秒时间时根据统计结果除以2,由此得到1秒时间的帧数。到此为止,我们已经可以非常容易的看懂这个代码了。

通过反推法我们也能比较容易的去看代码是否有错误。首先我们去知道代码需要实现的功能,通过反推法得知是通过什么方法实现的,进而仿真时定位其目标,去看该代码是否完成了功能。如果没有完成功能,那么代码就有误。

对于学习者来说,反推法的意义还不仅在此。在本例中,这个设计思路完全满足功能要求。这时,我们应该扩展思考,本例是通过2秒来实现功能,为什么要用2秒?是否可以直接通过1秒,或是3秒,或是其他方案来实现呢?各种方法的优缺点在哪里?通过反推法得知作者实现项目的方法并思考,这种方法正确还是错误?如果是错误或者这种方法不太好,那么我们如何避免?如果是优秀的代码,我们如何借鉴并能举一反三地运用到其他项目中去?本例只是选取项目中的一个小的节点,对于看整个项目的代码来说可以运用反推法吗?敬请关注下一节:《如何看懂别人的代码(下)》。
分享到:
评论

相关推荐

    精品~教你看懂别人的源代码

    "精品~教你看懂别人的源代码" 在软件开发过程中,阅读别人的源代码是一项非常重要的技能。无论是从开源项目中学习新的技术,还是在工作中接手他人的代码,了解别人的源代码都是不可或缺的一部分。然而,许多程序员...

    如何读懂源代码

    此外,熟悉编程语言的惯例用语也是重要的,包括一些特定的编程习惯、代码编写风格和常见模式,这些都是阅读他人代码时必须要有的基础准备。 接着,理解程序码的架构是读懂源代码的另一个关键。源代码并不是单纯地...

    怎么快速看懂别人的源代码

    总而言之,快速理解他人代码并非一蹴而就的事情,而是需要通过一系列的方法和技巧逐渐积累起来的能力。以上几点建议希望能够帮助到那些正在努力提高自己代码阅读能力的朋友。最后,实践出真知,多参与实际项目并勇于...

    如何读懂源代码!如何分析源代码方法!

    源代码是程序的灵魂,能够读懂别人的代码不仅可以帮助我们学习新的编程技巧,还能在接手前任遗留的项目时快速定位问题、提高工作效率。对于新手而言,读懂源代码是学习编程和快速融入项目的基础;对于老手而言,则是...

    如何读懂代码

    这是我自己参考网上的文档,加上自己的开发一点小小的体会,写了如何读懂代码,希望对开发新人有所帮助!

    读懂别人的程序代码.pdf

    读懂别人的程序代码.pdf

    C# 加密狗,您绝对看不懂的代码,超经典。

    这个"超经典"的C#加密狗代码可能包含了一些高级的加密算法和反逆向工程的技巧,使得它看起来难以理解。 加密狗通常通过USB接口与计算机连接,并通过特定的驱动程序与软件进行通信。在C#中,我们可以使用System.IO....

    关于c#的命名规范,里面详细的对c#中的命名进行了讲解,使我我们能够更容易的让别人读懂我们的代码

    C#是一种面向对象的编程语言,其代码质量与可读性在很大程度上取决于遵循的命名规范和编码风格。良好的命名规范使得代码易于理解和维护,同时也有助于团队间的协作。以下是对C#命名规范和编码规范的详细说明: 1. *...

    Qt Creater快速入门及本书源代码

    1. **安装Qt和Qt Creator**:讲解如何在不同操作系统(如Windows、Linux和macOS)上下载并安装Qt和Qt Creator。 2. **Qt Creator的工作环境**:介绍Qt Creator的界面布局,包括编辑器、项目管理器、构建和调试工具...

    解读verilog代码的一点经验

    学习FPGA其实也不算久,开始的时候参考别人的代码并不多,大多是自己写的,那时候做时序逻辑多一些。参加了中嵌的培训班,一个多月的时间在熟悉ISE软件的使用以及verilog语法方面下了苦功,也参考了不少书,算是为...

    java代码规范

    但是,维护工作不仅仅是读懂原有代码,而是需要在原有代码基础上作出修改。我们可以先想像没有统一风格的情况下,A完成开发以后,B进行维护加一段代码,过一段时间C又加一段代码。。。。。。直到有一天X看到那一大堆...

    c语言、头文件代码混淆器

    自治c语言代码混淆器,可选择移除c语言注释、变量名混淆、函数名混淆,#pragma行删除,#region行删除,空行删除。 可屏蔽不被混淆的关键词、导入导出关键词列表,...可以保护在需要将源码给出时保护代码不被别人看懂。

    用java开发的一个超级玛丽可以在手机上玩。代码清晰条理分明很容易看懂。包含了铺地图等.rar

    10. **版本控制与源码组织**:项目可能使用Git进行版本控制,良好的代码结构和注释可以帮助他人理解和学习。文件名的风格提示代码结构清晰,有利于团队协作和代码维护。 以上是基于提供的信息推测出的一些关键知识...

    元旦倒计时代码 EASY-别人盗用我账号上传的,系统提示病毒,删除不掉

    运行演示 - 将代码复制粘贴到编辑器工具后,...- 上面的倒计时代码我注释了一些Roo,方便大家看懂,大家可以根据自己的要求阅读和自行纠错。 - 请注意,如果您想在您的网站上嵌入代码,请复制 body 标签中的强代码。

    C# 三层架构演示代码

    如果你下载过别人的复杂的三层架构代码看不懂.请下载我的试试....需要掌握以下知识 点才能看懂 1.接口 2.继承 3.构造函数 4.反射 5.简单工厂模式或者抽象工厂模式 6.类.对象的基本知识:如属性,方法 7.多态

Global site tag (gtag.js) - Google Analytics