如何规划研究生在三年内成为谷歌软件工程师?
在我给你提供一份课程清单之前,请先阅读第一点或第二点。
全职人员——根据你的行业经验和学术背景有选择地看看这个答案。
准大学生——请跳到第七点。
标签描述:
#可选
* *必须的。
# 1:让我们回到问题本身,即如何准备成为一名“优秀”的软件工程师?
是啊!这个问题的其余部分是可选的。加入谷歌不是登月计划。任何优秀的软件工程师都有很好的机会成为谷歌工作文化的一部分。问题是你怎么定义“优秀”。
* *要点二:调整心态。
在你给谷歌招聘人员留下深刻印象之前,让我们看看谷歌的软件工程师这个角色是不是你真正想要的。
软件工程师并没有一般想法说的那么有趣。除了用户界面和用户体验的位置,一般来说,无论你用什么文本编辑器——Eclipse、Vim还是Emacs——你的屏幕都会黑屏、枯燥、无趣。全职软件工程师不仅需要从事复杂算法的能力,还需要足够的宽容和耐心,对大型程序的细节给予一丝不苟的关注。
在谷歌,大多数软件工程师的角色通常是处理数学问题。不管你精通多少门语言,也不管你的Java、C、C++玩得有多好。
重要的是这四个目标:
你创造有效算法的能力
你仔细阅读别人的代码,并从中发现任何问题。
您学习和了解新技术趋势并适应需求的好奇心。
最后但同样重要的是:你创造了什么,你是如何创造的?
我必须指出,实现上述四个目标并不容易。我们大多数谷歌员工都很难实现这些目标,但我们已经努力了,所以你也应该努力。
每个人的学习方法都不一样。对于我来说,我每天都会阅读一篇在Quora link上找到的研究论文(可能与计算机科学有关,也可能无关)和一篇Google的研究文章(内部记录)。
一旦你加入谷歌,你将可以访问所有的代码库、数据库、论坛、研究论文和一些对你的研究有很大帮助但你在维基百科上找不到的项目。但是当你准备加入Google的时候,有几件事是在学习的过程中常见的。在第五点中,你会学到更多——如何实现这四个目标——但在此之前,还需要看到一些前提。那么,我们来看下一点。那就是:
# 3: 2014技术开发指南-来自谷歌
作为一名成功的软件工程师,扎实的计算机基础非常重要。对于大学生来说,通过按照自己的进度亲自实践和学习,这是一条培养他们专业或非专业技能的建议途径。
请自行权衡本指南的用途。
除了这个指南之外,你可能还有其他想学或想做的事情——去做吧!
* *要点四:专业学习建议。
计算机科学导论课程
注意:计算机科学的入门课程可以提供一些编程的指导。
在线资源:
uda city–CS课程简介,
Coursera计算机科学101
*译者注:这些在线资源大部分是英文授课,所以没有课程名称的翻译(下同)。另外,作为程序员,一定要学好英语。请参考伯乐在线写的《老码农教你学英语》一文。
至少用一种面向对象的编程语言编写代码:C++、Java或Python。
面向初学者的在线资源:
coursera——学习编程:基础知识,
麻省理工学院Java编程入门,
谷歌的Python类,
coursera——Python简介,
Python开源电子书中介在线资源:
Udacity的电脑程序设计,
coursera——学习编程:编写高质量的代码,
coursera–编程语言,
布朗大学——编程语言介绍
学习其他编程语言
注意:您可以将这些语言添加到您的存储库中:Javascript、CSS、HTML、Ruby、PHP、C、Perl、shell.lisp、Scheme。
在线资源:w3school . com–HTML教程*,?学习编码
测试您的代码。
注意:学习如何跟踪bug,创建测试,以及破坏你的软件。
在线资源:?软件测试方法?uda city–软件调试
培养逻辑思维,积累离散数学知识
在线资源:
麻省理工学院计算机科学数学,
coursera——逻辑入门,
coursera–线性和离散优化,
coursera–概率图形模型,
Coursera博弈论。
译者注:coursera课程大多有中文字幕,会降低学习语言的门槛,但还是建议学习原版课程。
培养对算法和数据结构的深刻理解。
注:了解一些基本的数据类型(栈、队列和包)、排序算法(快速排序、归并排序和堆排序)和数据结构(二分搜索法、红黑树和哈希表)、大O表示等。
在线资源:
麻省理工学院算法导论,
coursera——算法入门?零件1?& amp?第二部分,
维基百科-?算法列表,
维基百科-?数据结构列表,
书:?算法设计手册
培养对操作系统的深刻理解
在线资源:加州大学伯克利分校计算机科学162 *
*译者注:这个链接在YouTube上,国内有很多电驴的资源,所以亲测可用(如果没有链接,译者可以提供)。
学习人工智能的知识。
在线资源:斯坦福大学-机器人导论,?自然语言处理?机器学习*
*译者注:斯坦福大学的吴恩达强烈推荐这门机器学习课程,译者也有很多这门课程的资源。
学习如何构造编译器。
在线资源:coursera–编译器*
*译者注:这门课也挺实用的,最好跟着可能手工完成课程的编译器项目走。
学习密码学
在线资源:coursera——密码学。uda city–应用密码学
学习并行编程
在线资源:coursera——异构并行编程
* *第五点:对非专业学习的建议
参与课外项目。
注:创建和维护一个网站,建立自己的服务器,或者是一个机器人。
在线资源:Apache项目列表,Google代码之夏,Google开发者小组
参与大系统(代码库)中的小代码片段,阅读理解已有代码,查看文档,跟踪调试。
注意:使用GitHub阅读别人的代码或者为一个项目做贡献是一个很好的方法。
在线资源:Github,?炉
与其他程序员一起参与项目。
注:这将有助于你提高团队工作能力,并使你能够向他人学习。
锻炼你的算法知识和编程能力。
注意:通过CodeJam或ACM ICPC这样的编程竞赛来锻炼你的算法知识。
在线资源:?CodeJam,?ICPC ACM *
*译者注:中国有很多OJ也可以扮演这个角色,比如POJ、九都。
成为助教
注意:帮助教授其他学生将有助于增加你在这方面的知识。
软件工程实习经历
注意:一定要在实习招聘期到来之前申请实习。在印度和美国,实习期在暑假,从5月到9月,申请通道一般提前几个月开启。
在线资源:google.com/jobs.
# 6:谷歌推荐/赞助的项目和团队
在你感兴趣的领域,你可以选择订阅的课程很少。这些课程和项目是非常好的学习场所,但不会增加或减少你进入谷歌的机会——不等于实习。(更多信息来自?罗伯特·拉芙)
谷歌课程——理解数据
这是一门自定进度的在线课程,面向任何想要学习更多关于数据的结构、可视化和操作的人。
2.?谷歌课程-大胆的发现
这个为期两天的互动会议将为大一和大二学生提供一些关于谷歌文化和公司职业前景的介绍。
3.?谷歌编程之夏
一个全球性的在线项目,给读完高中,18以上的学生提供开发者补贴,让他们为各种开源软件项目写代码。
4.?谷歌奖学金政策
这个项目为学生提供了在暑假期间为互联网和公益组织提出的技术政策工作的机会。
5.?谷歌学生退伍军人峰会
谷歌学生退伍军人峰会包括退伍军人适应工作环境的职业培训课程。另见:Ellen Spertus?你在线吗?我如何有效地利用大学的最后两年,为在Google/FB或一家初创公司获得一份出色的软件工程工作做准备?*
*译者注:这是Ellen Spertus在Quora上对另一个问题的回答(我是如何高效利用大学的最后两年,为在谷歌/脸书或初创公司获得一个好的软件工程师职位做准备的)。
* *第七点:关于数学课程的建议
(针对大学生)
个人观点:任何试图忽略这些科目的行为都会把你归入完全用错误方法学习的平庸程序员一类。之前准备的越充分,写代码就越享受。以上是软件工程的几个前提,你需要了解软件工程的算法本质。如果软件工程师能够回忆起他们在学校学到的简单知识,他们的大多数错误都是可以避免的。
在你对数学或计算机科学的深入学习中,你会意识到“你本科学的数据结构”和“你研究生学的机器学习”的重要性。所以,如果你想设计复杂的算法,这里列出了你必须掌握的课程。对于大学研究生来说,如果你忽略了这些科目,我强烈建议你用最好的方式复习。
在你学习了学校课本上的入门大纲之后,练习下面的课程来加深你的理解。大部分大学生(甚至是员工)都低估了这些课程,然后成为另一种平庸的程序员;
线性代数
1.?线性代数|数学| MIT开放式课件?(我推荐的)
2.?矩阵编码:通过计算机科学应用的线性代数?(同事推荐)
学习这些有助于你理解后续的回归模型——机器学习的基本步骤。没有学校、大学、研究实验室或者机构会教你这些线性代数课程。自己学。
结石
1.?微积分1?–俄亥俄州立大学
2.?微积分先修课程?–巴塞罗那自治大学
3.?初学者和艺术家的微积分?麻省理工学院
统计&;概率;可能性
注:等你上了大学读研,大纲就会变成机器学习的一个算法。对于大多数大学生来说,在机器学习课程的前三个月,数学让他们苦不堪言,当他们终于赶上进度时,大纲就推广到机器学习更复杂的领域,如深度学习、神经网络和神经网络流处理。
#准大学生:谷歌推荐/赞助的项目
谷歌的编码项目(GCI)
这个比赛介绍了各种贡献,使开源软件开发成为可能的准大学生从13到17。
增加奖金
Google RISE是对合作伙伴的奖励,奖励旨在促进和支持STEM*和计算机教育倡议的项目,面向全球的K12*中小学生。
*K12,从幼儿园到年级12。
*STEM,科学,技术,工程,数学,科学,技术,工程,数学。
前沿计算机科学研究所
该项目使来自不同社区的中学生能够接触STEM领域的大学和职业。
用代码创建
编程是一种新的能力——它承载着创造、创新和文明改造世界的潜力。这一举措旨在激励数百万女孩体验代码的魔力。
高中座谈会
这个为期一天的项目旨在为优秀的高中生在上大学之前提供宝贵的商业技能。
先驱
先锋计划是一个全球性的网络,领导者,倡导者和计算机教育大使聚集在一起。大使负责通过计算机科学联系和激励世界各地的年轻人和教育工作者。
谷歌科技博览会
谷歌科技博览会是一项面向13至18岁年轻人开放的全球竞赛。学生在线提交项目,有机会获得大奖。
计算机科学暑期学院(CSSI)
CSSI是一个为期三周的暑期项目,面向即将进入大学并对学习计算机科学感兴趣的新生。
Google+露营项目
30天的DIY和制作活动。创客营是Google+上面向所有人开放的免费虚拟夏令营活动。
互联课堂
与Google+上的老师和教育机构合作,为K12学生提供体验式学习机会。
参考:
/79736/