GoSuda

政治与计算机

By snowmerak
views ...

哲学

您认为哲学是什么?根据词典定义,它指的是“思考并寻求关于世界、生命和根本问题的答案的活动”。我们也可以将其视为一种行为定义,即通过连续的提问或追问来扩展思维,并分享所获得的答案,而非解决有固定答案的问题。

过去,我在攻读学士学位期间曾修读一门与政治哲学相关的课程。我记得当时在自我介绍环节,教授曾说过类似“政治哲学和计算机科学是处于不同哲学巅峰的学科”的话语。虽然不完全是这些词句,但大意如此。

计算机科学

我认为计算机科学是“对解决逻辑问题的根本性探索”。因此,对于同一个问题,不同思考者可能会得出多种答案。最典型的例子是排序。即使是探索如何对相同的数据进行排序,也存在多种方法,如冒泡排序、插入排序、选择排序、合并排序、快速排序、堆排序、TimSort 等。通过对这些方法的区分,可以产生更优的算法。

此外,从局部角度看,也可以说是“创造与证明”。例如,上述的排序方法就是不断地创造新的排序方式并证明其结果。对于开发者而言,更贴近的例子是,当项目企划出炉后,通过实现并证明其正常运行来体现。

政治哲学

我认为政治哲学是“对解决社会问题的根本性探索”。它反复对每个时代中已存在的问题提出疑问,产出答案,并将其分享给现在和未来。它主要处理那些抽象的、随时代和文化而有不同解释的价值观,如正义、自由、平等、权力等,并且没有明确的善恶、对错之分,或其界限不固定。

此外,如同计算机科学,从局部角度看,也可以说是“提问与反思”。它对已发生的问题不断提问,反思为何如此,有何更优的方向,并给出答案。同样,答案的数量与思考者的数量成正比。

我们为何需要了解政治/计算机

相互调用的关系

这两个领域看似探索不同范畴,但实际上却共享着诸多相似之处,并存在大量互为因果的情况。

举例说明:

  1. 将个人健康数据安全地存储在云端,这样在需要时各医院可以快速访问。⇒ 通过编程,利用各领域的功能,实现安全且易于访问的系统。
  2. 那么,这些数据属于谁?我?注册负责人?还是主办方?开发商?国家?那么他们能看到我的数据到何种程度?我的个人信息能得到何种程度的保护?⇒ 不同的社群和个体之间将展开关于立场和利益差异的政治论辩。
  3. 此后,政治论辩与编程设计及实现将反复交织,循环往复。

正如上述,计算机科学被用于解决现有的社会问题,而政治哲学则被用于识别和解决由此产生的问题,并提出疑问以解决后续问题。在当今的信息化社会,这是一种自然现象。

政治与计算机相似吗?

貌似不同之处

这两个领域也以相似的方式演进。然而,其根本在于模糊表达与清晰表达的差异,这与社会哲学和自然哲学的关系相似。政治哲学基于自然语言构成的可变且模糊的定义,而计算机科学则基于由数学公式构成的不可变且明确的命题。

此外,它们的方向性也微妙地有所不同。计算机科学认为可能存在最优解。而政治哲学则探讨诸如更具说服力的主张、更有根据的主张、更道德的主张等模糊概念。然而,在我看来,两者的方向性几乎相同。最终,它们似乎都致力于追求“更美好的下一步”。即使计算机科学有多个分支,但以编解码器(媒体压缩)为例,它也在努力实现更好的压缩率、压缩性能和更低的许可成本。

貌似相似之处

典型地,编程语言和统治理念似乎对人类有相似的适用性。尽管无法将每种语言和理念一一对应,但出于趣味,我将列举如下:

  • C 语言(“开发者知道自己在做什么”): 我想将其比作共和主义。因为它在历史上与作为西方政治体制基础的共和制相似,也与重视公民个体意识和追求更优理想的个体努力的共同体主义相似。此外,我感觉到权利与责任相伴的特点也相似。
  • Java(“一次编写,随处运行”): 我不确定。它有强大的法律,人们遵守法律过着统一的生活,但这种生活是稳定的,并且在其中享有自由。进入 Spring 框架后,还有各种福利等待着大家。我们称之为自由主义如何?
  • C#(“开发者生产力与软件工程原则的和谐”): 在强大政府的庇护下,一切设计精良,在此框架内,可以最大限度地提升生产力和性能。计划经济与之相符。它不是共产主义,因为它释放了生产资料,不限制生产者。
  • Go(“舍弃复杂性,追求实用性和效率”): 找不到类似的。因为它慷慨地提供一切,所以就称之为福利国家吧。
  • Rust(“无性能损耗的安全性”): Rust 的所有权和生命周期由严格的编译器这一“统治者”管理。这类似于社会主义,即为了阻止个人自由经济活动带来的不平等和风险,共同体管理和规划生产资料以保障稳定生活,并通过限制部分个人自由来追求系统整体的安全和平等。
  • JavaScript(“灵活性、宽容性,以及无处不在”): 我想将其比作资本主义。这种语言让个体拥有生产资料,甚至个体也拥有充足的设备。因此,各种工业产品得以出现,通过自由竞争,任何人都可以追求利润。然而,缺乏监管的市场很快陷入了混乱。
  • TypeScript(“可扩展的 JavaScript”): 当然是修正资本主义。当对资本主义的信念动摇,为了打破市场的不稳定性,政府在一定程度上进行干预。虽然原有的完全自由相对有所退步,但每个人仍然可以自由地进入市场竞争。

而且,不少开发者像在现实世界中进行意识形态战争一样,为了语言而争吵。语言本身对开发者而言,就如同其熟悉的意识形态,也是其追求的理想。

国家与架构

  • 单体架构(Monolithic Architecture)与中央集权国家:所有内容都包含在一个巨大的代码库和一个二进制文件中。这类似于拥有强大中央政府的单一制国家或绝对君主制。国家的所有功能都由一个权力体系控制。
    • 优点是易于构建国家形态,决策速度快。这与整个软件能快速产出的优点一脉相承。所有资源和信息都集中在一处,管理清晰。
    • 然而,随着国家规模的扩大,应对变化变得困难;即使想修改一项小法律或制度,也需要全面审查和实施。一个领域的问题可能导致整个国家瘫痪。单体架构同样因其庞大的代码库和相互关联的代码而难以应对变化,即使只改动一行代码,也需要评估影响范围,一个模块的问题很容易影响整个系统。
  • 微服务架构(MSA)与联邦制国家:系统的各项功能被分解为独立的微服务。这与国家各部分由多个独立州组成的联邦制国家有相似之处。此外,每个服务和州都拥有独立的Infrastructure。中央政府的干预相对宽松,何时可能发生独立或加入也具有相似的不确定性。
    • 基本上,每个独立的州和服务都可以独立地修订法律/编写代码。因此,它们之间无需保持一致的节奏。此外,即使某个地方出现问题,整个联邦也难以瘫痪。并且,可以根据各个地区或领域的特点选择合适的制度(技术)。
    • 然而,达成相互协议或建立通信渠道是困难的。难以推行一致的政策,可能导致混乱。
  • 事件驱动架构(EDA)与公民社会:中央政府或代理人不再直接下达命令,而是由个体主动、自主地解决社会问题。这与 EDA 的特点相似,即当事件发生时,某个订阅者会自主地接收并处理。
    • 任何人都可以轻松参与。EDA 同样允许新服务轻松成为新订阅者并参与到流程中。
    • 然而,缺点是无法掌握整体流程。难以追踪谁如何处理了问题,也无法预知一个事件会引发怎样的连锁反应。
  • 分层架构(Layered Architecture)与封建制度:封建制度是一种各阶层履行其被赋予的角色和责任,并对上层履行义务的结构。它们以一种契约关系维系,并形成严格的垂直统治结构,这与分层架构有相似之处。

尽管可以进行更多类比,但本文的核心在于构建这些结构的过程,而非结构本身。

开发与政治的问题解决方式或许相同?

如果软件架构与国家体制相似,那么构建两者的过程也惊人地平行。软件开发过程实际上与在数字空间中建立和发展新秩序的政治行为并无二致。

  1. 社会问题的公共讨论与需求分析:一切都始于“问题是什么?”的提问。如同公民社会中的痛苦和不便被公开讨论并成为政治议题一样,用户的不便和需求经过分析,成为“需求规格说明书”这一开发的首个里程碑。
  2. 宪法设计与架构设计:要建立一个怎样的国家?要构建一个怎样的系统?如同政治家基于理念和哲学构建宪法和法律的框架,架构师则基于技术信念绘制系统基础架构的蓝图。此阶段的决策将决定系统的命运。
  3. 政策执行与软件实现:设计图完成后,开发者编写实际代码,行政官员则依据法律执行政策。这是一个抽象计划在现实世界中转化为具体实体的过程。
  4. 通过选举进行的审判与软件测试:政策通过选举和民意来判断其正当性。软件则通过 QA 团队的测试和用户反馈来验证其价值。两者最终都必须获得主权者(公民、用户)的同意才能生存。
  5. 制度改革与系统维护:一旦制定好的法律和系统并非永恒。如同顺应时代变化修订旧法、改革制度一样,软件也必须适应变化的环境,改进内部低效之处;停止“重构”的瞬间,它就会变成死代码。

正如上述,从问题定义到设计、实现、验证,再到持续改进的整个过程,都显示出这两个领域在解决问题上共享着相同的节奏。

新立法者之日

信息化社会使得这两种哲学巅峰之间的距离变得微不足道。代码不再是简单的逻辑电路,而是规范人际关系、分配权力、实现社会价值的“法律”(Code is Law)。如果我们设计的架构与国家的治理结构相似,我们遵循的开发流程与政治协商过程相同,那么我们开发者究竟是谁?政治家又该做些什么? 因此,开发者现在不仅要思考代码的逻辑,还要反思代码将塑造的社会;政治家不仅要理解选票的逻辑,还要理解驱动世界的技术逻辑。因为我们在各自领域所掌握的强大权力,伴随着相应的伦理责任。