嵌入式培训 百分网手机站

嵌入式学习指南

时间:2018-01-09 10:48:02 嵌入式培训 我要投稿

嵌入式学习指南

  雇佣合适的人对于Fog Creek软件公司来说是非常关键的。在我们这个领域,有三类人可以挑选。在一个极端,是哪些混进来的,甚至缺乏最基本的工作技巧.只要问这类人两三个简单的问题,再读一下他们的简历,就可以轻易地剔除他们。另一个极端的类型是才华横溢的超级明星这些人仅仅为了好玩就用汇编语言为PalmPilot(一种手掌电脑)写了一个Lisp(一种人工智能编程语言)编译器。在这两种极端类型中间的是一大群不能确定水平的候选者,也许他们中的某些人能干些什么?这里的关键是明白超级明星和那一大堆属于中间类型的人的区别,因为FogCreek软件公司只雇佣超级明星。下面我要介绍一些找出超级明星的技巧。

嵌入式学习指南

  Fog Creek公司最重要的雇佣标准是:

  有头脑, 并且完成工作

  就是这些了。符合这样标准的人就是我们公司需要的员工了。记住这条标准。每天上床前背诵这条标准。我们公司的目标之一就是雇佣拥有这样的潜质的人,而不是雇佣懂某些技术的人。任何人所拥有的某些具体技术都会在几年内过时,所以,雇佣有能力学习新技术的人,要比雇佣那些只在这一分钟知道SQL编程是怎么回事的人对公司更划算一点。

  有头脑确实是一个很难定义的品质。但是让我们看一些在面试时能提问的一些问题,通过这些提问,我们可以找出拥有这种品质的人。完成工作非常关键。看起来有头脑但是不能完成工作的人经常拥有博士学位,在大公司工作过,但是在公司中没有人听他们的建议,因为他们是完全脱离实际的。比起准时交活儿,他们宁愿对于一些学院派的东西沉思。这些人由以下特性而可以识别出来。他们总是爱指出两个根本不同的概念间的相似性。例如,他们会说“Spreadsheets是一种特殊的编程语言”,然后花一个礼拜写一篇动人的,智慧的白皮书。这篇白皮书论述了,作为一个编程语言,spreadsheet关于计算语言特性的方方面面。聪明,但是没用。

  现在,我们来谈谈完成工作但是没有头脑的人。他们爱做蠢事。从来也没有考虑过将来得靠他们自己或者别的什么人来亡羊补牢。通过制造新的工作,他们成为了公司的负债而不是资产。因为他们不仅没有为公司贡献价值,还浪费了好员工的时间。这些人通常到处粘贴大堆的代码,而不愿意写子程序。他们是完成了工作,但是不是以最聪明的方式完成工作。

  面试时最重要的法则是:

  做决定

  在面试结束时,对于被面试者,你不得不做一个直截了当的决定。这个决定只有两个结果:雇佣或者不雇佣.回到你的电脑前,立刻用电子邮件通知招聘负责人你的决定。电子邮件的主题应该是雇佣或者不雇佣。接着你需要在正文中写两段来支持你的决定。

  没有其他的答案。永远不要说,“雇佣你,但是不能在我的团队中”。这是非常粗鲁的,因为你在暗示应试者没有聪明到能有和你一起工作的资格,但是以他的头脑适合进入那些天生输家队伍。如果你发觉自己被诱惑,想说出那句“雇佣你,但是不能在我的队伍中”,那么就简单的把这句话变成“不雇佣”再说出口。这样就没事了。甚至如果某个人在特定领域很能干,但是在别的队伍中将会表现不好,也是不雇佣。事物变化的如此之快,我们需要的是在任何地方都能成功的人。如果某些情况下你发现了一个白痴专家(拥有某些特殊能力的白痴),这个专家对于SQL非常,非常,非常的精通,但是除此之外什么也学不会,不雇佣。在FogCreek公司他们没有将来。

  永远不要说,“也许,我吃不准”。如果你吃不准,意味着不雇佣。看,比你想象的容易的多。吃不准?就说不!同样,如果你不能作出决定,那意味着不雇佣。不要说,”嗯,雇佣,我想是这样的。但是关于...,我想知道...”。这种情况就是不雇佣。

  最重要的是记住这点,放弃一个可能的好人要比招进一个坏人强(译者按:中国有位哲人说过,宁可错杀一千,不可放过一个,呵呵)。一个不合格的求职者如果进入了公司,将要消耗公司大量的金钱和精力。其他优秀员工的还要浪费时间来修复这个人的错误。如果现在你还在犹豫,不雇佣。

  如果你是FogCreek公司的面试官,当你拒绝了大量的应聘者时,不要为FogCreek公司将因此雇不到任何人了而忧虑。这不是你的问题。这是招聘负责人的问题。这是人力资源部的问题。这是Joel(译者注:FogCreek公司的老板,本文作者)的问题。但不是你的问题。不停地问自己,哪种情况更糟糕?一种情况是我们变成了一个庞大的,糟糕的软件公司,充斥着许多脑袋空空如可可果壳的家伙,另一种情况是我们是一个小而高品质的公司。当然,找到优秀的应聘者(并聘用他们)是很重要的。找到有头脑而且完成工作的人是公司中的每个员工的日常工作之一。但是当你作为JoelCreek公司的一员真的开始面试一个应聘者时,要装作现在正有很多优秀的人想打破头挤进FogCreek公司。总之,无论找到一个不错的应聘者是多么的难,永远不要降低你的标准。

  但是你如何作出雇佣或者不雇佣这样艰难的决定?你只要在面试过程中不停地问自己:这个人有头脑吗?这个人能完成工作吗?要作出正确的回答,在面试时你必须问对问题。

  开个玩笑,下面我要问个有史以来最差的面试问题:“Oracle8i中的数据类型varchar和varchar2有什么区别”这是一个可怕的问题。掌握这种琐碎的技术细节和FogCreek公司想雇佣你之间没有任何联系。谁会去记这种东西?如果有在线帮助,你可以在15秒内找到答案。

  实际上,还有更差的问题,等会儿我会谈到的。

  现在我们要谈到有趣的部分了:面试时提哪些问题。我的面试问题清单来自于我去微软公司找第一份工作的经历。这里实际上有几百个微软面试问题。每个人都有偏爱的问题。你也可以发展一套自己的面试问题以及面试的个人风格,这样你就可以比较容易地作出雇佣/不雇佣的决定。以下是我成功使用过的一些面试技巧,在面试前,我读一遍应试者的简历,然后在一张纸片上随便写以下我的面试计划。这个计划实际上就是我要问的问题清单。以下是一个例子(用来面试程序员的):

  介绍

  应试者参加过的项目

  无法回答的问题

  C语言函数

  你满意吗?

  设计问题

  挑战

  你还有什么问题?

  在面试前,我非常,非常当心,避免自己先入为主。如果在面试前你就已经想当然地认为,一个麻省理工的博士一定是一个有头脑的人。那么在接下来的一小时的面试时间内,无论那个麻省理工的博士说什么都不能改变你的最初印象。如果在面试前你就认为这个应试者是个傻瓜,那么他面试时说什么也无济于事。面试就象一个非常精巧的天平。

  一小时的面试结束后就要对一个人下结论是不容易的(但是你又必须在面试结束后得出结论)。一些不起眼的细节可能会影响最后的结论。如果你在面试开始前对于应试者有了一点了解的话,就好比天平的某一端加上了重重的砝码。这样面试本身就会变得没有用处了。以前有一次在面试前,一个招聘负责人跑进我的房间说,“你肯定会爱上这个家伙的!"对一个男孩?天哪,这简直让我发疯。我本来应该说,“嗯,如果你这么确定我会喜欢他,为什么你不干脆雇佣他,何必让我浪费时间来面试?”但是那时我还太年轻幼稚,所以还是面试了那个人。当这个家伙开始说一些蠢话时,我对自己说,“哇塞,这应该是个例外情况,也许是大智若愚。”我开始带着玫瑰色眼镜看他了。

  于是我以说“雇佣”结束了面试,虽然他是一个糟糕的面试者。接下来发生了什么事?除了我,其他的面试官都说,不要雇佣这个人。教训是,不要听别的人的话,在面试应试者前不要四处打探这个面试者的情况。最重要的是不要和别的面考官谈论应试者,除非你们都已经作出了独立的判断。这才是科学的做法。

  作为面试步骤的第一步,介绍的目的是让应试者放轻松。我通常花30秒钟,讲一下我是谁,接下来面试会如何进行。我总是使得应试者确信,我们关心的是他(她)如何解决问题的,而不是他(她)的最终答案是对还是错。顺便说一下,面试时,你不要和应试者隔着一个桌子坐着,否则在你和面试者之间就有了一个障碍,并且暗示着一种比较正式严肃的气氛,这样应试者就很难放松了。更好的办法是把桌子靠墙放着,或者和应试者坐在桌子的同一边,这样有助于应试者放松。只有应试者不会因为紧张而表现失常,你才能更有效的进行面试.

  第二步的内容就是问应试者最近做了些什么项目。对刚毕业的学生, 如果有论文就问问论文,没有的话,就问问他们做过什么很喜欢的大作业.例如,有时候我会问一下,“你最喜欢上学期哪门课程?不一定要和计算机相关的。”事实上,如果应试者回答的课程和计算机没有关系,我会比较高兴。有时候你会发现这个计算机系应届生选择了尽可能少的计算机相关课程,但是却选修了很多和音乐相关的课程。但是他(她)却说最喜欢的课程是《面向对象数据库》。哼哼,不错啊.不过如果你直接承认你喜欢音乐胜于计算机,而不是在这儿胡说八道的话, 我会更高兴一点。

  当面试有工作经验的人时,你可以让他们谈一下前一份工作。

  我问这个问题的目的是在寻找一样品质:热情。在应试者谈到他(她)最近做过的项目时,你观察到以下迹象都是不错的:

  谈到他们做过的项目时变得热情洋溢;他们的语速更快,语言更生动活泼。这说明他们对某些东西有兴趣,有热情(因为现实中有许多人对所做的项目根本漠不关心呢)。即使他们激动地表达对做过的项目的负面感情,这也是一个好的信号。“我曾经为上一个老板安装FooBarMarkII,但他是个傻瓜!”表现出热情的人就是我们要雇佣的人。差的应试者对工作根本就不关心,所以根本不会激动。一个非常好的信号是当应试者很激动地谈论上一份工作,以至于暂时忘记了他们正在被面试。有时候应试者刚开始面试时表现的很紧张,这是很正常的现象,所以我通常忽略不计。但是当他们谈到单色计算艺术(ComputationalMonochromaticArt)时,这个家伙变得极端兴奋,一点都不紧张了。不错,我喜欢这样的应试者,因为他们关心他们做的事。(什么是单色计算艺术?拔掉你的电脑显示器的电源就可以看到了)

  能认真地去解释事情。某些人被我拒掉的原因就是他们不会用普通人能明白的语言去解释他们做过的项目。很多工科专业的人总是以为所有人都知道Bates理论(译者注:BatesTheorem,一种经济学的理论)或者Peano公理组(译者注:Peano"sAxioms,数论中的一些定理)是什么。如果应试者开始满口行话了,让他们停一停,然后你说,“能帮我个忙吗?就是为了练习一下,你能把刚才说的用我老祖母也能理解的话说一遍吗?”但即便如此,有些人还是继续用那些术语,而且根本没法让人明白他们在说什么。天哪!

  如果这个项目是一个团队项目,看看他们是否在有承担领导责任的迹象?一个应试者可能会说:“我们用的是X方法,但是老板说应该是Y,而客户说应该是Z。”我会问,“那么你怎么做的?”一个好的回答可能是“我设法和团队中别的人开了个会,然后一起搞出个办法...”坏的回答看起来象,“嗯,我什么也不能做。这样的问题我解决不了。”记住,聪明并且能完成工作。要搞清楚某人是否能完成工作的一个办法就是看看他(她)过去是否倾向于完成任务。事实上,你可以主动要求他们给你个例子证明他们能担任领导作用,完成任务。-例如克服公司的陈规陋习。

  现在我们谈谈清单上的第三款,无法回答的问题。这很有趣。这个主意的关键在于问一些不可能有答案的问题,就是想看一下应试者怎么办。“西雅图有多少眼科医生?”“华盛顿纪念碑有多重?”“洛杉机有多少加油站?”“纽约有多少钢琴调音师?”

  聪明的应试者猜到你不是要测验他们的'专业知识,他们会积极地给出一个估计。“嗯,洛杉机的人口是七百万;每个人平均拥有2.5辆轿车.。”当然如果他们的估计完全错误了也没有关系。重要的是他们能积极地试着回答问题。他们可能会试着搞清楚每个加油站的储量。“嗯,需要四分钟给一个储油罐加满油,一个加油站有十个油泵每天运行十八个小时...”他们也可能试着从占地面积来估计。有时,他们的想法的创造力让你吃惊;而有时,他们直接要一个LA的黄页去查。这都是好迹象。

  不聪明的应试者则被难住了。他们目瞪口呆地望着你,好像你来自火星。你不得不提示:“嗯,如果你想建立一个象洛杉机那么大的城市,你需要建立多少个加油站?”你还可以提示他们:“加满一个储油罐要多长时间?”不过,这些木疙瘩脑袋还是只会坐在那里发呆,你得拖着他们往前走才行。这类人不会解决问题,我们可不要这样的人。

  关于编程问题,我通常要求应试者用C语言写一些小函数。以下是我通常会出的题目:

  将一个字符串逆序

  将一个链表(linked list)逆序

  计算一个字节(byte)里有多少bit被置1

  搜索给定的字节(byte)

  在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的字符串转换成整数、整数转换成字符串(这个问题很不错,因为应试者要用到堆栈或者strev函数)注意,通常你不会希望他们写的代码多于5行,因为你没有时间理解太长的代码。