如何读代码?

 

  对于程序员來说除了写代码之外,很多的工作就是看別人写的代码了。

  几乎所有的文章都是围绕如何去写代码,读代码的文章就相对很少。我自己在網上搜了一下結果也是這樣,那我和大家分享一下自己读代码的方法。我这里談的不是三五個class那樣的程序,因为这样小規模的程序不需要太多的技巧,一行一行看下來基本就能搞懂了。

 

  有時候在察看开源項目的時候,如果你想參與其中,那項目的负責人基本上都是建议从bugfix開始了解程序,了解代码。所以第一个建议就是从bugfix和添加新功能入手 。事實上在公司參加一個新項目的开发或者维护也大多是從bugfix入手。這樣入手的好處在於可以集中精力去了解以小块代码的運作機制。显然這很符合人的思維規律-做简单的事情总比做复杂的事情來得容易和高效。当然這不是盲人摸象,要bugfix的話至少自己要知道整個軟件的功能和層次,这需要閲读文檔而不是代码。

  说到注释,这个时候就太有用了。不用说是别人写的代码,就是自己几个月前写的代码自己也需要仔细看一下才能搞懂。但是残酷的现实就是注释很少,更残酷的现实是越是低质量的代码,它的注释越是少。怎么办?只能 了。如果我们碰到一个很长的方法,但是我们需要跳过去看调它的代码,我们就需要猜测这个方法的功能了。然后再回过头来仔细看那个方法。我们可以运气好的话作者会取很合理的class名,method名和变量名。其实里面有个矛盾:很复杂,内聚很松散的method或者class,它们的名字就根本不可能取得合理。这个道理很简单,一个method里面做了很多事情,你就很难给它取一个合适的名字。像removeUserAndItsClientsAndUpdateTime(), 或者干脆来个缩写removeUCUpdateT()。 这样的名字基本没有可读性。

  还有就是读上层读下层 。读上层就是在代码的 高层阅读,碰到底层的API可以猜出它的作用。这样把一块高层的代码像读逻辑那样粗线条梳理清楚,其实就是一大块一大块地读代码。读下层就是把底层的代码if else一一读懂。这两者缺一不可。

 

  碰到很乱的代码几乎只能利用IDE debug, step by step 得一行一行执行。因为乱,所以没有仔细看整体结构的必要,而最有效的就是step by step了。当然有些时候程序逻辑必须依赖数据库或者外部数据,这样的话光看代码也不行。也只能step by step或者运行时log。

  在OO的时代design pattern也已经深入人心。在看高质量代码的时候会发现他们的代码有个特点就是相当抽象,或者说面向抽象。里面有很多interface, abstract class, 还有anonymous class, 很长的继承链。我认为既然作者写程序的时候面向抽象,那么我们读程序的时候也要面向抽象 。我们经常在读代码察看某个变量的时后用IDE的查看功能点进去,然后发现它是一个接口全无实现。很多时候我们的第一反应就是找到具体的实现类,我倒是认为可以关注这个接口先往下读代码,然后回过头来看实现。既然作者的意图就是让接口来工作,我们就可以先了解作者的意图来看代码。顺便说来,要读懂很抽象的代码,读者自己首先要有很好的OO概念和design pattern的知识。

 

作者:卢声远<michaellufhl@yahoo.com.cn>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值