2017-07-21

面试

平时做项目,有时客户会要求签单之前对几个候选工程师/技术顾问进行面试,然后在合同中指定这一单由哪位来做。就面试这件事而言,我谈不上身经百战,但也算有点经验。

作为工程师/技术顾问,我也希望合作方聪明能干、容易沟通、大家能在差不多的思维水平上共同理解并解决某个问题。我个人偏爱面试方问一些比较实际、具体的技术问题。自己最喜欢的一次面试经历,倒并非是争项目,而是一次求职。

那次求职,第一轮是视频面试。一位工程师先问了数据库规范化和逆规范化的一些概念,规范化的优缺点,以及我在工程中会选择哪种范式?又问了一些基本的 Linux/Unix 操作命令,诸如 “你用什么 Linux 命令测试某个 web service 是否在正常运行中?” 最后出了个题目,让我在线编程解决一个小问题。整场视频面试我都觉得有话可说,虽然直说不懂怎样配置 iptable,还是顺利通过,被送到下一轮。

第二轮面试,一天之内由四组面试官车轮考试。 其中三组是工程师,一组是主管经理。当时我实在太想获得那个职位,准备其实还算充分,但是面试前几天一直心神不宁,太多憧憬和幻想,也担心落选后的去向。

第一场编程考试的第一题是写程序测试任意一个字符串是否为回文。其实简单到编程初学者都能解决。我在家练习的时候还做过一道差不多但难度更大一些的题。一边写代码还一边跟老公聊天,十分钟之内轻轻松松写出算法效率最高的一种解法。但是面试那天莫名其妙多用了一个 index,明显的 bug,5 秒钟就该发现的问题,5 分钟还未纠正。待到幡然醒悟,自知大出洋相,心慌意乱,后面真正考验编程功力的题竟没有在规定的时间内答完。

接下来三组面试官的问题也是聚焦技术层面,多是一些没有固定答案的开放式问题,看看我能说出多少种方案。面试中,考官们常常借题发挥,就我提出的某种方案深入问一些相关的背景知识、或者我的取舍理由。

整轮面试从上午 9 点不间断无休息考到下午 1 点,基本上我的技术知识面、思考方式、实际工作经验和沟通能力都有被他们以点带面考察到。最后我落选了,但觉得很公平。毕竟人家是业界最强门派,应征者中高手如云。我不光输得心服,还觉得他们那样复杂严格且马拉松般的面试既为那间公司选拔人才提供了比较科学的依据,也为每位候选人提供了比较充分的展示能力的空间,非常可取,值得别的用人单位借鉴。我自己在那次面试得到的教训就是,得失心不可太强,平常心对待,可能发挥会好一点。那次失败经验令我以后在面试之前都比较放松。倒不是我可以控制自己的情绪,想放松就可以放松(这我估计到老都很难做到)。而是经历过业界最严格的遴选程序后,对以后的面试多了点平常心。

后来有参加过欧洲某国央行的一个项目面试。该央行为某一个项目招人做事,居然对应征者数量也有要求。东家其实早有资深人选枕戈待旦,销售大叔把我的简历送去纯粹只是凑数,以便面试程序可以早日开始,合同可以早日签订。我自己对那个项目也不热心,因为又要出差,而自己的城市里又不是没项目可做。客户看了几份简历以后,也确实把我排在最后。我心知那个面试本来就是走过场,也就没有临时准备。

但是面试那天,客户准备的问题有一定的技术深广度,且派出的面试官是个技术派。他们的问题,以及提问时层层深入、循循善诱的方式,都比较类似我前面说到的那次业界最高门槛的面试。这令我深感兴奋,有点棋逢对手遇到知音的感觉。平时工作中积累的经验、从网上的课程和技术文章中得到的知识和视野,在兴奋心情的催化下,变成了口若悬河滔滔不绝。后来还是面试官打断我,说是时间到,我可以回去了。几天后销售大叔给我的上司写信说,纹锦本来只是去垫脚,但是客户最后选她,说她对业界的新技术有强烈热情,且对开源软件态度豁达,恭喜纹锦,本部门赢得此单,服务合同已经签订。后来那个项目中,宾主合作十分愉快,很快做出实际成果。

也有过令我感到莫名其妙的面试经历。

有一次求职面试,潜在东家是一间老牌技术企业,四位面试官也都是技术人员出身。面试一开始他们就问我以前做过些什么,要我讲讲我的人生故事。啊?!我心想,学习经历,工作经历,甚至做过的重要项目,平时业余自学的一些知识技能,甚至我的兴趣爱好,那些我都不是已经写在简历上了吗?你们是要我背诵简历吗?倒不是无话可说,只是我根本没有料到这种技术面试会要求我讲故事,一时都不知从何讲起。

我试图从大学生活开始讲,面试官们不时在一些在我看来跟那个技术性职位没什么关系的细节上纠缠不休。然后他们又开始研究我换过几次东家,以及每次为什么要换。我明白他们那样问的动机:谁家招人都喜欢找个愿意在东家长久做事的。但是,其实他们只要看看我的简历,毕业以后总共只换过两次东家,其中一次十分明显是因为搬家 700 多公里,这种问题他们完全可以省,省下时间问些更有意义的问题。

作为用人单位,面试中当然需要考察候选人的人品性格,团队合作能力,沟通能力等等方面。要考察这些方面,其实有很聪明的提问方式。我在别的面试中经历过一些十分聪明的 behavioural 的问题,心里就难免暗暗责怪那天的面试官们准备不够充分 :P。

然后他们又问我做工程都用过哪些编程框架,我写过的最大的程序大约有多少行。Fair enough, 但也都不是特别好的问题。一位工程师以前做过些什么会些什么其实并不是最重要,最重要的是他的学习能力和分析解决问题的能力。他有没有兴趣和内在的热情去学习新技术?他学新技术有多快?在一个错综复杂的问题面前,他怎样抽丝剥茧,层层推进去解决它?对于上面这两个问题,无论候选人答什么都不能很好反映他的这些重要能力。我都宁愿考官们出个实际的编程问题,让我现场写代码解决。

然后他们又问我是否知道 Scrum。Scrum 是一种项目管理方法,我当然知道。他们要我说说 Scrum。我不免思忖,我申请的是一个工程师职位,并非项目经理职位,他们为什么要那么问?是怕我不熟悉 Scrum 的管理方式而不懂团队合作吗?是怕我不够 agile 吗?我当下就说了一些 Scrum 的重要 practice,比如定时 Sprint,每日的例会,产品部件的小步长快速迭代等等。他们又问我以前有没有做过 Scrum 项目。“又来这套?!” 我有点不耐烦。其实 Scrum 没什么可多说的,无非就是合理分配工作内容,团队定时开会沟通各自进度。就算某人没有接触过 Scrum,培训 20 分钟应用两天也就大致明白了。它的那一套方法,其实也不必太过拘泥。如果团队技术能力够强,大家又都愿意积极沟通,都不一定要用任何正式的方法去管理那些工程师,他们懂得自己管理自己,且互相激励。一个项目成败的最关键还在于经手人的技术能力和哲学视野。经手人如果专业技能不够或者不懂取舍,什么管理方法都无济于事。于是我这样回答:“是的,我有做过 Scrum 项目。但是,我们最近做项目多用 DevOps 方法学,项目从头到尾都是持续集成、持续发布,用户和同事都是在 Slack 聊天室中持续反馈、持续沟通,大家一起持续学习,持续所有一切事。软件部件的迭代,各位工程师获得用户反馈并在同事之间互相稍作协调以后自己掌握优先级与进度。” 言下之意是,其实我和同事们做项目时运用的管理方式已经比 Scrum 更加敏捷快速了。

很快,45 分钟的面试结束,几乎没有一个问题是令我感到兴奋的。我也很快收到拒绝信。收到拒绝信我还很高兴: 太好了,省得我写信拒绝他们。

说回那个有关项目管理的问题。其实,有关项目管理的问题在面试中常常出现。个人比较喜欢的问法是:你认为在软件项目管理而言,最重要的是什么?我的回答是:一是团队的技术能力。技能暂时不够没关系,管理者要鼓励并组织大家积极学习,共同进步。另一个就是充分且富有建设性的沟通。至于这个沟通是什么方式,Slack 也好,Scrum 例会也好,这些都不必拘泥,要看看团队成员的性格喜好和共同习惯,尽量不要逼他们去适应任何管理方法,而是要创造条件去适应他们的性格,令他们做得开心。假如团队成员的主观能动性从任何方面被调动或者被保护,那么项目管理应该不会太吃力的。

面试在英文中是 interview,也就是“互相打量”的意思。坐在面试桌两边的双方,各自都要用心准备,好好表现。作为用人方,优质的问题才能吸引到优质的人才;作为应征者,只有平时不停学习不停积累,才有可能在面试中脱颖而出。面试中就互相喜欢,是以后合作愉快,事业成功的良好第一步。

No comments:

Post a Comment