重视工科发展的一般规律: 问题驱动
- in one word: 否定之否定, 螺旋上升
计算机的几个历史主线:
- 操作系统
- 虚拟机(源于操作系统)
- 数据库管理系统
- 编译器
- 图形学
- 人工智能
- 体系结构
- 网络, 通讯与安全
它们在历史发展的脉络上是连续的, 任何一个技术的提出, 都一定是遇到了之前技术无法解决的问题. 课本上只会告诉你现在的, 或(大概率)是编书时的主流技术, 但是一般都不会告诉你这些技术的历史渊源, 只是以上帝视角, 按模块(手册)的方式叙述. 因此, 我认为, 一个好的课堂, 要顺着历史发展的脚步去讲述, 将历史上, 计算机行业遇到的问题依次放在学生面前, 可以让学生自己思考如何解决, 一个旧的解决方案遇到了什么新问题而失效; 一个技术是在什么背景下被提出.
第一性原理
- 从最基本的原理出发,通过逻辑推理来理解和解决问题的方法,强调回归事物本质。
例如: 如何学习操作系统?
linux
内核代码进过三十多年的发展, 已经几千万行, 不把握好方向, 容易陷进某个细节.
先问自己, 至少满足那些要求的系统, 才能叫做操作系统?
- 管理硬件资源, 向软件提供一个简单的编程接口(api).
- 提高硬件的利用率: 允许多个软件同时运行在一个物理机器上, 并且软件开发者可以假设, 自己的软件独占了这个机器.
从这两点出发, 看历史上 单道批处理系统
-> 多道批处理系统
-> 分时系统
-> 通用操作系统
/ 实时系统
等. 两两之间遇到了什么困境, 使用了哪些技术来解决的.
从历史发展角度学习, 不容易迷失方向, 从这个角度写代码(学习用的代码), 正反馈更高, 1k代码, 就能实现一个多道批处理系统, 能及时看到自己的成果.
沿着历史上成功过的技术, 一路走来, 更容易把握历史的大方向, 在可以预估的未来, 某个领域改何去何从.
推动力
按开发模式分
闭源
最早期, 计算机是专用机器, 由 B2B 的模式发展, 软件是硬件的附属品, 因此, 商业闭源模式诞生, 由公司内部打磨产品, 并向用户提供付费服务.
开源
计算机的本质是便利人, 计算机初步普及之后, 能用上计算机的, 首先是众多开发者. 为了便利自己, 大家会发动主观能动性, 设计自己需要的软件, 并且人与人之间的需求是有共性的, 一个人的需求, 可能是大家共同的需求. 秉持着便利他人, 便利自己的想法(别人能有软件用, 自己的代码bug有人帮你改), 开源模式诞生.
优劣
开源的软件一般功能更多(因为参与人数多), 闭源的软件, 一般性能更强(公司有资源(用户的内部统计数据)去打磨产品).
开源商业模式
通过一些开源许可证, 允许将开源软件用于商业行为, 兼具了二者的优势.
按创新主体分
工业届 and 学术届
计算机的学术界是几乎没法和工业界相比的,早中期的计算机领域的进展几乎都来自于贝尔实验室。
整个计算机领域,除了 算法 和 计算理论. 都是工业界(包括但不限于数据库,编译器,操作系统,程序设计语言,指令集架构,分布式系统,软件架构,网络协议)领先。
学术界的进展有时依赖于工业界已经被淘汰的闭源项目的公开,典型的如Google的分布式文件系统。
计算理论中的内容对计算机领域没有什么实质性影响,目前依旧还活跃的计算复杂性方向的进展主要依赖于具体的算法。
程序设计语言理论对程序设计语言没有什么指导作用,大幅度落后于C++标准委员会和Java标准委员会。其中算法的大部分研究对象和计算机领域本身无关,可落地的主要是分布式计算和机器学习。
国内之所以机器学习比较火,是因为其他领域都被工业界的开源社群组织和大公司垄断了,而搞机器学习比较好发文章,乃至于很多学生认为计算机==机器学习,这才有了所谓学术界和工业界的说法。
作者:Alex Julius
链接:https://www.zhihu.com/question/22273646/answer/3141197721
来源:知乎