`

纯软件程序员向嵌入式系统工程师转型时需注意的问题

阅读更多
一席话十年书,不错

http://blog.csdn.net/Changjiang/archive/2008/08/07/2779693.aspx


在中国,PC(主要是Windows-Intel体系)软件开发程序员,也就是“纯软件程序员”的“黄金年龄段”较短是一个不争的事实,一般纯软件程序员到了30—35岁就必须考虑转型问题,否则在中国程序员工作强度普遍较大这一现实情况下,无论是体力还是新知识的接收速度都无法与20出头的年轻程序员相比。转型的方式有多种:转向系统分析师,离开程序设计第一线;转向IT职业培训讲师;转向市场、管理等职位,放弃技术工作;自行创业等,这些转型方式都是不错的选择。

但很多长年从事技术工作的程序员,如果从事技术之外的工作,可能存在适应问题,市场、管理、自行创业等转型方式自己未必觉得适合。如果在30—35岁之后仍然决定从事技术工作,也可以选择转向嵌入式系统开发,也就是纯软件程序员转型成为嵌入式系统工程师。

业界公认:嵌入式系统工程师,包括硬件工程师和嵌入式软件程序员,生命周期要比纯软件程序员长得多,待遇相对也高一些。主要原因是嵌入式系统多用于工业等领域,在这些领域中,嵌入式系统应用面千变万化,技术成熟程度、可靠性、成本等是决定系统选型的核心问题,华而不实的东西比较少,像Microsoft和Intel那样垄断PC市场软硬件,联合起来从用户口袋里掏钱这种行为难以存在,新技术往往不是被追逐的对象,成熟技术是更容易被接受的,例如8051系列单片机已经使用了20多年,现在仍然被大量使用。

笔者正处在这种转型即将完成之时,总结经验教训,笔者提出自己的几点看法,谈一下纯软件程序员向嵌入式系统工程师转型时需注意的一些问题:

1、澄清一个误区——WinCE和嵌入式Linux并不完全等于嵌入式系统开发

目前,一谈到嵌入式系统,就容易谈到WinCE和嵌入式Linux,还有.NET Compact Framework和J2ME等,许多纯软件程序员,学会了WinCE开发,学会了嵌入式Linux开发,就认为自己已经入门或者精通了嵌入式系统开发。其实WinCE和嵌入式Linux本身只是嵌入式操作系统(eOS),它们均来自相应的PC操作系统——Windows和Linux,.NET Compact Framework和J2ME也来自相应的PC虚拟机平台——.NET Framework和J2SE,这类eOS和虚拟机平台只能用于高档嵌入式系统硬件,例如手机或者PDA,软件开发使用的硬件本身是一个成熟的硬件平台,例如一部成品手机/PDA,或者一块带有TFT LCD和触摸屏的实验板,这种嵌入式软件开发和相应的PC软件开发极其相似,甚至是趋同的,很少直接和硬件打交道。这类嵌入式系统开发只是嵌入式系统开发中的很小一部分而已,主要用于消费类电子产品的开发,很少用于工业领域。

2、硬件能力的提升十分关键

嵌入式系统开发涉及的知识面比纯软件开发更大,嵌入式系统工程师的付出可能数倍于纯软件程序员。这一方面是因为嵌入式系统是“嵌入”的,也就是用于大系统或者产品内部的广义计算机软硬件系统,非常容易涉及到交叉学科和领域,例如:一个智能电力仪表内部使用的嵌入式系统,开发时工程师就必须懂得电力方面的相关知识;一个智能化工仪表内部使用的嵌入式系统,开发时工程师就同样必须懂得化工方面的相关知识,否则不仅不能很好地完成开发,还可能出现产品无法适应电力、化工等行业特殊环境的问题,甚至可能因为错误开发而引发电力、化工等方面的严重事故。另一方面就是因为嵌入式系统开发包括了硬件开发,即使软件开发也很容易直接涉及到硬件,因此提高自身的硬件能力也就成为纯软件程序员向嵌入式系统工程师转型的关键问题了。

对于缺乏硬件和电路基础的纯软件程序员,向嵌入式系统工程师转型时,提高硬件和电路能力非常重要。在这方面没什么捷径可走,一方面是基础知识的学习,重点是大学里学过的《模拟电子技术》、《数字电子技术》、《计算机组成原理》等课程的内容;另一方面就是动手,这是最重要的,没听说过哪个电子高手是看书背书练成的,都是电烙铁和万用表下练出来的,自己购买元器件、电烙铁、万用表、编程器等必须的材料和工具,自己查资料设计电路,自行动手焊接制作实验板和电路,不要依靠成品实验板,是提高嵌入式系统硬件能力的有效方法,在这方面不要怕“出血”——学成之后的收入会对得起你,但是,学习之时必须坐得住冷板凳——学技术都应该是这个态度。

3、不可盲目怀旧

某些嵌入式软件开发与DOS软件开发有一定的相似之处,例如硬件完全透明,大量使用C语言甚至汇编语言等,很多DOS时代过来的纯软件程序员容易在嵌入式软件开发上怀旧,认为DOS软件开发又回来了。适当怀旧也无不可,但如果认为嵌入式系统开发是DOS开发的翻版,那就大错特错了。前面说过,嵌入式系统是一个涉及面更大的领域,硬件从低档的8051一直到高档的ARM9、MIPS64等,软件从汇编语言一直到.NET Compact Framework和J2ME,现代软件开发思想——面向对象、设计模式、体系结构、软件工程等仍然指导着嵌入式软件开发,而且有逐渐深入的趋势。盲目怀旧会影响自己对新技术、新知识和新思想的学习,须知就算是嵌入式系统开发新技术更新较慢,但新技术仍然是大量涌现的,10年前十几块芯片组成的电路可能现在只需要一块SoC MCU就能实现,10年前几百行几千行汇编语言程序的软件开发规模,现在8051的软件开发规模都可能达到几千行甚至上万行C语言程序,不引入现代软件开发思想是行不通的。

柏杨先生在他的著作《丑陋的中国人》中曾经辛辣地讽刺了我们这个民族的某些劣根性,其中有一个就是“向后看”、“向古看”以及“古时什么都好”。例如今天有人看到上学贵、看病贵和住房贵,就说“70年代最好,上大学不要钱,看病免费,福利分房,还不如回到70年代”,殊不知70年代上大学确实不要钱,还有补助(一直延续到80年代初),可是高考升学率不到10%;70年代看病免费,可是当时一家生好几个孩子有几个养不活是常事;70年代福利分房,可是一家三代人挤十几平方米的房子也是常事,笔者敢说一句话,把适应了今天的生活,却拼命说70年代多好的人,让他们真正过一段时间70年代的生活,不消一个月,十个里面有九个又都会拼命说吃不消的。现在某些报刊、杂志和网站经常盯着所谓的“80后”和“90后”年轻人说事,拿个例当常例,把一些缺点无限放大,说“80后”和“90后”是“垮掉的一代”,这些话听着玩可以,但作为老程序员,我们应该扪心自问:为什么我们会被20出头甚至十七八岁的“80后”和“90后”程序员所淘汰?是什么逼得我们转型的?

“长江后浪推前浪,前浪死在沙滩上”,“沉舟侧畔千帆过,病树前头万木春”,盲目怀旧,放弃学习,只会让自己更快地被淘汰,纯软件开发如此,嵌入式系统开发同样如此。嵌入式系统虽然没有太多华而不实的更新和升级,更加依靠工程师的经验,适合基础牢固和经验丰富的老一代程序员转型,但这只能说是更适合老一代程序员的实际情况一些,绝不是意味着转型后可以放弃对新技术、新知识和新思想的学习。

纯软件程序员选择向嵌入式系统工程师转型,这是一条充满艰难险阻的道路,但一旦选择了这条道路,坚持走下去,可能会获得意想不到的成功。愿中国嵌入式系统开发产业的熊熊烈火早日被点燃!
分享到:
评论

相关推荐

    软件工程师(程序员、嵌入式开发工程师)简历.doc

    总的来说,李某作为一位资深的软件工程师,他的专业技能包括嵌入式系统开发、Linux环境编程、项目管理和软件工程等多个方面,这使他成为计算机软件行业中的多面手。他的经验、技术能力和职业素养都符合高级软件...

    程序员简历模板-软件工程师

    程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师...

    系统架构设计程序员向架构师转型之路

    系统架构设计程序员向架构师转型之路是一项艰巨但充满挑战的任务,涉及到技术深度、广度、沟通能力以及业务理解等多个方面。以下是对这一主题的详细阐述: 首先,我们要明确架构师的角色。架构师并不仅仅是高级...

    嵌入式软件工程师笔试题(含答案).pdf

    根据提供的文件片段,我们可以从中提炼出涉及嵌入式软件工程师笔试的知识点。考虑到文档是关于笔试题目的内容,所以知识点会包含C/C++语言编程、算法逻辑、数据类型、宏定义、结构体、位运算、数组操作、编译时和...

    嵌入式软件工程师常用工具软件介绍

    嵌入式软件工程师常用工具软件!

    嵌入式程序员面试必备

    嵌入式程序员是IT行业中一个专业且至关重要的角色,他们负责设计、开发和维护用于各种设备和系统的嵌入式软件。对于想要在这个领域找到理想工作的求职者来说,掌握相关知识并能在面试和笔试中表现出色至关重要。以下...

    嵌入式系统程序员 要点

    在本节中,我们将详细探讨嵌入式系统程序员所需掌握的关键知识点。 #### 二、C语言基础 C语言是嵌入式系统开发中的主要编程语言之一。对于程序员而言,熟悉C语言的基础语法和高级特性至关重要。 1. **预处理器...

    c语言嵌入式系统开发

    C语言嵌入式系统开发是一门专注于使用C语言进行嵌入式系统编程和开发的技术领域。嵌入式系统是安装在特定装置中的专用计算机系统,它们通常被设计用于执行特定的任务,往往控制和管理机器或设备。嵌入式系统无处不在...

    嵌入式软件工程师简历范例.doc

    3. 项目管理知识:嵌入式软件工程师需要具备项目管理知识,如项目文档编写和编码测试、项目最后阶段做好系统功能测试、发现问题及时记录并设法解决、解决不了的问题及时上报等。 4. Linux 服务器维护知识:嵌入式...

    嵌入式软件工程师笔试题

    从给定的文件标题“嵌入式软件工程师笔试题”及描述“嵌入式工程师软件笔试题,结合硬件和软件,应聘有用”,我们可以提炼出以下关键知识点,这些知识点对于理解和准备嵌入式软件工程师的笔试至关重要。 ### 嵌入式...

    程序员以及嵌入式的一些学习建议

    本文将给出程序员及嵌入式的一些学习建议

    嵌入式程序员应该知道的16个问题

    嵌入式程序员应该知道的16个问题,面试笔试好助手。

    嵌入式面试资料(嵌入式程序员面试须知)

    嵌入式软件开发与普通桌面软件开发的主要区别在于: - **资源限制**:嵌入式系统通常资源有限(如内存、CPU速度等),因此需要高效利用资源。 - **实时性要求**:很多嵌入式应用对响应时间有严格的要求,需要实现硬...

    C&C++嵌入式系统编程.pdf

    2. **经验丰富的嵌入式系统程序员**:已熟悉嵌入式硬件和软件开发,寻求深入理解和解决关键问题的参考。本书的高级章节将作为这类读者的宝贵资源,帮助他们应对复杂的项目挑战。 ### 作者背景与写作动机 Michael ...

    嵌入式系统高级C语言编程

    在讲解过程中,本书并非从理论层面出发,而是以真实项目中的代码案例为基础,深入剖析嵌入式系统编程中的方法、技巧以及可能遇到的陷阱,旨在帮助程序员更高效地解决开发中的问题,并提升编程能力。 书中内容涵盖了...

    基于ARM的嵌入式系统软件设计

    在嵌入式系统领域,基于ARM架构的处理器广泛应用于各种设备,从智能手机到工业控制器,其软件设计是一项关键任务。本文将深入探讨基于ARM的嵌入式系统软件设计中的核心概念和技术,包括启动代码、实时操作系统(RTOS...

Global site tag (gtag.js) - Google Analytics