有次我在联邦法院跟一大律师事务所的合伙人就一个取证问题发生争议,问题是一个以前的作证是否可以作为证据。对方认为可以,我认为那是 HEARSAY,不应认可。庭上的联邦终身法官做了一件事情,让我肃然起敬。
但见法官拿出一个很小的白色本本,翻到某一页查看起来,然后说不行,因为没有满足一个条件 --- 证人不是 unavailable。法官查看的本本很小,只有巴掌大,约50页厚度,不可能是联邦证据法的全部,而应该是一个难点精简之类的本子。这位法官主审过多少案子,审案中经常会遇到类似的证据问题。法官没有表示自己就是万能的法律专家,而是拿出参考资料翻阅,确认自己没有搞错。
证据法里最为复杂的也许就是 HEARSAY (“听说”)了。基本概念很简单,听说的东西不可靠、无法交叉询问等。但问题是,这个“听说”规则有很多例外情况。初看这些例外情况,似乎相当杂乱,要都记住似乎有点困难,要完全理解似乎更难。如果再嵌套几层,脑袋开始要转晕了。
但越是这种很多人弄得不是很清楚的事情,越是有力的武器。在某一个时间,我觉得必须一次彻底完全的把这个问题搞清楚,所谓一劳永逸。
怎么办?
第一步,我首先把相关的条款直接转换为一个名为 isAdmissible() 的 pseudo-code。顾名思义,输入一些数据,输出可否作为证据。
第二步,发现这段 code 有很多地方可以等价挪动顺序,out of order execution, 包括提前返回。
第三步,有的地方可以进行 Refactoring。到此为止,类似 compiler optimization,其实可以自动进行,我手工做了。
第四步,把代码改写成面向对象的程序,没有生命的逻辑变成了活泼的对象。
几步做下来,一段清晰的 object-oriented code 完整地展现在面前。我无意建议立法委员们修改条款,这段OO代码自己用就够了。再遇到 hearsay 的问题,可以随口道来。
法律也可以、甚至需要 OO化。不光是证据法,其他类似情况也可以如法炮制。
所以,人学的东西不能白学。科学是可以通用的。