自从发表了坚持编程( ABC: Always Be Coding - How to Land an Engineering Job)这篇文章,很多人问我在没有学历的情况下怎么获得在谷歌工作的机会的。你通向成功之路或许会和我的不一样,下面是我的故事。

我非常希望能上大学。我的理想大学是UCLA。很不幸,我高中的GPA低的令人尴尬,只有2.45。所以实际上,我并没有随便选择一家大学。我在  普渡大学盖莱默分校上的计算机科学课程,希望可以当交换生或者找到别的出路。差不多两个学期以后,后者发生了。我收到了一个不可拒绝的offer。

第一步:在你能做之前先装装样子。大学的时候,我在一家专门为本地企业建设网站小公司工作,时薪是12美金。在我的职业规划里,我从未想过做这样一份工作,但当时来看还不错。

我同时参与多个项目,身负重任,我选择埋头苦干,全力以赴。从这个过程中我获得了很多信任。同时,我尝试利用我不多的业余时间开发游戏。我去到一个天主教会,向那里的管理人员请求提供我少量的钱和三个月时间来开发这个游戏,然后在网上销售。我绘制了漂亮的报表和颜色丰富的图片,向他们展示共享软件模型( shareware model)是怎么工作以及如何确切知道这会带来回报。实际上,我对于我将要做的东西还不是非常清楚,但是他们买了,也许是由于那些漂亮的颜色。

经过两个月的开发,我将Demo发布到网上。一个在加州刚刚起步的创业公司CodeFire发现我的Demo和他们的游戏如此相似,都是一个从上往下看的太空射击游戏,都和SubSpace非常相似,除了3D部分。不幸的是,他们通过勒令停止通知函与我交涉。我只能给他们一个回复“当然可以,只要你们聘请我工作,我就马上停止”。他们马上给我发了offer。然后我就收拾行装去了加州。

第二步:和大师交朋友。这可能是最重要的事情。在你的领域里找到一位大师,让他们成为你的导师,不停的向他们学习。当我在Double Helix工作时,有一位大师叫 Nathan Hunt,他是我遇过最聪明的却又最谦卑的人。不管我问的问题如何的基础,他都极度耐心的一一解答。我至少上千次的走进他办公室,问一些诸如“我怎样才能平滑的将一个旋转矩阵插值到另外一个里面”,“我应该如何实现移动柱体的碰撞检测”的问题。几年以后,他晚我一个月加入了谷歌。

每一个导师都改变了我解决问题或者看待世界的方法,而这只有其中的一小部分。

第三步:填补不足。因为我没有一个正式的计算机学位,我清楚自己缺乏很多基础的理论知识。比如,我实现了一个物理引擎,但从未解决过动态规划的问题。为了填补这些空缺,我几乎实现了所有我见过或读过的数据结构与算法。这些虽然都已经有了,但是通过观察而知道其如何工作,与通过实现而知道其为什么可行有着巨大差别。

完成以下几点:

  1. 至少掌握其中一门语言: C, C++, Objective-C, Java, PHP, Python 或 Ruby。了解至少一门其他语言,熟悉Scala,Haskell或者Lisp。
  2. 学习数据结构(  data structures)。尝试实现其中的大部分。理解他们的时间复杂度( time complexities)。
  3. 解决编程问题。阅读下面的文章(  Read this)和解决这里的大多数问题(  solve many of these)。
  4. 为你的项目建立主页。(比如,编程框架,移动应用,网页应用,小游戏等)

第四步:找到自信。在离开印第安纳州6年以后,我已经通过多个平台发布了超过6个游戏。我渐渐觉得无聊,需要新的挑战。我申请了谷歌的职位,由于我没有学历,我想着如果我被聘请了,我就能成为梦寐已久的一名真正的工程师了。但是,我从未收到回信,对于这一点我感到一点都不意外。

一年以后,我再次提交了我的简历。而这一次,我把“教育”这一部分删除了。讽刺的是,这次一位招聘官给我打电话和我预约了一个电话技术面试。我咨询是否可以预约在两个星期以后,他同意了。我需要这一部分时间。我利用这段时间,尽最大努力将尽可能多的算法和数据结构塞到我的脑子里。我每天编码12-14个小时,解决了几百道编程题。我慢慢沉迷进去了,直到我对谷歌面试的害怕变成了自信和兴奋。

我记得住在谷歌的每一次面试,每一次与他们的交锋。面试官都很健谈,我相信他们都看得出来我非常兴奋的迎接他们的问题。

我遇到的一些面试题如下:

  1. 给定一组2维点,计算出他们的轮廓线。这非常简单,我采用了一种非常通用的数据结构叫做最大堆。这道题有很多解决方法,这里有一个非常好的。( good one)
  2. 设计微软的画笔。这是目前为止最有趣的问题。我从画接口和类图开始,我提到了画笔桶(Paint Bucket),面试官让我实现它。幸运的是,多亏TopCoder,我闭着眼睛都知道如何实现一个迭代的,广度优先遍历的桶。
  3. 描述你的软件的长处。这是一道开放的讨论面试题。我说到了测试的类型和他们的重要性(单元测试,集成测试,验收测试)。我又说到了代码风格的一致性和可维护性等等。这些东西你可以在 Code Complete和  Effective Java找到。

我真正的享受每一轮面试和每一个扔给我的问题。如果我没有那样认真的准备,我现在肯定不是这个样子。面试完了以后,我感觉非常好。但是,我听说即使招聘委员组同意了给offer,拉里本人仍有权利否决。我担心一旦他看到我没有学历以后,我就完蛋了。

不过,这并没有发生,有一天我在Santa Clara吃着寿司午餐,我接到了电话,我非常热情的接受了Offer。那一天,我清楚的知道我不用再回到学校里去了。

胜利的战士先胜了再去战场,而失败的战士先上战场再去求胜。

经过5年学习和成长,我现在已经不再为谷歌干活了。 

英文链接:  Four Steps to Google, Without a Degree

转自: 没有学历,四步加入谷歌  (责编/仲浩)

没有学历,四步进Google相关推荐

  1. AI四巨头Google、DeepMind、Microsoft、Uber深度学习框架大比拼

    编者按:Google.Uber.DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表,跻身全球深度学习研究水平最高的科技公司之列.GPipe.Horovo ...

  2. AI 四巨头 Google、DeepMind、Microsoft、Uber 深度学习框架大比拼

    2020-04-08 15:08:38 编者按:Google.Uber.DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表,跻身全球深度学习研究水平最高 ...

  3. Google 是如何定制 Material 主题的?

    来自 Gmail.Google News.Google Pay 和 Google Home 的产品团队详细介绍了如何使用 Material Theming (Material 主题) 来创建一致的,且 ...

  4. Kali Linux安装Google中文输入法(只需5步)

    前言: 之前我在kali上安装过中文输入法,并且写了一篇博文(Kali Linux安装中文输入法全纪录),这篇博文里的步骤是当时一边摸索一边记录下的,思路有点混乱,而且还同时安装了两种输入法.今天又安 ...

  5. Google App Engine 学习和实践

    这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.ne ...

  6. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送

    计算机视觉作为人工智能的主流技术领域之一,历经图像分类-->目标定位-->目标检测,最终发展到图像语义分割技术. 如下图所示,从最初的识别图片信息进行单一分类,到单图片中多目标识别分析,而 ...

  7. Google Analytics使用说明

    Google Analytics使用说明 转载▼ 一.Google Analytics 产品简介 1. 产品简介 Google Analytics(是一款免费的 Web 分析产品,根据它提供的丰富详尽 ...

  8. 15个变态的Google面试题以及答案

    在当前经济形势不景气的情况下,谷歌招聘新员工是一件令人振奋的事,特别是对那些在当前金融风暴中渴望找到安全港的年轻经理们和软件开发商们来说是个好消息. 不过,也不要高兴太早,谷歌在招聘新员工时,更加青睐 ...

  9. 美国人教你这样用Google,你真的会变特工!

    2019独角兽企业重金招聘Python工程师标准>>> 第一篇 在搜索框上输入:"indexof/"inurl:lib 再按搜索你将进入许多图书馆,并且一定能下载 ...

最新文章

  1. 机器学习160个常见问题.pdf
  2. 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)
  3. DI(依赖注入)简单理解 NO1
  4. 2018 前端面试题(不定期更新)
  5. 嵌入式Linux LED,键盘,AD驱动程序开发
  6. java多态 覆盖_Java ------ 继承、方法覆盖、多态
  7. SpringSecurity的认识和整合流程
  8. TensorFlow 教程 --教程--2.5TensorFlow运作方式入门
  9. android 无线接口 泛收,Android下的Java之interface接口泛型 动态获取泛型的类型
  10. iphone全部机型_iPhone 上新,首次明确支持中国北斗
  11. spring cloud分布式微服务-配置中心git示例
  12. 当当1024购书活动,100张4折优惠券,薅羊毛啦!
  13. 大数据技术之Clickhouse
  14. 原生JS编写简单的编辑器
  15. 【vue】vue安装卡住/报错
  16. Memcached单键超1M数据量的拆分设计及测试
  17. android低电量提示,Android P系统低电量提醒功能 根据使用情况判断充电时间
  18. 【转载】获得root权限(刷入magisk)
  19. cython,加速python,保护代码(3):扩展文件 .pxd
  20. NF5280M4 安装 Win2016 的方法

热门文章

  1. 奋斗的青春,无悔的时光
  2. 不想结婚要小孩了!怎么破?
  3. MTK OTA更新方法
  4. python实现图片压缩_python如何实现图片压缩
  5. ProcessingJoy —— 字母流光粒子【JAVA】
  6. BZOJ 1135: [POI2009]Lyz
  7. 京东阿里都已入局 顺丰在即时配送的胜算有多大?
  8. PC客户端中的网页----问题集合(未完待续)
  9. Spring源码系列(十三)——Spring源码编译及详细注解
  10. 换个方式认识一下——微信公众号搜索公众号列表 API