随着 Android 大行其道,目前国内也有越来越多的企业投身其中,而从企业的招聘与人才缺口的观察中,还是让我找到了那么一些不同。也比较好的解释了为什么现在企业很难招到 Android 高端人才,而又有一些 Android 开发者面对着高薪也不愿意去企业内就职。
首先我想明确一点,那就是招聘和应聘这回事,其实是一个互利的过程,企业需要有人来为其项目进行服务,而开发者也希望通过自己的劳动,来为自己谋取福利。当双方通过协商达成一致后,招聘就成立了,而目前的主要问题,并不是协商,而是信息,双方需求信息的可靠性,对对方需求的理解情况,将直接导致一次招聘的成败。
我的 gtalk 上有很多猎头,有很多都是专职做移动互联网方面的推荐的,从这一方面来看,也可以说国内移动互联网发展得如火如荼吧,也有一些猎头是有技术背景,很有经验的。通过与他们交谈,我大致可以提取到以下的一些企业需求:
1) 三年以上 Android 开发经验
2) 曾经独自完成过一个较大型的项目,例如微博客户端,手机阅读器等
3) 精通 Java /J2EE 开发
4) 熟悉 Android 系统构成,熟读 Android 源码的优先
5) 可以把 Android 程序界面做成 iPhone 那样的优先
6) 能破解,修改他人程序的优先
而从我自己与业内的开发人员交流,以及我面试到的人才来说,也可以大致提取出人才对企业的需求
1) 薪资位于行业内中高水平
2) 能按自己的想法编写代码,不要有过多的限制,特别是不要强迫写文档
3) 在想做一些自己的研究的时候,可以占用上班时间,甚至停下手里的工作
4) 有一个自由上国外网站的环境
5) 做过一阵子之后,可以不再写代码,转做管理
简单的对比一下,身为开发者的你是不是觉得有些招聘需求很无喱头,不屑和这样的公司为伍;或者身为 HR 的你觉得开发者要求太高,要在简历筛选的时候先扔掉他们的?在这种情况下,人才能够适配到适合的岗位,几乎就是梦话。
下面我简单的分析一下企业的需求。
一) N年的经验到底重不重要?
谁都知道 Android 是一个新领域,它是 2008 年底才兴起,并被人广泛得知,现在是 2011 年底,正好三年,难道你想招一个从 2008 年就搞 Android 的人?这样的人并不是没有,但是也不多。因此 Android 领域内的招聘,凡是遇到“三年”这个需求的,也就固定了猎头只能找那些人。其他的 Android 工程师,没有三年那么久的经验,但是并不代表他们写不出优秀的应用。说到底 Android 开发并不困难,我在盛大做 Android 培训数十期,也遇到过不少完全没有编程基础的人,一周培训可以通过考试,然后再一个月进项目组开发实习,出来后换岗直接做公司项目,现在也做得好好的。关键问题在于有没有学习欲望,愿不愿意提升自己,经验可以让一个人在遇到某些特定问题时,快速拿出解决方案,减少一定的成本,但是有的时候,经验也会固化一个人的思想,使他不愿往新的方向走。我需要有经验的人,但是我更需要勇于创新的人。
二) 独自完成大型项目指的是什么
我曾经写过一篇文章,说骑士作战和兵团作战的。虽然目前的移动互联网世界里,越来越适合单兵作战,但是同样也不应该抛弃多人合作的模式。往外说开,Android 也不是一个人“独自”完成的。另外什么是大型项目,在这点上完全没个准,微博客户端是大型项目吗?阅读器是大型项目吗?可以是,也可以不是。在我的理解上,一个项目只要包含明确起止时间,有具体详细的需求和策划方案,有成果时间约束性,有组织架构,那么它就是一个大型项目。这样的东西一个人能完成吗?我不排除这个可能性,但是很难。一般情况下,企业需要了解的,是一个开发人员对代码的掌控能力,不妨将这一条改为“代码掌控力5万行”或是其他。
三) 精通 Java / J2EE?
虽然 Android 是采用 Java 作为其主要开发语言,但是要求精通 Java 或 J2EE,这着实有点扯蛋。移动开发的思想和 PC 或服务器的开发思想几乎完全没有一致性,精通那些做什么,不如说熟悉 Java 语法来得实际。至于说 J2EE,和 Android 更是半毛钱关系都没有。说到这里,还得再提一下,有一些企业招聘时,会附加说有 C 语言经验的优先,这是对的,一个精通 C 的人,的确可以在 Android 下大有作为,虽然他们写的东西往往用户看不到。举个简单的例子,加解密模块,当然用 Java 也可以写,但是用 C 写可以大幅提高性能,你是用户的话,你会选性能高的还是低的,不用说了吧。另外就是 C 拥有***的可移植性,这点也不用说了。
四) 熟悉 Android 架构和源码
我想这点不用说了,可以说是业内的共识,如果自己没下载过 Android 代码,没编译过 Android 系统,那还是花点时间自己研究一下吧。唯一让我不爽的地方,就是很多企业口口声声的要求开发人员熟读 Android 源码,可以在源码基础上做修改,但是连一台 Linux 都不给配,难道让人都去折腾 CygWin?
五) 把 Android 做成 iPhone?
每当我听到这种需求,我都会忍不住想骂人,想把程序做得像 iPhone 的界面,为啥不直接搞 iPhone 开发,非要在 Android 上折腾那些,搞得一点个性都没有。以上只是我个人的看法,当然我也承认 iOS 在很多方面的确做得很好,值得学习。但是有一点始终请你记得,移动设备不是 PC,在 PC 做开发,你可以做到 Windows,Linux,Mac 各平台行为表现都一样(如 Eclipse),但是在移动设备上,应该尽可能的发挥平台特性,让用户觉得他购买的设备物有所值,追求几个平台表现形式一样,硬要把 Android 搞成 iPhone 的,我只想问你们,它们真的一样么?
六) 会破解和修改
这是我听到的最无喱头的招聘需求了,也许是中国特色吧。很多猎头给我打电话,问着问着就会提到,“你会破解软件的吧”,“你有没有做过给一个已经发布的软件加上自己的广告啊”诸如此类的话。我就不明白了,这种技术不是应该被封印的么?行业里面用破解手段的,仅仅是为了学习研究,如果用来取消他人的收费限制,或是反编译后恶意修改,这不是一个正当的技术人该做的事。作为我个人来说,我鄙视这样的公司,但是我也无法阻止,或许你作为一个开发者,在应聘的时候看到这个需求,你知道怎么做。Google Group 上曾有人这样说,“虽然我能力有限,也没做过什么好产品,但是我的每一行代码都是自己写的,光凭这点就比国内很多公司强”。很多人并不明白代码在开发者心目中的地位。
好了,说完了企业,再说说开发者吧,不知你有没有发现一个现象,就是越来越多的开发者,都不再趋向于写代码,而且趋向于“指挥他人写代码”。也许是因为写代码太累,或者是不想老是受人指挥,又或者是觉得自己的年龄不再适合,总之会有一个理由。但是从我个人来说,我还是偏爱写代码,与策划斗,与测试斗,与电脑斗,其乐无穷。
#p#
下面来说说开发者的需求吧,与企业的完全不一样,也许企业的招聘人员,真的该看看什么是应聘者真正的需求。
一) 薪资待遇
一个开发者不要高薪,几乎是不可能的,应届毕业生做 Android 开发,往往也能拿 8~10K,足以证明这个行业有多火(当然你也可以说它是泡沫,我不反对)。这个我不想多说,要求高薪是对的,当然前提是自己清楚自己的能力,如果你说你刚学 Android 开发一个月,连 eclipse 都配得不熟练,就想要 20K 的工资,那我只能对你说,have a good day dream :)
二) 按自己的想法写代码,不写文档
的确,做开发的都比较随性,就拿我自己来说,我很有可能一整天什么都写不出来,也有可能啥时灵感来了,两天两夜不睡觉也要把东西写出来。所以对于开发者来说,一定程度上的自由很重要。如果一个项目只有你一个人做,那么想怎么写代码都随你。但是对于一个需要多人合作的项目来说,完善的代码规范和文档也是有必要的,它可以帮助到以后的维护。开发人员不愿写文档是不对的,毕竟没有人比身处前线的更了解每句代码的作用,实在不愿写文档的,也把注释写得漂亮点吧,省得以后麻烦,如果文档注释都不愿写的,那你还是自己写个应用传Market吧。
三) 可以占用上班时间做自己的研究
其实现在允许员工这么做的公司不少的,所以基本上不必担心,当然这还是有前提,就是在你已完成了当前自己手头的工作,拥有空余时间时,可以这么干。要说停下手里的工作来做自己的研究,这就比较难了,先看看自己遇到的是什么主吧。做个广告,盛大创新院是鼓励员工这么干的,100%的时间都可以用来做自己的研究,而且创新院也有很多 Android 项目,非常棒。
四) 自由上网
相信这点也不需要多说,国内的网络环境大家有目共睹。对于这样的要求,企业有什么理由不满足呢?我以前也待过一个完全不允许员工上网的公司,生不如死。对于现在的移动互联网企业,没有网络还做啥事?曾经有人跟我这么说过,“连个 Android SDK都下不到,这样的公司还做啥开发”,“不给我上 twitter,钱再多有屁用”,这虽然可能是一时冲动或是面试时受了点气才说出来的话,但是目前开发者对网络的需求,的确日益强烈了。
五) 要求有转做管理的机会
其实这点我很能理解,因为我也是从这条路走过来的,被策划和测试压着通宵加班并不好过,我也曾经很想很想跃升比他们更高的职位,然后把那些欺负过我的人全炒了。但是当我真的坐上了经理的位子,手下有了一班人之后,我开始理解最初身为程序员的那些事。其实说白了也很简单,因为公司要项目,项目就要人来做,项目组里有各种各样的人,有各种各样的沟通问题。开发的人往往理解代码很在行,但是理解需求却往往不那么顺利,一趟代码写下来,与需求往往有出入,这能不改吗?也难怪策划和测试要盯着了,大家都承受了压力。相信你在网上也看到过很多描述程序员悲惨生活的恶搞图片,而事实上,程序员要的并不是那个管理职位,而是要一个有人倾听,认同其发言的机会,他们也需要被尊重。
对于企业来说,一个合格的 Android 开发人员可能是这样的
1) 熟悉 Android 框架,阅读过 Android 源码
2) 熟悉 Andorid SDK,特别是网络,线程
3) 有较强的代码掌控力
4) 懂一点 NDK 或 C (精通就更好了)
5) 使用 Git 来管理代码
开发者的需求总结起来也很简单
1) 符合自己能力与产出的薪资待遇
2) 一个能够发挥自己能力,且受到尊重的环境
3) 可以满足自己学习、提升能力的愿望
4) 优秀的网络环境
到了这里,身为开发者的你,是不是觉得企业的需求其实也不那么扯蛋;身为 HR 的你是不是觉得开发者也挺可爱的。
回到一开始说的,招聘和应聘是一个互利的过程,企业需要想清楚自己要什么,能给什么,想清楚自己的发展计划,千万不要为了与同行抢人才,提出各种不合理的需求,比如说明明是做客户端的,却说要有 ROM 开发的经验,这样会把人吓跑,就算招到了人才,他也会认为自己不受重用,对企业越来越没有信心。而作为开发者,要明确自己的能力,做好自己的职业规划,没有哪个企业愿意招一个光说不做,或是不知道什么时候就跑路的人。
在当前移动互联网越来越火的情况下,无论企业或是开发者,都应该明确的想清楚,自己想要什么,想做什么,以靠谱的信息进行人才资源的交换及利用。不浪费人才,不恶意竞争,给予良好环境,给予尊重。