|
发表于 2012-8-1 22:31:10
|
显示全部楼层
本帖最后由 Gorgon_Meducer 于 2012-8-1 22:45 编辑
3. 背景和环境分析
中国嵌入式行业从业人员的整体分布状况呈现图钉型(如图3-1a所示)形态。该模型在垂直方向上表示人才的从业素质和专业技能,在横向上表征对应能力上的人员规模。这一图形直观的体现了中国现阶段嵌入式行业从业人员的分布状况和特点:
a. 大部分人员分布在基本行业从业素养水平线附近(这一标准线参考嵌入式知识体系和基本岗位工作需求而确定);
b. 中高端人才呈现少且相对数量稳定的状态;
c. “图钉帽”到“图钉针”的突然过度凸现出嵌入式行业存在大规模的人才蒸发现象。
相对于国外理性的胶囊型人才分布,国内的图钉形态主要由外因和内因同时作用形成:首先,长期以来中国一直是作为世界加工厂的地位存在,这一方面是中国经济政策的需要,另一方面也是由于欧美嵌入式行业的布局所决定的。中国制造,美国加利福尼亚设计的iPhone就是一个最典型的例子。世界加工厂的地位直接导致国内对嵌入式人才的需求长期围绕着产线进行布局——加工和组装和测试、产品的本地化设计和定制。即便是体现着民族创造力的“山寨设计”也是直接从加工厂的土壤中生长出来的,表现出对欧美设计、产品、理念的高度依赖,其特征为“简单的复制加简单的改造”以实现赚快钱的目的——智能手机时代突然来临导致深圳智能手机产业衰退的现象就直接说明了这种所谓山寨创造力的脆弱——指望这样的环境下形成稳健的人才结构是不切实际的,或者说是不符合实际的。其次,受紧迫的市场需求推动,中国的大学在未能跟上行业需求、未能及时有效的实现针对性的教育改革、教育资源相对缺乏的情况下,大规模的扩招,直接造就了一大批动手能力弱、理论知识薄弱或者说缺乏理论联系实践能力的入门级从业者,这些毕业生往往在从业3~5年后才能在摸爬滚打中依靠行业和项目的推动艰难的获取所需的能力,而这种由经验驱动的能力直接决定了这些“实践经验”受到实践的环境和项目的制约——缺乏系统性和普遍性。这一事实很容易从主流的嵌入式论坛中大规模的从业者不停发明轮子的经验分享中窥得一斑。这是中国本科教育的有限性所决定的,短期内局部可以改观但总体很难改变。
中国中高端人才主要生存于欧美大厂及相关下游企业中,直接接受国外先进的知识和管理支配,属于行业上游体系的一员,从而在人才分布图上表现出长期稳定的特征。另外,存在于欧美体系中的高级从业人员很少向本土产业链流动;在少数的流动过程中,个别先进技术的流出并不能复制国外企业理念、文化、管理和规模因素共同作用下形成的优势,因而对整个本地生态体系影响不大,属于“耗散的热能”。中国的中高端人才整体数量偏少,主要来源为留学归国人才、本土教育中少数精英人才等等,且无论是归国人才还是本土人才,决定其优秀能力的主要是源自国外的系统知识体系。在这里,起关键作用的并不是“源自国外”,而是系统的知识体系,以及联结知识体系和实践的直接桥梁。
一方面,下游从业者人员众多,竞争压力大,待遇低下(俗称IT民工),甚至有劣币逐良币的趋势;另一方面,上游门槛较高可望不可及(很多时候只是缺乏直接的引导和桥梁)。在这两方面的挤压下,大部分从业者在从业一段时间后不得不转行从事销售或者其他行业——这就是基本从业能力基准线附近发生大规模人才“蒸发”的直接原因。
小结:受中国世界加工中心的产业地位影响,在教育资源和准备都不充分的情况下,市场引导高校培养了大批嵌入式基本从业能力基准线附近或以下的从业者;这种现象是长期的,局部可以改观但整体短期难以改变的。能托起中国嵌入式产业健康发展的是胶囊型人才分布,这就需要大批的基本从业水平线以上的有自我提升能力和意愿的人才。对胶囊型人才分布来说,支撑人才上升和培养的是完整的嵌入式知识体系构架,以及服务于该体系构架的培养方案。
4. 目标知识体系
4.1 定位和范围
4.1.1 嵌入式系统的定义
嵌入式系统是面向应用高度裁减的专用计算机系统。嵌入式系统首先是计算机系统,包含软件和硬件两个方面知识体系;其次这一系统是面向应用的需求高度裁减后形成的专用计算机系统,这就包含了工程相关的知识体系。这里,“裁减后的专用”明确了嵌入式系统的知识体系在所涉及到的软件、硬件、工程知识体系中的范围是有限的。
4.1.2 专用计算机的软件和硬件
专用计算机系统相对于通用计算机系统来说最大的区别就在于平台的专用性和特异性上。通用计算机的程序定义是:
程序(Program) = 算法(Algorithm) + 结构(Structure)
算法和结构都是独立于硬件的逻辑,显然简单掌握算法和(数据)结构的知识并不能立马开展嵌入式(专用计算机)程序的开发。这里缺失的是一种方法(Method),用于操作硬件的方法。因此,专用计算机的程序定义是:
程序(Program)= 算法(Algorithm) + 结构(Structure)+ 驱动(Driver / Method)
由此,我们可以看出,在嵌入式系统知识体系中,除去通用计算机系统的程序基本要素算法和结构外,处理硬件的接口方法也是一个非常重要的方面。在嵌入式知识体系中,驱动并不是一个单独的个体概念,他是以面向对象的形式得到组织和体现的(请参考4.1.3节)。
4.1.3 面向对象
面向对象是一种思维模式,将这种思维模式分别应用到到项目分析、工程设计和编程实现时就形成了所谓的面向对象分析(OOA),面向对象设计(OOD)和面向对象编程(OOP)。面向对象的最根本出发点是:将要处理的数据和处理数据的方法封装在一起。在嵌入式系统开发中应用面向对象技术进行开发是目前的主流,从理论上,这种思维模式也是可以很自然的应用与对嵌入式系统的审视中的:
嵌入式系统(Embedded System) = 固件(Firmware[1]) + 硬件(Hardware)
又因为
固件(Firmware)= 程序(Program)+ 文档(Documents)
程序(Program) = 算法(Algorithm)+ 结构(Structure)+ 驱动(Driver)
所以,将以上内容展开得到了
Embedded System = Algorithm + Structure + Driver + Hardware + Documents
这里,如果将硬件看作是对象(Object),则驱动就是操作和处理这一对象的方法(Method);同理,数据结构是一种数据存储和组织方式,作为对象,算法(Algorithm)就是操作数据结构(Structure)的方法。于是我们得到了
Embedded System = (Algorithm + Structure) + (Driver + Hardware) + Documents
从更高一层的角度考虑,程序和硬件组成的系统必须和对应的文档封装在一起才算是完整的工程,这里文档的作用是描述、记录工程的设计和细节,同时解释和介绍系统的使用方式。从这个角度来说,文档就成了方法,而具体的系统就成了对象。由此可见,面向对象的方法作为一种思维,在其主导下的视角可以将嵌入式系统进行有效的划分。且不说有成熟的嵌入式面向对象技术,单纯这种视角和思维的引入就能为嵌入式系统的分析、设计和编程带来丰富的已有的计算机科学成果、理论和方法。
4.2 嵌入式系统中的软件和硬件
相较于传统的软硬件概念,在现代嵌入式知识体系中,软件和硬件的概念是一对不可分割的相对概念。参考图4-1容易发现,对于计算机系统来说,软件和硬件的概念一直是存在的,只是相对多少和视角差异的问题。图的上半部分在纵轴上展示了软件和硬件在一个系统中的比重;图的下半部分在横轴上以切面的形式展示了在由硬到软的过程中所产生的几种产品或者平台。
为了体现这种客观特性,我们对嵌入式知识体系中的软件和硬件重新进行定义:
软件:开发人员固化下来的思维或者模式。
硬件:业已固化的逻辑。
通过重新定义软件和硬件的概念,我们很容易就把握和解释计算机科学的很多发展方向和现象,例如所谓纯软件系统中的“软构件”现象——这就是固化的逻辑在软件系统中体现出的“硬件特性”;在数字电路设计中以原理图形式体现的逻辑(思维)设计,以及可编程逻辑器件中体现的通过VHDL这样软件的方式实现的硬件(FPGA/CPLD/…)。这同时也能帮助我们更好的理解:为什么嵌入式行业内有高度应用价值的逻辑和功能总会突破万难(技术瓶颈、成本限制、复杂度等)逐渐“硬化”;为什么有时候硬件实现的功能(比如MP3解码)会在某些条件下(例如成本)重新“软化”。
正确建立嵌入式知识体系构架中的软硬件概念能从一开始就避免将原本需要全面看待的学科内容生硬的拆散成“软件的”和“硬件的”,培养学员全面、系统地分析和解决问题的能力。不同于学校教育,专业的培养方案必须从基础出发点上就遵循软硬件的这一基础规律。
4.3 嵌入式知识体系图谱
完整的嵌入式知识体系构架如表4-1所示。首先需要注意的是,传统意义上的编码规范并不属于嵌入式知识体系构架的必要组成部分,类比于自然语言的学习,对命名规则、语句格式、缩进的使用这类问题进行规范最终目的是获得好看的代码,而代码的可读性并不是通过格式的规范获得的,这就好比语文学习中练得一手好字并不能保证写出来的内容清晰的表达了作者的思想意图。每一个设计人员都有自己的设计习惯,在一定范围内强制执行的设计习惯就是设计规范。在培养计划中,为了培养学员的良好习惯,应该对一些影响重大的习惯进行强制规范,而对于其他适合学员发挥和体会的部分不做限制。
表4-1以类比自然语言学习的方式组织和解释了嵌入式知识体系构架中个学科方向的位置和作用。他们依次为:汉字的书写、语言表达能力、遣词造句能力、修辞/语言组织训练/阅读能力训练、文法/文体训练以及最后的作文。表格的右边类比自然语言学习的若干阶段,将一些主要的具有代表性的课程列举了下来。下面我们将逐一展开:
4.3.1 汉字书写
汉字书写是通过文字进行语言表达的基础,对嵌入式从业人员来说,学会了一门可用于开发的编程语言仅仅表示其拥有基本的汉字学写能力,能够以计算机可以识别的形式记录下一些信息。学会一门语言可以说学会了写程序,但距离用程序描述自己的思维和想法还是有很大差别的。这是因为前面还有一个很大的障碍:语言表达的障碍。
4.3.2 语言表达
作为自然语言,汉语是我们的母语,因此绝大多数心智正常的人都能用语言清楚地表述自己的意图。计算机语言,即便是所谓的高级语言,对我们来说也是一门外语,即便我们学会了一些外语单词,学会写一些简单的句子,但要想清楚地表达自己所有想表述的内容还是非常困难的。状态机是计算机学科的基石(无论是硬件还是软件),通过学习运用所学语言编写状态机,可以无障碍的实现人类思维到计算机思维的转换——也就是解决了计算机语言环境下的语言表达问题。通过一套成熟的流程图/状态图翻译成代码的简单固定流程,可以让任何学生在半个小时内学会先画流程图/状态图再直接翻译成代码的方式。这种方式从根本上解决了先写文档还是先写代码的矛盾。
拥有了自由表达自身思想的语言表达能力,学生就有可能在后续的学习中迅速的表达和验证自己的所学和所想,而不是受到语言能力的限制将诸如数据结构学习这样的内容停留在抽象模型上的理解状态。
4.3.3 遣词造句
拥有了畅所欲言的能力并不表示写说出逻辑性强、能清晰有效的表达自身意愿的程序。就好像语文学习中造句训练那样,未经训练的小学生往往不能有效地表达自己想要表达的内容,缺乏词汇,容易犯啰嗦、无序等错误。对嵌入式系统软件开发来说,数据结构、算法就是这样一类积累词汇训练造句的课程。作为基础中的基础,遗憾的是大部分嵌入式从业者并没有认真学习过或者掌握数据结构和算法的内容,很多情况下诸如队列这样基本和常用的数据结构也不会运用,更无从谈起建立在这一事实点上的异步处理和非阻塞事务处理的概念。
4.3.4 修辞、语言组织训练和阅读能力训练
在拥有了一定的词汇积累和语言表达能力以后,修辞就成为语言训练的重点,例如,学习复句、比喻、拟人、排比这样的修辞手法;懂得有目的的运用修辞手法组织自己的语言来加强效果,也能读懂常见的行文修辞,比如不会误解互文所表达的意义。对应到嵌入式系统中,如何将我们通过状态机描述的数据结构和算法组织起来就成了重要的课题,对应的学科有操作系统基础——主要解释多任务环境下任务间的组织、通讯、资源的分配和访问;编译原理——一方面了解编译器的特性理解工程组织的一些原理和资源访问的一些限制,另一方面通过对编译机制的学习掌握基于语义的信息处理的常用技巧和方法,而这些方法往往在更广框的应用领域中扮演者重要的角色;其它重要的学科还有信号与系统、数字信号处理、自控原理等,这些都是嵌入式知识体系构架中某些具体方向所必需的能力,需要根据学员的专业方向和意愿进行有选择的扩充和培训。
4.3.5 文法和文体
即便在自然语言学习中文法和文体也并不是容易掌握的内容。在嵌入式系统知识体系构架中,介绍工程构架组织的书记非常匮乏;软件工程的知识对嵌入式从业者来说更是少有耳闻;更不用说计算机学科学校教育中都不会涉及的开发模式内容。而这些知识恰好是嵌入式系统团队日常开发中,不可回避的内容。在这部分适合嵌入式特点的计算机理论和总结更是凤毛麟角,属于高校教育的盲区。在这一背景下,除少数大型开发机构外,中国的嵌入式开发整体呈现缺乏工程化规模化方法论的作坊式状态。
4.3.6 作文
这里的作,是动词,写文章的意思。即便拥有足够的文法和问题知识,要想成为作家还是有相当的难度。对嵌入式知识体系构架来说,能按照需求高效稳定的开发出拥有一定质量的嵌入式应用已经是最终的目标,而与作文等同的项目规划、管理、实现等内容实际上已经超出了嵌入式知识体系构架的范围。
5. 培养方案
培养方案的制定需要在知晓被训对象基本状况的前提下,类比嵌入式知识体系图谱,根据培训的目标职位和工种要求制定相应的课程和计划。对于接受初期基础培训的本科生,首要任务是为其画出整个嵌入式知识体系图谱,帮助其找到自己的当前位置,在进行必要的公共基础培训的同时,引导其确定自己的职业和技术规划,并明晰该发展路线所需的知识、获取知识的方式以及所需的资源,在可能的情况下为其安排必要的培训。在完成首要任务的前提下,应着重培养学员的自主学习意识和能力,补充必需的基本技能——如英文资料的阅读能力,文献的索引能力、文档的编写能力、与他人或资源的沟通能力,基本的时间管理能力等等。
以上是我个人的观点,在这里提出来,就是希望借着这个机会借马老师的地盘和大家一起讨论,欢迎拍砖,不辩不明。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|