制作与关联的文化
摘要
这篇博客文章反思了Tomáš Petříček的著作《Cultures of Programming》(编程文化),识别出五种编程文化(数学、黑客、工程、管理、人文),并将它们与更广泛的技术和科学研究实践联系起来。文章将这些文化分为制作软件和关联软件两大类。
暂无内容
查看缓存全文
缓存时间: 2026/06/27 12:51
# Konrad Hinsen 的博客
来源:https://blog.khinsen.net/posts/2026/06/25/cultures.html
## 制作与关联的文化
2026\-06\-25科学 (https://blog.khinsen.net/tag/science.html),科学软件 (https://blog.khinsen.net/tag/scientific-software.html)
《编程的文化——编程概念与方法论的发展》(https://tomasp.net/cultures/) 是Tomáš Petříček (https://tomasp.net/) 近期出版的一本书,该书从五种相互交织的文化视角分析了编程的历史。书中包含许多有趣的洞见,因此我鼓励你去阅读。至少,请阅读第一章。在这篇文章中,我试图将这五种文化与更广泛的技术世界以及科学研究的实践联系起来。
书中确定的五种文化如下(我的概括):
* 数学文化:将计算机程序视为其性质可通过证明来描述的数学实体。
* 黑客文化:将编程视为与运行中的机器进行的对话。
* 工程文化:将程序视为技术产物,其构建遵循既定的最佳实践,是在期望特性与经济约束之间进行权衡。
* 管理文化:将软件视为工业产品,其质量取决于合适的组织结构。
* 人本文化:将计算和程序视为人类思维和符号的延伸与外部化。
个体通常采用一种主要文化来定义自己对编程的主要态度,但也可能根据上下文采纳其他文化的观点。
我的第一个观察是,这五种文化可分为两类:
* 黑客、工程和管理文化关乎**制作**软件。
* 数学和人本文化关乎**关联**软件。
这两类并非完全独立。例如,如果你关心软件具有某些可通过形式证明的性质,你最好在软件构建的所有阶段都考虑到这一要求。
我的第二个观察是,这些文化并非编程所特有。这对工程和管理这对组合来说或许最容易理解,它们长期以来一直引导着制造业,其中工程侧重于技术方面,管理侧重于人力资源的协调。至于黑客,我视他们为工匠的再现。他们遵循同样的方法:亲手制作东西,同时不断接收来自感官的反馈。他们也独自工作,或组织成小型自治团队,并且偏爱通过实践学习而非正规教育。黑客制作的定制化手工软件,与工程师和管理者合作生产的工业化大众市场软件之间的权衡,非常类似于量身定制的衣柜和宜家家具之间的选择。
数学文化并非主要指数学学科本身,而是指将与数学相关的形式化方法应用于软件。相比之下,人本文化则强调对软件进行语境推理。形式化需要去语境化,这在形式可证明的特性与语境相关特性之间造成了张力。简而言之,形式化方法能够为某些属性提供严谨的证明,但这些属性往往不是你应用语境中最相关的。类似的形式与非形式推理之间的张力也存在于其他知识学科中。例如,许多科学领域在研究中使用定性(非形式化)和定量(形式化)两种方法,并且存在偏爱其中一种的亚文化。
早期的科学家以与工匠和黑客相同的精神工作:独自或以小型团队形式,交替进行制作(仪器、实验装置)和观察,并在尊重个体自主性的非等级制机构(学会)中组织起来。近年来,一些科学活动已被工业化(参见这篇之前的文章 (https://blog.khinsen.net/posts/2019/10/29/the-industrialization-of-scientific-research.html)),并按照管理原则进行组织。因此,科学内部也存在着类似黑客文化一方与工程加管理文化另一方之间的紧张关系。管理文化通常被视为由资助方从外部强加的,对于研究本质上的探索性而言,这种匹配尤其糟糕。
科学软件同时继承了编程文化和科学研究的文化。在其早期几十年,从20世纪50年代到70年代,科学仍然主要是一门手艺,其实践者在创建软件时采纳了黑客文化,这些软件通常是中小型的 Fortran 程序,除了 Fortran 编译器外没有其他依赖。少数研究人员采纳了人本文化,像发表期刊文章一样发布和评审这些软件——参见我关于评审科研软件的文章 (https://hal.science/hal-05274018v1)。随着软件规模和复杂性的增加,可重用库变得越来越重要,20世纪70年代的 LINPACK (https://en.wikipedia.org/wiki/LINPACK) 便是一个早期例子。软件开发开始成为一项独立于研究本身的活动,由工程文化主导,最终导致研究软件工程师成为一个独特的职业。然而,对于作为研究项目一部分产出的软件,黑客文化仍然盛行,如今常以计算笔记本或工作流的形式体现。
鉴于数学在定量科学中的重要性,数学文化在研究软件中只扮演次要角色是令人惊讶的。我的猜测是,这是由于缺乏成熟的软件形式化方法。定量科学主要依赖几十年前就已完善且理解透彻的数学,而非前沿的数学研究。将这一原则应用于软件的形式化方法,就只剩下编译器执行的静态类型检查这一种形式化方法,广泛应用于标准软件开发工具中。在拥抱或鄙视静态类型检查这一点上,科学家与软件开发者并无二致。这或许是工程文化与黑客文化之间张力最明显的体现。
相似文章
“每个人都在做同样的事情,由相同的人资助,用相同的措辞。”
一篇关于技术同质化与‘无用’研究价值的反思性文章,以作者亲身体验 Folk Computer 为中心——这是一个开源实体计算系统,将编程重新构想为一种协作式空间活动。
以理论构建的视角阅读编程
本文推荐 Peter Naur 的著作《编程即理论构建》,主张编程的本质在于构建和传达对软件的心理模型,而不仅仅是编写代码。
编写玩具软件是一种乐趣(2025)
一篇倡导编写玩具程序以深入理解软件并重新发现编程乐趣的博客文章,反对过度工程化和软件开发的工业化。
Dependency Cultures - Richard Feldman (Software Should Work Conf 2026)
Richard Feldman 通过对比不同编程语言网站和游戏的依赖图,指出大部分依赖选择是文化规范而非技术必要性。
生活和工作本不该孤立进行
一篇博客文章鼓励程序员接触计算机科学界的知名人物,强调生活和工作不应孤立进行。