1.2 程序与程序设计

1.2.1 程序

“程序”并非计算机专利,其实做任何事情都要讲究程序。《舌尖上的中国》介绍的每道美食都有其特有的制作程序,第二季第2集《心传》中讲述的陕西吴堡县张家山镇的空心挂面加工过程给观众留下了深刻印象:和面、搓条、盘条、上筷子、阴条、分筷子、再阴条、出筷子、装封。为获得独特的美味,这些程序缺一不可。

本书中的程序特指计算机程序。计算机程序(Computer Program)是指一组指示计算机或其他具有信息处理能力的装置进行每一步动作的指令。程序通常用某种程序设计语言编写,运行于某种目标体系结构上。简单来讲,计算机程序是计算任务的处理对象和处理规则的描述。打个比方,一个程序就像一个用汉语(语言)写下的红烧肉菜谱(程序),用于指导懂汉语和烹饪手法的人来做这道菜。计算机程序需要由程序设计语言来编写,才能直接或间接地被计算机理解并执行。

计算机(硬件)本身并不是一个智能设备,它需要运行特定的程序才能完成特定的任务。而程序及与之相关的数据和文档则称为软件。软件与硬件相比具有不同的特点,它既看不见又摸不着。它不仅存在于大家熟悉的计算机、平板电脑及智能手机中,还广泛被应用于很多普通家用电器或电子设备中,如MP3播放器、微波炉、智能手机、数码相机和汽车等。

为了运行一个程序,计算机要加载程序代码,可能还要加载数据,从而初始化成一个开始状态,然后调用某种启动机制开始执行程序,最终将输入的数据经处理后得到运行结果。

例如,应用智能手机中的全景照相程序可以将连续拍摄的多幅照片自动拼接成全影照片,如图1-2所示,这里的数据是照片,照片处理的步骤就是算法。

图1-2 利用全景拍摄程序拍摄的全景照(拍摄于Devils Tower,USA)

再如,电波钟表将传统钟表技术与现代时频技术、微电子技术、计算机技术等多项技术相结合,通过接收国家授时中心以无线电长波传送的标准时间信号,经过内置微处理器中的程序解码处理后,自动校准计时器走时,使电波钟表显示的时间与国家的标准时间自动保持精确同步。如图1-3所示(图片来源:http://www.amazon.com)。

图1-3 电波钟表

而车载行车电脑利用程序自动分析汽车运行的实时数据,如油耗、平均时速等。如图1-4所示(图片来源:http://www.baidu.com)。

图1-4 车载行车电脑

而利用微信、QQ、易信等软件让人与人之间的通信变得方便快捷。利用支付宝软件不仅可以实现电子支付,还可实现自助理财。电子商务平台及大规模在线教育课程(MOOC)也需要大量软件的支持才能推广与应用。

可见,无处不在的程序正改变着人们的生活与社会的生产方式。

1.2.2 程序设计

程序设计,简单地讲就是设计“程序”的过程,程序设计是创造性劳动,目前尚不能完全实现软件自动化软件自动化是尽可能借助计算机系统(特别是自动程序设计系)进行软件开发的过程。按狭义的理解,软件自动化是从形式的软件功能规格说明到可执行的程序代码这一过程的自动化。。专门进行程序设计的人员称为程序员(Programmer),许多计算机专业的毕业生第一份工作就是做程序员。当然程序设计并非程序员的专利,各种软件开发平台操作日趋简单,功能日趋强大,甚至出现了一些积木式的程序开发平台,让普通的民众也可以DIY自己的应用程序。一些原本不是程序员的普通人甚至因为开发出某种受欢迎的应用程序(如手机游戏)而一举成名。然而,对于一些结构复杂、规模庞大的软件系统需要专门的设计人员与经验丰富的程序员来共同开发。这正如许多普通人可以做出美味的家常菜,但想成为大厨,则需经过专业的理论学习与实践训练。

如前所述,程序需使用程序设计语言进行编写,从计算机诞生至今,产生了成千上万种程序设计语言和各种各样的程序设计方法,从机器语言到汇编语言,从汇编语言到FORTRAN、BASIC、COBOL,再到C、C++、Java、C#、Python;从结构化程序设计方法到面向对象的程序设计方法;从串行程序设计到并行(并发)、多核程序设计等。

学习程序设计方法必须借助具体的程序语言来进行,无论采用何种语言来进行程序设计,其最终的目的都是控制计算机更有效地完成人们要求的工作。计算机完成任务的具体算法不因程序设计语言的改变而改变。不论选择何种程序设计语言作为第一门程序设计课程的教学语言,学习者首先都要掌握程序设计的基本方法和规则,程序设计语言只是实现程序设计的表现手段。只有真正掌握了程序设计的基本方法,培养了计算思维能力,才能够做到触类旁通,举一反三。