法治框架下的人治
吴旻
泰岩网络工作室
没办法,我还得拿美国举例子,因为这样比较容易让人明白我在说什么。
通常意义上讲,美国是比较好的法治国家,有相对完美的法律体系,或者说法律框架。在我们理解中,法治和人治一般是对立的:法治就是按章办事,管你谁是谁,管你冤不冤;人治就是人大于法,掌权的想怎么来就怎么来,管你有没有理,有权就有理。
当把事物的对立面拿出来做比较时,确实有利于理解;但如果做二选一的决定,便一定会走极端。其实美国是个充满人治的社会,但我们只看到了法治。比如美国的大法官制度,当一件事情到了最后裁定是否违宪的时候,9个大法官投票决定,所以也就能出现让我们无法理解的“国旗烧得,十字架烧不得”的裁定来。
我们看着有点可笑,可美国人却裁定得很认真!法律条款是原则,理解原则的却是实实在在的人。很显然,不同的人对相同的条款有着不同的理解。
法治的本意是确定性,就是说,谁来裁定都应该是相同的结果。客观事实是,法律天生就有堵不完的漏洞,就会生产歧义和当初未能设想到的情况。所以有歧义,就一定会有司法解释这件事,也就一定会有人感觉不公正:如果法治的结果还是人说了算,法律的意义又何在呢?
显然上面的诘问是在期待法律来完成它无法完成的事情。法治一定需要人治来补充,人治一定需要法治的框定。“对立统一”这个哲学原理在此处可理解为适用范围的不同:骨架是法治,血肉是人治。
其实我想说的另一件事是开发语言规范。我和我的团队最近在琢磨《Google C++ Style Guide》,这里面不断的在讲Google开源团队对C++语法规则的理解,并阐明这样理解的原因。比如说异常处理机制,这份指南是不建议使用的,但在像JAVA这样的语言中,try{} catch{}是再正常不过的用法了。还有一个让我印象深刻的例子是const int *p 还是 int const *p,指南中说,有些人的理解是:const 是修饰 *p 的,所以应该在 *p 前;但 Google开源团队说,C++的语言规范其实是英语模式,int 是名词,const 是形容词,所以const 应该放在 int 前面。
回过头来说,如果我们纠缠于为什么“国旗烧得,十字架烧不得”时,我们就变得太迂腐了。如果再为此上纲上线,一定要认定大法官们不通时,那就错得更离谱了。
Google开源团队的解释是这样的:C++并未规定const一定放在哪里,因此统一就好。因而我的理解也就是,大法官们的裁定,更多的应该是统一规则,而未必是哪一方真的罪不可恕。
对于异常处理机制,我相信也不是绝对禁止。只要你用得统一,用得恰到好处,使用try{} catch{} 未必不是好事。
人才之所以如此被重视,就是因为框架解决不了那些细微的差别与判断。法治是好的,但如果离开了能体察入微的人治,一样不得民心。