作者:埃本·休伊特(EbenHewitt)
清汤(consomme)(译注1)是一种非常清澈的的肉汤,通常以牛肉或小牛肉烹制而成,极其鲜美精妙。上品清汤非常清澈。烹制清汤公认颇具挑战性,而且耗时长久,因为要去除会弄浑清汤的脂肪和其他固态物,获得绝对澄澈之上品,只有一个方法:依靠简单的、不断重复的精炼浓缩。一遍又一遍地浓缩,精益求精,最终烹出上品美味。品尝清汤,就仿佛在吸啜精华。事实上,这正是此道菜肴的精华。
在美国的烹饪学校,对学员厨师一个简单测试便是通过烹制清汤进行鉴定;老师在学员烹制的玻珀肉汤中下一个10美分的确币,如果沉在碗底的硬币上的日期清晰可见,考试通过;如果不能,便告失败。
设计软件架构也应不断精炼浓缩,反思各种思想,直至可以确定系统中每个需求的本质。要像拿着约里克(Yorick)头骨的哈呣雷特(Hamlet)一样(译注2),问:这是什么?他的属性是什么?它们之间的关系又如何?澄清概念,使架构内的各种关系确凿无误,内在一致。
软件中许多遗漏的需求和缺陷,可最终追溯到含糊笼统的语言的描述上。向客户、开发人员、分析师和用户,不断重复地询问同样的问题,直到他们不堪其扰昏昏欲睡。然后,换不同的方式对问题改头换面,就像在“托词(alibi)”中寻找蛛丝马迹的律师一样,梳理出所有的新发现、分岐或矛盾。不断精炼。
要关注哪些概念可以从架构中移除,哪些名词构成了这些概念,确定它们的本质。要以外科手术般的精确对待需求描述,拒绝那些模棱两可、笼统、毫无根据的假设或无关的废话。这将有助于使概念更加丰富,更加健壮稳定。浓缩才是精华。
可以借助询问:“如果我加上‘总是,永远,不管任何情况下’,你对此还会做出同样的陈述(statement)吗?”对陈述进行测试。对于如此绝对的承诺,人们通常会有所抵制,因此必然会进一步完善措辞。通过这种语言上的筛子(a linguistic sieve),迫使其中的概念显现出来,并澄清概念。不断重复,直至只剩下可信陈述的详尽列表,这些可信陈述(true statement)简单、可核实、描述了系统的本质特性。
如果你能透过清汤,看到锅底硬币上的日期,你就知道架构己臻完成。
译注1:consomme,是法国菜式中的清汤,法国清汤固定以12小时小火熬煮加上多次过滤烹调而成,大量营养成分及胶原蛋白皆溶于清澈无油浓郁鲜美的汤汁中,人体非常容易吸收。
译注2:莎士比亚戏剧中出现骷髅头的最著名场景在《哈呣雷特》这部戏剧中。哈呣雷特王子在一个墓地中和掘墓人交谈,同是发现挖出来的一个骷髅头是以前熟识的宫廷小丑尤里克(Yorick)的头颅,哈呣雷特于是手捧这个宫廷小丑的骷髅头,发出了一番人生无常的独白感慨。