用Vim开发 : 格式化代码  • • •  From Tomboy to EverNote       all posts in Archive

Hire Programmer

招聘是一个很大很大得话题,不是我能说清楚的。这里只是试图整理一下我个人,到目前为止的一些所观所感,以供自省,顺便抛砖引玉。

招聘是一个公司根本的基础

对绝大多数IT公司来说,它的名气规模并不重要,工作流程也不重要 ... 只要选对了人,就一定能干出成果来的。人的问题是所有的根本,一切的一切,各种各样的乱七八糟的管理方法,都几乎是为了解决没有合适的人造成的,至少对于软件公司来说是这样。最“合适”的人在一起时,一切自然而然就发生了,根本不需要管理,这应该是管理学的 “共产主义”。当然这种事,只在极小的团队,在较短的时间内发生过。对于绝大多数公司,绝大部分时间,还是要面对鱼龙混杂的人员组成。

但是不论如何,招聘本依然是所以公司的重中之重,只有找到了合适的员工,才有可能成功。但是好多公司似乎并不“真的重视” 招聘这件事。至少我看到的,好多公司的行政部门,总是一些不像是“服务人员”的行政,更像是四大天王般的门神。成天摆出老长的马脸,招聘时一心考虑的只是压低求职者的价码,没有真心考虑选择合适的人,招聘流程也不重视细节。殊不知,招聘其实就是公司的一个微缩广告,在现在咨询如此发达的社会,弄得不好损失可能很大。

特别NX的公司招人是很用心的,招聘流程很细致,而且要求也很严格。记得曾看到 Facebook 的招聘,通过了层层面试,在试用期也中规中矩,没有任何问题。还竟然会因为 “没有突出的特点” 被请走。有的大公司,招聘面试可以是整整2到3天的时间。小公司当然没有这样的条件了,嗯,准确得说应该说有资金压力的小公司。通常能找到还行的人就要谢天谢地了,想直接撬到成品玉器更是难上加难。如果是初创的公司,急需人才,应该在资金范围内宁少勿滥,优秀得小团队,生产力和想象力可能是超过预期得。其他的公司更合理的考虑应该是培养优秀人才,不过虽然玉不琢不成器,选到优质的石胎也是极为关键的。不论如何,招聘总是要靠做的,想不能解决任何问题。

招聘程序员究竟难在哪儿呢?

工作了十年也不代表就成为了资深程序员; 面试时犹如“蜜月期”,应聘者通常不会主动暴露缺点,不懂也会装懂,让你不容易看清真实;还有些如工作热情,思维方式等很抽象但其实很重要的东西时很难看到的 ...

我没听到过、看到过有人有完美解决方案的。但应该注意些什么呢?

首先要有合格的面试官

招聘对面试官本身有很高的素质要求:人品好,知识丰富,性格要稳重。汤姆・迪马可说过,招聘是一个靠感觉的工作,需要依靠直觉做出判断。毫无疑问面试官是要有很深底蕴和经验的,要不这个感觉的偏差值可能大得离谱。世事险恶,没有趟过浑水,如何能直面惨淡得人生。当然可不是说面试官一定要比应聘者强,如果公司永远招不到比面试官强的员工,那也是悲剧收场。

可是毫无疑问面试官本身是有基本的素质底线得,试想一个不及格的面试官怎么能发现比自己更优秀的人才。在决定一个人是否适合作为面试官,应该要有相应得考核。但不是说这个“考核”要如何制度化,但所有得面试官至少应该有相对统一得培训,他们应该有一个相对统一得标准,至少应该有统一得礼仪表现。如同前面说的,招聘过程本身就是一个微缩得广告,是否能提供统一优质得招聘体验,也是决定一个公司优劣的标准。

我们要找什么样的人?

毫无疑问,人和人是绝对不同的。每个人的经历不同,知识结构不同,导致认知也不一样,分析问题解决问题的思路也会迥异。每一个特定的团队,可能也需要不同类型的人。“需要找什么样的人”不是说要弄个死标准,搞得人热都像是模子倒出来的。但是毕竟有些特点是相同的,譬如怎么样的人才能适应公司的气质,是否有正确的学习方法,对新鲜问题求知的激情如何,是否懂得思考和善于沟通。

另外还应该避免的是将自己公司的技术,经验拿来套在应聘者身上。人不是流水线上的零件,不能够满足统一的规格。所以我们不应该要求被人会自己熟悉的东西。必须要让应聘者成为主角,让他们展示出自己的特点和长处来。

以我的观点来说,性格最重要,然后是对软件开发的态度,然后看学习能力,表达能力,最后是掌握的技术。

不为别人招聘

当某个团队需要人手时,必须由这个团队来做面试。因为团队本身的唯一特质,是不是能适合它,其他团队的面试官又如何能知道呢?如何感觉呢?

不幸我已经碰到几次这样的情形,就好像是Blind Date一样,你得怀着忐忑的心期望出现惊喜。如果连试用期都没有,那更是包办婚姻!哭都哭不出来。最无奈是,有些人是由高层或是某些资深人士认为“很有能力”的,如果你遇到一些“办公室政治”,能不能诚实的讨论应聘者的考核结果可能都是问题。

公司必须有统一的招聘思路

还是上面的问题,实际情况呢,你并不能保证总是由自己面试自己需要的人。如果真是不得已需要其他面试官帮忙,那么大家必须要有统一的思路,我们要找的是能编码的人,还是能思考的人?我们要的是勤勤恳恳的劳模,还是思维跳跃的突击手? 在面试时,究竟是要考察知识的掌握水平,还是学习能力? ... Team work , 就一定要 Team 起来,大多数公司的招聘团队都只是各自为阵而已。

另外就是行政,他们是面试的第一道关卡。常常看到的是,公司很重视让开发部分参加新管理模式的培训,但是行政部门还是在老思路下工作。这会造成许多不必要的误解和分歧。

电话面试

说到具体的面试,电话面试感觉应该是不可或缺的一环。大家工作都很忙,为了提高效率,先用电话面试进行过滤是不错的选择。不过电话面试如何做,是值得深思的问题。我觉得不应该纠结在技术细节里,毕竟代码不是靠说出来的,而是更多考察本人的沟通能力并确认求职者的意向是否符合职位需求。

认真阅读简历

简历依然是极其重要的,对于求职者的第一观感。以前我们说 “见字如见人”,当然几乎简历都是打印的了。可还是同样功效,简历是否美观?是否言简意赅,但切入实际?是否错字满篇?是否虚报实情? ... ...

简历这是一面镜子,不诚实的人,是绝对不能录取的;不重视简历的人也不可能脚踏实地的工作;不善表达和沟通的人,很难成为称职的程序猿。

简历不好,最严重可以直接不必专门花时间检查了。

经验不能代表能力

国内程序猿们比较看中职位。工作一段时间后,往往会纠结于 Junior,Senior 这样的头衔 (当然这也是国内的国情,头衔常常和金钱有明显的关系)。

可是,一个工作了5,6年,或者有10年工作经验的人,就理所应当的有了Senior这样的资格嘛?很明显不是。在面试时,一定要区分对待不同层次的应聘者, 他们的考核点应该是完全不同的。对于 Senior ,倒不是说他们理所应该比 Junior 知道更多的技术细节。当通常他们都有更广的知识面,更有效的工作方式,更良好的沟通技巧,更正确的学习方法,更勤于思考。

软件开发的热情兴趣考察

对于工作的热情,是一个人能持续提供可靠工作的保障。一个对软件本身不热爱的人,很难走得长远,也很容易带给团队负面的影响。

倒不是说最好的候选人对其工作的所有方面都充满激情,但是面试过程中,这点很难忽略。当提到令他们充满激情的话题时,即使很内向的应聘者也会跟你滔滔不绝。如果不是这样,那么,很可能就是 “哪儿” 出问题了。

如何判断是否有兴趣呢?方法还是很多的,比如问问他读什么书?

你见过几个人是读着大学 “谭浩强” 教程成为高手的?反正我没有。如果有人告诉你他精通XXXX语言,却连一两本经典著作都没有读过,自己摸索着就成为了高手,那么极有可能属于特殊人才,要走特殊流程才行了!

有一个面试方式一直很想试试,就是找到一些你和面试者共同看过的 “名著” (电话面试时便可以确定这个事情),然后到了面试时,直接根据书本身寻找面试问题,这样可以有效的隔离, “背面试题” 的混珠者一定会被将一军。可以针对面试者的经历准备话题,有的放矢。

还可以看看他在下班后都干了些什么  ... ... FBI? 当然不是,所以问话是有技巧的。

一定要写代码

对于 Junior 如果不考察编写实际的代码,是一次不成功的面试。倒不是说一定就是要上机,一些简单的小程序,用笔和纸也应该是能写出来的 (不是伪代码)。当然有机器就更好了,能看出更多的东西。可以写的东西很多,比如经典算法拉,也有类似 Buzzfuzz 的小程序 ,顺手便应该能写出来。 也可以自己设计小程序,根据难度安排半个到一个小时,让面试者可以上网查找资料,看看他如何工作。

对于 Senior 的应聘者,是否需要这样,仁者见仁。不过提供编程代码的方式很多,例如现在国外流行的 GitHub。如果无法提供代码,那么对编程思维的考察还是必要的。如果有人因为自恃身份,而不配合,可能不是你想找的工作伙伴。

团队面试

在面试时间充足的情况下,才可能考虑。不是让团队成员都去当面试官,而应该想办法让应聘者直接跟团队成员做Pair,让大家对面试者有直观的感受,得到一些真实环境中的判断。

试用期才是招聘流程的‘真’开始

最后,面试流程只是招聘流程的开始而已。不论如何面试,都有遇人不淑,看走眼的时候。

少说废话,在试用期见真章吧,好好制定一个试用期计划,一切细节都能够无处遁形。

这又是一个大话题,再说吧。