法律即代码:法典化中的公平提示原则

2023-07-25 03:29赵泽睿
东方法学 2023年3期
关键词:数字时代软件工程代码

赵泽睿

关键词:法典化公平提示原则 代码 软件工程 数字时代 算法

法典担负着重建社会共识、聚力社会发展的历史重任。在当前推进数字化转型的背景下,讨论数字时代的法典化对建设数字中国与中国特色社会主义法治体系均具有重要意义。在此意义上,民法典并非法典化运动的结束,实则其他部门法法典化的开始。习近平总书记在中央全面依法治国工作会议上指出:“民法典为其他领域立法法典化提供了很好的范例,要总结编纂民法典的经验,适时推动条件成熟的立法领域法典编纂工作。”全国人大常委会也将“启动环境法典、教育法典、行政基本法典的编纂工作”列入其2021年的立法工作计划。刑法、刑事诉讼法、行政法、环境法、知识产权法与教育法领域的学者也纷纷就如何推进该领域的法典化展开研讨,法典化一时间成为法学学者们共同关注的话题。

在此背景下,国内法典化的现有研究主要分为以下三类。第一类聚焦具体领域的法典化实践。其包括在已有法典的民法领域探讨民法典对我国民法实践的影响及进一步完善法典的路径, 以及在未有法典的行政法、环境法、教育法等领域探讨法典化的意义与必要性,并提出具体的法典编纂建议。第二类则聚焦法典化运动的比较研究。其主要通过对比我国当下的法典编纂与历史上罗马、法国和德国的法典化运动存在的异同,为我国未尽的法典化运动提供历史经验,并据此阐释我国法典化运动的历史特殊性。第三类则聚焦法典与法典化的概念分析和类型化研究。其通过历史梳理与类型划分的方式,阐明法典及法典化的概念含义、价值追求、立法技术与内部机理。

这些讨论大多面向历史且站在立法者的视角,探究法典化运动是否可能或者如何形成一套具备完整性、体系性、逻辑性和普遍性的法典。但这些讨论忽略了两个关键问题:一是法典编纂后该如何保障其后续不断修订的动态发展过程合理且正当;二是法典化运动未来该如何结合数字技术进行发展,即如何彰显数字时代法典化的时代特征。对此,本文将以法律的公平提示原则为核心,论述法典化在化简分散立法的复杂性时所面临的发展悖论,以及在数字时代的法典化中提出“法律即代码”观念的时代意义。同时,本文也将结合软件工程学的基础概念、理论和技术,从法律的公平提示原则推导出“法律即代码”的实现路径与落实方案,为计算法学视野下的立法研究提供方向。最后,本文将结合当下热议的“代码即法律”观念与本文提出的“法律即代码”观念,进一步将法律的公平提示原则发展为代码的公平提示原则,将国家治理的法典编纂与修订原则延伸为平台自治的代码设计与修订原则,为解决代码黑箱问题提供一种程序性视角。

一、“法律即代码”对法典化的意义

“法典(Code),是指在某一个法律主题之下将既有的和新设的规范进行体系化集成之后形成的具有单一性和完整性的法律文本。而法典化,则是指国家推进并形成法典的事业。”法典化的兴起是为了应对分散立法所引发的法律冗杂化和碎片化,以实现法律的公平提示原则。然而持续不断的立法与修法让内容繁多、结构复杂的法典本身也成为法律适用复杂性的来源,无法高效、动态管理繁多法律文本的法典化运动反而阻碍了法律公平提示原则的实现,进而形成了法典化的发展悖论。因此,数字时代的法典化应当提出“法律即代码”的观念,并利用软件工程学中处理代码文本的数字技术实现法典化的数字化,据此打破法典化的发展悖论,保障数字时代法典化中的公平提示原则。

(一)作为法典化动因的公平提示原则

公平提示原则是指“政府在依据一项法律规则要求其公民承担相应的法律责任之前,公民必须被告知并理解该法律规则”。其在历史发展中演化出了对法律的三项核心要求。其一,法律的发布要求。政府必须正式颁布其所适用的法律规则。其二,法律的公民认知要求。政府有义务积极地让公民认知并理解其所颁布的法律内容。其三,法律的清晰度要求。政府有义务保障其所颁布的法律明确清晰,避免含糊或不连贯的规定纵容权力滥用。公平提示原则最早在雅典的希腊获得关注,当时的公众普遍要求政府公布其法律,进而导致“政府应当正式颁布其法律”成为法治国家的标准做法。多位著名法学家也在不断强调这项蕴含于法治文明根基的基本原则。约翰·洛克在其《政府论》中便论述了法律的发布要求对社会运作的重要性,其认为法律的正式颁布与公民对这些法律的认识将保障公民对其自由和财产的信心,进而确保社会运作的高效与稳定。杰里米·边沁则在其著述中进一步明确了法律的公民认知要求,其认为公平提示原则远不止赋予了政府颁布法律的义务,更要求政府积极努力地将法律告知公民,只有公民认识到法律,才算满足公平提示原则的要求。而公平提示原则中的清晰度要求则最早由塞缪尔·普芬多夫提出, 其认为法律的公平提示原则不仅要求政府要让其公民知道法律的存在,还要能让公民明确知道法律的具体含义,因此法律的颁布若要有意义就必须清晰明确。这些关于公平提示原则的思想论述为当代宪法的禁止溯及既往、禁止司法创造和禁止正当程序模糊等重要条款奠定了理论基础。

而保障法律的公平提示原则也是法典化运动兴起的主要动因之一。纵观历史,各国进行法典化运动的目的皆是解决分散立法在社会变动中不断冗杂化和碎片化而引发的法律适用复杂和理解争议增多等破坏法律公平提示原则的问题。例如,1794年普鲁士立法机构以追求法典的清晰易懂与完整性为目标,颁布了被认为是定义了现代法典体系性特征的普鲁士法,此时的公平提示原则为18、19世纪的法学家们追求法典体系内部的逻辑性、一致性和完整性提供了正当性依据。甚至在20、21世纪的德国环境法法典化过程中,如何通过法典化运动解决过去立法分散引发的适用复杂与理解争议等破坏法律公平提示原则的问题,再次成为德国法学家的热议话题。英、美等普通法系国家的法典编纂虽然在技术层面与大陆法系国家不同,但其同样也是为了在法律不断冗杂化与碎片化的趋势下保障法律的公平提示原则。如美国国会于1795年授权第一次联邦法规汇编便是为了让法律更加简单明了,以此便于公众获知法律,解决因司法意见堆积导致的法律解释分歧与争议。正如韦伯在探究法典化运动背后的社会原因时所总结的:“法典化运动的兴起,是因为法典拥有(或者至少给人一种拥有的印象)非凡的清晰度和精準的可理解性。”

无论大陆法系还是英美法系,随着法治的不断完善与发展,国家都需要以一种能够促进理解和树立权威的样式呈现一套公认的法律权威文本,以此塑造期望和规范行为。这也解释了为何我国当下开始在多个领域开展法典化运动。随着我国法治建设的推进,正式颁布的法律法规数量不断增多、领域不断扩张,立法的冗余与碎片化为政府适用法律与公民理解法律带来了困难,为了保障法律的公平提示原则,法典化运动必不可少。例如,我国现有的行政法数量繁多且混乱,出现了彼此间重复、矛盾的严重现象,而这正是我国学者推动行政法典编纂的正当性理由。

(二)法典化的发展悖论与“法律即代码”的意义

但是法典化运动并非一劳永逸的事业,法典为了适应社会发展需要不断地扩充与修订,而法典的扩充与修订过程反而会产生新的复杂性,这些复杂性不断积累将会产生一套没有任何个人可以完全理解的法典,进而破坏法典化的初衷———法律的公平提示原则。 因为法典为了追求完整性、体系性、逻辑性和普遍性,其在动态发展过程中必然会面临着大量法律文本的冗杂问题,这将会对法律的适用造成如下三方面的重要影响:其一,过于庞大、复杂的法典会导致公民的诉讼成本不断增加并造成法治效率低下。对此,美国一些针对民事诉讼成本的实证调研显示,在美国推动法典化进程后,花费在与法治相关的时间、人力和金钱成本不断增加,并在当代的法治社会形成了数额庞大的必要开销,这对大型公司都造成了巨大负担。其二,随着法典规模的扩大,法律条文之间的相互作用导致立法机构与司法机构无法有效协同地使用法典。已有学者指出,目前主流的以等级化格式和编号、主题分类和交叉引用为特征的系统化法典编纂虽然降低了立法机构的制定成本,但法院获知特定案件所涉及的法律的信息成本正在指数式地增长。这会逼迫繁忙的法官更多地关注法典单个字词和法条,而忽视整个法律的整体政策目标,同时也会诱发过度犯罪等一系列的司法负面效应。其三,由于法典对普遍性、完整性和体系性的追求,法典对绝大多数公民来说会变得越来越不透明,公民难以完整、正确地理解法律。对此,一些学者已经哀叹普通公众在缺少律师的情况下已难以理解复杂的现有法律。而当法典的复杂程度超出一般公众所能理解的范畴后, 法典化运动便犹如罗马皇帝尼禄(Nero)将其法律列于高塔之上一般,因公民无法看懂与理解而变得毫无价值。这三个影响将会导致法典在动态发展的过程中逐渐脱嵌于社会,最终形成法典化的发展悖论。

因此,为了在数字时代的法典化进程中打破法典化的发展悖论,需要将法律文本类比为代码文本, 利用数字时代兴起的软件工程在法典编纂和修订的动态发展过程中保障法律的公平提示原则,形成“法律即代码”的法典化观念。在数字社会中,大型软件的代码库通常有数百万行的长度,为了有效管理这些代码库使其正常运作,软件工程学积累了大量用来分析大型软件代码库演变和结构的概念、理念和技术。“法律即代码”的观念将基于法典化和代码库在大规模文本管理需求方面的一致性,把这些软件工程学中的代码库管理理念与技术引入法典编纂与修订技术之中,将法律的公平提示原则从法典化的兴起动因转变为法典化动态发展的约束原则,实现法典化的数字转型。对此,下文将进一步论述这种旨在打破法典化发展悖论的“法律即代码”观念具有何种内涵、如何实现,以及对数字社会中“代码即法律”的二元共治研究有何影响。

二、数字时代法典化中“法律即代码”的内涵

结合法律的公平提示原则,数字时代法典化中的“法律即代码”观念是指,基于法律与代码在功能与文本管理需求方面的一致性,对法律文本的法典编纂和修订要充分利用软件工程学中对大型代码库的管理概念、理念与技术,实现易懂的文本表达、合理的结构安排、显著的变动提示和简洁的交叉引用四个维度的法典数字化转型,以此保障法律的公平提示原则(法律的发布、公民认知和清晰度要求)。在此,本文将对“法律即代码”观念的正当性依据,以及“法律即代码”内涵的四个维度展开论述。

(一)法律与代码的功能与文本管理需求的一致性

自雷登伯格提出“代码就是法律”的论述后,关于法律与代码之间的比较研究日益增多。无论是将代码比作网络空间中的法律,以此论述网络空间规制方式与现实空间的差异,还是将法律比作社会系统的代码,以此从结构层面借鉴代码设计的基本原则来观察与认识法律,均是基于法律与代码在功能层面上的相似性展开研究的。在功能层面上,代码与法律都是由一系列规则组成,这些规则都是为了管理某些操作,法律管理人的交互操作,代码管理计算机的交互操作。例如,代码规定了计算机在接收到某种数据并将其输入后得出某种数据并将其输出的规则,法律规定了特定人(除了自然人,也包括法人、国家等拟制人)在某种环境或行为输入后输出特定权力或权利的规则。因此,在功能层面上,代码和法律具有共同的特征。

随着软件工程对代码文本的需求规模增大,以及社会发展对法律文本的需求规模增加,大规模的代码文本和法律文本都将面临着复杂化引发的可理解性降低等类似的缺陷,进而也就有了建立和管理软件代码库与编纂和修订法典的一致性需求。就如法律需要公民理解一样,软件工程团队在人员流动中为了能持续维护和更新软件,需要保障其代码文本能够被其他人员所理解。从促进成员对规则认知的需求层面,“代码和法律作为实现特定目标的指令集,均需要通过过滤信息、建构模型来降低认知负担、提高认知效率”。至少在如下两个方面,软件工程和法典化有着相同的大规模文本管理需求:其一,文本的简洁性。在软件工程中,软件代码库的大小是评估开发和维护它所需工作的常用指标。每行代码都可能包含错误或不必要的复杂性。因此,大量的代码对应更大、更复杂的软件,而这些软件可能会有更多的漏洞。同样,立法应当使用简短的句子,而不是复杂或复合的句子。冗长的法律文本需要更多的时间来阅读、解释和修改。其二,文本的可读性。软件开发公司通常需要在使代码可读和易于理解方面投入大量资金,因为软件工程团队通常需要集结新的团队成员、修复漏洞和重构现有代码,这些任务都需要深入理解其他人编写的代码,而这些人通常不再能够提供支持或说明。同样,法律应该易于阅读和理解,以便公民能够理解他们的权利和义务,也让律师、立法者、法官和陪审员能够更有效地履行他们的职责。例如,美国参议院的立法起草手册也强调可读性。题为“关注读者”的第107节规定:“草案必须为读者所理解。本手册中的规则应以使草案更清晰、更容易理解的方式应用。”不必要的复杂法律可能会干扰商业、经济增长和司法公正,甚至會破坏法律的公平提示原则。

因此,可以说,法律和代码作为均需要沟通与认知方能有效运作的规则系统,其在大规模的文本管理需求方面是一致的,而这种一致性为法典化引入软件工程学的理念与技术、实现法律的公平提示原则提供了联结纽带。

(二)“法律即代码”内涵的四个维度

在软件工程学中,为了应对大规模代码文本的复杂性所引发的软件更新与维护困境,软件工程师们会从四个角度来量化和化简大型代码库中的文本复杂性:文本表达、结构安排、版本变化和引用网络。这为我们理解软件工程学如何将法律公平提示原则转化为“法律即代码”的四个维度(法律要利用软件工程实现易懂的用词表达、合理的结构安排、显著的变动提示和简洁的交叉引用)提供了方向。

首先,“法律即代码”意味着数字时代的法典化应当利用软件工程追求更加易懂的文本表达。软件工程学需要保障其代码的文本表达具有统一性、公认性、简洁性和语境性,以保障代码文本符合软件工程学中最广泛的常识性认知。这一点对于如何在法典编纂和修订过程中保障法律的公平提示原则也同样重要。这意味着法典编纂和修订过程中应当利用软件工程实现文本表达的统一性、公认性、简洁性和语境性。统一性是指,法典在统合各项法律规则及增删修改时应当保持用词的统一, 避免出现对同一对象在不同规则中用多个同义词表达或是多个对象用同一词表达等容易让公民误解的情形。公认性是指,法典中的用词定义应当以公众可接触的客观工具(如词典)而非学理观点为准,这些工具应当是最能反映普通人而非普通律师、法官或立法者的理解。简洁性是指,法典文本应当以尽可能简单的词语来表达,因为不必要的复杂词汇将会干扰商业、经济增长和司法公正。注重语境则是要求立法者在编纂和修改法典、司法者在解释适用法典时应当通过注意邻近的条款来确定文本的用词与含义。因为基本语言学理论认为,单词和短语的意义只存在于上下文中,更一般地说,公民只能通过参考上下文来理解特定的规则用词含义。由此可以看到,为了保障公民对法律文本的精准理解,法典在编纂及修订的动态发展过程中,创设与变动任意规则的用词需要借鉴客观的工具并考虑其对其他规则(相同用词的规则、同一对象的规则、上下邻近的规则等)的影响,而这些需求是可以通过有效利用软件工程来解决的。

其次,“法律即代码”意味着数字时代的法典化应当利用软件工程追求更加合理的结构安排。一项评判软件系统是否达标的要求是其是否能够通过合理的结构安排让软件工程师们迅速找到影响某一操作的所有相关代码。这种结构的合理性将会大幅影响软件系统的后续维护与更新成本。同样的道理,一部好的法典应当是能够通过合理的结构安排让公民便捷地找到特定案件相关的所有法律规则。然而,无论是法典编纂前的分散立法,还是法典规模扩张后的复杂法典,若不对法律规则进行持续性的结构管理将会导致影响同一案件的相关规则分散于法典的不同部分,即法律系统的“熵增定律”。当法律规则的分布过于无序与混乱时,公民便难以通过法律文本来全面、准确地理解法律。该问题在美国的法典化进程中较为突出,由于立法机关很少或根本不关注现有法典的整体结构,而不断将新的法律笨拙地塞进法典已有的标题之中,导致同一案件的相关法律文本可能有数千页之隔。然而,管理规模庞大的法典文本结构并非易事。当一项新的法律涉及的主题较小且狭窄时,现有的法典编纂技术较易将新法纳入法典文本之中。但如果新法的规则数量较多、涉及多个主题,甚至包含了多个位阶规则时,新法的纳入就将变得尤其复杂。因此,为了保障法典动态发展中的公平提示原则,数字时代法典化中的“法律即代码”要求法典在编纂与修订过程中利用软件工程持续地改进其结构安排,以促进公众对法律具有更全面的理解。

再有,“法律即代码”意味着数字时代的法典化应当利用软件工程追求更加显著的变动提示。软件工程为了保持系统的稳定性并降低更新成本,会尽可能地减少每次更新所变动的代码行数,并以显著的方式标注此次更新的地方,以促進其他软件工程师对软件更新的理解。同样,法典的编纂与修订过程中,基于法律的公平提示原则应当尽量减少文本的变动,并以显著的方式向公民提示其变动部分,以帮助公民理解法律条款的演变。然而,当法典文本的规模日益庞大时,每一次文本修正都将给公民完整理解当下有效的法律带来巨大的信息成本。例如,美国国会甚至专门设立了众议院法律修订顾问办公室,要求其及时更新法典文本并编写相关材料来帮助用户查找、跟踪和理解法典的更新内容,如发布新旧法典的比较文本、编写立法历史、标注有效日期、制作法律条款的状态标签和索引等。软件工程中则有许多高效、便捷的数字技术来帮助人们迅速理解文本的变动状态,例如下文将会介绍的版本控制系统。因此,“法律即代码”要求数字时代的法典修订充分利用软件工程技术,以合理、及时的方式来展现法典文本的整体变动,以便公众能准确、方便地理解法律,避免过时规定所产生的深远累积效应。

最后,“法律即代码”意味着数字时代的法典化应当利用软件工程追求更加简洁的引用网络。在软件系统中,代码之间存在着产生依赖性与复杂性的庞大引用网络结构,而任何软件工程都要求软件工程师在必要时才使用交叉引用,并利用模块化思想化简引用结构,以避免产生不必要的系统依赖性和复杂性。因为这种交叉引用产生的依赖性与复杂性将会导致系统更加脆弱,一旦网络中的某个节点代码出现问题,将会影响整个网络代码的功能运作。同理,为了避免内容的重复、促进立法的便捷,法典中的条款会经常相互参照与引用,进而产生一种相互依赖的引用网络,但规模庞大的引用网络也会导致理解与适用法典的复杂化与困难化。这种引用网络的规模越大,法典的复杂程度也就越高,公民想要获知完整法律引用链的知识成本也就越大(尤其是公民可能需要探索多条不同的引用途径),并且法典在后续发展过程中对引用链任意部分的修订都会导致未知的、非预期的下游影响。据悉,美国法典发展至今,最长的法律引用链条需要经过32个引用步骤才能“游走”完。法典的引用网络规模也成为许多学者对法典复杂性进行实证研究的基本指标之一。为了避免法典因过于复杂而难以为公民所完整理解,“法律即代码”要求法典在动态发展的过程中利用软件工程的理念与技术不断简化法典中的引用网络,以避免法典黑箱的形成。

综上所述,为了保障法典在动态发展中不脱嵌于社会,国家必须有效管理大规模的法典文本,以满足法律公平提示原则所提出的三项基本要求(发布、认知与清晰度)。在数字时代的背景下,随着以编写和管理大量代码文本为专长的软件工程学的不断发展,基于代码与法律的功能相似性与文本管理需求一致性,提出“法律即代码”的观念并利用软件工程学理念与技术保障法典在动态发展中的公平提示原则,将成为数字时代法典化的时代特征。

三、“法律即代码”的实现路径

在明确了“法律即代码” 的具体内涵后, 本文将引用软件工程学中较为基础的概念(“圈复杂度”)、理念(“模块化”思想)和技术(版本控制系统)来展示“法律即代码”观念的可行性。这三个例子在软件工程学中仅是最为基础的部分,但其对数字时代法典化的推动作用足以表明“法律即代码”这个观念的未来发展潜力。

(一)衡量文本表达复杂性的“圈复杂度”

目前,衡量法律文本表达复杂度的主要指标是文本语句的长度,即字数越少的法典表达越好。然而,软件工程学的研究表明,文本的长度并非衡量文本表达复杂度的唯一或最佳指标,因为其无法衡量不同文本表达对整体文本结构的复杂性影响。最典型的例子便是一个连续由25个“IFOTHEN”的条件语句所构成的50行代码将会产生多达3350万条不同的执行路径,其相比代码数达500行但仅有5个条件语句的代码,所产生的可执行路径数量要多得多。〕这意味着在软件工程中,过多地嵌套条件语句也会导致给定输入的可执行路径成倍增加,进而增加了软件的复杂度与出错率。同样,法律文本的表达也充斥着大量的条件陈述和例外情况(如“如果”“除外”“但”“规定”“何时”“何地”“除非”“尽管”“在任何情况下”等表达),但过多地条件语句将会增加公民对基本规则的理解难度,甚至过多的例外表达会让公民觉得基本规则是错误的。例如,美国法院在平台革命期间不断对通信规范法第230条中的网络平台责任豁免创设例外情况,以此限缩网络平台的责任豁免范围,但过多的例外情况反而让网络平台公司与公众觉得该条款已无效用。同样,美国综合拨款法案的文本字数非常庞大,但因为条件语句使用较少导致文本间的耦合性较低,公民对其理解较为简单,因为其只需要关注相关的少数条款就能预料法律适用情况。而美国的患者保护和平价医疗法虽然文本字数远少于综合拨款法案,但充斥着大量条件语句和相互引用,导致其文本间耦合性较大,公民理解非常困难,有时公民需要读懂整部法案才能了解其情况的法律适用可能性。

因此,软件工程学中用于衡量条件语句引入对整个系统影响的“圈复杂度”指标有助于为立法者在权衡法典编纂与修订时是否要用条件语句来进行表达提供更加精准、客观的指标。“圈复杂度”(有时称为“McCabe复杂度”)是指一段代码中的可执行路径数,即运行该代码所必须作出决策的次数。因此,可以将“法典的圈复杂度”指标定义为“一段法律文本的决策路径数(或者说条件语句数),即法官在适用该法律时所必须作出是否满足法定条件的决策次数”。在立法者与学者引入这项指标,并利用计算机统计不同法典编纂或修订方案的圈复杂度后,便可直观地比较不同法典编纂或修订方案之间的复杂性。当法典的某一修正方案以条件语句的方式引入一段新的法律后所产生的圈复杂度远大于以列举方式引入的圈复杂度时, 这代表着用条件语句来增加或修订既有法典将会产生巨大的复杂性。这种复杂性在当下只关注文本长度的立法研究中是很难被直观发现的。通过引入圈复杂度的概念和指标,能够有利于立法者和学者大规模地量化与比较不同法典编纂或修订方案在司法实践中所必须面临的复杂性,进而有利于立法者与学者作出有利于保障公平提示原则的立法决策或意见。

(二)简化系统结构与引用网络的“模块化”理念

基于“模块化”的“面向对象编程”理念是当代大型软件系统编程的基本编写模式,也是许多开创性计算机科学论文和教科书的焦点。其核心思想是通过将软件划分为不同的模块以简化模块之间的接口,让系统的整体结构和引用网络简洁化。例如,功能强大的文字处理应用程序(如Microsoft%word)具有许多功能,包括格式化、引用管理、检查拼写和语法以及文档打印选项。为了管理这种复杂的结构与引用网络,大型软件系统被划分为模块化子系统(如开始模块、插入模块、设计模块、布局模块等)。更小、更敏捷的软件工程师团队分别负责不同的模块。由此,每个团队只需了解与其模块交互的其他模块的输入输出行为,进而大幅降低了大型软件的开发与维护成本,并提升软件系统的鲁棒性。在“模块化”理念的指引下,好的软件系统很容易被划分成不同的模块,模块之间的接口相对稀疏和简单。同样,好的法典也应当很容易被划分为不同的模块,模块之间条文的相互引用应当尽量稀疏和简单。

简要地理解“模块化”理念的一种方法是将软件系统看作一个网络,其中代码文本所用到的函数或变量看作网络中的一个节点,如果节点a引用了节点b,则a和b之间存在一条连接。“模块化”理念的核心在于如何调整节点来降低连接的数量并简化网络的结构。如原本的代码中存在相互引用的函数或变量a、b、c、d、e(见图1),其有6条连接。此时若把函数或变量a和e归为同一函数或变量ae(见图2),则软件中的代码连接数将会減少至4条,且结构也从一个复杂结构简化为两个简单结构的叠加。

基于这种“模块化”的理念,软件工程学对于任何给定的软件代码库,都可以构造和分析其聚合的节点和边。由此产生的网络结构可以深入了解软件系统的性质,例如它的健壮性以及它的漏洞可能存在的位置。网络图还可以提供软件系统中存在的不同类别的模块。特定模块所属的网络部分可以提供关于模块如何与系统其余部分相关的信息。而在法典化研究中引入模块化概念,有助于计算法学利用软件工程方法将法典中各个条款之间的关联可视化。从公众的角度,这种基于模块化思想的可视化实证研究能够便于公民与法官直观地了解法典文本的整体引用网络,让其能更加便捷地找到具体案件所可能涉及的相关法条,并方便学者精准、直观地了解法典的大规模文本在演变过程中的整体结构变化。从立法者的角度,引入模块化概念并基于此形成的可视化实证研究能够为法典在修订的过程中如何合理地调整篇、章结构与引用方式,来减少必要的引用、简化法典的整体结构提供重要参考。例如,美国已有学者基于模块化概念与软件工程技术对美国各个法典的引用网络进行了可视化的呈现与比较。我国在法典化过程中也可以利用软件工程的方式进行类似的计算法学研究,这也有利于将知识图谱技术引入法典化的公平提示原则保障机制之中,成为数字时代法典化的技术特征之一。

(三)可视化文本变动的“版本控制系统”

在大型软件代码库中,会有许多软件工程师同时处理代码,所以需要有确保代码更改不会破坏功能或产生冲突的机制。为此,软件工程实践通常采用“版本控制系统”来处理这些问题。而受软件工程启发的法律版本控制系统可能是未来管理法典变更的合理方法。版本控制系统的“跟踪任务”功能可以实时提示所有软件工程师系统目前作出了哪些更改,是谁作出了更改,什么时候进行的更改,以及其更改的理由。〔60R〕在此,本文仅以版本控制系统更改文本的方式,阐述其对数字时代法典化中公平提示原则保障的借鉴意义。

在代码库上工作时,软件工程师通常会添加、删除、修改、重新排序或重组代码行。而有效保障多人同时协作的关键在于他们能够基于版本控制系统对文本更改的可视化进行沟通。具体来说,尽管编辑软件代码可能涉及许多高级思维过程,但它们在版本控制系统中可以通过两项简单操作(添加和删除代码行)与他人沟通其编程的思路。因为版本控制系统会不断地对同一文档的两个版本进行比较,即即时性的“对比”。当团队成员在版本控制系统中进行代码更改时,团队的其他成员可以很容易地识别更改位置以及这些更改是什么(主要是通过查看红线比较)。此外,版本控制系统对更改行数的标识可以直观地表明修订是大还是小, 无须人力专门对修订前与修订后的文本进行单独比对。基于版本控制系统来即时性地对比文档的两个版本是软件工程师共同编写与修订软件代码的基本习惯。对此,我们可以反思现有法律修正案的颁布方式———仅公布修改的文本内容,即“将XX条改为XX条,修改为:‘XXXX”。现有的这种修正案颁布方式需要对当下文本有较为全面和完整的认识才能快速理解修正案对法律的影响,这对非专业的公民来说存在着较大认知成本,对律师与法官来说也需要花费大量的时间成本去跟踪和自行比对法典的修订。利用软件工程学中的版本控制系统进行法典的编纂与修订,一方面有利于公众参与法典编纂与修订时的相互沟通,另一方面也有利于公众对法典编纂与修订后的有效法律进行直观、快速地认知。当然,这种用于法典化运动的版本控制系统需要法学专家与计算机专家的共同努力,将法典的编纂和修订程序纳入软件程序之中。

此外,为了快速寻找到相关文本,软件工程师在日常工作中也会经常利用版本控制系统的查找工具。这些查找工具既有助于立法者在创设规则时统一表达用词,也能帮助公民快速寻找到其所需的相关法律文本。与互联网搜索引擎帮助用户在线查找相关文档,或“查找文件”程序帮助计算机用户在自己的计算机上查找文档的方式类似,版本控制系统会帮助工程师自动、快速搜索代码库中的特定术语或其频率,以帮助他们完成工作。原则上,这些搜索技术也可以用于减少立法者与公众对法典中大规模文本的认知成本,尤其是在立法者修订涉及多个领域的相关条文时,这些查找工具将会为立法者与公众整体性地理解法律提供助益。

上述三个例子仅是软件工程学中保障代码库可理解性较为浅显的概念、理念和技术,但足以揭示将软件工程学引入数字时代法典化研究的重要性与可行性,即“法律即代码”的未来发展潜力。当然,“法律即代码”的理念除了能在法典化研究中发挥重要作用,也能为数字社会治理中的“代码即法律”研究提供新的思路与视角。

四、“法律即代码”与“代码即法律”

随着社会的数字化转型,法律与代码的二元共治理念已经为社会所接受。而法典化过程中因复杂性引起的黑箱问题也同时出现在了软件工程的治理领域,“法律即代码”的观念据此与“代码即法律”的观念发生耦合。社会公众对数字空间中具有强制性效力的代码产生了可理解性的需求,约束法典化运动的公平提示原则自然发展为了代码的公平提示原则,即公民行为在受到代码的规制前,必须被告知并理解该代码中的相关规则。大型软件系统中的代码黑箱问题也就不再仅仅是工程师们所关注的技术问题,而成为政府、企业与公众所共同关心的社会热点。这种代码黑箱问题会导致人们难以理解代码规制社会的具体逻辑,进而无法对代码产生信任,甚至会担忧和恐惧在数字社会中被代码暗中操控。此时,代码之治所遇到的黑箱问题实质上与法典化所面临的复杂性问题具有一致性, 而从法律的公平提示原则出发研究代码之治的规制问题自然也就成为一个重要视角。

对此, 一些学者试图将法律公平提示原则的三项实体性要求直接适用于代码之治的规制之上,即追求代码的公开发布、公民认知和清晰明确。例如,有学者提出了设立以实现代码公开为目标的解释权和排他权,前者要求软件开发者能够以用户理解的方式让他们认知代码文本,后者通过排他权保障软件开发者的商业利益,据此鼓励他们公开代码文本。然而,这些观点受到了不同程度的批评,单纯的代码公开已被认定为一种无益于代码公平提示原则的规制方式。但有趣之处在于,这些批评的理由与当代批评法典化运动无益于法律公平提示原则的理由类似。如软件的代码文本与法典的法律文本均因文本规模较大、用语专业晦涩和引用结构复杂,导致单纯地公开发布文本也无益于相关利益者理解其涉及的具体代码或法律的内涵,因为其完整、准确理解相关代码或法律的认知成本已远超其收益。而对于旨在加强更宽泛意义上代码公开的解释权,有一部分学者也指出,其并非是围绕代码文本的解释, 而是围绕软件开发者与其他利益相关者之间如何达成代码规制信任的解释,这已不再局限于单纯的代码公开,而是涉及沟通问题。这些通过延伸解释权来保障代码公平提示原则的主张已经不再停留于代码的公开,而是转变为思考如何在不同应用场景下促进公众参与和充分沟通来保障代码之治的正当性与合理性。这些恰恰也是法典化研究目前所追求的目标———如何促进公众参与和充分沟通来保障法典编纂和修订的正当性与合理性。因此,在“法律即代码”和“代码即法律”两种观念的耦合作用下,公平提示原则作为法典化与代码之治中共通的核心原则,为计算法学的法典化研究和代码治理研究指明了一个全新的路径,即促进多方关于法律/代码沟通的程序视角。

在基于法律程序的沟通视角下,代码的公平提示原则作为代码之治的正当化机制将通过法律程序的创设而非实体性要求来实现。基于法律程序对法典的编纂、修订和适用分别创设了立法程序和司法程序,基于法律程序的代码之治可以为代码的研发决策、适用决策和自动化决策分别创设狭义的技术性正当程序、算法论证程序和嵌入性正当程序。如狭义的技术性正当程序将目光聚焦于软件工程师与平台需求方之间针对代码研发的沟通过程,要求软件工程师在作出相应的决策时作出可使其他软件工程师和需求方理解与认可的人类间沟通。这在代码即法律的数字社会以前,是由计算机的职业伦理所规定,但在进入代码即法律的数字社会后,研发大型平台软件系统的工程师们就必须有一套法律程序来保障他们与平台需求方之间的沟通,进而保证大型平台的软件至少包含具有平台所设想的价值与理念。当然这种狭义的技术性正当程序只保障了代码在软件工程师与平台需求方之间的正当性,为了进一步将其正当性从平台需求方扩展至平台用户,需要类似于法律论证程序的算法论证程序。“算法论证程序”是指,算法应用主体按照特定标准和条件整理利益相关方通过一定顺序、方式和步骤得出的意见后,对其算法应用的决定(即选择某项数据处理或代码构建的逻辑规则作为决策规则嵌入特定社会领域)作出可使利益相关方理解与认可的沟通过程。而当代码构建的系统具有拟主体性且能够自行进行决策后,聚焦于人机沟通的嵌入式正当程序也就成为了自动化决策中保障代码公平提示原则的重要机制。对算法论证程序和嵌入式正當程序,已有专门论文进行讨论,就不再赘述。但在此已可以看出,提出“法律即代码”观念的意义将会不局限于打破法典化的发展悖论,其更有将数字时代法典化中的公平提示原则引入代码治理领域之中,并为计算法学在立法研究和算法规制研究方面指明了“沟通—程序”的研究方向。

结语

随着我国法典化运动的兴起,各领域学者纷纷着手从学理角度探求一部完整性、体系性和普遍性的法典文本。然而,法典化运动并非一项一劳永逸的事业,随着社会的发展,法典在出台后必然会面临持续性的修订,若不对法典文本的动态发展加以约束,将会形成一个任何个体都无法完全理解的法律黑箱。为了打破这种法典化的发展悖论,提出“法律即代码”的观念,并据此引入软件工程学的理念与方法是数字时代法典化的必需。基于法律与代码在功能与文本管理需求方面的一致性,“法律即代码”的观念,是指对法律文本的法典编纂和修订要充分利用软件工程学中对大型代码库的管理概念、理念与技术,实现易懂的文本表达、合理的结构安排、显著的变动提示和简洁的交叉引用四个维度的法典数字化转型,以保障法律的公平提示原则(法律的发布、公民认知和清晰度要求)。在软件工程学中,“圈复杂度”的概念有助于重塑我们对法典文本复杂性的理解,“模块化”思想的理念则有助于我们可视化与简化法典文本的引用结构,版本控制系统的技术则有助于我们高效地理解与管理文本的变动情况。这些基础概念、理念和技术对数字时代法典化的推动作用足以表明“法律即代码”这个观念的未来发展潜力。而“法律即代码”的观念同样也会与“代码即法律”的二元共治理念产生耦合,将法典化中的法律公平提示原则转化为代码的公平提示原则,并指出计算法学在立法研究和算法规制研究方面的可行方向,即促进多方关于法律/代码沟通的程序治理。此处的“程序”将会是法律程序与算法程序之和,是法学研究与计算机科学研究的交叉应用。

猜你喜欢
数字时代软件工程代码
创世代码
创世代码
创世代码
创世代码
数字时代下图书馆读者服务工作的转型
数字时代室内设计中绘画作品的运用
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨
档案数字化管理建设中存在的问题及对策