大道至简 – 节选
编程的精义
“虽我之死,有子存焉;子又生孙,孙又生子;子又
有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何
苦而不平?”
——《愚公移山》,《列子·汤问篇》
仅 仅就编程序来说,实在是一件很简单的事,甚至
可以说是一件劳力活。两千年前的寓言中, 已经成就
了一位工程名家: 愚公。在这位名家的身上, 浓缩了
项目组织者、团队经理、编程人员、技术分析师等众
多角色的优秀素质。他的出现, 远远早于计算机发展
的历史, 甚至早于一些西方国家的文明史。
汤 问篇中所述的愚公移山这一事件,我们看到了原
始需求的产生:
“ 惩山北之塞, 出入之迂”
我 们也看到了项目沟通的基本方式:
“ 聚室而谋曰”
然 后, 我们看到愚公确定了一个项目的目标:
“ 毕力平险, 指通豫南, 达于汉阴”
并 通过研讨,择定了一个井然有序的、可以实现的
技术方案:
“ 扣石垦壤, 箕畚运于渤海之尾”
在 这个项目中,动用了三名技术人员和一名工程管
理人员:
“ (愚公)率子孙荷担者三夫”
并 获得了一名力量较弱, 但满富工作激情的外协:
“ 邻人京城氏之孀妻, 有遗男, 始龀, 跳往助之”
基 本上,这已经描述了“ 愚公移山”整个工程的概
况。接下来, 我们应该注意到愚公作为编程人员的基
本素质。在与“ 河曲智叟” 的对答中, 他叙述了整个
工程的实现程序:
“ 虽 我 之 死 , 有 子 存 焉 ”, 这里描述了可能存在的
分支结构, 即“ IF” 条件判断。
“ 子又生孙,孙又生子;⋯ ⋯ 子子孙孙,无穷匮也”,
这里描述了完成这个工程所必须的循环结构。
作 为优秀的程序分析师,愚公论述了这个循环的可
行性:由于“ 山不加增”,所以条件“ 山平”必将成立
(“ 何苦而不平” ), 所以这不会是一个死循环。
在 愚公的论述中, 我们看到了编程的根本: 顺序、
分支和循环。
庞大若“ 愚公移山” 这样的工程, 都是
可以通过这样简单的编程来实现的。这, 就是编程的
精义了。