在中国,PC(主要是Windows-Intel体系)软件开发程序员,也就是“纯软件程序员”的“黄金年龄段”较短是一个不争的事实,一般纯软件程序员到了30—35岁就必须考虑转型问题,否则在中国程序员工作强度普遍较大这一现实情况下,无论是体力还是新知识的接收速度都无法与20出头的年轻程序员相比。转型的方式有多种:转向系统分析师,离开程序设计第一线;转向IT职业培训讲师;转向市场、管理等职位,放弃技术工作;自行创业等,这些转型方式都是不错的选择。
但很多长年从事技术工作的程序员,如果从事技术之外的工作,可能存在适应问题,市场、管理、自行创业等转型方式自己未必觉得适合。如果在30—35岁之后仍然决定从事技术工作,也可以选择转向嵌入式系统开发,也就是纯软件程序员转型成为嵌入式系统工程师。
业界公认:嵌入式系统工程师,包括硬件工程师和嵌入式软件程序员,生命周期要比纯软件程序员长得多,待遇相对也高一些。主要原因是嵌入式系统多用于工业等领域,在这些领域中,嵌入式系统应用面千变万化,技术成熟程度、可靠性、成本等是决定系统选型的核心问题,华而不实的东西比较少,像Microsoft和Intel那样垄断PC市场软硬件,联合起来从用户口袋里掏钱这种行为难以存在,新技术往往不是被追逐的对象,成熟技术是更容易被接受的,例如8051系列单片机已经使用了20多年,现在仍然被大量使用。
笔者正处在这种转型即将完成之时,总结经验教训,笔者提出自己的几点看法,谈一下纯软件程序员向嵌入式系统工程师转型时需注意的一些问题:
1、澄清一个误区——WinCE和嵌入式Linux并不完全等于嵌入式系统开发
目前,一谈到嵌入式系统,就容易谈到WinCE和嵌入式Linux,还有.NETCompactFramework和J2ME等,许多纯软件程序员,学会了WinCE开发,学会了嵌入式Linux开发,就认为自己已经入门或者精通了嵌入式系统开发。其实WinCE和嵌入式Linux本身只是嵌入式操作系统(eOS),它们均来自相应的PC操作系统——Windows和Linux,.NETCompactFramework和J2ME也来自相应的PC虚拟机平台——.NETFramework和J2SE,这类eOS和虚拟机平台只能用于高档嵌入式系统硬件,例如手机或者PDA,软件开发使用的硬件本身是一个成熟的硬件平台,例如一部成品手机/PDA,或者一块带有TFTLCD和触摸屏的实验板,这种嵌入式软件开发和相应的PC软件开发极其相似,甚至是趋同的,很少直接和硬件打交道。这类嵌入式系统开发只是嵌入式系统开发中的很小一部分而已,主要用于消费类电子产品的开发,很少用于工业领域。
2、硬件能力的提升十分关键
嵌入式系统开发涉及的知识面比纯软件开发更大,嵌入式系统工程师的付出可能数倍于纯软件程序员。这一方面是因为嵌入式系统是“嵌入”的,也就是用于大系统或者产品内部的广义计算机软硬件系统,非常容易涉及到交叉学科和领域,例如:一个智能电力仪表内部使用的嵌入式系统,开发时工程师就必须懂得电力方面的相关知识;一个智能化工仪表内部使用的嵌入式系统,开发时工程师就同样必须懂得化工方面的相关知识,否则不仅不能很好地完成开发,还可能出现产品无法适应电力、化工等行业特殊环境的问题,甚至可能因为错误开发而引发电力、化工等方面的严重事故。另一方面就是因为嵌入式系统开发包括了硬件开发,即使软件开发也很容易直接涉及到硬件,因此提高自身的硬件能力也就成为纯软件程序员向嵌入式系统工程师转型的关键问题了。
对于缺乏硬件和电路基础的纯软件程序员,向嵌入式系统工程师转型时,提高硬件和电路能力非常重要。在这方面没什么捷径可走,一方面是基础知识的学习,重点是大学里学过的《模拟电子技术》、《数字电子技术》、《计算机组成原理》等课程的内容;另一方面就是动手,这是最重要的,没听说过哪个电子高手是看书背书练成的,都是电烙铁和万用表下练出来的,自己购买元器件、电烙铁、万用表、编程器等必须的材料和工具,自己查资料设计电路,自行动手焊接制作实验板和电路,不要依靠成品实验板,是提高嵌入式系统硬件能力的有效方法,在这方面不要怕“出血”——学成之后的收入会对得起你,但是,学习之时必须坐得住冷板凳——学技术都应该是这个态度。
3、不可盲目怀旧
某些嵌入式软件开发与DOS软件开发有一定的相似之处,例如硬件完全透明,大量使用C语言甚至汇编语言等,很多DOS时代过来的纯软件程序员容易在嵌入式软件开发上怀旧,认为DOS软件开发又回来了。适当怀旧也无不可,但如果认为嵌入式系统开发是DOS开发的翻版,那就大错特错了。前面说过,嵌入式系统是一个涉及面更大的领域,硬件从低档的8051一直到高档的ARM9、MIPS64等,软件从汇编语言一直到.NETCompactFramework和J2ME,现代软件开发思想——面向对象、设计模式、体系结构、软件工程等仍然指导着嵌入式软件开发,而且有逐渐深入的趋势。盲目怀旧会影响自己对新技术、新知识和新思想的学习,须知就算是嵌入式系统开发新技术更新较慢,但新技术仍然是大量涌现的,10年前十几块芯片组成的电路可能现在只需要一块SoCMCU就能实现,10年前几百行几千行汇编语言程序的软件开发规模,现在8051的软件开发规模都可能达到几千行甚至上万行C语言程序,不引入现代软件开发思想是行不通的。
柏杨先生在他的著作《丑陋的中国人》中曾经辛辣地讽刺了我们这个民族的某些劣根性,其中有一个就是“向后看”、“向古看”以及“古时什么都好”。例如今天有人看到上学贵、看病贵和住房贵,就说“70年代最好,上大学不要钱,看病免费,福利分房,还不如回到70年代”,殊不知70年代上大学确实不要钱,还有补助(一直延续到80年代初),可是高考升学率不到10%;70年代看病免费,可是当时一家生好几个孩子有几个养不活是常事;70年代福利分房,可是一家三代人挤十几平方米的房子也是常事,笔者敢说一句话,把适应了今天的生活,却拼命说70年代多好的人,让他们真正过一段时间70年代的生活,不消一个月,十个里面有九个又都会拼命说吃不消的。现在某些报刊、杂志和网站经常盯着所谓的“80后”和“90后”年轻人说事,拿个例当常例,把一些缺点无限放大,说“80后”和“90后”是“垮掉的一代”,这些话听着玩可以,但作为老程序员,我们应该扪心自问:为什么我们会被20出头甚至十七八岁的“80后”和“90后”程序员所淘汰?是什么逼得我们转型的?
“长江后浪推前浪,前浪死在沙滩上”,“沉舟侧畔千帆过,病树前头万木春”,盲目怀旧,放弃学习,只会让自己更快地被淘汰,纯软件开发如此,嵌入式系统开发同样如此。嵌入式系统虽然没有太多华而不实的更新和升级,更加依靠工程师的经验,适合基础牢固和经验丰富的老一代程序员转型,但这只能说是更适合老一代程序员的实际情况一些,绝不是意味着转型后可以放弃对新技术、新知识和新思想的学习。
纯软件程序员选择向嵌入式系统工程师转型,这是一条充满艰难险阻的道路,但一旦选择了这条道路,坚持走下去,可能会获得意想不到的成功。愿中国嵌入式系统开发产业的熊熊烈火早日被点燃!