原载 http://zhouping62.blog.sohu.com/120392067.html

这十年来我一直需要做面试工作,有些年会面试两三百人,少的年份也要面试一百来人。我的工作领域是手机的软件开发,面试的对象是嵌入式软件工程师。这篇短文是为想在“嵌入式软件开发”领域找工作的朋友写的。

作为面试人,我需要在短短的几十分钟的谈话后做出决定。要平衡的是两件事:一是不能漏掉适合于团队的优秀人才,二是需要把不适合(*注1)于团队的人才挡在门外。

对于“合适”与“不合适”,我是考察标准是什么呢?我们找的是专业人才,我会把技能放在首位。技能一般通过简单的测试来了解,判断具备必要的技能后,我会考察个人的追求是否与公司的近期目标匹配、个人能否做到实事求是、沟通合作能力以及应对逆境的能力。

这里只谈“技能”、我把“嵌入式软件开发”工程师的技能分两个方面考察:一是基本技能、二是专业技能。

如何考核基本技能呢?优秀的软件工程师需要具备许多许多基本技能,我重点考核三个方面:

1. C语言

2. 数据结构

3. 操作系统

对于驱动软件开发工程师,我还会考核几个简单的硬件知识。在我看来,这三个方面的技能是做嵌入式软件最起码的底线。这些方面扎实了,公司招进来才具备培训、培养他/她最起码的基础。我面试了接近二千人,录取率在百分之十五到二十之间。在拒录的朋友当中,有接近90%是因为这三个方面不理想,特别是C 语言。

我的标准严了、偏了吗?或许。试题用的是Nigel Jones《想成为嵌入式程序员应知道的0x10个基本问题》里的16道题、原封不动,再加上二个《数据结构》、二个《操作系统》方面的题目,还会问几个GSM协议的简单问题。不幸的是,很多自以为C语言很强的朋友都很少能够答对一半。

举个简单的例子,针对下面这道题:

2. 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

我看到的答案千奇百怪,两个典型的错误答案是:

#define MIN(A,B) (A <= B ? A : B)

#define MIN(A,B) (A) <= (B) ? (A) : (B)        /* 注2 */

写成后一种形式的朋友,有的甚至在嵌入式开发领域工作了五六年。这种类型的错误,编译器是查不出来的。这么一个问题埋在一个大的系统中,就可能出现某个问题。这个问题有时复现、有时不复现,通过测试来找问题的根源,可能一个星期、两个星期都找不到问题的根本原因。

我的结论是,不管是新毕业生还是有工作经验,许多朋友的C语言功底其实并不扎实。尽管许多公司都有自己的《代码规则》(Coding Rules),其实自己并没有用心去理解这些规则的所以然。

换位思考一下,如果我找进公司的人都是向上面的例子这样写代码的人,团队交付的代码中,会有多少炸弹,又要浪费多少测试力量呢?用这样一个例子,我想说明的是C语言、数据结构和操作系统这三项“基本技能”对于嵌入式软件开发工程师来讲十分重要,应该高度的重视。如果把嵌入式软件开发比作一个美丽的公园,那么这三项技能就是进入公园的“门票”。只有拿稳了这张门票,才能够得到入园的资格。

任何一项技能都是练出来的,对于刚毕业的本科生或者硕士生朋友,如果学校课程或者毕业课题中里安排用C语言开发的工作较少,出去应试之前,自己一定要做够充分的练习。我觉得一个较好的方法是把《数据结构》中讲到的所有算法,自己用C语言去实现一遍,要看到自己程序运行出正确的结果。还有一个比较偏门的方法是自己用ANSI C把常用的库函数亲手实现一遍。这样最起码能够把C语言掌握得好一些。当然,如果能够参与到某个开源软件的开发项目中去,就可能得到更加实际的锻炼机会。

今天聊的是基本技能。以后找时间聊专业技能。

注:

1.对于找工作来说,我的看法是:世界上没有不合格公司,也没有不合格的人才;适合于自己的公司就是合格/优秀的公司,适合于公司里那个团队的人才就是合格/优秀的人才。

2.试想用

d = MIN(a,b) / c ;

来调用这个宏时发生的结果。

参考:

1.Nigel Jones:《想成为嵌入式程序员应知道的0x10个基本问题》http://forum.handheld.eetchina.com/FORUM_POST_1000039272_1200006385_0.HTM?click_from=ForumAlert

嵌入式软件开发——嵌入式软件工程师:就职的“门票”相关推荐

  1. 嵌入式软件开发学习 工程师要掌握的基本技能

    嵌入式软件开发到底是什么一个概念,总会有人觉得它是一个很深奥的一个课程,它是否是比软件研发更加有发展的趋势呢?嵌入式的开发总的来说是一个整合能力的,需要学习者有一定的知识逻辑水平.由于嵌入式系统是一个 ...

  2. 【笔试题】嵌入式软件开发——嵌入式软件工程师经典笔试题

    从CSDN各个博客上摘选的一些容易做错的嵌入式软件的笔试题,做一下记录,让自己记住. 文章转自:嵌入式经典面试题. 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) ...

  3. 嵌入式软件开发工程师谈软件架构的设计

    嵌入式软件开发工程师谈软件架构的设计 注:此处嵌入式特指基于linux平台,单片机和其他rtos不在讨论范围 笔者从事嵌入式软件开发有6,7个年头,bsp,驱动,应用软件,android hall,f ...

  4. 嵌入式软件开发工程师求职要求

    文章目录 他人感悟 工作职责 任职要求 嵌入式软件开发涉及的知识点很多,我仅简单说一下: 他人感悟 一线工程师告诉你嵌入式真实现状与发展前景 当我们谈论嵌入式时我们究竟在谈什么 工作职责 负责硬件平台 ...

  5. 嵌入式软件开发工程师面试指南_总结

    嵌入式软件开发工程师面指南 一.C语言 1.1.局部变量能否和全局变量重名 1.2.如何用C编写死循环 1.2.new和malloc 1.3.static的用法(定义和用途)(必考) 1.4.cons ...

  6. 嵌入式软件开发工程师就业发展前景怎么样?

    嵌入式技术虽然不是新兴的技术,但是随着科学的不断发展,嵌入式能应用的领域也越来越多,例如人工智能.互联网+等,这么说起来嵌入式开发工程师的就业前景应该会很不错,下面小编就具体的为大家介绍关于嵌入式软件 ...

  7. 2013年嵌入式软件开发工程师的薪资水平调查

    中国嵌入式软件产业的发展正面临着良好的发展环境与机遇,这包括政府的重视与扶植.信息产业与传统产业的融合机遇.垄断局面尚未形成.中国制造的良好基础.自由软件运动的兴起等等.同时,不可否认的是长期以来,由 ...

  8. 嵌入式软件开发工程师成长历程

    嵌入式软件开发工程师成长历程 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能 够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把 ...

  9. 嵌入式系统开发工程师嵌入式软件开发工程师

    嵌入式软件开发工程师 工作内容 从事数据产品嵌入式(底层)软件开发和设计工作: 负责数据产品相关软件子系统的方案设计: 负责数据产品相关的技术交流.标准及专利相关工作: 负责嵌入式软件系统的需求分析和 ...

最新文章

  1. Maven全局配置文件settings.xml 全解
  2. Keystone创建服务实体报错HTTP401和HTTP500
  3. Github标星86.4K+:常见数据结构与算法的Python实现
  4. Hadoop Yarn任务优先级(作业优先级、应用优先级)设置
  5. Qt Designer的UI文件格式
  6. batocera_batocera系统如何把旧电脑改造成影音游戏主机
  7. UDT协议实现分析——bind、listen与accept
  8. SpringBoot2.1.9 多数据源Mybatis—JDBC配置
  9. 用php实现随机点名,使用javascript做的一个随机点名程序
  10. python编程基础知识体系_【汇总】Python 编程核心知识体系
  11. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
  12. 简述ip地址的abc类如何划分_IP地址的ABC类划分
  13. swagger配置及注解详解
  14. RK3399驱动开发 | 09 - 基于RK808 PMIC的电源管理驱动
  15. 基于深度学习的多目标跟踪(MOT)技术一览
  16. Mac电脑搭建wordpress教程
  17. WhereDidMyTimeGo - 一款帮你记录每天的时间分配的MacOS app
  18. Apple Pay正式入华:能否成支付宝与微信强敌
  19. 阿里云物联网平台总结
  20. jsp程序设计(一)-jsp入门

热门文章

  1. Latex引入新宏包siunitx导致的报错:Command \fs already defined. \newcommand{\fs}{\CJKfamily{fs}}
  2. 洛谷 P1983 车站分级(拓扑排序)
  3. python使用scipy报错:“ImportError: DLL load failed: 找不到指定的模块”的解决方案
  4. 区块链创新论坛成“京交会”新亮点:思源推出创新区块链解决方案
  5. Redis--基础知识点--11--Geospatial
  6. Android 7.1 增加屏幕边缘滑动事件(手势滑动)两种方式(Back,Home,Menu功能键) 免开启无障碍功能
  7. PyTorch超级资源列表(Github 2.4K星)包罗万象
  8. 基于MFC使用HighSpeedCharting动态显示曲线中的鼠标问题
  9. Vue表格Table精美模板分享
  10. 智能家居DIY连载教程(2)——在实际项目中运用消息队列与邮箱