政治与计算机

何为哲学
您认为哲学是什么?根据词典的定义,哲学是“思考世界的生活与根本性问题并寻找答案的活动”。此外,还可以提出一种行为性的定义:哲学不是解答固定答案的题目,而是以同一问题或不断衍生的问题为线索拓展思维,并分享其答案的过程。
过去我在攻读学士学位期间,曾修读过一门与政治哲学相关的课程。那时在自我介绍环节,教授曾说过类似“政治哲学与计算机科学是处于不同哲学顶点的学科”这样的话。虽然不是确切的这些词语和句子,但大致是这个意思。
计算机科学
我认为计算机科学是“为解决逻辑问题而进行的根本性探索”。因此,面对同一问题,每个思考的人都可能得出不同的答案。最具代表性的例子就是排序。对于将一组排列好的数据按顺序排列的方法,存在冒泡、插入、选择、归并、快速、堆、Tim等多种算法的探索。并且通过不断划分,更优的算法得以产生。
此外,从局部来看,也可以说是“构建并证明”。就像上面的排序,也是不断构建排序方式并证明其结果。对于开发者而言,更贴近的例子是:当项目策划出现时,实现它并证明其能够正常运行,这样理解会更好。
政治哲学
我认为政治哲学是“为解决社会问题而进行的根本性探索”。它针对每个时代不同的既存问题,反复提出疑问、得出答案,并与当下和未来分享。政治哲学主要处理正义、自由、平等、权力等会随时代与文化而有不同解释的抽象价值,它没有明确的善与恶、正确与错误的界定,这正是其特征所在。
此外,若像计算机科学那样从局部来看,可以说它是“提问并反思”。它对已发生的问题不断发问,思考为何会如此、有哪些更好的方向,进行反思并得出答案。这同样会随着思考者的人数而产生众多答案。
我们为何也要了解政治与计算机
相互调用的关系
两个领域看似探究不同的范畴,但实际上却共享相当多的相似之处,并拥有许多互为因果的部分。
举一个例子。
- 如果将个人的健康数据安全地存储在云端,那么在需要时,各医院便能快速访问。⇒ 以编程方式,利用各个领域的功能,安全且便于访问地实现这一点。
- 那么,这些数据属于谁?是我?登记的负责人?还是主办机构?开发公司?国家?那么,他们能看到我的数据的哪些部分?我的个人信息能在多大程度上、以何种方式获得保护,又能得到怎样的保障?⇒ 不同共同体以及各个人之间的立场和利益分歧,将引发政治层面的讨论。
- 此后,政治讨论与编程层面的设计和实现将时而反复交织、循环往复。
如此,为解决既有的社会问题,计算机科学被运用;而为了认识并解决由此产生的问题,需要提出质疑,进而由政治哲学来解决下一个问题。在信息化社会的今天,这是理所当然的现象。
政治与计算机是否相似
看似不同之处
此外,这两个领域也以相似的形式进化。然而,其根基与社会哲学和自然哲学之间的关系一样,存在模糊表达与明确表达之间的差异。政治哲学以自然语言构成的、可变且模糊的定义为基础,而计算机科学则以数学式构成的、不变且明确的命题为基础。
另外,二者的方向性也表现得略有不同。计算机科学认为存在最优解。而政治哲学则谈论更具说服力的主张、更有根据的主张、更具伦理性的主张等模糊概念。但在我看来,两者的方向性几乎相似。因为归根结底,两者都是在谋求“更好的下一步”。就拿计算机科学来说,其分支虽多,但最具代表性的是被称为编解码器的媒体压缩领域,人们为了展示更好的压缩率、压缩性能和许可费用而不断努力。
相似之处
最具代表性的是,编程语言与统治理念似乎都以类似的方式作用于人类。虽然无法将各语言与理念一一对应,但出于趣味,我尝试将它们罗列如下。
- C语言(
开发者知道自己在做什么):我想将其比作共和主义。因为它在历史上与作为西方政治体制根基的共和政体相似,并且我认为它与重视公民个人意识以及个人为迈向更好理想而努力的共同体主义也颇为相似。此外,我感到权利伴随着责任这一点也很相似。 - Java(
一次编写,随处运行):我不太确定。它有着强有力的法律,人们遵循法律,过着统一化的生活,但正因为如此它是稳定的,而在其中又是自由的。而且一旦进入Spring,各种福利便在等待各位。要不就将其归为自由主义吧? - C#(
开发者生产力与软件工程原则的协调):在强大政府的庇护之下,一切都被设计得井井有条,在这一基础上,于计划之内,可以将生产力与性能发挥到极致。计划经济与之最为契合。它并非共产主义,因为它放开了生产资料,也没有限制生产者。 - Go(
舍弃复杂性,取实用性与效率):没有相似的。它什么都慷慨地给予,因此请实行福利国家吧。 - Rust(
无性能损失的安全性):Rust的所有权与生命周期由严格的编译器这一统治者进行管理。为了防止个人自由经济活动所带来的不平等与风险,共同体管理并规划生产资料,从而保障稳定的生活;我认为这体现了为了整个系统的安全与平等而部分限制个人自由的做法,因此我认为它是社会主义。 - JavaScript(
灵活性与包容性,以及无处不在):我想将其比作资本主义。该语言使生产资料归个人所有,甚至设备也由个人充分拥有。由此出现了各种各样的工业产品,并且通过自由竞争,人人都能追求利润。但是,没有监管的市场很快陷入混乱。 - TypeScript(
被扩展的JavaScript):理所当然是修正资本主义。资本主义的信念遭到打破,为了消除市场的不稳定性,政府在一定程度上进行了干预。虽然原有的完全自由相对有所倒退,但人人仍然可以自由地进入市场并展开竞争。
而且,比想象中更多的开发者,就像在现实中进行意识形态之战一样,常常用编程语言相互争论。语言本身既是开发者所熟悉的意识形态,也是他们应当追求的理想。
国家与架构
- 单体架构与中央集权国家:所有内容都包含在一个庞大的代码库和一个二进制文件之中。这与拥有强大中央政府的单一国家或绝对君主制的结构相似。国家的所有功能都由同一权力体系所控制。
- 其优点在于最容易形成国家的形态,决策迅速。这与整个软件能够快速推出的优点处于同一脉络。所有资源与信息都集中于一处,因此管理清晰明确。
- 但是,国家越大,越难以应对变化;即便想修改一项小法律或制度,也必须审查并适用于整体。一个领域的问题也有可能使整个国家陷入瘫痪。单体架构同样因庞大的代码库和相互纠缠的代码而难以应对变化,即便只想修改一行代码,也需要评估影响范围,而且一个模块中发生的问题容易波及整个系统。
- MSA与联邦制国家:系统的各项功能被分离为独立的服务。这与国家的各个部分由多个独立的州构成的联邦制国家具有相似之处。此外,每个服务与州都拥有独立的基础设施。中央政府的干预较为宽松,何时会发生独立或加入也难以预料,这一点也相似。
- 基本上,每个独立的州与服务都能独立地修订法律或编写代码。因此,无需使彼此的节奏保持一致。而且,即使某处出现问题,整个联邦也难以陷入瘫痪。此外,可以根据各地区或各领域选择适合的制度(技术)。
- 但是,要在彼此之间达成共识或建立通信渠道是困难的。也可能因难以推行统一的政策而引发混乱。
- EDA(事件驱动架构)与公民社会:与其由中央政府或代理人直接下达命令,不如由个人主动、自律地拾起已发生的社会问题并加以解决。这与EDA的特点相似,即事件发生后,订阅者中的某一方自律地拾取并处理该事件。
- 任何人都可以轻松参与。EDA同样允许新服务轻松地成为新的订阅者,参与到流程之中。
- 但是,其缺点在于无法掌握整体流程。难以追踪是谁以何种方式处理的,也无法预知一个事件会引发怎样的连锁反应。
- 分层架构与封建制:封建制是一种结构,各自在所属阶层中履行被赋予的角色与责任,并对上级阶层履行义务。它们通常以一种契约关系缔结,并形成严格的纵向统治结构,因此可以在这一点上找到与分层架构的相似之处。
如此看来,可作的比喻还有很多,但本文的核心不在于结构本身,而在于构建该结构的过程。
开发与政治的问题解决是否相同?
如果软件架构与国家体制相似,那么构建二者的过程也惊人地平行。开发软件的过程实际上与在数字空间中构建并发展新秩序的政治行为并无二致。
- 社会问题的公论化与需求分析**:** 一切始于“什么是问题?”这一疑问。正如公民社会的痛苦与不便被公论化并成为政治议题一样,用户的不便与需求经过分析,成为开发的第一个里程碑,即“需求规格说明书”。
- 宪法设计与架构设计**:** 要建立怎样的国家?要构建怎样的系统?正如政治家以理念与哲学为基础搭建宪法与法律的框架一样,架构师以技术信念为基础,描绘将成为系统根基的架构蓝图。这一阶段的决定左右着系统的命运。
- 政策执行与软件实现**:** 设计图完成后,开发者编写实际代码,行政官员依法执行政策。这是抽象的计划诞生为能够在现实世界中运行的具体实体的过程。
- 通过选举进行审判与软件测试**:** 政策通过选举与舆论接受其正当性的审判。软件则通过QA团队的测试与用户的反馈验证其价值。二者最终都必须获得主权者(公民、用户)的同意才能存续。
- 制度改革与系统维护**:** 一度制定的法律与系统并非永恒。正如根据时代的变化修订旧法、改革制度一样,软件也必须适应不断变化的环境,并通过改善内部低效的“重构”。一旦停止重构,软件便会沦为死代码。
如此,从问题定义到设计、实现、验证,再到持续改进的全过程,表明两个领域共享着同一种解决问题的节奏。
新立法者的时代
信息化社会使这两种哲学顶点之间的距离变得毫无意义。代码不再只是简单的逻辑电路,而是规定人与人之间的关系、分配权力、实现社会价值的“法律(Code is Law)”。如果我们设计的架构与国家的统治结构相似,如果我们遵循的开发流程与政治合意过程相同,那么我们这些开发者究竟是谁?而政治家又应当做什么? 因此,开发者如今不仅要反思代码的逻辑,还要反思其代码将塑造的社会;政治家不仅要理解选票的逻辑,还要理解推动世界运转的技术的逻辑。因为我们在各自的世界中所挥舞的这股强大权力,伴随着同等程度的伦理责任。