程序
一份写给机器、按顺序执行的步骤;它把可检验的思想固定成可重复运行的形式。
它是什么
程序 是写给计算机的步骤。每一步都必须明确:做什么、按什么顺序、在什么情况下停下。少写一步,结果就缺一块;顺序写反,含义就变。这不是文风上的严格,而是计算的条件:机器没有常识来补全未写出的意图。
程序要用某种编程语言写成。本词条以 Python 为例,但「程序」这个概念先于任何一种具体语言:它指的是思想已经被编码,因而可以被另一时刻、另一组数据、另一台机器再次执行。
名字从哪来
英文 program 既指「计划」,也指「节目单」。编程借用的是前一个意思:事先排好的行动计划。中文「程序」在行政上指办事流程,和代码里的用法是同一类比喻——把允许的动作预先排好,执行时不再临时发明规则。
计算机史里,这个词逐渐与「存储程序」绑在一起:机器不必为每一道题重布电缆,只要换一份将要执行的文本。程序由此成为计算机科学的中心对象:不是更快的算盘,而是可替换的思想。
它怎么工作
解释器从第一行读起。遇到运算就计算,遇到 print 就显示,遇到 选择 就判断,遇到 循环 就重复,直到正常结束或抛出 异常。顺序结构是底座;选择与循环都站在这份底座之上。
注释 属于程序文本,但不被执行。它写给人看——包括三个月后的作者,以及被请来起草代码的语言模型。没有被运行过的程序,仍然只是一份尚未付诸检验的主张。
生活里在哪里
实验报告里的操作步骤、乐谱、工业流水线的节拍,都是「预先写好、随后执行」的近亲。自动售货机在你选定编号之后,按固定次序扣款、出货或提示售罄,已经是一份嵌入机器的短程序。区别在于:纸上的步骤由人来执行,可以靠常识补洞;交给计算机的程序必须把例外也写进结构,否则机器只会停在它无法理解的那一步。
和相近概念的差别
算法是解决问题的方法说明,可以写在纸上、用自然语言或数学符号表达。程序是把方法落实成某种语言的文本,并且能被机器执行。同一算法可以对应许多程序;一个能运行的程序,也不自动等于它声明的那个算法——它可能漏了边界,或算对了幸运输入、错了其余情形。
对话式编程 改变的是文本的起草方式,并不取消程序作为可执行思想的地位。人仍然要说明意图,并验收这份文本是否真的在为问题建模。
常见误会
误会 1:程序会自己补全漏写的步骤。
没写的就不会做。含糊的句子在文章里可以成立,在程序里会变成错误的结果或一次异常。
误会 2:一次运行成功,就永远正确。
换一组输入,尤其是边界上的输入,才知道程序宣称的范围有多大。能运行,不等于模型正确。
误会 3:程序等于「会写代码的职业」。
程序是一种表达形式。理解它,是为了把判断交给机器时仍负责任,而不是为了从事某一种岗位。
想知道更多
- 书:布鲁克希尔《计算机科学概论》
- 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
未登录时不会保存学习进度