Chinaunix

标题: 新手应该如何阅读别人的代码? [打印本页]

作者: 鬼才小科    时间: 2009-06-10 14:43
标题: 新手应该如何阅读别人的代码?
最近在读一个开源程序的代码,发现有点吃力,大牛们指点一下吧.

[ 本帖最后由 鬼才小科 于 2009-6-10 21:26 编辑 ]
作者: 群雄逐鹿    时间: 2009-06-10 14:45
没办法。
觉得自己想个修改,加进去,可能是最好的熟悉办法
作者: langue    时间: 2009-06-10 14:47
不能排除那段代码的质量出奇地低,让初学的人难以理解。
作者: 鬼才小科    时间: 2009-06-10 15:01
标题: 回复 #3 langue 的帖子
也不能排除我出奇的菜,连基本的都理解不了.
作者: prolj    时间: 2009-06-10 15:18
看着费解的代码不是牛代码,而是SHIT代码。
作者: 鬼才小科    时间: 2009-06-10 15:18
自己顶上去,期待大牛的出现.
作者: 鬼才小科    时间: 2009-06-10 15:19
原帖由 prolj 于 2009-6-10 15:18 发表
看着费解的代码不是牛代码,而是SHIT代码。

阿姨你好厉害.小生在这厢有礼了.
作者: bobozhang    时间: 2009-06-10 15:19
不管是好代码还是垃圾代码,多看,你就会发现你理解别人的代码会越来越快
作者: 鬼才小科    时间: 2009-06-10 15:21
原帖由 bobozhang 于 2009-6-10 15:19 发表
不管是好代码还是垃圾代码,多看,你就会发现你理解别人的代码会越来越快


模块化设计的程序,应该怎么着手看呢.从main()开始,一个一个的看?
作者: converse    时间: 2009-06-10 15:48
阅读代码与跟人的交流有时候很像,如果两者不在一个层次上,交流起来会有问题.
作者: 鬼才小科    时间: 2009-06-10 15:52
标题: 回复 #10 converse 的帖子
那你给指点一下吧,如何快速提高自己的能力.
作者: star_in_sky    时间: 2009-06-10 16:04
好像没有什么捷径,不过还是有些地方可以参考滴:

1. 选择那些比较好的,并且和自己水平比较接近的代码,最好是有讲解的。
   Minix源代码就是很好的例子。
   
2. 硬着头皮看,多动手实验,动手调试:善用编程工具,不要贪图工具的先进
   关键在于自己,工具只是工具
作者: gawk    时间: 2009-06-10 16:10
运行,加打印语句,看看流程
作者: 鬼才小科    时间: 2009-06-10 16:23
标题: 回复 #12 star_in_sky 的帖子
谢谢.我的能力还差,还得多多理解.阅读.

[ 本帖最后由 鬼才小科 于 2009-6-10 21:55 编辑 ]
作者: egmkang    时间: 2009-06-10 17:06
有一些代码不是一般的大,一行一行跟踪下来也很困难吧
作者: ssafa    时间: 2009-06-10 17:15
慢慢看,多看几次就明白了
作者: gz80    时间: 2009-06-10 18:38
原帖由 鬼才小科 于 2009-6-10 15:21 发表


模块化设计的程序,应该怎么着手看呢.从main()开始,一个一个的看?


如果是面向过程,那就从main函数入手,边看边画流程图助记。
如果是面向对象,应该先梳理好各个模块的作用,以及之间关系。可以用一些UML工具或doxygen来生成类关系图,逐个模块去理解。模块理解好了之后才从main入手,结合时序图分析。毕竟对一些消息驱动的程序如MFC之流,对main函数的分析意义不大。
作者: langue    时间: 2009-06-10 18:49
程序应该有文档,没有文档的代码也要清晰、简洁,就像文档一样带有节奏感。
不妨先读文档,再入手代码。
作者: prolj    时间: 2009-06-10 19:06
big picture
作者: action08    时间: 2009-06-10 19:14
一般的说,每个人都会有自己的,宝贵的,第一次,

过去就完了,有心是关键
作者: MMMIX    时间: 2009-06-10 19:38
原帖由 prolj 于 2009-6-10 15:18 发表
看着费解的代码不是牛代码,而是SHIT代码。

你就瞎说吧
作者: prolj    时间: 2009-06-10 19:44
原帖由 MMMIX 于 2009-6-10 19:38 发表

你就瞎说吧

我这不算瞎说吧,虽然很费解,我看懂了,来两句SHIT的牢骚,没什么吧?
我承认重构起来很麻烦。
作者: nicolas.shen    时间: 2009-06-10 19:45
最好能调试,一边调试,一边修改,一边看输出最好
作者: 虎皮尖椒    时间: 2009-06-10 19:47
你看不懂可能与功底不够有关,其实那些代码之所以难以看懂,除了作者自己的匠心以外,还要处理正常功能外的各种异常和细节。
如果看不懂,可以尝试着从简单的入手,或者先看看各种文档,自己写写,然后拿自己的代码和别人例子进行比较看出不足然后提高。
作者: eveson    时间: 2009-06-10 20:57
标题都是个病句怎么去读代码啊
作者: converse    时间: 2009-06-10 21:08
标题: 回复 #5 prolj 的帖子
见我十楼的回复.
作者: 鬼才小科    时间: 2009-06-10 21:29
标题: 回复 #25 eveson 的帖子
已经改过来了。不好意思。失误
作者: 鬼才小科    时间: 2009-06-10 21:30
标题: 回复 #24 虎皮尖椒 的帖子
嗯,谢谢。我会多练的。
作者: 鬼才小科    时间: 2009-06-10 21:34
标题: 回复 #17 gz80 的帖子
谢谢,我是个面向过程的程序,谢谢指点,我还是继续从MAIN()开始一句一句研读下去吧,你说是先读.h的头文件,还是一边读程序一边理解它定义的头文件。我个人感觉应该在读程序的过程中去理解那些头文件,毕竟先看那些头文件,什么用都看不出来。
作者: prolj    时间: 2009-06-10 21:35
标题: 回复 #26 converse 的帖子
我只是强调有这种情况,一方故意使用“方言”提高交流门槛.
作者: egmkang    时间: 2009-06-10 21:36
如果设计者能提供详细的文档,最好能提供UML类视图那是再好不过的
作者: 鬼才小科    时间: 2009-06-10 21:39
标题: 回复 #31 egmkang 的帖子
嗯,但这个程序没有,我现在知道它的一些用处,所以现在的想法是从main()入手,一点一点的啃下去。
作者: egmkang    时间: 2009-06-10 21:40
标题: 回复 #32 鬼才小科 的帖子
代码多么?
作者: MMMIX    时间: 2009-06-10 21:44
原帖由 prolj 于 2009-6-10 19:44 发表

我这不算瞎说吧,虽然很费解,我看懂了,来两句SHIT的牢骚,没什么吧?

代码费解,可能由两种情况造成:
1、本身写的很烂
2、读的人缺乏相关背景知识

你对两种情况不加区分,一杆子打翻一船人,不是瞎说是什么?
作者: 鬼才小科    时间: 2009-06-10 21:45
标题: 回复 #33 egmkang 的帖子
嗯,比较多吧。
作者: zzxiaoma    时间: 2009-06-10 21:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: egmkang    时间: 2009-06-10 21:48
原帖由 鬼才小科 于 2009-6-10 21:45 发表
嗯,比较多吧。


比较多是多少?

作者: 鬼才小科    时间: 2009-06-10 21:48
标题: 回复 #36 zzxiaoma 的帖子
嗯,这个程序是模块化设计的,所以我想先把主程式看明白,再向分支去慢慢分析。
作者: egmkang    时间: 2009-06-10 21:49
原帖由 鬼才小科 于 2009-6-10 21:48 发表
嗯,这个程序是模块化设计的,所以我想先把主程式看明白,再向分支去慢慢分析。


你是台湾人??
程式
作者: 鬼才小科    时间: 2009-06-10 21:50
标题: 回复 #37 egmkang 的帖子
解压开的代码文件和Makefile.README总共是13M多一点。
作者: egmkang    时间: 2009-06-10 21:51
原帖由 鬼才小科 于 2009-6-10 21:50 发表
解压开的代码文件和Makefile.README总共是13M多一点。


13M....
有的看了
作者: 鬼才小科    时间: 2009-06-10 21:51
标题: 回复 #39 egmkang 的帖子
呵呵。不是。
作者: 鬼才小科    时间: 2009-06-10 21:53
标题: 回复 #41 egmkang 的帖子
嗯,一点一点的啃吧,从主程序开始。
作者: glasslion    时间: 2009-06-10 22:14
看看侯捷等人的源码剖析,看看高手是如何庖丁解牛的
作者: liuty2006    时间: 2009-06-11 07:56
其实读代码最主要的困难是--理解代码要解决的问题!!

所以建议--自顶而下!!
作者: aaaaa5aa    时间: 2009-06-11 08:30
还是从多看学起~~~
作者: 鬼才小科    时间: 2009-06-11 09:20
原帖由 liuty2006 于 2009-6-11 07:56 发表
其实读代码最主要的困难是--理解代码要解决的问题!!

所以建议--自顶而下!!



嗯,第一次,有点不知所措,慢慢就习惯了吧应该.
作者: 鬼才小科    时间: 2009-06-11 09:29
现在遇到最大的问题就是能读懂代码,但是就是不懂意思.
我想这就是我们读某些诗歌吧,分解成一个个的字都认识,但合在一起就不知道它要表达的意思.
作者: swxlion    时间: 2009-06-11 10:15
原帖由 converse 于 2009-6-10 15:48 发表
阅读代码与跟人的交流有时候很像,如果两者不在一个层次上,交流起来会有问题.

Nod.
作者: swxlion    时间: 2009-06-11 10:18
原帖由 MMMIX 于 2009-6-10 21:44 发表

代码费解,可能由两种情况造成:
1、本身写的很烂
2、读的人缺乏相关背景知识

你对两种情况不加区分,一杆子打翻一船人,不是瞎说是什么?


不论新手老手,相关背景是个非常重要的问题。不明白相关背景或者特殊考虑的话,很难明白为什么要设计成这样,而不是那样。
作者: 虎皮尖椒    时间: 2009-06-11 10:24
原帖由 swxlion 于 2009-6-11 10:18 发表


不论新手老手,相关背景是个非常重要的问题。不明白相关背景或者特殊考虑的话,很难明白为什么要设计成这样,而不是那样。


所以,无论是设计人员还是普通的代码工人,了解相关的背景是最首要的。
作者: huxk    时间: 2009-06-11 10:26
先找个好的阅读源代码工具,工欲善其事,必先利其器嘛,把该高亮的部分,如果是过程化的,当然是函数名了

如果是和业务紧密相关的代码,建议先研究业务和流程再去看代码

如果是和实现技术复杂相关的代码,建议先研究编程模型

如果以上两者皆备,那就各个击破吧

然后就是逐渐从main开始,随着函数跳转,该略过的略过,先获得整体程序整体框架,至于每个沟沟壑壑,胡同小巷就慢慢来逐个探究吧,

总之是先看森林,再看树,看清天下三分的格局,然后再攻占地盘;当然了,你可以反其道而行之,但是可能要花很久的时间才入手,别人恐怕等不及
作者: unixlinuxsys    时间: 2009-06-11 10:34

作者: 雨过白鹭洲    时间: 2009-06-11 12:39
还是先弄清楚你看这个代码的目的吧
作者: wangdan1600    时间: 2009-06-11 12:47
标题: 回复 #29 鬼才小科 的帖子
使用source insight来阅读代码,快些
作者: bandaotidejia    时间: 2009-06-11 13:35
好像没什么捷径吧,硬着头皮看吧,看多了就有心得了。
作者: 鬼才小科    时间: 2009-06-11 15:47
原帖由 wangdan1600 于 2009-6-11 12:47 发表
使用source insight来阅读代码,快些



谢谢,已经在用了.
作者: anlrj    时间: 2009-06-11 23:09
标题: 回复 #10 converse 的帖子
精辟
作者: yy_galois    时间: 2009-06-12 12:36
看懂数据结构和流程。ok。

然后总结一下。搞定。
作者: shenxiaocheng    时间: 2009-06-12 16:21
标题: 回复 #39 egmkang 的帖子
台湾人好像是喜欢说程式程式的
作者: wxfjx    时间: 2009-06-12 16:46
有时候有些代码是很费解
作者: linuxIsPerfect    时间: 2009-06-12 17:54
直接看很麻烦的吧...

软件不都有文档的嘛, 可以肯定的首先看文档
网上以前看过的人写的一些文章

看代码别一下就加printf, 这种方法,最挫!!!  多看, 看的差不多,再加printf, 只是证实自己的理解


个人理解
作者: huyongzs    时间: 2009-06-12 21:56
你可以尝试裁剪你遇到的代码.甚至于粘贴复制拼装你看到的代码.
多组合各种模块,实现一个没有人完善实现过的功能.
看代码好的工具很重要.
最起码要有IDE,把代码都添加进去,然后用IDE提供的各种模块的快速定位功能把整个代码快速裁剪和搭配.

还有一点就是要有耐心,一般来说实现一个实用的功能用个1,2个月是很正常的.
看英文资料的能力要好,非常管用.
作者: learntolinux    时间: 2009-06-13 21:45
我觉得应该按照程序的运行流程看
作者: 人要重自己    时间: 2009-06-13 22:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: hsqsoft    时间: 2009-06-13 23:15
标题: 回复 #1 鬼才小科 的帖子

作者: yinyue151    时间: 2009-06-14 08:32
学习下。。。。。
作者: qdwmail    时间: 2009-06-14 11:20

作者: kekegg    时间: 2009-06-14 20:31
我觉得最好参加个开源项目,有导师指导着干成长最快,因为是按照最有效和最普遍的做法去开发。
作者: vincentdpan    时间: 2009-06-15 09:41
标题: 回复 #1 鬼才小科 的帖子
认真读
作者: gtv    时间: 2009-06-15 10:50
source insight可以帮你省很多事情
作者: 鬼才小科    时间: 2009-06-15 12:42
标题: 谢谢
谢谢大家的热心帮助,小弟受益匪浅.Thanks.
作者: ssafa    时间: 2009-06-15 13:28
一起看看啊,怎么看代码
作者: 到处流浪的猫    时间: 2009-06-15 14:03
标题: 回复 #71 gtv 的帖子
一直在用它看代码,很强大的说
作者: 独行之    时间: 2009-06-15 15:36
韦编三绝
作者: fera    时间: 2009-06-15 17:55
原帖由 langue 于 2009-6-10 18:49 发表
程序应该有文档,没有文档的代码也要清晰、简洁,就像文档一样带有节奏感。
不妨先读文档,再入手代码。

我喜欢!
作者: llsshh    时间: 2009-06-16 15:29
看代码最佳方法: 先花光所有积蓄,然后找个公司任职,如果老板不发薪水就会被饿死。老板布置:这个任务月底前必须完成,这时看别人的代码效率最高。
作者: 也是菜鸟    时间: 2009-06-17 11:57
好的代码不可能是费解的, 除非看得人水平太初级。

如果你是在校生,可能是你的问题。
如果是在职的开发人员,读不懂,一定是代码的问题
作者: Perl_Er    时间: 2009-06-17 16:03
看代码首先要了解代码的流程,接着再看就不是很么问题了
作者: hzsjx    时间: 2009-06-17 18:03
代码有注释吗?有注释的话就好看多了
作者: xiachaoxuan    时间: 2009-06-18 14:32
菜鸟一名...还在指针里扑腾,静待大牛~
作者: leiing    时间: 2009-06-20 10:42
来学习经验
作者: ggsvvss    时间: 2009-06-20 11:32
学习经验
作者: garyv    时间: 2009-06-20 14:12
首先要自己有耐心,对理解别人的代码非常有兴趣,其次就是要被读的代码编码风格好,可读性好,但这不是最重要的,写的比较长又很垃圾的code我接触过最后还是把它拿下了。。。
作者: ideawu    时间: 2009-06-20 15:24
如果有资料, 先做足功课, 了解原理, 再看代码.
作者: yuanchengjun    时间: 2009-06-21 12:33
用眼睛




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2