2.2 情景分析
正如对于历史事件的研究一定要把它放在当时的整个时代背景中并力图理解它的前因后果一样,对一段具体程序代码的阅读理解也要把它放在更为宏观的背景和过程中,把它看成某个宏观过程中的一个片段或者一个侧面,这样才能搞清它的来龙去脉。这样的研究方法和叙述方式就是情景分析。我们知道学外语有“情景会话”的方法,就是不要一味地背单词、学语法,而要以真实或假想的情景把所学的单词和语法串起来,这里面既有情节又有背景和场景,这样学效果要好得多。对程序代码的情景分析也是一样的道理。
我之所以用“情景”这个词而不是“场景”,是为了突出其动态的、过程的、情节的一面,而避免给人以“瞬间的场面和景象”这样的理解。对于一个事件,我们拍个照片,就可以说这是当时的一个场景;但是,如果要说是情景,那就非得拍一段视频不可了。
所以,我们对程序代码的分析和研究,应该尽量结合具体的情景,作为过程来加以考察。其实,“程序”这个词本来就有“过程”的意思。
Hadoop的代码是用Java语言编写的,Java是一种面向对象的程序设计语言,Hadoop的代码就是按照面向对象的风格和方法编写的。根据作者的体验,情景分析对于面向对象的程序代码的分析理解尤显重要。这是为什么呢?所谓“面向对象(Obj ect Oriented, OO)”其实就是面向个体,或者面向“类(class)”。在这种方法中,每个类,以及类中的每个Obj ect,即个体,都是独立自治的,只要设计好每个类的个体如何与外界互动,拟出每个类的“规格书”就行了。具体某个类的开发者则只要按规格书编写程序并测试就行,无须也不太可能了解整个软件产品在实际运行中的流程。这对于提高软件开发的劳动生产率、提高软件质量、加强对开发过程的管理,无疑有着十分重要的意义。这也正是大工业生产的规律。这就好比,汽车制造厂里管刹车系统的人不必了解引擎是怎么工作的、方向盘是怎么工作的,只要按规格书做好刹车系统就行了。产品虽然不同,道理是一样的,面向对象的程序设计就特别适合大型软件的分头开发,特别适合把大型的系统分解成许多部件,然后把任务分配给许多不同的小组加以开发和实现。然而,对于系统的研究者,对于努力想要理解整个软件产品的工作原理的人,这样却既有好的一面也有不利的一面,可能不利的一面还更突出一些。这不利的一面,就来自缺少一条主线把这许许多多的类给串起来。
打个比方,面对Hadoop这一大堆的类,我们就像拿着一本药典,里面有关于每种药物的描述,却不知道对于具体的疾病该怎样从中选择用药和配方,这时候我们更想看到的是具体患者的病情以及医生如何诊断和用药。再打个比方,如果《水浒》中只有对于数百个人物的类似于说明书和规格书一样的描述,例如“武松,身高几许,体重几许,臂力达到多少公斤,正义感强,性急躁,等等,等等”,而没有故事没有情节,那我们把整本书看上几遍也不知道发生了什么。
所以,对于面向对象的程序代码,情景分析的方法就更显得重要。