关于代码分析

    我知道每个人的成长都不相同。有的人顺风顺水,有的人命途多舛,有的人独树一帜,有的人引领潮流...... 并不是说谁比谁强,只是各有所长罢了。学习编程多年,我觉得自己的优势,不是精通程序设计,也不是有多少编程诀窍,而是喜欢进行代码分析。如果大家不嫌弃,就听听我的经验。

    自从开源运动发展以来,最有效经典的代码就不只是诞生在封闭的实验室中,而是广泛流传在网络上,存在于各个开源项目中。学习和借鉴它们,不失为一种进步的途径。但这些开源项目代码很多,但资料文档却又很少(linux资料也很多,但它的代码量远非书籍能够概括)。我最早希望分析的代码就是linux内核,为了学习它,当时的我可谓绞尽脑汁,买了许多书,却基本都看不懂,代码和书籍差距太远,设备驱动完全不懂,配置编译工具一知半解,处理器文档不熟,任务调度、中断响应、文件系统、内存管理等等全都是陌生的。想起当时的自己,可谓是初生牛犊不怕虎。经过许多的挫折,我意识到或许可以从linux的早期版本着手。于是看完了赵炯博士的linux 0.11内核剖析,当时大概两三天看一章,看得很爽,只看书不去看代码,也不做实验,看完了感觉很爽,但要说收获,只能说对x86处理器的工作机制有了初步的印象。当时linux对于我来说,是一种投入巨大而几乎看不到回报的计划,我的野心远远超过了我的能力,我没能坚持下来,但我学会了要让自己量力而行。后来,我觉得桌面操作系统太过庞大,无法直接掌握,必须采取曲线救国的道路,于是我进入了嵌入式,开始分析各种嵌入式实时操作系统,包括ucos、vxworks、rtems、rtthread等等。为了能够更好地工作,我还有意识地积累设备驱动和处理器的知识,并熟悉了从autoconf到make的配置编译流程。虽然这个学习还远没有完成当初的设想,但linux在我眼中已不再那么复杂,我相信终有一天,自己会回归linux,并完成当时未完的分析。

    扯了这么远,其实是想说一些自己在代码分析过程中的心得。

    1. 要自己分析,而不是看别人的分析文档。就好像我当时看linux 0.11的内核剖析,看完了印象太浅,连个泡都没有。以别人的分析来代替自己的思考过程,看似快捷,其实却失去了分析最重要的意义。只有自己亲自一段代码一段代码分析,经历这段从代码回溯到设计的过程,才能体会到整个项目的各个方面,理解作者的苦心。分析最重要的成果是两个:一是自己的分析能力的提高,分析能力和设计能力、代码编写能力都有很直接的联系,哪怕是生涩的借用也会逐渐纯熟;二是自己对这个项目的熟悉,比如linux、ucos、rtems等等,都是很经典的操作系统,分析它们才能用地更好,甚至做出改进。

    2. 要写详细的分析文档。分析过程一定要有记录,不然时日一久,内容一多,就又忘了。有文档也会忘,但写了会忘得慢些,而且忘了也容易根据文档快速回忆起来。如果说很多代码分析之后,自己所记得的,只是最精华的部分,好比心脏,那各个分析文档和实验成果就是血肉。有了分析文档,心脏的效用才能更好更快地体现出来。

    3. 写分析文档要多种手段并用。之前看过许多分析linux代码的书,它们大多只分析关键的代码,这是它们书籍范围所限。我们自己写的分析文档,完全可以把所有分析过的代码全部粘到文档中,word可以写几百上千页,一份文档不行可以分成多个模块分别分析。在分析时有的书喜欢在代码后写注释;有的书喜欢在代码上加行号,然后一行行分析;有的书则喜欢对一段代码一个函数进行较为总体的说明。说实话,这些手段都很有效,所以都可以用。在我的分析文档里,既有代码间红字写的注释,也有代码后对某些代码行的详细分析,也有对一些代码的总体说明。不管怎样,分析文档要越详细越好,自己看得越舒服越好,不必顾忌是否美观冗杂什么的。

    4. 分析过程要实事求是。因为进行代码分析的系统都很有挑战性,所以并非所有的地方都搞得懂。但搞不懂并不是说可以随意忽略过去,应付了事。因为应付一两个问题事小,但久而久之,会让自己形成惰性,并对所写的分析文档产生不信任感,缺乏意义。试想,如果一篇文档里充满了大概、或许、应该等字眼,你觉得它能有什么价值?所以分析一定要实事求是。可以对分析的代码编译、运行、修改、实验,可以查阅各种文档、资料,总之,尽一切可能查出事实的真相。如果某些问题确实找不到依据,也没办法验证,也应照实写在文档中。这些分析问题的过程,也可以写在文档中,也许以后自己能力提升了,会再回头来更新文档。

    5. 分析要尽量与实践相结合。因为分析本身是枯燥的,所得结果无非是一些文档,大约只能敝帚自珍。而实际编程则不然,编程会产生出可以运行的程序,会融汇自己的所学,能设计一些内容,很有意思。每个程序员之所以成为程序员,100%都是受不了编程带来的诱惑。但只是编程,又得不到代码分析所带来的提高。所以最好把编程和代码分析捆绑起来。如果能在分析代码时,时时告诫自己,如果我把这个分析完了,就可以写出什么云云,相信就会动力十足了。从另一个角度来说,代码分析所带来的收获,在刚分析完时,是最多的,如果能趁热打铁,试上一把,效果自然不错。

    以上种种,均为肺腑之言,不足之处,欢迎大家批评指正。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值