我眼中的Embedded Software

avatar 53582
iceman
14941
28
[align="center"] [/align][align="left"]一转眼加入微软已经半年了,回想在美帝的第一份fulltime和第一次跳槽,有很多体会,希望在地里和大家分享。[/align][align="left"] [/align][align="left"]首先介绍下背景:LZ 本科毕业于985/211AAE相关专业,MS毕业于Purdue方向CE;在美帝最大的汽车电子设备公司工作一年半后加入微软。[/align][align="left"] [/align][align="left"]Embedded Software 是啥?广义上说,除计算机以外的所有具有计算能力的针对特定需求的设备都是嵌入式设备,为其开发的各层软件都属于embeddedsoftware。一个典型的例子就是在各种可穿戴设备上运行的驱动以及应用程序。desktop/laptop/tablet不属于embeddedsystem,因为它们是“通用”计算设备。[/align][align="left"] [/align][align="left"]针对embedded systemembeddedsoftware 开发与基于PC/server的软件开发有啥不同?从LZ自己的实习、工作经验出发,区别主要有:[/align][align="left"]1. 1. 在硬件层面,嵌入式系统的硬件资源比计算机要少得多,并且往往具有特异性;因此embeddedsoftware的开发总是紧密围绕着具体硬件展开的。这也要求embeddedprogrammer对硬件有基本的了解,尤其是驱动程序的开发者。[/align][align="left"]2. 2. 在操作系统层面,最常提到的概念是RealTime Operating System(RTOS),强调OS稳定可靠地处理实时任务的能力。例如LZ毕业后的第一个project就是为embeddedcontroller开发API,所用的RTOS是WindRiver提供的。该RTOS没有友好的用户界面,更不支持app开发,但能确保在各种恶劣条件下稳定地运行,响应多路高速输入信号并支持实时API完成多种控制信号的输出。[/align][align="left"]3. 3. 在应用层面,app开发与iOS/Android类似,但不一定采用以上两种OS。LZ曾做过一个为infotainmentsystem搭建app framework component的project,所用OS为embeddedLinux,通过与Google,Pandora等公司联系我们可以获得许多热门app的APIset,然后将它们引入我们的平台。[/align][align="left"]
[/align][align="left"]总的来说,LZ接触到的embeddedprogramming相对“一般”计算机程序更注重实时运算(快速处理大量实时信号/任务),注重可靠性(高温、严寒、震动、冲击、电磁噪声不能影响核心功能的正常运行),注重自检测与异常恢复能力(试想飞行导航系统在起降途中蓝屏并要求重启。。。),主要使用电池的系统严格限制功耗和热控,采用的数据结构和算法的复杂度相对较低。[/align][align="left"]
[/align][align="left"]LZ来Purdue刷MS时,ECE下有8个方向,几乎覆盖EE/CS所有主要领域,而且新生可以自由选课,为何LZ要选择embeddedsoftware而不是当时很火的cloudcomputing/big data/digital design呢?主要是LZ根据自己的背景和兴趣决定的。由于是AAE半路出家,因此一些ECE/CS的核心课程,如操作系统和编译器,本科阶段LZ根本没碰过,来了美帝后才一点点自学;另一方面,本科专业涉及到一些嵌入式领域的东西,而这也正是LZ的兴趣所在,因此还申请并完成了校内的科研训练项目以及校外的外企研发实习,主题也都是embeddedsystem。 最后借此在美帝成功拿到第一个fulltimeoffer,算是没白学~~[/align][align="left"] [/align][align="left"]说到本科专业,还是想多说两句:AAE相关的专业申请出国确实不是捷径:签证的高check概率就不提了,最棘手的是许多AAE领域的知识到了美帝容易成为屠龙之技:美帝AAE工作民用领域往往要求greencard,军用领域要求citizenship,“对口”就业不但比不上CE/CS,甚至难于其它理工专业。话说回来,也正是由于我进入一所好的大学的好的AAE专业,才让我很轻松的找到Honeywell(和学校有长期合作关系)的研发实习,这对我日后留学申请/找工求职帮助很大。[/align][align="left"] [/align][align="left"]在embeddedsoftware 领域混,需要哪些技能呢?编程语言最简单,C足矣。偏底端的firmware/BSP的开发懂点汇编更好,偏应用的会基本的C++,Javascript/python就行; 算法导论恨不得看到chapter12就够了,那些所谓的高级算法、数据结构日常工作中基本用不到。硬件方面需要有数电/模电基础,能看懂简单的电路图。[/align][align="left"] [/align][align="left"]找工作刷题?当然是需要的,不过相对于面向计算机编程的职位,embeddedsoftware 面试的准备不需要浪费太多时间啃复杂算法题,对LZ这样非科班出身的CE/CS要轻松得多。网上刷题我首推geeksforgeeks.orgleetcode.com,我面过并且拿到offer的一些大公司,包括Microsoft,Broadcom,Tesla等等很多我遇到的面试题都能在上面找到原题或变形(embeddedsoftware方面)。另外LZ在准备技术面时的一些参考资料已经附在本帖末尾(很多大附件禁止上传。。。)[/align][align="left"] [/align][align="left"]LZ为啥跳槽到微软?主要是气候的原因。LZ留学和头一年工作都在midwest,主要特点是地势平坦,民风淳朴,原先公司的manager也非常nice,无论是日常工作还是绿卡申请都很支持;夏天气候凉爽,百花盛开,秋天同事还会带各种自家种的新鲜蔬菜来分享;中西部的生活显然不是纽约,芝加哥的大都会模式,家家独门独户,大树环绕;LZ经常在自己公寓的空地上看到鹿飘过啊有木有!![/align]
[align="left"]然而LZ来自天朝东南沿海某小渔村,对于midwest冬季常见的风雪和低温实在是累感无爱,加上总是没有新鲜海鲜,因此还是决定跳到西海岸。Seattle的天气还是比较令人满意的,传说中的阴雨主要集中在冬季,夏季和秋季总是云淡风轻,适合各种户外运动,LZ第一次来就喜欢上了这种感觉。LZ在拿到Microsoft的onsite前刚刚拿到Broadcom的embeddedsoftware offer,但考虑过后还是婉拒了,主要原因就是到SanDiego面试时那种潮湿的空气让LZ有一种生活在泳池里的感觉。。。[/align]
[align="left"]最后提到Microsoft的绿卡政策,毫无疑问是所有公司里最好的之一,入职2月后就自动启动整个流程。不过具体到绿卡类别,有一点工作经验再跳槽如微软比毕业直接入职有明显优势:微软内部决定EB2/EB3的主要是manager拍板的jobdescription以及min requirement,默认的类别都是EB3;LZ因为之前在中西部的工作经历,递交laborcertification时JD和skillset很好写(为萝卜量身挖坑的过程),加上manager支持就按照EB2提交了;LZ在内部DL也了解到一些case因为申请人直接进的微软,导致skillset太普通,在laborcertification中fail不得不从来一遍的例子,以及一些manager以之前组员都是EB3为理由不愿意支持EB2的;总之还是要抱着waitand hope的心态享受生活吧。[/align][align="left"] [/align][align="left"] [/align][align="left"] [/align][align="left"] [/align][align="left"] [/align][align="left"] [/align][align="left"] [/align]
文中含有App暂不支持的附件,请到论坛下载
  • 45
28条回复