随着时间的推移,你需要做到以下事情:
1. 精通C、C++、Objective-C、Java、PHP、Python 或 Ruby 当中至少一门编程语言,熟练使用至少一种其他语言,并且熟悉 Scala、Haskell 或 Lisp。
2. 学习数据结构,实践大多数常用数据结构,了解它们的复杂性。
3. 解决编程问题,多看多练多思考。
4. 构建自己的已完成(未完成)项目作品集(例如编程框架、移动或 Web 应用、小游戏,等等)
第四步:找到自信
离开印第安纳六年后,我已经在多个平台上推出了大约 6 款游戏。我开始感到无聊,需要寻求新的挑战。我申请了谷歌的职位,觉得被谷歌雇佣能让我成为“真正的工程师”——对于我这个没有一纸文凭的人来说,这就是我为之奋斗已久的理想。但是,我一直没有收到谷歌的回音,而我对此并不感到惊讶。
一年之后,我重新提交了自己的简历,但是这一次索性把“教育背景”一栏整个儿去掉了。令人哭笑不得的是,一名招聘人员居然打来了电话并为我安排了一次技术方面的电话面试。我问她能否把电话面试安排在两周之后,她同意了。我需要那段时间——我分秒必争地临时抱佛脚,最大限度地向自己的脑袋里填装各种算法和数据结构,每天编程 12 到 14 个小时,解了数百道编程题目。我如痴如醉地投入其中,直到我对谷歌面试的恐惧感变成了自信和兴奋。
我依然记得在谷歌面试过程中遇到的每一个人,与他们打交道实在是一种乐趣。面试官们说起话来风趣幽默,而我相信他们一定看到了我的兴奋和对面试问题的期待。
以下是我遇到的一些面试题目:
1)给出一组二维点,计算出它们的 skyline。此题很简单,解法有好几种,而我使用了一种叫做“最大堆”(maxheap)的常用数据结构。
2)设计微软的“画图”软件。这是我目前为止遇到过的最好玩的问题,我先是画出了界面和类图(classdiagram),然后重点讲了一个“颜料桶”功能。面试官当场让我实现这一功能,所幸我闭上眼睛也知道该如何实现宽度优先的迭代遍历——多谢 TopCoder 网站。
3)讲一讲你最看重的软件优点。这是一次“开放性”讨论面试,我讲到了各种测试以及它们发挥价值的时候(例如单元、整合、验收),还讲到了利于代码可维护性的一致风格,等等。这些内容能在《CodeComplete》和《EffectiveJava》等图书中找到。
我真的非常享受每一轮面试和解答各种题目的过程。如果我不是有备而来,情况肯定就会大不相同。面试之后,我自我感觉很好,但是我听说即便招聘委员会最终决定发放录用通知,也需要 CEO 拉里?佩奇亲自签字才有效。我很担心他一看到我在教育背景方面的不足,我就立马完蛋了。
但是,这样的悲剧终究没有发生——一天中午,我在圣克拉拉市(SantaClara)吃寿司时接到了电话,然后欣喜若狂地接受了录用通知。从那天起,我终于可以确信我再也不用回学校念书了。
正如孙子曰:“是故胜兵先胜而后求战,败兵先战而后求胜。”
注:我在谷歌度过了精彩非凡的五年,作为一名工程师不断学习和成长,但是现在我已经不在谷歌工作了。
来源:搜狐IT
更多详细信息,请您微信关注“计算网”公众号: