啊,我想到了——信息技术课程内容设计集锦 参考论文
打开通用计算机的盖子
几十年前,有不少电子爱好者的探索之路,是从拆收音机开始的,打开盖子,换换零件,焊焊电路,就有一大堆要学的。而现在,由于电路集成度较高,就算打开机器的盖子,也啥都做不了,难道就此不闻不问,将一切视作理所当然?笔者认为,所谓打开盖子,并非真要在硬件层面将机器零件一个个查验过来,而是要把现象背后蕴涵的宝贵的思想方法,一层层拆解出来。
为了有勇气打开盖子,需要大喊一声:“难道真的是这样吗?”喝问的对象是什么?是教材上的文字和讲课时的语句?文字和语言是用来帮助人们理解知识、把握概念的,但文字和语言本身不是知识和概念。如果有人问月亮在哪里,回答者用手一指,大家都知道那手指并不是月亮。而文字和语言,其实起的就是类似于手指的作用。人的头脑在处理抽象或逻辑性问题时,常会犯自以为是的错误,以为自己已经理解这些文字符号的意义,但往往经不起多追问几个为什么。
例如,一些教材中提到冯·诺依曼针对ENIAC提出的计算机改进的建议中有一点,“程序可以像数据那样存放在存储器中,由计算机自动执行”。如今的人们可能会感觉,这难道不是理所当然的事吗?一般情况下,计算机将程序指令先从硬盘读取,再到内存执行,那些智能手机可以将程序指令从闪存卡读到内存后执行,甚至是单片机,也可以是通过各种接口将新写的程序刷到EEPROM等存储器中后再执行。
但计算机是如何自动读取和执行指令的,存储器又是如何存储指令的,这些问题若要究其技术根源,大概要读上几百、上千页的专业技术资料才能勉强知晓其原理。在基础教育领域,对学生来说,重要的不是知晓专业技术细节,而是体验和领悟具体问题解决过程中思想方法上的突破。怎么才能激发起学生探索的动力呢?这就必须视所有的一切并非理所当然。这就好像从机器的盖子里往外拿零件,看看机器还能做什么,但拿的不是实体的零件,而是人工的概念。例如,可以拿掉存储器,拿掉程序,不妨自我设问一下:难道有计算机根本没有程序?难道程序并不像数据那样存放在存储器中?难道根本没有存储器用来放程序?
的确,早期许多计算机,并不靠“程序”这种东西来运行,当然也没有存储器来存储程序;教材上短短一句話,其实隐藏着一个很大的秘密,就算没有程序,计算机也照样啥事都能做(严格说,就是将可描述的数学运算过程机械化)。为了充分理解这一点,需要三次思维跳跃,若没有这三次思维跳跃,就很难真正理解存储程序思想的意义。
第一级跳跃:专用计算机
专用的机械计算机只能做特定的事。例如,帕斯卡的加法机就是一个无法编写程序的机械专用计算机。虽说,它可以根据实际情况对不同的数据做加法,但若要将其变成乘法机,需要更换齿轮零件。也就是说,除非改造机械结构,否则这台机器无法实施新的任务。这就好像一个已经定制完成的数学函数,虽然数据可以通过函数的参数来传递,但函数本身的功能却无法改变。
帕斯卡试图将自己的加法机改造成乘法机所设计的零件图纸(如上页图1)。
如上页图2所示,用儿童玩具改造的简易加法机,可以做百位数以内的加法运算。
可以用不同的零件制造专用的计算机,如齿轮、杠杆、滚珠,甚至是水管加阀门、绳子加滑轮等,网络中还可以找到许多有趣的例子。当然,也可以换成更可靠一些的机电元件来制作计算装置。为了让学生们理解这一点,最好的方法,莫过于让其看一看、玩一玩各种专用计算机(这方面的实物教具的确太少了,但好在可以找到许多模拟器体验一下),甚至亲手制造一个专用计算机。学生会发现,若要改变机器功能,必然要改变机械结构。
第二级跳跃:构造统一的逻辑运算单元
用不同方法制造出来的专用计算机,其零件无法调换使用,扩展性也很差,一个机械装置输出的状态,无法轻易输入到另一个机械装置中去。对于计算,能否构造出一种像乐高积木那样自由组合的零件,可以轻松插拔置换呢?答案是肯定的,可以先构造出基本逻辑运算单元,然后在逻辑运算的基础上实现数学运算。
逻辑运算需要用到的逻辑门同样也可以用机械装置构造出来。用实体材料来构造逻辑门有相当大的难度,有兴趣的朋友可以在各搜索引擎中搜索“mechanical logic gate”,欣赏一下用不同材料构造的逻辑门。然而,一个好的教学活动不能仅有阐发道理的比喻,最好还能有提供实际操作体验的环境。笔者建议借助物理沙盘,如用Phun在电脑中虚拟搭建机械结构。在Phun社区中,有不少已制作完成的逻辑门构造,本文给出的这套设计方案,是用杠杆、弹簧和滚珠实现的。笔者借用这个现成的构造,很快就造出一个一位的加法器。Phun社区中的与门和异或门(如图3)。
用与门和异或门实现加法①:上方长方形从左输入接口输入二进制1,下方小球代表输出01(如图4)。
用与门和异或门实现加法②:上方长方形从右输入接口输入二进制1,下方小球代表输出01(如图5)。
用与门和异或门实现加法③:左右通道均输入二进制1,则下方小球输出10(如图6)。
Phun社区中提供了更多复杂的机械运算装置,可以用来进一步研究不同的机械逻辑门是如何连接在一起使用的,限于篇幅,这里就不一一展示了。
第三级跳跃:构造通用计算装置的思路
人们当然不希望自己辛辛苦苦造出来的机器,只能专一地做某一件事情。于是就产生出相关的需求,如何设计一种机器,人们想让它做某种运算,不需要调整机械结构,只要更改输入信息,它就能实施那种特定的运算?乍一想似乎不可能,但推理后却证明,这样的机器是有可能被制作出来的:
①使用上述机械逻辑门,可构造出各种功能的计算装置,如加法、乘法、除法甚至更多、更复杂的运算装置;
②为了实现不同的运算,需要在每次运算前,更改这些逻辑门的连接方式;
③人们并没有真正制造出文中的机械计算装置,人们只是在某个计算系统中模拟这套机械计算装置的构造和运行;
④人们可以制造某个计算装置A,该装置的计算任务是唯一的,就是模拟一套机械计算装置B的制造和运行,于是,人们面对新计算任务时,不需要真的更改机械装置A的结构,只需要“虚拟地”更改那个模拟出来的机械装置B的结构;参考论文
⑤因此,允许在不更改机械结构的情况下,构造出一个通用的计算装置。理论上说,这个通用计算装置只需要有“输入—处理—输出”三个组成部分就可以了,并不一定需要存储器来存储程序和数据。
从第④步到第⑤步的推论,需要比较大的思维跳跃,不过笔者可以保证,这两步之间是不需要更多的推理步骤了。解决通用计算问题的天才想法很早就出现了,而且也有人真的想去实现它。最早的尝试者是巴贝奇,但限于机械零件的精度,他最终失败了,很多年之后,图灵和邱奇通过数学的方法实际验证了这个想法的可行性。简单来说,就是通过数学法则建造一个虚拟计算装置的模型,并将这个虚拟计算机模型的数据作为输入参数,输入到一台专门用来模拟虚拟计算装置运行过程的计算模型中,理论上说,一台计算机能够模拟运行一台运算规则完全和自身相同的虚拟计算机。也许绝大多数学生,还无法理解图灵或邱奇的数学证明过程,但若真的动手造一个机械运算装置,或是在沙盘软件里模拟一下制作过程,相信他们能更快地理解笔者给出的逻辑推论。