六步流程,助你拿到顶尖科技公司的 Offer。

我是如何拿到谷歌软件工程师 Offer 的?

很多人都在问我,我是如何拿到 Google软件工程师 Offer 的。所以,我在这篇文章中将专门分享一下我在获得Google软件工程师这份工作的过程中所使用的策略。

同样的策略不仅适用于拿到Google软件工程师的工作,也适用于在其他顶尖科技公司找到一份这样的工作,比如亚马逊、微软和Facebook等公司的软件工程师工作。

在这篇文章中,我将分享在这些顶尖科技公司中找到一份软件工程师工作所需经历的六步流程。除此之外,我还将讨论:

(1)刚开始的时候,如何学会编程?

(2)学会编程之后,还需要学习什么知识?

(3)如何找到你的第一份编程工作或实习工作?

(4)申请软件工程师工作的最佳方式是什么?

(5)如何才能最好地准备编程面试?

(6)拥有计算机科学学位很重要吗?

(7)就读于顶尖大学很重要吗?

步骤1:学习编程

要想成为软件工程师,学会编程自然是最起码的要求。

刚开始,要想学习编程,我建议你从一些交互式教学网站着手,比如Codecademy、freeCodeCamp,我听说 SoloLearn 也不错。你可以在这些网站上学习到最基本的编程知识。

在这之后,我会通过看视频教程的方式来学习更多高级的主题。我推荐YouTube、Pluralsight、Lynda.com和Udemy等网站。你可以在这些网站上找到以下主题的编程教程:

  • Web开发;

  • 移动开发;

  • 游戏开发。

你可以根据自己的兴趣自行选择。

但问题来了,我应该首先学习哪种编程语言呢?

我的答案其实很简单:选择JavaScript或Python,但具体选择哪一种语言最终还取决于你的个人兴趣。

步骤2:做一些自己的个人项目

在你已经学习了一些编程教程之后,你应该通过做一些个人项目来练习你所学到的知识。在这个过程中,你应该找到那些你真正感兴趣的项目去做。

例如,如果你喜欢摄影的话,那么你可以创建一个用于存储你的所有照片的照片网站。如果你喜欢炒股的话,那么你可以开发一个能够为你分析股票图表的系统。如果你喜欢解决问题的话,那么你可以尝试参加一些编程类的比赛。

当你在做一个项目的时候,最开始应该尽可能自己独立完成。如果你在这个过程中遇到了无法自己解决的难题,这时你可以向线上或线下资源来寻求帮助。比如,如果你遇到了与编程有关的技术问题,那么可以利用Stack Overflow来咨询你所遇到的具体的编程技术问题。

步骤3:找到自己的第一份编程工作或实习工作

在做了一些自己的个人项目之后,你应该就能够找到自己的第一份编程工作或实习工作了。第一份编程工作或实习工作能够为你今后面试那些顶尖科技公司积累相关的工作经验。

职业生涯的第一份工作就直接进入Google 这类顶尖科技公司其实也是有可能的,但这种情况比较少。一般情况下,第一份工作就职于一家不那么知名的公司是一种更加常见的情况。

申请软件工程师工作的最佳方式

仅仅通过在线申请工作肯定不是最好的策略,因为基本上所有人都在这么干。

我的建议是,你可以通过使用LinkedIn和实名人脉网来找到自己的第一份编程工作。

在LinkedIn上,首先找到你想应聘的公司的招聘人员。接着,问招聘人员你是否满足自己感兴趣的岗位的条件。如果你不满足条件,也没关系,这时你可以问他们如何更好地准备才能更快地满足该岗位的条件。对于实名人脉网,我推荐你通过Meetup等网站,与当地公司的工程师和招聘人员面对面沟通。

这些还不是全部。

如果你想申请应聘小公司或中型公司,你可以使用LinkedIn和实名人脉网络。但是,如果你想申请Google和Facecbook等顶尖科技公司的岗位,这种策略就没那么有效了。

要想申请那些顶尖科技公司的工作岗位,我建议将下面三种策略结合起来使用:

  • 参加你所在地区周边大学的招聘会和招聘活动;

  • 找就职于这些公司的朋友,让他们帮忙内推;

  • 线上申请。

将以上这些策略结合起来有助于增加你获得这些顶尖科技公司面试机会的可能性

最后说一句,我不是很明白为什么在 LinkedIn 上申请这些大公司的岗位的效率会如此低,我觉得可能是因为在 Linkedin上申请这些公司的人太多了,毕竟他们太受欢迎。

步骤4:学习数据结构和算法方面的知识

像 Google 和微软这类顶尖科技公司,他们在面试中都会问数据结构和算法方面的问题。所以,如果你还没有掌握这方面的知识,那么你应该抓紧学习了。

有很多这方面的课程,其中比较受欢迎的一些课程是:

  • Coursera 上的斯坦福大学课程

  • YouTube 上的 MIT 课程

  • Skiena著作的《算法设计手册》(The Algorithm Design Manual)

  • 《算法》(另一本书)

你应该多多尝试一下上面的这些课程资源,然后选择自己最喜欢课程去学习。

步骤5:为编程面试做准备

Google和微软等顶尖科技公司的编程面试的难度是非常大的,但是准备这些公司的编程面试的方法是很简单直接的。

一旦你对数据结构和算法方面的知识有了深刻理解之后,推荐你使用下面三种用来练习编程面试的资源:

  • Leetcode:一个用来练习编程面试问题的互动平台;

  • Cracking the Coding Interview (攻克编程面试): 一本关于编程面试的非常受欢迎的书;

  • Daily Coding Problem (每日编码问题):每天会通过邮件的方式给你布置一个给你编程问题。

在你自己练习编程面试几周时间之后,接下来你就应该开始进行模拟面试了。

如何模拟面试?

一般情况下,你可以找朋友配合来模拟面试,从上述资源中选一些面试问题来问对方。

然后,在纸上或在Google Docs上解答每一个模拟面试问题,并向你的朋友解释你的答案。你需要分别从应聘者和面试官这两个角度做模拟练习,这样你就可以亲自感受做面试官的感觉是什么样的了。

在你做了20次左右的模拟面试之后,你基本上就会为面试你真正想加入的公司做好准备了。

步骤6:申请、申请、再申请

在申请顶尖科技公司的岗位的时候,要利用我在上面提到过的三种策略:

  • 参加你所在地区周边大学的招聘会和招聘活动;

  • 找就职于这些公司的朋友,让他们帮你内推;

  • 在线申请。

如果你第一次申请失败了,也不要担心。事实上,这些公司的招聘岗位的竞争是非常激烈,申请失败是家常便饭。

就拿我自己来说,为了进入Google做 软件工程师,我申请了5次 Google 的这个岗位,最终才获得这份工作。

现在做个简单的总结:

  • 步骤1:学习编程

  • 步骤2:做一些自己的个人项目

  • 步骤3:找到自己的第一份编程工作或实习工作

  • 步骤4:学习数据结构和算法方面的知识

  • 步骤5:为编程面试做准备

  • 步骤6:申请、申请、再申请

难道真的这么简单?没错,确实就这么简单。但是,想要完成上述说的这六个步骤,是需要花费很多时间和精力的。

最后再补充几个问题:

要想申请顶尖科技公司的软件工程师岗位,我必须要拥有计算机科学学位吗?

答案很简单:不是的。但是,拥有计算机科学学位对应聘这类岗位是有很大帮助的。如果你拥有计算机科学学位,那么说明你已经掌握了第1-4步中的大部分内容(学习编程、做自己的个人项目、找到第一份编程工作或实习机会、学习数据结构和算法方面的知识)。如果你没有拿到计算机科学学位,那么你就需要自学这其中的大部分知识了。

但是这里还有一点需要注意的是,即使你已经拿到了计算机科学学位,想要在Google、微软这类顶尖科技公司找到一份软件工程师的工作依然是需要做大量准备工作的。

我需要就读于像麻省理工学院、斯坦福大学、卡内基梅隆大学这样的顶尖大学才能成功应聘顶尖科技公司的软件工程师岗位吗?

答案同样是:不。就读这些顶尖大学会对你应聘顶尖科技公司的软件工程师岗位所有帮助,但并非必要条件。Google的前任人事高级副总裁Laszlo Bock也是同意这个观点的。

Bock 曾写过一本名为《重新定义团队:谷歌如何工作》(Work Rules!)的书。他在这本书中曾这样写道:与麻省理工学院等顶尖院校中那些表现一般的学生相比,Google更喜欢在一些知名度较低的院校中表现优异的学生。

我认为这是有一定道理的,因为如果你很聪明,而且很勤奋,你去哪所学校就读其实并没有那么重要。

要想申请应聘顶尖科技公司的软件工程师岗位,我的 GPA成绩需要非常好吗?

答案依然是:不。

拥有很高的 GPA 分数可能对获得面试机会有点帮助,但是在简历中展示自己扎实的实践经验和做过的有趣项目相比而言更为重要。

事实上,《重新定义团队:谷歌如何工作》(Work Rules!)这本书中这样写道:在过去,Google是非常重视候选人的 GPA成绩单的。但是他们后来发现,拥有很高的 GPA 分数与在长期工作中拥有出色的工作表现是没有很强的关联性的。发现这个之后,Google 就不再那么重视 GPA 分数了。

那么我到底需要什么呢?

通常情况下,你需要的是强悍的编程技术能力和解决问题的能力,对计算机科学基本知识的扎实理解,同时需要在简历中展示你做过的有趣的项目经验。如果你按照我上面分享的6个步骤去做的话,你是可以具备这些能力的。

最后,我如何才能制作一份好的简历呢?

你可以参考我之前曾经 Google 软件工程师时制作的真实的简历。一般情况下,简历保持在一页就好,我自己的简历还是有些太长了,不过也不耽误你用它来作为参考:

                                                          YK Sugi

                                                     yksu@csdojo.io

Experience

Program Manager Intern at Microsoft, Redmond, WA, 5/2015 – 8/2015

 I was responsible for designing and implementing a specific feature within Microsoft Dynamics CRM with developers and other PM's.  My responsibilities included the initial research, planning the project, designing the product, creating wireframes, and writing and executing on a spec.

Data Science Intern at Microsoft, San Francisco, CA, 6/2014 – 8/2014

 My responsibilities in the Yammer data analytics team were:

  • Conducted a statistical analysis to deepen our understanding of existing content’s effects on user engagements.

  • Responsible for creating an internal dashboard tool that is now used to view user engagement metrics such as the number of active users and the summary of their activities on the Yammer website.

Founder and President at Data Science Club at UBC, Vancouver, BC, 10/2013 – 5/2014

  • Responsible for acquiring more than 120 members

  • Organized meet-ups to exchange our ideas on data science

  • Formed a team of several students to work on a machine learning competition on Kaggle

Software Development Intern at Moneytree, Tokyo, 5/2013 – 8/2013

  At this iPhone application company, I was responsible for creating JavaScript scripts that screen-scrape transaction information from our users’ bank accounts and credit card accounts.  I also created Ruby scripts that solved miscellaneous business problems, including one machine learning classification problem.

Education

University of British Columbia, Vancouver, BC

BS Candidate/Statistics Major, December 2015

GPA 87.6/100

Suffolk University, Boston, MA

BS Candidate/Physics and Computer Science Majors (transferred out)

GPA 3.964, Undergraduate Honors Program

Technical Skills

Experience in Product Management, Analytics/Statistics, and Software Engineering.

Technical Tools:

  • Wireframing: Balsamiq, Microsoft PowerPoint

  • Designing: Adobe InDesign, Photoshop, Illustrator

  • Statistical Analysis: R

  • Machine Learning: Python with NumPy and Pandas, Ruby, Spark (prior experience)

  • Programming Technologies: SQL, MATLAB, Ruby on Rails, Java

  • Programming Technologies, front end: JavaScript, HTML/CSS, LaTeX

  • Version Control: Git, GitHub, Bitbucket

Other Skills

Languages: Fluent in English and Japanese

Public Speaking: Experience and ability to speak with passion and confidence in public speaking and stand-up comedy

Awards

TELUS / IEEE Student Innovation Challenge, September 2015

Our team won a third place at the pitch contest where we presented an idea for a device that helps the blind.  Our idea was a device that converts 3-dimensional special information into sound so that blind people can “see” the environment by hearing.  We were awarded a $3000 grant to develop a prototype. 

Projects

Fireflic, Winter 2014

As a follow-up project of YamBomb! (see below), I designed and developed a mobile gaming app to pass around a “fire” amongst friends that “explodes” in 24 hours.  A user can attach an article or picture to the fire, so interesting content is passed to many people.  Developed with Javascript.

YamBomb! , August 2014

A colleague at Microsoft and I created a gaming app with which one would send a “bomb” that “explodes” in 24 hours unless they pass it to somebody else.  It started with a few users and organically grew to more than 70 users within a week of its launch.  We developed the application with Ruby on Rails and Yammer API.

March Madness Prediction,  March 2014

I made a least square model for predicting winners of March Madness, the national college basketball tournament in the United States.  I built this model with different types of regularizations (L1 and L2), utilizing Python libraries such as NumPy and matplotlib.  I ranked at the 32nd place out of 248 teams at the Kaggle competition.(文章来源:36氪)