2012年5月10日星期四

《嵌入式教育的忧虑》


嵌入式系统设计是一个很热门的工作领域,它深入到了我们生活的方方面面,基本上你所见到的绝大部分电子系统都是一个简单或者复杂的嵌入式系统,小到你家里面的微波炉,大到一个波音787飞机,都需要嵌入式系统设计工程师、架构师的工作。从这一点看,嵌入式系统设计又是一个很难的问题,因为它要求设计者尤其是架构师对一个系统的软硬件都有一个较为深入的理解。面对这种市场的需求,越来越多的学校、企业界都加大了对嵌入式人才的培训,感觉热火朝天。在我们思考如何进行嵌入式培训的时候,美国最近在嵌入式的教育问题上也进行了一场激烈的辩论,主要观点是:
(1)Code size matters: 实际的嵌入式软件工程都是非常巨大的,尤其当硬件系统越发复杂以后。然而在嵌入式编程的教育中,老师通常面临的是1-2个学期,在这么短的时间内是无法让一个或者几个学生实现一个复杂嵌入式系统的软件工程。通常学校或者培训机构的做法是:找几个简单的、有代表性的问题让学生实现。然而这种做法是不充分的、甚至是误导的。完成一个可以工作的小程序与实现一个复杂的嵌入式软件工程是完全不同的事情,简单案例无法替代真实的复杂情况。一些观点认为,正确的做法:可以尝试让学生touch一个复杂的嵌入式软件工程,从宏观上理解很多重要的内容思想,而细节的内容可以尝试放一放。没有对嵌入式复杂度宏观的把握,很难成为一个合格的嵌入式工程师。
(2)Computer Science或者Computer Engineering专业缺乏对嵌入式的工程性训练:一个复杂的软件系统通常会基于不同的平台、硬件进行周期性的bug修订、版本release等。这个过程是一个软件团队的系统性工作:大家利用版本控制软件系统工作,每个软件模块的修订都尽量减少对其他的影响,同时要保证整体的质量。然而这些非常工程性的问题,在一个仅仅重视学术性的学校很难得到有效的训练保证。虽然学校重视team project,多个学生可以合作一个项目,然而在学生如何合理分配项目的工作量、有效设置milestone等等方面,老师通常是很难做到准确的监管,这就造成很多项目常常是以一个学生为主力完成的。
(3)数学问题:越来越多的学校把传统的数学课程让位于新科技、新技术、新编程语言等。然而,大家都知道,数学是科学的语言(language of science),数学能力的缺失使得计算机系的学生在处理软件工程,特别是嵌入式软件工程时遇到更多的麻烦。譬如很多计算机系仅仅教授离散数学、概率论等,对于连续数学(譬如微积分、线性系统)等涉及很浅。我有一个新加坡的同学,从新加坡的computer science系转到我们学校的computer engineering系。我们系要求学习electronic circuit,里面用到微积分,这个时候该学生就很痛苦,而不动electronic circuit,如何做一个合格的嵌入式工程师呢?此外,嵌入式软件一个重要的问题就是软件的security问题。而security对数学的要求比较高,这个时候计算机系的同学在处理软件安全性问题上就显得力不从心。
(4)以Job Market为导向的教育思路:在美国越来越多的学校把编程语言从传统的C、C++转向了Java,因为懂得Java能够更好的找到工作。让我们引用美国学者与工业界同仁争论的一个观点“adopting Java to replace previous languages used in introductory programming courses – such as Pascal, Ada, C or C++ -- was a step backward pedagogically. Many universities went to Java because ‘that’s where the jobs are,’ but ironically may have produced a generation of programmers with over-specific but superficial skills who are now losing jobs to overseas competition with broader and deeper talents”。观点的基础是:如果你不懂的汇编语言,不懂得C语言,很难从较低的层面对系统的硬件与软件有一个深刻的理解,更谈不上编写出有效率的嵌入式程序,虽然Java给你带来了很多OOP的优势。
(5)嵌入式系统设计究竟是在computer science系进行教育,还是在computer engineering系进行教育。这个问题真是仁者见仁,智者见智。本身嵌入式设计就是一个软硬系统的设计问题。有一点是肯定的,无论在哪个系进行教育,基本的核心课程是必须要有的,譬如:C/C++,data structure,algorithm,computer architecture,logic design等等。
既然美国学术界和工业界在深度关注嵌入式的教育问题、在探讨和总结以往嵌入式教育的得失,我们中国的学者、教育工作者、培训力量也要反思这些问题,尽管这些问题的解决方案很棘手,但是如果不思考,不深度挖掘我们所面临的中国嵌入式劳工市场,不透析中国学校的教育现状,而仅仅是跟风美国学校或者公司推出的方案,这些方案无论是多么的fancy,多么的利用高科技(基于32-bit或者64-bit MCU、基于V5或者Q5的FPGA、基于ARM15或者其他等等),也许教育的结果都是徒劳的,因为嵌入式远远比你所解释的、训练的更为复杂。你的学生是否ready了?你的国家的教育infrastructure是否ready了?还是好好基于现状,总结经验,提出有效的、有针对性的教育培训思路。
在嵌入式教育问题的讨论上,大家可以高度关注ACM TECS (Transactions in Embedded Computing Systems) 和 ACM WESE (Workshop on Embedded System Education)。如果您有更好的意见,可以在网上留言。

没有评论: