如何学好计算机科学
在知乎上看到有大一的小朋友提了一个问题
请问如何能对计算机知识(领域)有一个宏观的认识?
然后我回忆了一下这几年踩过的各种坑,总结了一下。
首先,工科三板斧的高数线代概率论是必不可少的,高数上下,概率论上下都要在学校里面打下坚实的基础。线性代数学校里面教的非常不够,大学里从行列式开始一大堆定理从头证明到尾很容易到最后还是稀里糊涂,课外需要补充 MIT 线性代数视频。从几何和直觉上去理解整个线性代数的知识。高数这种又硬又多又相互联系紧密的东西,一定要在大学前期课上解决。概率论比较简单,听听课就够了。
学习计算机科学之后就是掌握计算机语言。但是这个并不是需要你去抱着一本 C++ Primer 从头到尾看一遍,首先你看不完,其次,看完了也并不代表你会用。学习计算机语言最好的办法就是去实践,这个时候你需要一个叫 OJ 的帮手,就是 online judge。自己去写那种100行左右的代码提交上去拿到一个 accept,这种成就感会让你不断对计算机产生兴趣的。推荐先去做一些简单的题目,感觉 leetcode 上的题目不错。如果后面对刷题这种东西兴趣爆炸,推荐去做 POJ 分类。做完这些水平应该就有质的提升了。在这期间收获最多的是算法数据结构以及计算机的逻辑思维方式。
另外一方面是计算机知识体系的宏伟大厦。数据结构,计算机组成,计算机网络,操作系统。这四门是奠定计算机世界的基石,数据结构的问题上面那一项应该已经帮你解决了,另外三门虽然内容繁多,但是从难度上看并不是特别的高,属于量大结构完整的那种东西。组建这个知识体系你需要一本名曰 csapp 的书,《深入理解计算机系统》,网上有这门课的 lab。把 lab 通通做了吧。这样可以同时精通计算机组成和操作系统两门,而且可以融会贯通这两方面的知识。计算机网络,看着挺复杂的,但是是最简单的,或许可以找本计算机网络习题集,刷一遍就好了。
再往后,就是分不同领域的知识,以下这些领域的东西我并没有深入去学习,只是过了一点点。编译原理,这个东西其实就是教你如何处理字符串,里面一堆算法,还挺难的,但是用处并没有很广泛。这个东西自学会感觉非常无聊。和大家一起做做实验比较有趣。计算机图形学,一般就是用来做游戏,但是现在游戏引擎都封装的特别结实,大概也只有去开发游戏引擎才用的到。密码学,只了解一个 RSA。
现在最火的,也是我正在做的就是机器学习方面,这个领域又是分成很多的山头了。统计机器学习,深度学习,强化学习这是用的比较多的三个东西。统计机器学习是基础,这个不太好入门其实,包括 NG 那门课。深度学习是机器学习领域最无聊的也是效果最好的方法。强化学习是我最感兴趣的东西,AlphaGo 的整体框架就是强化学习的那一套,不过有了深度学习之后整套方法的强度又有了新的提升。关于机器学习领域宏观认识还是好好学习找个好实验室比较靠谱,这个领域知识太凌乱,一定要持续的持续的进行学习。
来自: a(https://www.******.com/note/654051551/)[https://www.******.com/note/654051551/]