今天在微博上看到好几个老师分享这篇文章。我觉得写得很全面,很有指导意义,翻译过来供自己和大家经常看看。要学习的东西太多,时间宝贵,只争朝夕!
本文译自:Guide for Technical Development
想成为一个成功的软件工程师,扎实的计算机科学知识非常重要。这份指南为那些想要通过自学提高开发能力的大学生们提供一些建议,包括理论学习和非理论学习两部分。但是在你根据这份指南学习相关课程之前,请确保不要间断学习自己专业所需的课程,这关系到你能不能毕业。这份指南提供的在线学习资源并不是为了取代你所在学校开设的课程,而是让你补充学习相关知识或者告诉你一些导论性的知识。
使用这份指南时,请注意:
- 批判性地使用这份指南,不要盲从
- 或许有不在这份指南上但你想学习或想做的事情,尽管去做!
- 学习完这份指南上罗列的所有知识,不保证你能得到Google的Offer
- 这份指南将会有更新或修改,请及时关注
关注我们的Google for Students +Page,你可以获得更多指导和资源,并认识同样有志于软件开发的学生。
推荐之理论学习
- CS课程介绍
说明:指导编程的CS课程简介
在线资源:Udacity - intro to CS course , Coursera - Computer Science 101
- 学习至少一种面向对象语言: C++,Java,或者Python
在线资源(初学者):Coursera - Learn to Program: The Fundamentals , MIT Intro to Programming in Java , Google's Python Class , Coursera - Introduction to Python , Python Open Source E-Book
在线资源(进阶): 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 Tutorial, CodeAcademy.com
- 测试代码
说明:学习如何找到Bug,构建测试代码,破解自己的软件
在线资源: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
- 深入理解算法和数据结构
说明:学习基础的数据类型(stack,queues和bags),排序算法((quicksort, mergesort, heapsort),和数据结构(binary search trees,red-black trees,hash tables),算法复杂度。
在线资源: MIT Introduction to Algorithms, Coursera Introduction to Algorithms Part 1 & Part 2, List of Algorithms, List of Data Structures, Book: The Algorithm Design Manual
- 深入理解操作系统
在线资源: UC Berkeley Computer Science 162
- 学习人工智能
斯坦福大学-Introduction to Robotics , Natural Language Processing , Machine Learning
- 学习如何构建编译器
在线资源:Coursera - Compilers
学习密码学 在线资源: Coursera - Cryptography , Udacity - Applied Cryptography
学习并行编程
在线资源:Coursera - Heterogeneous Parallel Programming
推荐之非理论学习
- 做课程之外的项目
说明:创建并维护自己的网站,建立自己的服务器或者建立一个Robot
在线资源:Apache List of Projects, Google Summer of Code, Google Developer Group
- 尝试做一个大型系统(代码库)的一小片,阅读并理解已有的代码,查阅文档,Debug
说明:使用Github是个不错的选择,你可以阅读别人的代码或者为别人的项目提供有用的代码。
- 和其他程序员合作做一个项目
说明:这将提高你团队协作的能力,并且你能从其他程序员那里学到一些对你有用的东西
- 练习算法知识和编程技巧
说明: 通过参加编程竞赛如CodeJam或者ACM’s International Collegiate Programming Contest来练习算法知识。
- 尝试做助教
说明:在协助教其他学生的某方面知识的过程中,你自己这方面的知识也会得到提高。
- 软件工程实习经历
说明:记得在实习期开始之前就申请好,在美国,实习期为夏天,5月-9月,而实习申请通常在这之前几个月就开放了。
在线资源:google.com/jobs