为什么要学xxx
为什么学微积分?
关于做题和背后的东西。Newton 时代的启蒙和应用,后来 Cauchy 时代的严格化与**公理化**。现在高等数学教科书一上来就是极限的定义,然后后面是微积分的**计算技巧**。各种曲线曲面的计算。
但是,还是要问,为什么学微积分呢?现代应用:优化理论,有限元,现代工业的基础,控制理论。
还有一个吐槽很久的课程:线性代数。教材上定义定理习题定理习题....。就像是学了一门计算课一样,和小学练习 100 以内加减法没什么本质区别,更多的是见到题目之后的条件反射,初学的时候未思考线性代数背后的东西,真正的数学。直到看了一本国外的书:线性代数应该这样学(为什么又是外国的?)
为什么学微积分?
数学是很有用的。但是教的方式有一点小问题。一上来的公理化的定义定义体现了一个严谨,但是丢失了直观。固然直观不可靠,但是抽象和严谨让初学者在理解其内涵、理解数学的美之前就已经觉得痛苦了。
为什么学操作系统?
学了 C 语言没地方用,只是停留在 leetcode ,岂不是很无聊?所以学了 C 语言是不是可以用起来,做一点看起来很好玩的事情。每天在电脑上用的东西,比如键盘鼠标显示屏,尽管明确的知道这些东西就是 C 语言控制起来的的,如果我能知道背后的原理,那一定是一件很有意思的事情。
进一步地,浏览器,编译器,IDE,游戏外挂,网络安全。学完操作系统,会给一个人和编程有关的全部知识,具有了编写一切程序的能力。就这一门课,学好了就可以在计算机技术(工程)这个方向上毕业了。虽然但是,学完操作系统也搞不出来这些(LOL),但是,学完操作系统给了编程全部的知识,剩下的就是工程问题。如果不经过一些理论上的学习,直接啃 linux 内核源码是件很崩溃的事情。想知道一个函数是怎么用的,点开跳转,还是一层层的跳转,跳了 10 层发现就是一个简单的表达 `__x = __y` ,这不直接崩溃?它太复杂了,内核源码是数万工程师几十年积累的结果。
所以不妨先用一个最小的,但是原理上完全一样的东西来看看是怎么工作的。再看 linux 源码就可以把代码和概念以及思路映射到这个简单的最小系统上,然后就知道 linux 是怎么工作的了,就可以理解 linux 内核了。这就可以真的去调试内核了。
当然还有现实的一点,在嵌入式开发方面,基于 linux 的薪资水平是要比 mcu 裸机高一些的。
我相信人在物质财富积累足够以后,精神境界也会有追求的。啥解决卡脖子技术,做中国人自己的操作系统,都行。
软件美国比较厉害,起步早。在上大学前我就就知道了游戏,浏览器,外挂。在上学前想的是这些东西,上学了发现全是分部积分、中值定理,这就很难过。所以,课程还差一点东西,把难过的事情和好玩的事情之间联系起来。一个中国式的教材。为了期末考试的分数内卷,刷题,背题。最大化分数,
新闻在讲美国人在芯片、操作系统掐脖子,如果每个同学都是这种学习方式,那这脖子要被美国人掐断了。。
学习的目的
人类的文明
基本动机、基本方法、里程碑、走过的弯路
走向应用、创新、革命
操作系统的历史就是计算机软硬件发展的历史
基本动机:更快更好的服务应用
基本方法:Building Abstractions
里程碑:UNIX,linux
什么是操作系统
Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)
1BSD (1977), GNU (1983), MacOS (1984), AIX (1986), Minix (1987), Windows (1985), Linux 0.01 (1991), Windows NT (1993), Debian (1996), Windows XP (2002), Ubuntu (2004), iOS (2007), Android (2008), Windows 10 (2015), ……