# 如果法律是代码

# 前言

法律同代码一样, 是一种由规则组成的体系,具有组织性、规律性、结构性等特征。若将现实社会视作同为人为系统的计算机系统,楼宇桥梁等基础设施好比 CPU、内存构建为该系统等硬件部分,那么保障系统正常运转相应的软件组成部分——法律,就可以视为代码。

# 法系

计算机系统(具体为冯·诺伊曼结构)中按指令集架构来分类有以 x86 架构为代表的复杂指令集(CISC)和以 ARM 架构为代表的精简指令集(RISC)。类似,现今法律按照历史沿革(就好比向后兼容,Python 2 ⇏ Python 3 )和政治理念(就好比设计哲学,Unix vs Windows )主要分为两类:

  • 欧陆法系( Civil Law,又称大陆法系、罗马法系)

    欧陆法系的渊源可以追溯到罗马法,后广泛影响法、德等欧洲大陆国家法律体系。其主要特征为:

    1. 具有集中化、以立法权为中心;论证方法以演绎为主;
    2. 一般不存在判例法,对重要的部门法(又称法律部门)制定法典形成主干,并辅之以单行法规,构成较为完整的成文法体系;也就是说先有成文法典,再在实践中根据具体案例做相应完善;
    3. 诉讼程序以法官为重心,突出法官职能,具有纠问程序的特点,而且多由法官和陪审员共同组成法庭来审判案件;要求法官严格按照法条审判。
  • 英美法系( Common Law,又称海洋法系、普通法系)

    起源于中世纪的英格兰,后随在大英帝国的扩张和统治下,被传播到美国、加拿大、新西兰、澳大利亚、印度与香港等地。其主要特征为:

    1. 具有分散化、以司法权为中心;论证方法以归纳为主;
    2. 遵循判例法,既遵循先例原则,由法官在法庭上针对具体的法律问题而做出的判例,通过积累而形成的法律,反复参考判决先例,最终产生类似道德观念一般的普遍的、约定俗成的法律;对法律的理解常需要通过阅读判例,而非法律本身;也就是说法官不仅适用法律,在一定的范围内也创造法律;
    3. 诉讼程序以原告、被告及其辩护人、代理人(律师)为重心,法官的角色为仲裁者,不参与争论(负责做出法律上的具体结论,即判决),也存在相应的陪审团制度(主要负责做出事实上的结论和法律上的基本结论,如有罪或无罪)。

世界法律体系

以上分类并不是绝对的,就像复杂指令集和精简指令集一样,两者间越来越相互吸收,借鉴发展。

此外,我们还可以将两者和编程语言做一个(不太恰当的)类比,欧陆法系类比为编译型语言( Compiled language ),英美法系类比为解释型语言( Interpreted language )。前者在审判前将法律条文先行制定好(源代码编译为机器码),法官根据其进行审判(执行代码);后者在审判前没有提前制定好的成文法(可执行的机器码),而是就具体的法律问题结合判例进行审判(动态的将源码直译为机器码)。

再次,分类不是绝对的,所以后来有了 JIT,有了字节码。

# 三权分立

这一名词首先由启蒙时代英国的哲学家约翰·洛克在其《政府论》中所提出,而这样的设计通常以法国哲学家孟德斯鸠后继提出的三权分立而被熟知。三权分立即立法、行政、司法三种国家权力分别由三种不同职能的国家机关行使、互相制约和平衡的学说和制度,亦三大政府机构共同存在、互相制衡的政权组织形式。

  • 立法(Legislature)

    立法权仅指制定和修改宪法以及其他法律的权力,广义上则还包括了对国家重大问题的决定权,根据各国法律的不同,可以包括国家元首的选举和罢免、政府首脑和主要官员的任免,财政预算的审批,战争与和平问题的决定等。立法机构行使的立法权是国家的最高权力。

  • 行政(Executive)

    行政机构的功能就是执行国家意志。包括宪法和法律的执行,并参与国家立法;对国家内外政策进行决策和实施,任免政府官员;管理国家公共事务;向立法机构提出预算,干预和调整社会经济。

  • 司法(Judiciary)

    司法机构最主要的职能就是行使司法权,即通过公共强制力维持社会秩序,进行利益仲裁,根据法律审理案件,解决法律冲突。在有些国家(主要为英美法系)也包括对宪法和法律的解释权,甚至允许他们的司法机关对于其立法机关所制定的法律进行违宪审查。

三权分立

同样类比到编程中,三权分立(Separation of powers)是对权利的分离,听着是不是很熟悉?关注点分离(Separation of concerns)?单一功能原则(Single responsibility principle)?其概念本身就可以视为对系统模块化的分解,让系统中各个部分各司其职,不受影响,但又相互联系。

我们再将其分别具体地类比到代码中不同的流程:

立法,就像定义元数据,将程序中既定的业务流程提前做好规定(制定法律),规划不同的类完成不同的任务(只能划分),又如定义某个类的能操作的数据结构(权利)和能调用的方法(行使职能);是系统制定规则的行为;

行政,就像程序执行的正常业务流程,程序在某个环境(法律体系)下,完成既定的任务,比如获取内存(开采资源)、优化自身执行效率(产业结构调整)、和第三方系统交互(建立外交)等;是系统完成特定任务的行为;

司法,就像程序执行发生的异常,然后进入异常处理流程,根据提前制定好的执行措施(立法机构颁布的法律),对异常(违法行为)进行处理,可以捕获异常就地处理(本机构进行处理),或者向方法调用者抛出异常(移交相应机构进行处理);是系统自纠正的行为。

# 中国法律体系

具体到我国法律体系,结合我国国情(特定场景下的系统优化),根据宪法规定实行人民代表大会制度。不同于世界上大部分国家实行的三权分立,我国采用议行合一,因为三权分立中三大权力机关之间存在互相扯皮,导致效率低下,且三权分立的原则难以在政治实践中真正贯彻。但我们同样能以立法、司法和行政的相关概念来理解我国法律体系。

我国立法机关为人民代表大会,在闭会期间由其常务委员会代理行使职能。代表人民,将权力赋予到司法、行政等机关。是的,代理模式。

我国司法体制由国家审判机关(法院)、国家法律监督机关(检察院)以及行使司法职能的行政机关(公安、监狱等)及相关部门构成。所以我们常说的公检法司构成的司法系统,囊括了三权中司法和行政。

法律硬件

若以上图为参考,我国法律体系中的硬件部分是一个树形结构,那么构成我国法律体系软件部分可以视作一个链表+树形的结构。

法律软件

纵坐标是(广义)法律的三个层级,任一链表节点不得违反上一节点的规定,这同样类比到编程中,顶层接口定义主要数据和行为,底层类负责具体实现。越往下权限越小,但能实现的具体任务粒度更细。还有,在下层节点还未定义具体实现(作出细化的规定)时,会依次查询上级节点的定义(沿用更为广泛的法律约束);再有,下级节点无法作出确定的执行措施时,也会请求上级节点给出解决办法(比如司法解释)。是的,责任链设计模式,同样的,两级审判制度也适合这个类比。

横坐标的维度上,按分为 7 个部门法,其中实体法律部门包含:宪法相关法,民法商法,行政法,经济法,社会法,刑法(可以理解为规范业务流程的); 程序法律部门包含:诉讼法和非诉讼法(可以类比为元编程,是规范程序本身行为的)。每个部门法下含诸多具体的法律,包括不同的层次,这个树形结构构建成单个部门法。是的,组合模式。

# 结语

诚然,人类社会这个系统的复杂度远远高于计算机系统,甚至不是一个数量级的差距,本文中诸多类比可谓牵强,类比物之间可能存在着千差万别,但之目的是为了论述其千丝万缕的联系。

再者,不论是法律还是编程,都是人类社会分工后形成的极具专业性的行业,不幸笔者对两门学科理解尚浅,本文亦非幻想创造出交叉学科,仅出于兴趣抒发拙见,若有纰漏望请诸君犀利指出。

声明:本文不涉及任何个人政治观点。