许多人都在问我,我是怎么拿到 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 PMs. 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.
编译组出品。修改:郝鹏程。