《微机原理》的课程改革与电子类专业的转型求生之一——客从何处来?
0赞前几天,接到学院的通知说:《微处理器系统结构与嵌入式系统设计》(原微机原理与接口技术)这门课,现在学院准备拿回来放在学院自己上了。主要原因是课时缩减以后,学分和课程内容都要调整。而目前微固学院能上这门课的就两个老师,我和某老师。问我有没有兴趣把这门课接下来。
我回答:可以。但是我得当首席教师,课程内容得我来做主。学院的意见是做主是不行的,但是负责制定方案是可以的。我说那也行啊,反正我需要发言权,没有发言权绝对不干。
说起微机原理这门课,我还是非常有感情的。这门课应该是我本科期间学习得最认真,掌握得最好的一门课(虽然考试成绩不是最高的……)。这门课也影响了我读研的选择。而硕士毕业留校以后,原本是安排我上《数字集成电路与系统设计》这门课的,但是由于另外一位老师面临博士毕业的压力,于是和我换了一下。就这样,这门课就成了我刚留校就开始上的第一门课。
这门课是非常“硬”的一门课,硬到什么程度呢?它是我电的“3+6”课程,也就是曾经由教务处统一管理,作为全校电子信息类学生(占我电总人数70%以上)必须要学习的一门专业基础课程。老师由各个学院抽调,统一大纲、统一教材、全校统一安排考试。
昏割线,昨天写了一点,今天继续————————————————————————————
评论里小编说微机原理在讲《汇编语言》,其实这恰恰说明现在很多学校的微机原理已经沦落为《汇编语言程序设计》而非微机原理。这也是一种悲哀。
微机原理为什么曾经在我电被赋予这么高的地方,为什么又能成为电子信息类专业里面的“硬课”之一。这其实就和微处理器的发展很有关系。具体的可以参考我之前的博客:http://blog.chinaaet.com/molf/p/5100051416
当时的微处理器是被做为一个“超级元器件”来使用的。在一个电子系统中,加入一个微处理器为核心构成的嵌入式计算系统,用来完成过程控制和简单的信息处理。这种形式在很长一段时间内是电子信息系统设计的主流方式,因而学习如何搭建这样一种系统就成为了电子信息类专业学生必须要掌握的基础知识和基本技能。当学生学习了前面那么多电路类的课程以后,如何用这些电路去做一个真正能用的系统,就要靠这门课程连接起来。
电子信息类专业的同学学习微机原理有三个目的:1、学习计算机硬件原理,也就是计算机是如何工作的;2、学习底层的编程语言,也就是汇编语言程序设计,理解软件是如何驱动硬件完成各种功能的;3、学习计算机接口技术,理解计算机如何与外界通信,从而了解如何用计算机去驱动和控制外面的电路工作。在“上古时代”,这三个目的分别是由两门课程来实现的。一门叫《微机原理》,实现前两个目的;一门叫《接口技术》,实现第三个目的。后来这两门课程逐渐合成为一门课,就叫《微型计算机原理与接口技术》。
昏割线——————————————————————————————————————————
由于不断有事被打断,这文章又给写成“连载”了。不过这样也好,可以不断的回应下面的朋友提出的问题。有朋友问了:1、这个课能不能做成MooC放到网上?2、这个课和计算机组成原理是什么关系?
首先回答第一个问题。答案是:不能!至少在爱课程这个平台上是不能的。因为这个是教育部-高教社合作的一个平台,这个平台直接对接各高校的教务处。而在我电,这门课程是有“传承”的。这门课是经近30年,成电几代老先生薪火相传,最后传到了今天。另一方面,这个课曾经是我电的“3+6”课程,也就是当成全校的共同专业基础课在开。这课这么重要,当然是需要给予必要的重视。所以很早以前,也就是我还在读本科的时候。我电就设立了“首席教师”这个职位。一般是由资深的老教授担任,主要责任就是召集课程组的老师组织教学研讨活动,同时负责组织大家出题和改卷(因为是全校统考课程嘛)。后来随着老一辈的教授逐渐退休,需要新一代的老师出来接班。但这个时候由于大学的职能发生转变,新时代成长起来的教授们大多数是以科研起家的,很难再找到一个教授尤其是资深教授接棒这些课程的首席教师(当然也有例外,比如我电的电磁场与波课程的潘锦教授,就是科研搞得又好教学能力又强的人才)。这个时候,这个名称就由“首席教师”变成了“首席教授”。同时也明确了如果不是教授,担任了这个位置自动就获得了教授头衔和教授待遇。参照“特聘教授”的方法在聘期结束后做工作考评,考评过了的话就“转正”了。后来,这个制度被推广到了专业建设、实验建设、学科竞赛,出现了专业首席(召集大家制度专业培养方案、调研课程)、实验首席(组织大家做实验课程建设和改革)、竞赛首席(竞赛队的总教练)。后来为了进一步加强工作并减轻首席的负担,又设立了骨干教师这一职位。实质上就是协助干活的“首席助理”。我曾经也去竞争过这个位子,由于当时还不是高级职称,所以要参与“答辩”(答辩过了就可以参照首席的政策)。答辩过程极其无聊,具体过程黑点颇多,就不好在这里详细的说了。我在另外一篇文章里提到了一点,有八卦恶趣味的朋友可以去看:http://blog.chinaaet.com/molf/p/5100017342
罗里吧嗦的说了这么多,其实就是为了解释一点:这门课在我电是很重要了,所以这门已经有人在这里站队值守了。虽然现在“3+6”逐渐解体,很多课从学校统一上又变回到各学院各自上了。但这也是有一个过程的。原来在学校教务处那“挂了号”的队伍不可能轻易让出课程的主导权,虽然这个课程已经“难产”好几年了(做事的人越多,就越难协调。我一个人硬着头皮也就把MooC录完了嘛)。当然,他们也许会欢迎我去录几集。不过对于没有发言权,不能主导课程内容的建设这事,我没有多大的参与兴趣。
第二个问题,计算机组成原理和微机原理的联系以及区别。我们接下来详细讲。先用昏割线昏割一下。
昏割线————————————————————————————————————————
计算机组成原理、微机原理、计算机体系结构三者之间的区别和联系是什么呢?在知乎上这专门有个问题展开了来回答:https://www.zhihu.com/question/19954019
不过需要指出的是,这是从计算机专业的视角解读这三门课程之间的关系。在计算机专业,组成原理负责讲解一个计算机是由哪些部件构成的,计算机又是怎么样运行起来的。相当于教给学生一个基本的计算机运行模型。而危及原理则往往以X86型号的微型计算机为例,讲一讲一个具体的计算机的“实现案例”,同时兼顾计算机与外部的接口应该怎么做。而计算机体系结构则是对计算机的进一步抽象分析,强调用公式化的方法来对计算机的性能进行评估,同时介绍各种计算机系统的优化方法(核心其实就是并行化,但是涉及到不同的部件和软硬件协同优化)。这三门课程配合上一些如操作系统、编译原理等,给计算机专业的学生构建出了一个完备的计算机从硬到软、从理论到实现的完整知识体系。
但对于非计算机类工科专业来说,并没有那么多课时来详细的构建一个完备的计算机相关知识体系。而且对于非计算机类工科专业的学生来说,他们对于计算机的需求是用计算机来做一些事情,而不是去研究计算机本身。所以,对于非计算机类工科专业的学生而言,微机原理这门课还承担着计算机系统相关知识普及的功能。只是在讲这门的时候,大家参考了计算机类专业微机原理课程的讲法——以具体的案例来讲计算机知识本身。通过讲一个X86 CPU的引脚和具体功能,如何编程驱动一个X86的CPU产生各种信号,如何以X86处理器为核心配上一些8255之类的外围芯片来做出一个专门用途的微型计算机。
通过学习以上内容,已经满足了两点需求。学生一方面学了X86的微机是怎么构成的,也就顺便理解了一下计算机的基本组成。另一方面学生学了用实际的芯片去做一个专用的计算机,也相当于掌握了一门实际的工程技能。而这个工程技能还确实是真的有用的。我读本科的时候上一门叫什么宽带通信网络的课程,有一节实验课,其实就是一节“参观课”。参观什么呢?参观由华为捐赠给我们的一台交换机。老师当时从交换机上取下来一个板子(应该是用户板),我仔细一看上面是主要的芯片就是一块80486的CPU和一块Xilinx的FPGA。这至少说明在2000年前后的样子,通信设备确实是用X86系列的CPU+一些外围电路来构成的。学会了X86系列CPU的使用方法对于实际的工程项目是有直接的帮助的。
而随着时代的发展,这一情况开始逐渐发生了一些变化。首先是直接用X86系列CPU来做产品的人少了。8051系列单片机开始大量的被用于低端设备。当然,这对X86CPU的市场冲击还不是很大。稍微大型、高端一点的设备依然是需要用X86的。但随着ARM的崛起,这情况就开始发生比较大的变化了。随着ARM处理器不断的挤占市场,X86CPU逐步在很多设备中就退了出去。所以学生以后在实际的工作中接触的更多的是ARM,而非X86。更主要的一点是,随着SoC概念的兴起,直接用CPU去搭专用计算机的时代结束了。更多的时候是在用一个已经集成了大量外围IP-Core的ARM SoC来实现一些系统。这就造成了一个尴尬的局面——学习以X86系列CPU为核心来学习微机原理的工程性作用被极大的削弱了。为了弥补这个不足,好多学校采取的办法是在开设完毕这门课之后再开设一门单片机应用、嵌入式系统设计之类的偏实践性的课程。讲一讲比较实用化的嵌入式计算机系统。而微机原理这课程也就真的变成了一个“原理性”的课程,通过X86来做例子讲计算机的原理。
事情发展到了2008、2009年间,大家觉得这也的局面不能再继续下去了。一个方面是因为用X86这玩意讲原理吧,总还是存在很多局限的。因为计算机远远不止微型计算机这一种形式,而计算机的组成上的基本原理也不是靠微机原理能讲的清楚的。于是大家就开始了分头探索。有一部分人提出就别讲什么微机原理了,直接讲基于ARM的嵌入式系统设计就好了。一样有汇编语言,一样有接口操作。学完了以后学生直接就掌握了ARM开发的基础知识,多好。持这一派观点的大多数电子信息、通信工程这类专业的老师。而另外一帮老师则说,微机原理还是要继续坚持的啊。ARM SoC的最大问题是看不到总线,看不到接口硬件。学生只学ARM很多原理性的东西,如地址如何分配、译码逻辑怎么实现,接口/端口的物理实现等等。而且X86在工业控制领域依然在被大量的使用着,所以还是要继续坚持走X86的路线。
所以课程演进到这里,已经走到了十字路口。下一步到底往哪里走就成了大家必须要回答的一个问题。结果当然是各走各的。一大票学校选择了直接讲基于ARM的嵌入式,另一大部分人继续坚守在X86上。而我电呢?我们觉得两种方案都不好。在我的导师,电子科技大学李广军教授的领导下。我们开始这样一种改革:把课程分成两个部分,前半部分主要讲“简化版的”计算机组成原理(以及一点点计算机体系结构)。讲清楚计算机里面有什么部件,每个部件怎么工作的。而后半部分讲ARM处理器和ARM汇编,把ARM SoC当成一个典型的计算机案例来讲。
大家听着这个想法是不是很牛逼!简直是两部分的完美结合啊!
然而,经过这么多年的实践以后。才发现实际的效果是:
为什么?
首先,是教材编写问题。大家相信也看出来了,要把这么庞大的内容都编到一本书里面,是非常困难的。实际上我们的第一版书就非常的失败(还好第一版书我没有参与)。试用了两年以后,吐槽不少。于是开始改版编第二版书,比第一版改进了不少。我用第二版的教材教学,也觉得还可以。直到我到了微固学院以后,发现很多学生吐槽这本教材,才发现问题依然很多。那么为什么到了微固以后那么多学生吐槽这本教材呢?这就是和第二点有关了。
第二,教材涵盖这么多内容,实际上对授课老师提出了很高的要求。大家要注意的是,讲微机原理的老师课不是计算机专业出身的老师,而是这些工科非计算机专业的老师。很多老师讲这门课,最多是因为他们的科研活动中用过一点ARM嵌入式系统而已。大部分老师其实没有在科研中或者实际项目中真正对计算机组成和计算机体系结构做出深入的了解。所以这就会影响他们对课程的理解和对教材的把握。在通信的时候,上课的老师们都是教材的作者,所以对教材的把控都比较好。而微固这边沙河校区,这教师都是搞材料、器件、光电、物理出身,本身知识结构上就有缺陷。而他们对教材的把控也不好,所以没有办法去弥补教材的缺陷,反而会把这些缺陷放大。
第三、教材这么搞了以后,学生的学习压力会增大很多。而且两个部分虽然说的是前后呼应,但是内容上差别很大。如果不能把前半部分计算机组成的知识吃透,在学习后半部分的时候就会觉得和前半部分其实没什么关联。再加上实验设计上为了把ARM的操作系统上的特性讲清楚,实验内容过于复杂。很多学生学完以后普遍反映的一点就是觉得很茫然……
所以,更多的学校要么选择放弃阵地,就去学嵌入式系统甚至是单片机了。这等于是计算机的原理的东西都不学了,直接开始学学应用编程好了。或者坚守在X86的阵地上,拔剑四顾心茫然。但是我们得看看计算机专业现在学什么:http://blog.chinaaet.com/molf/p/5100051577
计算机专业在加强“系统能力培养”,在从头开始在FPGA上造一台计算机。而电子信息类专业在盘桓不前,在主动后撤。继续这样下去,电子信息类专业也就只能去做点计算机专业学生看不上,不想做的“边角余料”了。
行文至此。想暂时打一个总结。目前微机原理课程面临的危机,是电子信息类专业发展到今天,是行业整体发展变化所致,也是计算机技术“反噬”电子技术所致。更多的内容我在系列连载“CS大法好”中已经详细介绍了。所以现在“微机原理”这门课程的改革,已经不单单是这一门课程的改革,而是代表了新的产业形势下整个电子信息类专业培养方式的改革。
对于我个人而言,我还是对这门课程充满了感情的。因为它不但是我从教后的正式讲授的第一门课,也影响了我的研究方向。更加重要的是,它让我找到了老婆。