为什么要学习国外大学计算的课程?
这个问题其实是在问:
- 为什么要学习计算机基础知识?
- 为什么要学习国外大学的课程?
先回答第一个问题。
我们作为软件工程师,不能只是满足于熟练地在应用层编程,一定还要深入理解计算机的本质,这样我们才能解决更深度的难度、在技术的道路上越走越远。目前很多程序员还只是满足于应用层编程,这样很难构成职业竞争力,因为一个毕业半年的人也在应用层也不比十年工作经验的人差。所以不管是出于提升工作能力,还是出于提高职业竞争力的考虑,都应该深入学习计算机的基础知识。
第二个问题。
为什么要学习国外大学的课程?因为国外(尤其是美国)顶尖大学的计算机课程的质量非常高,并且事实上,这些大学培养了世界上最优秀的软件工程人才。既然网上都能找到很多它们课程的资源,那么为什么不利用好这些资源呢?其中有些课程是比较有难度的,但是如果能认认真真走完成课程,一定会非常有收获的,职业生涯会受益无穷。
我应该学习哪些课程?
公开的计算机课程非常多,但是推荐学习一些最经典的、同时又是你非常感兴趣的课程。
如果你想成为一个优秀的软件工程师,那么这些领域的课程是不可错过的:计算机网络、操作系统、数据机构和算法、数据库设计、分布式系统、编译原理。
- 因为都是英文授课,所以英语要好。如果语言是一种阻碍,那就好好利用翻译软件,同时在学习课程时顺便提高英语水平。
- 循序渐进,方法得当,假以时日,必能学好。像 MIT 6.828 这样的课程需要两三个月(每天至少两个小时)甚至更长的时间去学习,所以要有一个长远且清晰的规划。
- 建议学习有一定难度的、涉及很多基础知识的课程,比如说程序构造、操作系统、网络原理、编译原理的课程。
- 一定要动手做实验,实验是国外大学课程中最精彩的部分。国外大学计算机课程最核心的一点就是造轮子(做实验),在造轮子的过程中快速提高自己的技术水平。课程里的作业和实验最好是自己独立完成,当然也可以参考别的资料,但是最好不要直接 copy 别人的代码,不然课程的效果就会大打折扣。(这一点真的很不容易做到。)
- 在课程里认真学习附带知识,比如说操作系统课程里的汇编语言(以及 gcc、nasm 等)、分布式系统课程里的 Go 语言,以及计算网络课程和数据库设计课程里的 C++等。因为有一些课程会认为你已经学习了前置课程,但是可能你并没有学,那么就要花点时间先把这些附带知识(前导知识)也学习了,这有助于课程的完成,不然你会发现有些课程学起来是真的非常艰难。
- 学习过程中应该做好笔记,以便在未来的整个职业生涯中回顾。