自从发表了《坚持编程:如何找到一份工程师工作》这篇文章,很多人问我在没有学位的情况下怎么获得在谷歌(Google)工作的机会。你通向成功之路或许会和我不一样,下面是我的故事。 我非常希望能上大学,我的理想大学是加利福尼亚大学洛杉矶分校(UCLA)。很不幸,我高中的 GPA 低的令人尴尬,只有2.45。所以实际上,我并没有随便选择一家大学。我在普渡大学盖莱默分校上的计算机科学课程,希望可以当交换生或者找到别的出路。差不多两个学期以后,后者发生了。我收到了一个不可拒绝的offer。
第一步:在你能做之前先装装样子。大学的时候,我在一家专门为本地企业建设网站小公司工作,时薪是12美金。在我的职业规划里,我从未想过做这样一份工作,但当时来看还不错。
我同时参与多个项目,身负重任,我选择埋头苦干,全力以赴。从这个过程中我获得了很多信任。同时,我尝试利用我不多的业余时间开发游戏。我去到一个 天主教会,向那里的管理人员请求提供我少量的钱和三个月时间来开发这个游戏,然后在网上销售。我绘制了漂亮的报表和颜色丰富的图片,向他们展示共享软件模型( shareware model )是怎么工作以及如何确切知道这会带来回报。实际上,我对于我将要做的东西还不是非常清楚,但是他们买了,也许是由于那些漂亮的颜色。 经过两个月的开发,我将Demo发布到网上。一个在加州刚刚起步的创业公司CodeFire发现我的Demo和他们的游戏如此相似,都是一个从上往 下看的太空射击游戏,都和SubSpace非常相似,除了3D部分。不幸的是,他们通过勒令停止通知函与我交涉。我只能给他们一个回复“当然可以,只要你们聘请我工作,我就马上停止”。他们马上给我发了offer。然后我就收拾行装去了加州。
第二步:和大师交朋友。这可能是最重要的事情。在你的领域里找到一位大师,让他们成为你的导师,不停的向他们学习。当我在Double Helix工作时,有一位大师叫 Nathan Hunt,他是我遇过最聪明的却又最谦卑的人。不管我问的问题如何的基础,他都极度耐心的一一解答。我至少上千次的走进他办公室,问一些诸如“我怎样才能平滑的将一个旋转矩阵插值到另外一个里面”,“我应该如何实现移动柱体的碰撞检测”的问题。几年以后,他晚我一个月加入了谷歌。 每一个导师都改变了我解决问题或者看待世界的方法,而这只有其中的一小部分。
第三步:填补不足。因为我没有一个正式的计算机学位,我清楚自己缺乏很多基础的理论知识。比如,我实现了一个物理引擎,但从未解决过动态规划的问题。为了填补这些空缺,我几乎实现了所有我见过或读过的数据结构与算法。这些虽然都已经有了,但是通过观察而知道其如何 工作,与通过实现而知道其为什么可行有着巨大差别。 完成以下几点:
|