当前位置: 首页 > 科技观察

程序员提高阅读代码能力的几种方法

时间:2023-03-22 02:01:48 科技观察

有朋友问:如何快速提高自己的编程能力?感觉永远不会有正确答案。每个人都有自己的套路。今天我就谈谈我对这个问题的看法:学会高效地阅读代码是一个很好的方法。阅读代码可能和编写代码一样重要!为什么要读代码?考虑以下场景:案例1:您仍在学习,按照教程,按照示例学习编程。一开始大概率会先看别人的代码,看懂别人的代码,而不是一上来就开始写。这是我YY学习写代码的一种学习模式,所以看完理解之后,我自己就可以使用,然后书本和别人的知识就会涌入我的脑袋。案例二:一个职场新人,一进公司就加入一个项目组,项目代码真是让人应接不暇!那么老板可能会给你一个小工作,在现有的基础上增加一个小的功能。项目经验少的童鞋一下子就傻眼了。什么鬼,这么多行代码,几百个文件!从哪儿开始?别说改了,你都看不懂!完了,试用期是不是要终止了?!案例三:你进了一家技术管理混乱的小公司,前任去世了。你被命令接手一个看起来像一堆飞天的项目。代码写的一头雾水,工期紧迫,老板强行发货,怎么办?离开?但下次会更好吗?跳槽往往意味着从一个坑跳到另一个坑。所以读书,永远读书。..案例n:...学校经常教如何编写代码,但可能从不教如何阅读代码。然而,理想很丰满,现实很骨感!在工作中,你写代码的时间可能只占你工作时间的很小一部分,大部分时间你可能都在阅读已有的代码,当然除非你是自己从0到1做这个项目,但即使你自己写代码,它是增量和迭代的,你需要反复阅读你写的代码。再者,编程和写文章的目的是一致的。编程类似于写作,它使用语言来表达作者的思想。至于如何提高文笔,古人曾说:熟读唐诗三百首,即使不会作词,也能背诵。回想我的学生时代,我的老师常说:读卷千卷,写成大师!强调写作需要大量阅读。多看书,写作能力就会相应提高。阅读与写作相辅相成,相互促进。所以多看别人的代码也能提高自己的编程水平。阅读代码,个人认为会有一些收获:优秀的源代码犹如传世佳作,值得细细琢磨和细细品味。其写作技巧、设计范式、架构思想都具有很大的学习和参考价值。比如一些优秀的开源项目:Linuxkernel、lwIP、u-boot等。这些作品汇集了全球优秀的顶级程序员的思想和智慧。都是佳作,流传广泛,使用广泛。如果能花点时间阅读理解它的代码,一定大有裨益。正如牛顿所说:如果我能比别人看得更远,那只是因为我站在巨人的肩膀上。解决难题在编程生涯中,总会有一些感人和无奈的场景。当github和搜索无能为力时。如果你说你还没有遇到过,那一定是因为机会还没有到~比如你在做Linux编程的时候,遇到某个API错误,可能在网上搜了半天,但你找不到答案。我真的找不到答案。尝试去阅读内核底层的相关代码,有时可以找到问题的原因。开阔眼界很多时候,日常的工作内容可能只是一小块区域,修复一些小bug,修改一些小功能等,如果只关注这些小点,个人的成长肯定是有限的。如果你善于发现一些新的兴趣领域并阅读相关代码,你的编程技能肯定会有所提高。那为什么要读代码呢?找BUG和review别人的代码,学习,维护等等,怎么看代码?在这里说说我的一些经历,也不一定全对,也未必适合其他朋友。分享交流。如果您有其他想法,欢迎您留言交流。我一般是先拿到一段别人的代码,我会先找到这个项目的入口,先梳理一下大概的脉络。比如一个单片机程序,一般从以下几个角度来审视它:主要在哪里?你开始了多少个任务?有哪些关键任务,主要功能链是怎样的?任务如何协调?任务的执行周期是怎么安排的?使用了哪些硬件外设?使用了哪些中断?中断与哪些任务交互?从软件的角度来看,大致有哪些子系统?有没有关键算法?是否使用开源组件?......不关心很详细的函数怎么写,数据结构是怎么设计的?这样我就可以先大致有个大概的了解,然后再仔细阅读自己感兴趣的内容。当然,如果是看别人的代码,那就另当别论了。如果是Linux应用或者C++应用,我一般采用类似的思路,先读一个大概的思路,再细读。比如,对于一个Linux应用,首先会了解这几个方面的概要信息:入口在哪个文件?一般是main函数。是否支持命令行传递启动参数?它是守护进程吗?哪些线程是打开的?大致有哪些子系统?使用了哪些开源组件?是否使用驱动程序,是否有通信等?......如果项目是通过cmake或者makefile来组织的,那么先阅读makefile也会是一个更好的了解项目大致信息的切入点。善于做笔记在阅读代码的摘要信息时,我更喜欢做笔记和画图。阅读代码时,我更喜欢先研究代码中的数据结构。数据结构往往反映作者抽象的问题和对问题建模的一些想法,用UML图画出来。一开始,你可能不会去看每个功能是如何实现的,而只关心与这些数据结构相关的功能和数据。结构之间的关系。“糟糕的程序员担心代码。优秀的程序员担心数据结构及其关系。”—LinusTorvalds也许,有些朋友会说,UML没有。没关系,你可以用你习惯的方式去理解,而且即使你使用UML,你也不用太担心画的图是否严谨。您甚至可以用笔在笔记上画画。不过我个人还是建议大家尽量写电子笔记,更方便保存和查阅。在阅读具体函数时,如果函数中或者模块中有状态机,这部分需要仔细理解的话,我会先画状态机图。比如我之前写的modbus协议中的状态图:这样的好处是边画边看代码,会加快理解代码的速度。对我来说,如果只用两只眼睛盯着看,而且同时看,效率会比画画低很多。这样做的另一个好处是可以将理解以图片的形式记录下来。如果仅靠图片无法表达清楚,我会添加一些文字说明。时间长了,再看代码的时候,可能之前的理解都忘记了,但是如果有这样一张图文并茂的笔记,我会很快找回记忆。善用sourceinsght、vscode等工具,都是提高阅读代码效率的好工具。尝试熟悉如何使用键盘控制阅读和跳跃。如果你熟悉它,你的效率会翻倍。此外,还有一些工具可以自动将代码转换成类图,比如visualstudio可以自动绘制类图,EnterpriseArchitect也有根据代码生成类图的功能。还有许多其他具有此类功能的软件。有兴趣的可以搜索一下。做很多调试。遇到一些代码,怎么看都看不懂。这时候你可以尝试添加一些打印日志,运行调试,或者使用调试工具进行断点,单步调试,观察程序运行的轨迹,数据的变化,你可能已经发现突破。或者尝试对原始代码做一些小的修改来证明你的理解,这也是一个很好的方法。对于一个经常debug的程序员来说,键盘上的F10和F11键大多坏得比较快。总结分享一些自己看代码的经验,每个人都会有适合自己的方法。使用适合自己的方法,高效阅读代码,是提高编程水平的有效途径。如果我说的对你有所启发,不妨点个赞或者再读一遍,给我一点鼓励。当然,如果你愿意传播和分享,那就非常感谢了。