阅读代码点
来源:互联网 发布:数据质量控制系统 编辑:程序博客网 时间: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.系统的设计肯定是将人为抽象出来的模型进行代码化,我们要理解这些代码就是反向从代码理解模型,最后代表模型的肯定是一系列的对象,对应到代码就是一些列数据结构。
所以我们现在要做的就是理解数据结构中对应的模型意义,将数据结构抽象出模型来,这些模型之间怎么互动联系到一起。
多积累系统底层的知识,上层的应用肯定是调用底层接口来实现的,了解底层的原理设计能够减少很多的代码理解上的问题。
- 阅读代码点
- Tango 点云 demo 代码阅读笔记
- 贺利坚-如何阅读代码(已阅加重点划)
- 阅读分词核心代码的 几点感触
- Sensors Analytics可视化埋点代码阅读笔记
- 阅读代码
- 阅读代码
- 代码阅读
- 代码阅读
- 代码阅读
- 代码阅读
- arcgis server 9.2代码阅读笔记一:在图层中增加一个点
- arcgis server 9.2代码阅读笔记一:在图层中增加一个点
- [代码阅读] IDE 阅读反编译代码
- HM编码器代码阅读(27)——样点自适应补偿SAO(一)SAO介绍以及入口函数
- HM编码器代码阅读(43)——样点自适应补偿SAO(二)收集像素块的统计信息
- HM编码器代码阅读(45)——样点自适应补偿SAO(四)对重建像素进行补偿
- 阅读代码的难度
- 市场需求文档MRD书写范例
- akka入门-对处理器状态进行持久化
- C/C++中计算程序运行时间
- 软件设计文档——概要设计书
- Memcache Hash算法揭秘
- 阅读代码点
- 嵌入式开发之道——菜鸟成长日志与项目经理的私房菜(读书笔记)
- SetLayoutParams和onMeasure的差别
- gdi+内存绘图
- Server Tomcat v7.0 Server at localhost failed to start.解决方法
- 【机房重构】奋斗组合查询
- Java--实现网络爬虫抓取RSS新闻(1)网络爬虫详解
- 写php是遇到的一个小问题
- hdu 2005 第几天?(java)