阅读代码点

来源:互联网 发布:数据质量控制系统 编辑:程序博客网 时间:2024/05/18 17:01

现在大型软件项目非常多,软件的source也可能非常大,就会经常产生很多的问题,代码太多了,不知道从何下手.

例如Android的source总共有几十G的代码,谁看到都是醉了,不知道从什么地方开始。

刚开始我也是看一些牛人的书,例如innost的深入理解Android系列,其他大婶的深入理解android书籍,后来发现看了很多书,但是一点没有记住,总之一句话,大婶的架构是他们自己的,我们虽然能够顺着他们的视线看到整个系统的大概模型,但总是模模糊糊的,因为我根本不理解架构中的细节,不能从逻辑细节上建立一个理性的,属于自己的代码立即架构。书中都提到:"Read the fucking code",可见代码是基础,大婶们的书都是从代码中抽象出来的,提取代码的精华试图给我们提供一个map,但是具体的路还需要自己亲自走一遍。

所以阅读大量代码前可以先阅读一下相关的书籍,从高处看一眼这个系统的模样,然后就开始我们自己拿着地图走一遍。

阅读代码的时候,那些code大婶们的思路大部分都很清晰,他们也很注意代码规范,试图把code像艺术一样表现出来,有着很好的comment,代码的function,varible都代码了他们代码的意义,架构实现上也尽量使用最简单的架构来满足需求(当然他们也可能从长远的角度来把这个架构设计的复杂,很多地方我们可能觉着没什么用,这些地方可能是留给扩展用的偶),这样我们也尝试着使用这样的方式来阅读代码。

1.尽量搞清楚function,varible名字的风格和意义,对于理解代码的帮助非常大

2.第一次代码可以粗略读,尝试着先在结构上有一个理解(忽略很多细节)

一定要先看.h文件,.c中就是实现方法的过程

.h和.c就像战略和战术上层面的区别一样,.h中就明白写着你要干什么,干几件事;.c中只是描写我要怎么干,就像路人甲乙一样,刚开始不要关心这个;

好的.h文件中一定给我们描述了每一个重要结构体,重要接口,还给我做了详细说明。


3.积累一些软件设计的常见点:

文件描述符打开和释放内存的malloc和free进程的创建和推出状态机的状态转换变量的初始化、更改、使用事件通知发起和处理 ......

4.遇到新的系统时,尝试着从一个简单点来切入,而不是四面开花,从一个简单点切入能够建立一个完整的代码处理体系,然后才入手一些重要的子系统。

5.将系统分层,好的系统肯定会考虑维护扩展问题,分层分面思想应用非常经典

例如Android binder,从最上层app到driver都会涉及到,我们看得时候可以从上到下分层看;

在app层,我们就看app向下发的请求,然后返回的结果;

在framework层,就看app发来的请求和向系统层发的请求形式,系统返回来的结果和如何给app返回的;

driver层就看怎么传输数据的,具体传得是什么不管;

最后三层都能有一定了解之后才去尝试怎么结合起来形成系统知识;

6.系统的设计肯定是将人为抽象出来的模型进行代码化,我们要理解这些代码就是反向从代码理解模型,最后代表模型的肯定是一系列的对象,对应到代码就是一些列数据结构。

所以我们现在要做的就是理解数据结构中对应的模型意义,将数据结构抽象出模型来,这些模型之间怎么互动联系到一起。


多积累系统底层的知识,上层的应用肯定是调用底层接口来实现的,了解底层的原理设计能够减少很多的代码理解上的问题。





0 0
原创粉丝点击