跳转至

如何去学好一门课

转载于JYY的2023 OS第一节课

略有删减

现代方法

  • 读得懂的教科书

  • 问题驱动,用代码说话

    • Demo 小程序、各类系统工具 (strace, gdb, ...) 的使用
    • xv6-riscv, AbstractMachine

计算机学生必须具备的核心素质

  1. 是一个合格的操作系统用户
    • 会 STFW/RTFM 自己动手解决问题
    • 不怕使用任何命令行工具
      • vim, tmux, grep, gcc, binutils, ...
  2. 不怕写代码
    • 能管理一定规模 (数千行) 的代码
    • 能在出 bug 时默念 “机器永远是对的、我肯定能调出来的”
      • 然后开始用正确的工具/方法调试

给 “学渣” 们的贴心提示:不要尝试 “架空学习”,回头补基础

比如觉得C编程学的不好,就去补C基础。如果觉得计算机基础学的不好,就去学计算机基础。

不要硬着头皮往下越学越吃力,得不到正反馈

0.Academic Integrity

  • 对 “不应该做的事情” 有清楚的认识
    • 不将代码上传到互联网
    • 主动不参考别人完成的实验代码
    • 不使用他人测试用例 (depends)
  • 有些行为可能使你得到分数,但失去应有的训练

1.成为Power User

感到 Linux/PowerShell/... 很难用?

  1. 没有建立信心、没有理解基本逻辑
  2. 没有找对材料/没有多问 “能不能再做点什么”
    • Baidu v.s. Google/Github/SO v.s. ChatGPT
  3. 没有用对工具 (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", ...)