微信邦

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 226|回复: 0

编程就是把步骤拆开 代码方言等来自然语言

[复制链接]
发表于 2026-8-18 08:52:45 | 显示全部楼层 |阅读模式
2026 年 6 月 9 日晚,重庆,《电脑报》聚会。我的老师、创始人陈宗周问起《刘韧写作 Skill》。我说,我在用编程的架构和方法论写这份 Skill。坐在我右手边的黎和生道:“你怎么可能会写程序?”黎和生是我师兄,计算机专业出身,一直分管《电脑报》编辑部。所以真正的问题不是我会不会写程序,是什么才算写程序。

一、程序即步骤早于代码很多年



1946 年 2 月 15 日,费城,宾夕法尼亚大学摩尔电气工程学院。军方请来记者,看一台占满整面墙的机器跑一发炮弹的弹道。从炮口到落点,机器算完用了 20 秒。同一道题,一个人握着手摇计算器算,要 20 到 40 个小时。站在机器前面接线的是 6 个女人:贝蒂·霍尔伯顿、琼·巴蒂克、马琳·梅尔策、露丝·泰特尔鲍姆、弗朗西丝·斯彭斯、凯·安东内利。这 6 个人手里没有一行代码。那台机器叫 ENIAC,机器里没存程序。程序在插线和开关上,换一个程序要重新接一遍线,一次接几天。当时没有程序语言,也没有一本手册。6 个人拿到手的是工程师的电路蓝图。她们照着蓝图,再向工程师一样一样追问,把这台机器怎么工作弄明白。然后把弹道的微分方程拆成机器走得动的一步一步。最后插电缆,扳开关,把这些步骤送进机器。这就是编程。演示的前一天,程序算到炮弹落地不肯停,多跑了一轮。霍尔伯顿和巴蒂克坐车回家,把问题带上床。半夜,霍尔伯顿想明白问题出在哪里。第二天一早,她坐头班车回摩尔学院,在主程序器上扳对了开关。炮弹落了地。再往前 100 年。1843 年,阿达·洛芙莱斯把意大利人路易吉·梅纳布雷亚用法文记录的巴贝奇分析机讲稿译成英文。译文后面附了 7 条注释,编号从 A 到 G。最后一条 Note G 里,洛芙莱斯写下一张分步指令表,用来计算伯努利数。那台分析机始终没有造出来。为一台不存在的机器写下的步骤表,比可以运行的通用电子计算机早了大约一个世纪。(Note G 算不算世界上第一个程序,至今有争论。)再往前 40 年。1804 年到 1805 年,法国人约瑟夫·玛丽·雅卡尔改造织布机,用穿孔卡片控制经线的起落。卡片上打孔的地方,线抬起。没打孔的地方,线不动。换一叠卡片,换一种花纹。织工不必懂花纹的道理,把卡片挂上去,机器自己织。1830 年前后,巴贝奇把这套卡片搬进了自己的分析机。三件事隔着 140 年,做的是同一件事:先把步骤拆出来,再把步骤装进机器读得懂的东西里。这就是程序。不是代码,是步骤。

二、人先学机器说话,机器后来学人说话



如果程序是步骤,为什么大家都觉得编程等于写代码?很长一段时间,人让机器执行步骤,必须先学机器的方言。这门方言极难学,学它花掉的力气远远超过拆步骤本身。日子久了,大家就把方言当成了这件事的全部。编程史上每一个里程碑,都在往回搬这块力气。1951 年到 1952 年,格蕾丝·霍珀在 UNIVAC I 上写出 A-0。A-0 让人用一个代号去调磁带上写好的现成零件,再由机器把这些零件拼成能跑的程序。它还不是后来意义上的编译器,多数人仍然把它叫作最早的编译器之一,也一直有人不同意这个叫法。叫法不影响它做成的那件事:查找、装配、翻译,这几道工序头一次交给了机器。霍珀后来回忆过当时的普遍看法:计算机只会做算术,不会做翻译。1957 年 4 月,IBM 把约翰·巴克斯团队做的 FORTRAN 交付给 704 用户。FORTRAN 这个名字的意思就是公式翻译。有了它,工程师可以直接写公式。当年的反对意见很具体:内存那么贵,机器时间那么贵,翻译出来的程序一定跑不过老手亲手写的机器码。这个担心有现实根据,结论却落空。巴克斯团队做这套东西的头一个目标,就是让翻出来的程序追上手写的效率。这个目标,他们后来达成。霍珀接着做 FLOW-MATIC,第一门写起来像英语的语言。1959 年定出规格的 COBOL 吸收了 FLOW-MATIC 的思路,今天仍然跑在世界各国银行的账务系统里。霍珀给出的理由是,要让不是专家的人也看得懂程序在做什么。1964 年 5 月 1 日,达特茅斯学院的约翰·凯梅尼和托马斯·库尔茨让 BASIC 第一次跑了起来,6 月对全校开放。达特茅斯是文理学院,两位数学教授要让学历史的、学哲学的本科生也能上机。中国的大学生后来在机房里学的那个 BASIC,源头在这里。1979 年,丹·布里克林和鲍勃·弗兰克斯顿在一台 Apple II 上做出 VisiCalc,第一张跑在个人计算机上的电子表格。更早的表格程序 1969 年就有,跑在大型机上,人坐不到屏幕前面直接改数字。VisiCalc 让大批普通人开始给机器定规则,同时不再把自己看成程序员。

三、你早就编过程序,只是没有人告诉你那叫编程



一沓报销单,你定了 3 条规矩:金额超过 500 元的标红,缺发票号的标黄,日期不在本月的整行删掉。3 条规矩填进条件格式和筛选器。表格照做,处理 1000 行和 3 行一样快。这里有输入,有输出,有 3 条机器不会理解错的规矩,还有“遇到这种情况就那样办”的分支。换掉任何一行数据,结果自己更新,你不必重来。你已经走完了代码最容易遮住的那一步:把一件模糊的活儿变成明确的规矩。往下还有翻译、执行、检验三关,但那一步,你自己走完。文科生对编程的畏惧,错在一个位置:怕的是方言,却以为怕的是拆步骤。

四、一份不写代码的程序



那天给黎和生看的 Skill,全部用汉语写,一行代码没有。开头一节写清楚,什么活归它管,什么活不归它管。写文章归它管,翻译和技术说明不归。这一节是入口的判断。接着一节写优先级,5 条,冲突的时候从上往下。我当场说的话最大。其次是几条任何情况下都不许破的禁令。再次是我以前定过的规矩。再往下是从别人书里借来的方法。最后才是人工智能自己的推断。两条规矩打架,照这个顺序裁。再一节把活分成 6 种。找资料、采访核实、选题、起草、改稿、终审。接到一件事,先判断是哪一种。不同的活走不同的流水线。每一种都写明:进来的时候手边有什么,出去的时候要交出什么。再一节是一张路由表。干这一种活的时候翻哪一本册子,干完就放下,同时最多翻 3 本。最后一节写停止条件,3 条,满足任何一条就收手。新东西没有信息量了,停。新写的东西没法反驳,停。开始重复前面的结构,停。入口判断、优先级、分支、模块调用、终止条件、每一步的输入和输出。这份写作程序的骨架,就是这几样。我没有写一行代码。我只是把“怎么写一篇文章”这件事拆成步骤,再把能预见的歧义一条一条关掉。

五、编程三大争议



一,编程难是因为要数学好。霍珀做 FLOW-MATIC 时瞄准的用户是会计和仓库管理员。COBOL 至今跑在银行的账务系统里,那些账务程序算的是加减乘除和百分比。整理文件、算账、查重、改文件名,你要写的这类程序里没有高等数学。难的是把话说到没有第二种理解。二,人工智能已经会写代码,所以编程这件事作废。方向正好说反。人工智能化解的正是方言,也正是 70 多年来一直在往回搬的那块力气。它替不掉的是另一头。它能替你想出几个步骤,却不能替你担目标和验收:它不知道你真正愿意牺牲什么,也不负责结果错了以后谁付账。三,给人工智能的提示词不是程序,只是需求。程序的每一步,含义只能有一种理解。自然语言做不到。“把这个表整理一下”,“最近的”是指 3 天还是 3 个月,“重要的”按什么排。汉语不说清楚,机器就替你猜。第三条最硬,先受着。再把这份名单看一遍:Note G 的指令表、ENIAC 的插线板、A-0、FORTRAN、FLOW-MATIC、COBOL、BASIC、电子表格。每往前走一步,人这一头都更像人话,机器那一头都更麻烦。每一步都有人说,这样不精确,这样不算。1957 年反对 FORTRAN 的人,用的正是今天反对提示词的这套话。歧义这件事,解法一直是同一个:把话说细。把“整理一下”改成“按日期从新到旧排序,第三列为空的整行删掉,金额超过 500 元的标红,结果另存为一个新文件”。这句话交给 10 个互不认识的人执行,每个人对每一步该做什么的理解一样。把话说细,就是拆步骤。这里有一笔账。过去学一门机器方言,力气全由人出。现在把中文步骤写细,大半力气归了机器。迁就的方向调了过来。还有一步要交代清楚。话说细,只保证你这一头没有第二种理解,不保证执行那一头不出岔子。人工智能不是编译器,同一段话换一个模型,做法未必一样。所以下一节的第五问不是可有可无的:拿一个你知道答案的例子验一遍。验过,这套步骤才立得住。程序不是写出来就成立,是验过才成立。所以,提示词算不算程序,看两件事。一是你把它说到了哪一步。二是你验没验。停在“帮我弄一下”,它是需求。细到每一步都没有第二种理解,又拿例子验过,它就是程序。方言那一层归机器。说细和验收这两层,归你。

六、你的第一个程序



找一件你每周都要重复做、每次花不到 30 分钟的活。整理下载文件夹、把一沓 PDF 改成统一的文件名、从一堆邮件里把附件全部存下来、把一张表按某种规矩拆成几张。然后照 5 个问题把它拆开,一个问题写一行,写在纸上。一,开始的时候,手边有什么。文件在哪个文件夹,格式是什么。二,结束的时候,要得到什么。一个新文件夹,还是一张新表。三,中间分几步,每一步只做一件事。四,每一步遇到不合规矩的东西,怎么办。文件名里有空格怎么办,日期格式不统一怎么办,遇到不认识的格式是跳过还是停下。五,拿哪两个例子验它做对了没有。一个是正常的,一个要故意带上第四问里那些不合规矩的东西。两个例子你都手工做过,知道正确答案。第四问最容易漏。1946 年 2 月那场演示的前一天,卡住 6 个人的正是这一问:炮弹落地之后,机器该怎么办。多数人把第五问当成多余,其实它才是那道闸。拆出步骤,不等于步骤对。一个正常的例子过了,也不等于对。出事的多半是那些不合规矩的东西。5 行写完,找一个能写代码的人工智能。把这 5 行原样贴进去,加一句:请照这 5 步写一段程序。第一次跑,先复制一份样本出来试,不要动原文件。程序报错,把报错原样贴回去。程序出了结果,拿那两个例子各对一遍。对不上,先回头看前 4 问有没有说错、说漏,再看人工智能有没有照你说的做。

七、照片里没有名字的人



1946 年 2 月 15 日那场演示之后,报纸把 ENIAC 叫作巨脑。报道写的是机器和工程师。照片里站着那 6 个女人,说明文字一个名字也没有留下。1980 年代,哈佛的计算机专业学生凯西·克莱曼翻出这批照片。照片说明里,男人全部有名有姓,女人一个名字也没有。克莱曼问照片里的女人是谁,得到的回答是:站在机器旁边拍照的模特。克莱曼不接受这个回答。照片上,那几个女人的手都在机器上,插电缆,扳开关。黎和生看完我的 Skill,没吭声。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信邦网联系QQ|Archiver|手机版|小黑屋|鲁公网安备 37082802000167号|微信邦 ( 鲁ICP备19043418号-5 )

GMT+8, 2026-9-17 06:09 , Processed in 0.058071 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2013 Wxuse Inc. | Style by ytl QQ:1400069288

快速回复 返回顶部 返回列表