怎样才能成为谷歌工程师?
摘要:首先鼓起勇气去挑战牛逼的事情,自己去做就会变得牛逼。
第二,和行业做朋友,可以改变解决问题和看待世界的方式。
第三,勤能补拙,在大量的实践中弥补基础知识的差距。
第四,抹去简历中的学历,意外获得面试机会;准备充分的话,谷歌面试也可以很有趣。事实证明,谷歌对优秀人才并不完全受制于学历。
事实上,我真的很想上大学。我选择了报考加州大学洛杉矶分校,可惜高中的GPA只有2.45,考不上大学。然后,我在普渡大学的Gallemet校区上了一门计算机课程,希望有一天能顺利转学或者另谋出路。过了将近两个学期,出路来了——我拿到了一份不可抗拒的offer。
第一步:装牛逼,直到我真的变成牛逼的人。我上大学时,曾在印第安纳州格里菲斯的一家小公司工作。我的工作是帮当地公司建网站,时薪12美元。这份工作与我梦想的未来职业相去甚远,但也不算太差。
我很努力,不说大话,做了几个超出预期的项目。这为我建立了良好的声誉,并使那家公司盈利。同时,我还在业余时间尝试开发游戏。后来我孤注一掷,要求公司管理层给我三个月时间和一点钱,开发一款可以在网上销售的游戏。我制作了精美的电子表格和彩色图表,向他们展示分享软件模式的原理和游戏光明的“钱途”。当时我也不知道自己在做什么,但他们还是买了我的账号,可能是因为我做出来的东西颜色好看吧。
经过两个多月的开发,我在网上发布了一个演示,引起了加州初创公司CodeFire的注意,因为他们也制作了同样的太空射击游戏,类似于非3D子空间。但吸引眼球不一定是好事——很不幸,他们给我发了通知,让我停下来。所以我只能回答,“没问题,我就说到这里——前提是你雇佣我来开发你的游戏。”他们回复给我一份工作,我接受了。
注:本公司持有本游戏的原创版权,我离职前提前三周通知了老东家。
第二步:和蒙大拿交朋友。这可能是你能做的最重要的事情之一——在你的行业中找到蒙大拿,让他们成为你的导师。记住学习是没有止境的。当我在DoubleHelix工作时,我遇到了NathanHunt,他是我见过的最聪明和最谦虚的人之一,他对我的所有问题都非常耐心,不管这些问题有多初级。我无数次走进他的办公室,随口问了诸如“如何才能把一个旋转矩阵顺利地插入另一个?”像这样的问题。若干年后,他比我晚一个月加入Google。
我的每一位导师都在一定程度上改变了我解决问题或者看世界的方式,这里就不赘述了。
第三步:弥补差距我没有正规的计算机学位,所以我知道自己缺乏很多基础知识。比如我用物理引擎解决了一个动态规划问题,结果总是不成功。为了填补这些空白,我练习了几乎所有我听过或读过的最常见的数据结构和算法。你当然可以找到你需要的信息,但是通过观察“知道它是什么”和通过实践“知道它为什么”之间有巨大的差距。
随着时间的推移,您需要执行以下操作:
1.精通C、C++、Objective-C、Java、PHP、Python或Ruby中的至少一种编程语言,精通使用至少一种其他语言,熟悉Scala、Haskell或Lisp。
2.学习数据结构,练习最常用的数据结构,了解它们的复杂性。
3.解决编程问题,多看,多练,多思考。
4.构建自己的已完成(未完成)项目组合(如编程框架、移动或Web应用程序、迷你游戏等。)
第四步:找回自信离开印第安纳六年后,我已经在多个平台上推出了大约六款游戏。我开始觉得无聊,需要寻求新的挑战。我应聘了谷歌的职位,以为被谷歌录用会让我成为“真正的工程师”——对于一个没有纸质文凭的人来说,这是我奋斗了很久的理想。然而,我没有收到谷歌的消息,我并不感到惊讶。
一年后,我重新投了简历,不过这次我干脆把“学历”一栏去掉了。让人哭笑不得的是,一个招聘人员居然打来电话,给我安排了一个技术电话面试。我问她能否在两周内安排一次电话面试,她同意了。我需要那段时间——我和时间赛跑,最大限度地用各种算法和数据结构填满我的脑袋,每天编程12到14小时,解决了上百个编程问题。我被它迷住了,直到我对谷歌面试的恐惧变成了自信和兴奋。
我还记得在谷歌面试时遇到的每一个人,和他们打交道真的很愉快。面试官说话很幽默,我相信他们一定看到了我对面试问题的兴奋和期待。
下面是我遇到的一些面试问题:1)给一组二维点,计算它们的天际线。这个问题很简单,有几种解法,我用的是一种常见的数据结构,叫做“maxheap”。
3)谈谈你最看重的软件的优点。这是一次“开放式”讨论面试。我讲了各种测试以及它们什么时候有价值(比如单元、集成和验收),也讲了有利于代码可维护性的一致风格等等。这些内容可以在CodeComplete、EffectiveJava等书籍中找到。
我真的很享受每一轮面试和回答各种问题的过程。如果我不是有备而来,情况肯定会大不相同。面试结束后自我感觉良好,但听说即使招聘委员会最终决定发出录用通知,也要CEO拉里·佩奇亲自签字才有效。我担心他一看到我没学历,我立马就完了。
然而,这样的悲剧终究没有发生——有一天中午我在桑塔克拉拉吃寿司的时候接到了一个电话,然后我欣喜若狂地接受了这个提议。从那天起,我终于确定我再也不用回到学校了。
正如孙子所说,“所以,胜兵先胜后战,败兵先战后胜。”
注:我在谷歌度过了美好的五年,作为一名工程师学习和成长,但现在我不在谷歌工作。