学径 LearnPath

编程语言基础 / Wiki

程序

一份写给机器、按顺序执行的步骤;它把可检验的思想固定成可重复运行的形式。

它是什么

程序 是写给计算机的步骤。每一步都必须明确:做什么、按什么顺序、在什么情况下停下。少写一步,结果就缺一块;顺序写反,含义就变。这不是文风上的严格,而是计算的条件:机器没有常识来补全未写出的意图。

程序要用某种编程语言写成。本词条以 Python 为例,但「程序」这个概念先于任何一种具体语言:它指的是思想已经被编码,因而可以被另一时刻、另一组数据、另一台机器再次执行。

名字从哪来

英文 program 既指「计划」,也指「节目单」。编程借用的是前一个意思:事先排好的行动计划。中文「程序」在行政上指办事流程,和代码里的用法是同一类比喻——把允许的动作预先排好,执行时不再临时发明规则。

计算机史里,这个词逐渐与「存储程序」绑在一起:机器不必为每一道题重布电缆,只要换一份将要执行的文本。程序由此成为计算机科学的中心对象:不是更快的算盘,而是可替换的思想。

它怎么工作

解释器从第一行读起。遇到运算就计算,遇到 print 就显示,遇到 选择 就判断,遇到 循环 就重复,直到正常结束或抛出 异常。顺序结构是底座;选择与循环都站在这份底座之上。

注释 属于程序文本,但不被执行。它写给人看——包括三个月后的作者,以及被请来起草代码的语言模型。没有被运行过的程序,仍然只是一份尚未付诸检验的主张。

生活里在哪里

实验报告里的操作步骤、乐谱、工业流水线的节拍,都是「预先写好、随后执行」的近亲。自动售货机在你选定编号之后,按固定次序扣款、出货或提示售罄,已经是一份嵌入机器的短程序。区别在于:纸上的步骤由人来执行,可以靠常识补洞;交给计算机的程序必须把例外也写进结构,否则机器只会停在它无法理解的那一步。

和相近概念的差别

算法是解决问题的方法说明,可以写在纸上、用自然语言或数学符号表达。程序是把方法落实成某种语言的文本,并且能被机器执行。同一算法可以对应许多程序;一个能运行的程序,也不自动等于它声明的那个算法——它可能漏了边界,或算对了幸运输入、错了其余情形。

对话式编程 改变的是文本的起草方式,并不取消程序作为可执行思想的地位。人仍然要说明意图,并验收这份文本是否真的在为问题建模。

常见误会

误会 1:程序会自己补全漏写的步骤。

没写的就不会做。含糊的句子在文章里可以成立,在程序里会变成错误的结果或一次异常。

误会 2:一次运行成功,就永远正确。

换一组输入,尤其是边界上的输入,才知道程序宣称的范围有多大。能运行,不等于模型正确。

误会 3:程序等于「会写代码的职业」。

程序是一种表达形式。理解它,是为了把判断交给机器时仍负责任,而不是为了从事某一种岗位。

想知道更多

  • 书:布鲁克希尔《计算机科学概论》
  • 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
  • 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
  • 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》

未登录时不会保存学习进度