【伯乐在线导读】:本文源自 Quora 同名问答贴。Google 程序员 Gaurav Jha 的回答得到了 5200+ 赞。他从谷歌员工角度给出了6点重要的建议,而且回答中包含大量资源连接。 css
谷歌员工眼中的6个关键点java
标记说明:python
是的!这个问题的剩余部分都是可选的。加入谷歌不是登月计划。任何优秀的软件工程师都有好的机会成为谷歌工做文化的一部分。问题是你如何定义“优秀”。git
在你给谷歌招聘人员留下深入印象以前,让咱们来看看谷歌的软件工程师这一角色是不是你真正想要的。程序员
软件工程师并非像广泛观念所说的那样有趣。除了用户界面和用户体验的职位,一般来讲,无论你用什么文字编辑器——Eclipse,Vim或者Emacs——你的屏幕将是黑的,无聊和枯燥的。全职的软件工程师不只须要有从事复杂算法的能力还须要足够的包容和耐心来一丝不苟地关注大型程序上的细节。github
在谷歌,一般大多数软件工程师的角色主要是处理数学问题。你掌握了多少种语言或者你把Java,C,C++等玩的多溜是无所谓的。算法
重要的是这个四个目标:spring
我必须之处要实现以上四个目标并不容易。咱们大多数谷歌员工都有一段苦逼时间来达到这些目标,可是咱们尝试过,因此你也应该去尝试。数据库
每一个人都有不一样的学习方法。于我,我天天读一篇我在Quora连接上找到的研究论文(可能和也可能不和计算机科学有关),一篇谷歌的研究文章(内部记录)。apache
一旦你加入谷歌,将能够访问全部的代码库,数据库,论坛,研究论文和一些能给你学习时提供巨大帮助而你却没法在维基百科上找到的项目。但当你在为加入谷歌而准备路上时,有几样事情在学习的过程当中很常见。在第五点中,你将会更多地了解到——怎样来实现这四个目标——但在这以前有些前提仍是须要看看的。因此,咱们进入下一点吧。也便是:
做为一个成功的软件工程师,有着扎实的计算机基础是很重要的。对于大学生,经过自我把握节奏地亲身实践学习,来专业性地或者非专业性地培养他们的技术能力,跟随这份谷歌指南是一条建议路径。
注:计算机科学的入门课能提供编程的一些指导。
在线资源:
Udacity – intro to CS course,
Coursera – Computer Science 101
*译者注:这些在线资源大都是英文授课,所以没有翻译课程名(下同),另外做为程序员英语必须得好啊,能够参看伯乐在线老码农写的《老码农教你学英语》一文。
初学者在线资源:
Coursera – Learn to Program: The Fundamentals,
MIT Intro to Programming in Java,
Google’s Python Class,
Coursera – Introduction to Python,
Python Open Source E-BookIntermediate Online Resources:
Udacity’s Design of Computer Programs,
Coursera – Learn to Program: Crafting Quality Code,
Coursera – Programming Languages,
Brown University – Introduction to Programming Languages
注:能够将这些语言加到你的仓库里:Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme.
在线资源:w3school.com – HTML教程*, Learn to code
注:学会如何跟踪bugs,建立测试,而且破坏你的软件
在线资源: Udacity – Software Testing Methods, Udacity – Software Debugging
在线资源:
MIT Mathematics for Computer Science,
Coursera – Introduction to Logic,
Coursera – Linear and Discrete Optimization,
Coursera – Probabilistic Graphical Models,
Coursera – Game Theory.
译者注:coursera课程大多都有中文字幕,对于学习语言门槛会下降,不过仍推荐学习原版课程。
注:了解一些基本数据类型(栈、队列和包),排序算法(快排、合并排序、堆排序)和数据结构(二分查找、红黑树、哈希表),大O表示法等
在线资源:
MIT Introduction to Algorithms,
Coursera – Introduction to Algorithms Part 1 & Part 2,
Wikipedia - List of Algorithms,
Wikipedia - List of Data Structures,
Book: The Algorithm Design Manual
在线资源:UC Berkeley Computer Science 162*
*译者注:这个连接是YouTube上的,国内有不少电驴的资源,亲测可用(若是找不到可用连接,译者可提供)
在线资源:Stanford University - Introduction to Robotics, Natural Language Processing, Machine Learning*
*译者注:斯坦福Andrew Ng的这门机器学习课程强烈推荐,译者也有大量该课程资源。
在线资源:Coursera – Compilers*
*译者注:这门课程也是至关实用,最好跟着可能动手完成课程的编译器项目。
在线资源:Coursera – Cryptography, Udacity – Applied Cryptography
在线资源:Coursera – Heterogeneous Parallel Programming
注:建立和维护一个网站,构建你本身的服务器,或者作一个机器人。
在线资源:Apache List of Projects, Google Summer of Code,Google Developer Group
注:用GitHub来阅读别人的代码或者去贡献一个项目是一种很好的方式。
注:这将会帮你提升在团队工做的能力,也使你可以向他人学习。
注:经过像CodeJam或者ACM ICPC这些编程竞赛来锻炼你的算法知识
*译者注:国内有不少OJ也能够起到这个做用,好比POJ、九度等
注:帮助教其余学生将会有助于增长你在这个学科的知识
注:确保你在实习招聘期来临前申请了实习工做。在印度和美国,实习期在暑假,5至9月份,而申请通道一般提早几个月就打开了。
在线资源:google.com/jobs
在你兴趣领域内,你可能选择订阅的课程不多。这些课程和项目是很是好的学习地方,但他们不会增长或减小你进谷歌的机会——他们不等于实习。(更多信息来自 Robert Love)
这门自我把握节奏的在线课程是为任何想学习更多关于结构、可视化、操做数据的人准备的。
这个为期两天的互动会议将给一二年级的大学生提供一些关于谷歌文化和这家公司职业前景的介绍。
3. 谷歌编程之夏
一个全球在线项目,提供给上完中学且年龄在18以上学生开发者津贴,让他们为各类各样的开源软件项目写代码。
4. 谷歌奖学金政策
这个项目提供学生在暑假期间为互联网工做的机会和在公共利益组织上提出的技术政策。
5. 谷歌学生退伍军人峰会
谷歌学生退伍军人峰会包括为老兵适应工做环境而准备的职业培养课程。
也能够参看:Ellen Spertus在How can I effectively use my last two years of college to prepare for a great Software Engineering job at Google/FB or a startup?
这个问题上的观点。*
*译者注:这是Quora上Ellen Spertus对另外一个问题(我是怎样高效地利用大学最后两年来为谷歌/Facebook或者初创企业的一个很好的软件工程师职位作准备的)的回答。
(对准大学生而言)
我的观点:任何忽视这些学科企图将使你进入彻底以错误方式学习的平庸程序员的范畴。以前准备的越充分就越使得写代码越享受。这些是软件工程的几个前提,对软件工程你须要去理解算法的精髓。若是软件工程师可以回忆起学校里学的简单知识,大多数他们犯的错误本能够避免的。
在你深刻学习数学或者计算机科学中,你将意识到你“大学本科时学过的数据结构”和“研究生时学过的机器学习”的重要性。所以,要想设计复杂的算法,一下是你必须精通的课程清单。对于大学研究生,若是你忽视了这些学科,我强烈建议你应该你能作到的最好的方式去复习它们。
在你学习完学校课本上的介绍性大纲以后,练习下面的课程来加深理解吧。大多数大学生(甚至在职员工)低估了这些课程而后成为了另外一类平庸的程序员;
1. Linear Algebra | Mathematics | MIT OpenCourseWare (我推荐的)
2. Coding the Matrix: Linear Algebra Through Computer Science Application (同事推荐的)
学习这些会帮你理解后续的回归模型——机器学习基本的一步。任何学校、大学、研究室或者机构都不会教你这些线性代数课程。本身去学吧。
1. Calculus 1 - Ohio State University
2. Pre-Calculus Courses - Universitat Autonoma de Barcelona
3. Calculus for Beginners and Artists – MIT
注:当你上大学和读研究生时,大纲就会变成机器学习的算法了。对于大多数大学生,机器学习课程的头三个月里数学使他们苦不堪言,而当他们好不容易遇上进度了,大纲又推动到更加机器学习复杂的领域,好比深度学习,神经网络和神经网络流处理。
# Pre-University: Google Recommended/Sponsored Programs.
#准大学生:谷歌推荐/赞助的项目
这个比赛为年龄在13至17岁的准大学生介绍了各类各样使得开源软件开发成为可能的贡献。
谷歌RISE是一种对合伙人的奖励,它奖励旨在促进和支援为全世界的K12*小学生和中学生的STEM*以及计算机教育举措的项目。
*K12,从幼儿园到12年级
*STEM,Science,Technology,Engineering,Math,科学、技术、工程、数学
这个项目使得来自不一样社区的中学生能够接触到STEM领域的大学和职业。
编程是种新能力-它承载着创造、创新和文明改造世界的潜能。这个举措旨在激励数以百万计的女孩体验代码的魔力。
这个为期一天的项目旨在为优秀的高年级中学生在上大学前提供有价值的商业技巧。
先驱者项目是一个全球性的网络,这里汇集着领导者、倡导者和计算机教育大使,大使们负责让全球的青年和教育工做者经过计算机科学被联系和激励。
谷歌科技博览会是对13到18岁青少年开放的全球性竞赛。学生在线提交项目并获得赢得大奖的机会。
CSSI是一个为期三周的暑期项目,针对即将进入大学且对学习计算机科学感兴趣的新生而设。
30天的DIY和制做活动。Maker Camp是一个在Google+上对全部人开放的免费虚拟暑期露营活动
在Google+ 上和老师、教育组织协做来为K12学生提供经验性的学习机会。