古老的文本并不只是被收藏在书架上的过去。它们之所以能穿过漫长时间,是因为其中保存了人类组织经验、安放情感、处理秩序的方式:怎样把四时劳作排成可记忆的节奏,怎样借一片水边秋色说出难以直言的心事,怎样用礼乐让陌生人进入同一套协作规则。《诗经》便是这样的文本。它收录西周初年至春秋中叶约五百年间的 305 篇作品,既有各地民歌的质朴声音,也有宴享、朝会与宗庙祭祀中的礼仪乐章。传统所谓“六义”——风、雅、颂、赋、比、兴——并不只是文学分类,也是一套关于表达与组织的古老经验。

§评论这段

编程语言看似属于另一个世界,却同样关心“如何把意图放进秩序”。程序员写下的并非冷冰冰的符号,而是将愿望、规则、流程、边界和协作关系翻译成机器能够执行、团队能够维护的形式。从机器指令到高级语言,从面向过程到面向对象、泛型、组件化、服务化,再到声明式表达与 AI 辅助编程,软件工程不断寻找更合适的方式来描述复杂系统。若以“风雅颂”观其层次,可以看到从原初指令、结构化组织到跨团队协作秩序的上升;若以“赋比兴”观其表达,则可看到从直接命令、类比抽象到意图声明与生成式协作的变化。

§评论这段

本文面向对人文与技术均有兴趣的读者,尝试以《诗经》作为一面温和的镜子,照见编程范式中的表达逻辑。这里的类比强调启发性,而非严格的历史等价;诗歌不是计算机科学的前身,程序也不会因为被比作诗而自动具有美感。真正值得讨论的是:抽象层次的提升怎样改变协作规模,表达方式的变化又怎样改写人与机器的分工。

§评论这段

双轴提示:层次/组织对应“风雅颂”,表达/分工对应“赋比兴”。

§评论这段

一、“风雅颂”与程序范式

§评论这段

1. “风”——机器语言与汇编语言的原野

§评论这段

“风”指各诸侯国的民间歌谣,《国风》160 篇,多以地方声音写日常生活、婚恋忧思与劳作感受。它们离土地很近,离人的呼吸也很近。《关雎》开篇“关关雎鸠,在河之洲”,没有先讲大道理,而是让读者先听见鸟鸣、看见水洲,再进入人的情感。

§评论这段

早期计算机编程也有这种贴近底层的质地。程序员直接面对机器指令、二进制码或汇编助记符,像在硬件的原野上说话。它效率高、控制力强,但与具体指令体系紧密耦合,难以支撑大规模软件的长期维护。这里的“风”不是低级的意思,而是原初、直接、贴近现场:民歌贴近生活,汇编贴近机器。正因为现场经验会不断变复杂,程序设计才逐渐需要更稳定的结构,走向“雅”的层次。

§评论这段

2. “雅”——面向过程和面向对象的礼乐之声

§评论这段

“雅”原是宫廷宴享或朝会的乐歌,包括《大雅》《小雅》。它比“风”更重秩序、节制与场合感。《小雅·鹿鸣》写“呦呦鹿鸣,食野之苹。我有嘉宾,鼓瑟吹笙”,不是单纯写鹿鸣,而是借自然声响引出宴饮中的主客秩序:谁被邀请,谁来奏乐,怎样表达尊重,都有位置。

§评论这段

高级语言的出现,使程序员不必每一步都贴着硬件书写,而可以在更高层次上组织数据与算法。面向过程编程强调顺序、选择、循环和模块,像礼乐把行动安排成可重复、可理解的仪程。面向对象编程进一步把数据与行为封装为对象,通过继承、组合、接口与多态处理复杂关系:一个对象像宴席中的角色,既有自身职责,也要遵守与他者协作的规则。泛型编程和类型约束则继续提炼共性,使同一套逻辑可以在不同类型中安全复用,如同雅乐在不同场合保持基本曲式,又能随礼仪需求调整声部。

§评论这段

3. “颂”——组件化与服务化的祭祀赞歌

§评论这段

“颂”多用于宗庙祭祀,语气庄重,功能也更抽象。《周颂·清庙》有“於穆清庙,肃雍显相。济济多士,秉文之德”,重心不在个人情绪,而在共同体如何通过仪式确认秩序、记忆与责任。

§评论这段

软件发展到组件化、服务化和云原生阶段,也开始面对类似的组织问题。代码不再只是单个文件或单个程序员的手艺,而被拆分为库、包、服务、队列、网关与平台能力;它们通过接口、协议、版本约定、监控与治理机制协同运作。微服务里的服务注册、限流、熔断、弹性伸缩和可观测性,当然不是宗庙礼仪,但它们都在回答同一个工程问题:怎样让许多相对独立的部分在共同规则下稳定合作。

§评论这段

因此,“颂”的类比不在于神圣化技术,而在于强调协作秩序。当系统规模扩大,最重要的往往不再是某一段代码写得多漂亮,而是接口是否清楚、协议是否可靠、故障是否可追踪、团队之间是否能形成共同语言。

§评论这段

至此,“风雅颂”展示的是抽象层次与组织形态的上升。下面转向表达方式本身,从“赋比兴”观察程序如何从直陈走向类比与意图表达。

§评论这段

二、“赋比兴”与编程思想

§评论这段

1. 赋——命令式与面向过程的直陈

§评论这段

朱熹在《诗集传》中说:“赋者,敷陈其事而直言之者也;比者,以彼物比此物也;兴者,先言他物,以引起所咏之词也。”其中“赋”是铺陈,是把事情一层层说出来。

§评论这段

《豳风·七月》很适合作为“赋”的例子:“七月流火,九月授衣。一之日觱发,二之日栗烈。”诗中月份、寒暑、授衣、采桑、农事、狩猎、入室等内容连续展开,像一张古代生活的流程图。它并非简单罗列,而是把一年中的节令变化、劳动安排和生存压力组织成可传诵的顺序。若从程序角度看,《七月》有近似工作流的结构:某个季节触发某类任务,某种天气改变人的状态,某个节点要求准备衣食。它让人想到定时任务、事件驱动、状态机和流程编排——时间推进,条件变化,行动随之切换。

§评论这段

命令式编程和面向过程编程正是这种“直陈”的技术形态:程序员按步骤告诉计算机先做什么、再做什么,如何循环,何时分支,何时结束。它适用于逻辑清晰、流程明确的任务,也最容易让初学者理解。但当系统规模扩大,过多的步骤可能互相缠绕,状态变化也会变得难以追踪。于是,程序世界需要从“把事说完”继续走向“把关系说清”。

§评论这段

2. 比——面向对象与泛型的譬喻

§评论这段

“比”是以此物说明彼物,通过相似性让抽象概念变得可感。《卫风·硕人》写“手如柔荑,肤如凝脂”,借柔荑与凝脂写人的柔美;它并不等于对象建模,却提示我们:人类理解复杂事物,常常依靠类比。

§评论这段

面向对象编程也依靠这种能力。我们说“用户”“订单”“消息”“任务”“播放器”“仓库”,其实是在现实或业务中寻找可命名、可封装、可协作的对象。类定义对象的共同结构,接口说明对象能对外承诺什么,继承与组合描述对象之间如何共享能力。泛型编程则把类比再向上推一步:不只复用某一个对象模型,而是抽出“容器”“迭代”“比较”“序列化”等更一般的关系,用类型参数和约束让同一套逻辑适配多种类型。

§评论这段

《蒹葭》通常被作为“兴”的名篇来读,但它的章法也能帮助我们理解“复用”的一面。三章反复出现相似句式:“蒹葭苍苍/萋萋/采采”,“白露为霜/未晞/未已”,“在水一方/之湄/之涘”,“道阻且长/且跻/且右”。基本模板稳定,变量细微变化,情绪也随之推进。这很像循环中的参数变化、组件复用中的 props、模板渲染中的占位符,或者泛型与配置化系统中的“结构不变,参数改变”。重复并非偷懒,而是通过稳定框架让差异被看见。

§评论这段

这里的风险也很清楚:比喻若不恰当,会遮蔽真实问题;抽象若层层加码,会让系统变得难懂。好的“比”不是炫耀概念,而是让复杂关系变得更可沟通、更可维护。

§评论这段

3. 兴——声明式、函数式与 AI 驱动的起兴

§评论这段

“兴”最有诗意,也最容易被误读。它不是神秘感,而是一种表达路径:先写他物,借景物、声音或场面引出真正要说的话。《秦风·蒹葭》开篇“蒹葭苍苍,白露为霜。所谓伊人,在水一方”,读者先进入秋水边的空间,然后才感到追寻与距离;《关雎》开篇“关关雎鸠,在河之洲”,也是先让鸟鸣与水洲出现,再引出“窈窕淑女,君子好逑”的主旨。

§评论这段

声明式编程与函数式编程也有“兴”的一面。声明式表达关注“要什么”,把具体执行交给框架、数据库或运行时;函数式编程强调函数组合、不可变数据和副作用管理,让状态变化更可推理。React 等框架让开发者描述界面应该呈现的状态,框架负责更新;SQL 让人描述想要的查询结果,数据库优化器决定执行路径。这不是说实现细节消失了,而是说人的注意力被上移到意图、约束与可验证结果上。

§评论这段

AI 辅助编程让这种“意图表达”更明显。开发者先用自然语言给出需求、边界、示例和约束,模型再生成代码或测试。它有点像《关雎》的表达方式:先有“关关雎鸠,在河之洲”的场景设定,再引出“窈窕淑女,君子好逑”的主旨。在 prompt 和 AI 协作中,场景、角色、输入输出、成功标准往往比一句笼统命令更重要。好的提示不是许愿,而是声明上下文、约束和判断标准;生成代码也不是终点,还必须经过评审、测试与工程化验证。

§评论这段

4. 概念边界小注

§评论这段

为避免将多个概念混作一类,这里给出简要区分:

§评论这段
  • 命令式:强调步骤与控制流,回答“怎么做”。

  • 声明式:强调目标与结果,回答“要什么”,实现方式可能仍是命令式;SQL、规则引擎、声明式 UI 都属此类。

  • 函数式:将计算视为函数组合,强调不可变与副作用管理,但不等同于“声明式”。

  • AI 编程:可区分为辅助生成、自动化流水线与自治智能体三类;辅助生成常见于编辑器补全与片段生成,自动化流水线对应自动生成 PR/测试等流程,自治智能体则偏向端到端任务执行。本文主要讨论前两类,强调人类验证与工程化约束。

  • 组件化/服务化/微服务:组件通常处于同一进程或发布单元,服务强调网络边界与治理,微服务强调更细粒度与独立部署。

§评论这段

类型与抽象机制的小表:

§评论这段

机制代表语言/形式侧重点静态类型Java/Go/C++在编译期限制与校验类型推导Haskell/OCaml/Scala减少显式类型标注代数数据类型Haskell/OCaml/Rust enum用构造与匹配表达结构

§评论这段

一个简单示例可直观感受表达方式的差异:

§评论这段
# 命令式
sum = 0
for x in xs:
    sum = sum + x

# 声明式(SQL)
SELECT SUM(x) FROM xs;

# 函数式
sum = fold(add, 0, xs)
§评论这段

这些区分为下文的范式谱系与边界讨论作铺垫,避免将类比误读为严格的历史等价。

§评论这段

三、范式谱系与边界

§评论这段

为回应“技术史是否线性演进”的疑问,以下用简化时间线与反例补充说明。

§评论这段

1. 时间线与代表案例(示例)

§评论这段

范式并非线性取代,而是叠加与共存。以下时间线为简化示意(年代为约):

§评论这段
  • 1940s-1950s:机器语言与汇编占主流;Fortran (1957) 代表早期面向过程语言。(对应:风/赋)

  • 1958-1970s:Lisp (1958) 代表函数式早期探索;Simula (1967) 奠定面向对象;C (1972) 推动结构化实践;Prolog (1972) 代表逻辑编程;SQL (1974) 推广声明式数据查询。(对应:雅/比/兴)

  • 1980s-1990s:Smalltalk(1970s-80s)推广对象思想;C++ (1985)、Java (1995) 使 OOP 主流;Erlang (1986) 强调 Actor 并发;Haskell (1990) 强化纯函数与类型系统。(对应:雅/比)

  • 1990s-至今:类型系统持续演进(类型推导、代数数据类型等),与泛型编程共同提升抽象力。(对应:雅/比)

  • 2000s-2010s:SOA/微服务兴起;容器化 (Docker 2013) 与编排 (Kubernetes 2014) 推动服务治理;响应式/流处理在工程中普及;前端框架如 React (2013) 强化声明式 UI;国内开源与工程实践如 Dubbo、Spring Cloud Alibaba 生态推动服务治理。(对应:颂)

  • 2020s:LLM 驱动的代码生成与对话式编程普及。(对应:兴)

§评论这段

从双轴视角看,早期阶段更多对应“赋”的直陈表达与“风”的低层次抽象;中期语言与类型系统提升了抽象层次,贴近“雅”;服务化与平台化强化组织协作与仪式化治理,更接近“颂”;声明式与 AI 辅助则在“兴”的方向上推动表达与分工的再分配。

§评论这段

2. 类比边界与反例

§评论这段
  • 声明式语言如 SQL 早于微服务时代,说明“兴”并不等同于“时间上更晚”。

  • 函数式语言(Lisp)出现早于面向对象主流,技术史并非单线演进。

  • 低级语言与汇编至今仍用于嵌入式、性能关键场景,“风”并未消失。

  • 许多微服务仍以面向对象语言实现,“雅/颂”的对应关系应理解为抽象层次与协作结构的类比,而非一一映射。

§评论这段

这些边界提醒我们:类比只是透镜而非等式,也意味着趋势推演不应被视为必然。因而在进入未来讨论前,需要先明确不确定性与治理问题。基于此,下面转向未来的人机协作与风险讨论。

§评论这段

四、未来的共鸣:从编程到诗歌再到人机协作

§评论这段

1. 智能体与数字协作者:新的协作角色

§评论这段

以下为趋势设想:随着编程助手智能化程度提高,它们可能从补全工具发展为更主动的“数字协作者”,在一定范围内完成编码、测试、资料检索、变更说明和问题定位等任务。它们未必拥有人的判断力,却会改变团队分工:一部分重复性工作被自动化,一部分设计与验证责任反而更集中到人身上。

§评论这段

如果借“颂”的角度来看,重点不是把 AI 工具神圣化,而是看它们如何进入协作秩序。一个智能体能否被信任,不只取决于生成速度,还取决于权限边界、日志记录、测试覆盖、回滚机制和责任归属。可观察的指标包括:AI 生成代码在提交中的占比、自动化 PR 通过率、端到端任务完成率、人工干预次数,以及缺陷在评审和生产环境中的分布。

§评论这段

2. 表达方式的民主化:从专业知识到普遍参与

§评论这段

《诗经》中的“风”体现了民间表达的力量,“不学诗,无以言”的古训也说明诗歌曾参与塑造人的语言能力。AI 编程助手、低代码平台和可视化编排工具正在降低软件创造的入口。随着自然语言与代码之间的转换能力提升,编程不再完全局限于熟练掌握语法的人,产品经理、设计师、研究者和领域专家也能用更接近日常语言的方式参与原型构建与自动化流程设计。

§评论这段

这并不意味着专业工程会消失。恰恰相反,当更多人能够提出需求、生成草稿、拼接能力时,工程师更需要承担架构、边界、安全、性能和可维护性的判断。表达的民主化扩大了参与面,也提高了对公共规则和专业审查的要求。

§评论这段

3. 意境与系统:从诗意到代码的跨界启示

§评论这段

赋、比、兴的文学美学可以为程序设计提供思维启示。“赋”提醒我们把流程讲清楚,尤其在需求分析、数据处理和任务编排中保持顺序感;“比”提醒我们寻找恰当抽象,用对象、接口、泛型和组件让复杂关系可以复用;“兴”提醒我们重视上下文与意图表达,在声明式系统、函数组合和 AI 协作中说清目标、约束与评价标准。

§评论这段

这些启示并不是要把程序员变成诗人,而是提醒我们:好的系统设计常常像好的文章,有起点、有结构、有节奏,也有必要的留白。越是高层抽象,越需要人判断哪些细节可以交给工具,哪些边界必须亲自确认。

§评论这段

4. 风险与约束:AI 驱动编程的另一面

§评论这段

AI 带来效率提升的同时,也引入新的风险与治理成本:

§评论这段
  • 可靠性与可验证性:生成代码可能出现幻觉或隐藏缺陷,需要测试、审计与复核机制。

  • 可追溯性:模型版本、提示语与上下文影响结果,需记录以便复现与责任追踪。

  • 安全与隐私:提示注入、数据泄露与依赖污染等风险需要工程化防护。

  • 合规与版权:训练数据与生成内容的权属问题仍在讨论中,应建立合规边界。

  • 工程可维护性:过度依赖生成结果可能导致团队知识稀释与系统可读性下降。

§评论这段

为便于回看,以下表格汇总类比关系,并以关键词补充“局限/风险”视角(详见上文)。

§评论这段

表格:古典诗学与现代编程的类比

§评论这段

《诗经》分类/手法古典特征对应的编程范式理由或联系局限/风险风(民间歌谣)贴近日常、反映民情机器指令与汇编直接与硬件沟通,贴近计算现场可移植性/维护成本雅(宫廷乐歌)礼乐规范、结构严整面向过程、面向对象、泛型追求结构化控制、角色分工与层次化封装设计复杂度颂(祭祀颂歌)庄重有序、确认共同体规则组件化、服务化、微服务/云原生标准接口、协作协议、编排治理维持系统秩序分布式/运维/一致性赋(直叙)铺陈叙事、顺序展开命令式/面向过程逐步描述流程,如《七月》组织时序与农事冗长/重复/状态难追踪比(比喻)以物寓理、借相似性理解抽象面向对象/泛型类、接口与组合形成类比,泛型抽象出共性抽象过度/层级/学习成本兴(起兴)先设场景,引出主旨声明式/函数式/自然语言编程描述结果、上下文与约束;如《关雎》由场景引出意图实现隐蔽/性能/可预测性

§评论这段

结语:回望经典,拥抱未来

§评论这段

《诗经》之所以没有过时,并不只是因为它古老,而是因为它仍能让我们看见人如何表达、如何组织经验、如何在共同生活中建立秩序。《七月》把一年农事织成时间的经纬,《蒹葭》在反复句式中推进微妙差异,《关雎》由水边鸟鸣引出人的情感,《鹿鸣》《清庙》则让我们看到礼乐如何安排协作与共同记忆。这些古老篇章与现代编程没有直接血缘,却能在表达方式上形成有趣的回声。

§评论这段

编程范式的演进也并非一条替代旧物的直线。命令式仍在,汇编仍在,面向对象、泛型、函数式、声明式、服务化与 AI 辅助也各有适用场景。真正变化的是人类表达复杂系统的方式:有时需要像“赋”一样把步骤讲清,有时需要像“比”一样建立抽象,有时需要像“兴”一样先说明场景、目标与约束,再让工具展开实现。

§评论这段

诗歌和代码最终都服务于表达与理解。诗歌帮助人说出经验、情感与秩序,代码帮助人组织规则、协作与行动;二者都要求清晰,也都容纳想象。面对 AI 与复杂系统,人的价值并不会退场,而是更集中地体现在判断力上:判断什么值得构建,什么必须验证,什么边界不可越过,什么语言能让他人与机器都正确理解。若说经典还能给技术时代一点提醒,那便是:再高的抽象也应回到人的生活,再强的工具也需要人的分辨、责任与审美。

§评论这段