Computer Science 的主线

看看 csrankings 上的大类 (排名仅供娱乐)

  • Theory
    • 什么是 “计算”
  • Systems
    • 什么是 “计算机”
  • AI
    • 如何用 “计算”、“计算机” (和数据) 实现智能
  • Interdisciplinary

我们是如何 “approach” 计算机科学的?

  • By talking to computers (via programming languages)

学编程语言时的痛苦与迷茫

虽然被教育 “机器永远是对的”,但它怎么就不对呢?

  • 因为程序是状态机 (严格的数学对象)
    • 编程语言是你第一次遇上 “无情执行指令的机器”
  • 过去的数学从未如此严格
    • 哪怕是阅卷的数学老师,都有可能被你骗过
      • (考试通过结果 “校验” 你的过程,老师并不喜欢证明题)
        • 有点像 zero-knowledge proof

人类有趣的本能

  • NOI2023 江苏省代表队选拔赛选手:坚持认为 Segmentation Fault 是因为机器出问题了

为什么?该怎么办?

写 “好” 的程序

  • (我反对编程自学,当然前提是你的老师会 “编程”)
    • 不言自明
    • 不言自证
    • 据调试理论,还有 “能帮助理解状态机执行”

一个有趣的例子:dsu.c

  • 如何对应到上面几点?

精益求精

代码里的细节

  • Guidelines
  • 变量起哪些名字?
    • 编程学习的革命:AskGPT: Is it a good idea to use variable name "rc" for a variable holding a 0/-1 return value of an API/system call in C?
      • 服气:我十多年 RTFSC 积累的经验,在 AI 面前一文不值
    • 软件工程早有这种研究
      • 可惜走上了刷 accuracy 的不归路
  • 还有哪些可能的写法?
    • memcpy 还是结构体赋值?

另一个例子

mosaic.py

  • Following PEP-8
  • 每行 80 个字符不会出现 “过度复杂的行”

On the Naturalness of Programs

程序是人类世界需求向数字世界的投影

  • 状态机、计算过程和自然语言
  • AI 编程的兴起

Programming for fun

Timothy Roscoe's Keynote on OSDI/ATC'21

我们置身变化的世界中 (常看常新)