如何去学好一门课¶
转载于JYY的2023 OS第一节课
略有删减
现代方法¶
-
读得懂的教科书
-
问题驱动,用代码说话
- Demo 小程序、各类系统工具 (strace, gdb, ...) 的使用
- xv6-riscv, AbstractMachine
计算机学生必须具备的核心素质¶
- 是一个合格的操作系统用户
- 会 STFW/RTFM 自己动手解决问题
- 不怕使用任何命令行工具
- vim, tmux, grep, gcc, binutils, ...
- 不怕写代码
- 能管理一定规模 (数千行) 的代码
- 能在出 bug 时默念 “机器永远是对的、我肯定能调出来的”
- 然后开始用正确的工具/方法调试
给 “学渣” 们的贴心提示:不要尝试 “架空学习”,回头补基础
比如觉得C编程学的不好,就去补C基础。如果觉得计算机基础学的不好,就去学计算机基础。
不要硬着头皮往下越学越吃力,得不到正反馈
0.Academic Integrity¶
- 对 “不应该做的事情” 有清楚的认识
- 不将代码上传到互联网
- 主动不参考别人完成的实验代码
- 不使用他人测试用例 (depends)
- 有些行为可能使你得到分数,但失去应有的训练
1.成为Power User¶
感到 Linux/PowerShell/... 很难用?
- 没有建立信心、没有理解基本逻辑
- 没有找对材料/没有多问 “能不能再做点什么”
- Baidu v.s. Google/Github/SO v.s. ChatGPT
- 没有用对工具 (man v.s. tldr; 该用 IDE 就别 Vim)
- 过了入门阶段,都会好起来
如果一件事很困难,通常是因为没有找到正确的方法。这门课程中绝大部分的内容都可以在互联网上找到适当的学习资料。在互联网/搜索引擎普及的时代,只要掌握 “提出问题” 的能力,就能极快地提升自己。同时,这可能将在 AI 时代被颠覆——AI 可能会猜测你的目的,并且告诉你 “应该去做什么”。
2.学会写代码¶
写代码 = 创造有趣的东西
- 命令行 + 浏览器就是全世界
- 不需要讲语言特性、设计模式、……
- 编就对了;你自然而然会需要它们的
最重要的:Get Your Hands Dirty¶
听课看书都不重要。独立完成编程作业即可理解操作系统。
应用视角 (设计):Mini Labs x 6
- 使用 OS API 实现 “黑科技” 代码
硬件视角 (实现):OS Labs x 5
- 自己动手实现一个真正的操作系统
全部 Online Judge
- 代码不规范 →
-Wall -Werror
编译出错 - 代码不可移植 → 编译/运行时出错:
int x = (int)&y;
- 硬编码路径/文件名 → 运行时出错:
open("/home/a/b", ...)