计算机系统概论A(专业基础)
学分:4.0
——by 1/1723, 希望你永远不知道这串数字的含义

引言: 计算机系统概论A与秦始皇
其实上这门课的每一个同学都会注意到, 课程名是 计算系统概论A , 而上教务系统查询, 并不存在另一门叫做计算系统概论B的课程, 只有另一门名字类似的 计算机系统概论(H) 。前者是CS(非英才班), AI, DS三个专业的必修, 后者是CS(英才班)的必修。
按照其他课程的命名规律(例如 编译原理和技术 和 编译原理和技术(H) ), 特意强调 计算系统概论A 是一件很奇怪的事情, 就像哆啦A梦的妹妹叫哆啦美, 野比大雄的两个叔叔叫野比大郎和野比三郎但是他爸叫野比大助一样奇怪。
实际上, 在笔者看来, 这不是一次误用, 而是彰显了课题组的雄心壮志: 誓要把计算机系统概论(下简称为ICS, Introduction to Computer System)的红旗插满全校!
故事的一切要从课程组的安虹老师说起, 2011 年夏季学期, 安虹老师邀请到了大名鼎鼎的 Yale Patt 教授来给科大的同学们上一门选修课 计算机系统概论 ,所用的教材就是他的名著 Introduction to Computing Systems: From Bits and Gates to C and Beyond。
这期间, 安虹老师和Patt交流了什么, 我们不得而知, 只知道之后不久就迎来了ICS这门课程. 据说她一直努力推动全校通修ICS, 所以在更名时特意改成了 计算系统概论A ,这一幕无不像秦始皇当年, 号始皇帝, 想要王朝传千代万代. 可惜随着AI时代的到来, 全校加了一门人工智能的通修课, 恐怕ICS的通修大梦也只能和秦始皇的春秋美梦一样粉碎了.
ICS学什么: 为什么ICS广受差评
上评课社区上我们不难发现, ICS的分数可谓惨不忍睹, 其中不乏有人用长篇大论说明这门课的缺点. 实际上类似定位的课程在其他兄弟高校也存在, 为什么似乎唯独妮可的ICS这样广受诟病呢?
为了理解这个问题, 我们得先清楚ICS到底学习什么, 不妨就从教材说起。 本课程的官方教材是Introduction to Computing Systems: From Bits and Gates to C and Beyond 3rd edition, 这是一本纯英文的教材(当然有一些翻译的尝试, 本人也参与了其中部分章节和插图的翻译), 而市面上主要能买到的中文版教材是第二版。 部分细节上有所出入, 因此大家不可避免的得拥有一本英文版教材(或者至少是附录C的打印版)。
这也带来了 ICS 第一个广为人诟病的地方: 从教材, PPT到作业, 实验, 考试都是全英文的!! 当然, 考试的形式是开卷, 是允许携带字典, 或者临时问助教某些单词的意思。 笔者考试的时候就见到一位女生抱着一个大大的纸箱, 里面装了801面的英文第三版教材, 薄的多但封面也丑的多的第二版中文教材, 打印的习题课PPT和往年题目, 还有一本厚厚的英文词典。 我相信就算这门课没能做到文明其精神, 也能野蛮其体魄。
本书的教材一共有20章, 当然受到课时限制, 基本上只能讲完前9章, 后面的地方也不做考察。 第一章绪论就无需多言, 第二章是整数/浮点数的bit级别的存储, 3-4章讲晶体管, 各种门, 时序逻辑电路, 组合逻辑电路, 5-6章引入了臭名昭著的LC-3指令集, 7-9章讲汇编语言, 队列和栈, 输入输出。
读者看完这些可能仍然一头雾水, 比如浮点数怎么存储和逻辑门看起来比较不相干, 但是我觉得这个顺序还是比较能体现作者对于"计算"的抽象理解. 首先, 我们得定义一些数字的表达方式, 以及一些可以表达数字和进行操作的硬件. 然后就像搭积木一样, 固定硬件的组合变成了二级积木, 二级积木再组合就变成了三级积木。援引冯文俊学长对这门课的描述:
课程开始会从介绍数据在计算机中的表现形式出发,到组成计算机的最基本的电路元件,再到如何使用最基本的电路元件组成一个微型的计算机。一步一步从底层上升,围绕一个简单的计算机设计实例(LC-3),依次介绍冯·诺伊曼计算机系统结构模型。
当然, 这门课的争议点之一也在于这里, 计算机对于抽象做的是很好的. 一个写c程序的人不需要知道编译器的具体行为就能写出可运行的c预研程序, 编译器也不需要关心CPU内部晶体管出问题了怎么办. 更何况现在很多人都开始prompt甚至loop编程, 笔者自己一天敲键盘写的代码也不会超过百行. 这时候再关注底层的意义就有待商榷。
另一部分同学, 他们很好奇底层到底发生了什么. 对于这部分同学, ics同样难以满足他们的需求: LC-3几乎是一个玩具, 连基础的乘法指令都没有提供; 课程节奏有点拖沓, 甚至出现每周的3*45min的上课时间拿出一小时让大家做题讲题的情况。
ICS到底有用吗
客观的说, 这门课在部分内容上有一些浅尝辄止, 涉及范围广而不精, 对AI的直接帮助不大。 就像是一锅大杂烩, 把香菜折耳根辣椒生姜蒜, 昨天剩下的土豆丝和今天新买的河虾一起加进来。 但是就我个人而言, 我愿意给ICS打70分。
我和很多同学都聊过, 我之所以转来aids学院就是因为自己非常讨厌硬件相关的课程, 但是ics作为一门导论的课程并没有涉及太多硬件(当然画晶体管什么的还是看着就头大)。 这门课对我来说更像是一个补全, 让我能知道自己写的一行代码是怎么一层一层向下传递的。
此外我觉得作为aids的学生, 多去探索LLM以外的可能性也是好的。 如果单纯以某门课对LLM是否有帮助来进行价值判断, 多少有些狭隘。 从功利的角度来看, 本科的学院和读研, 工作的方向可能完全不同, 比如你可能几年后在图形学深耕, 在网络组读研. 所以我个人觉得这门课对于所谓 AI native的同学起到了一个拓宽知识面的作用。也许多年后你在做大模型FP4量化的时候, 回想起某个老师在某个课上讲过浮点数标准, 那也算有点作用。
ICS应该怎么学
这门课程相对来说工作量还比较大(当然如果LLM已经发展到可以写LC-3那么可能就小很多了), 有7次左右的作业, 数量近似的实验, 期中考试和期末考试, 以及一个可选的大作业。作业为二等级制, 基本只要提交就是满分; 实验的分数不公布; 大作业可选, 直接总评+3。
如果你只是想考个好成绩, 那么我建议(按重要程度递增):
认真完成作业
仔细研究小测(大部分是往年题, 可能有真题)
对着往年题学习到拟合(题型相对固定)
打印习题课PPT
精确的在大小年中选到最不卷的班级(不同班级的均分可能相差15上下)
汇编在考试中占很大一部分, 其中不乏把一段完整的程序挖掉空, 先要求补全, 再问你输出是什么的神秘题目。可以考虑背诵一些常见的模式, 比如乘法, 阶乘之类的。
此外, 附录C的数据通路部分也非常重要, 经常会出现拿出一个命令, 问信号在整个图上是怎么传递的。

如果你更想花更多的精力在arch/system上, 那么不妨参考CSAPP或者其他相关的课程。 CSAPP内容更偏向软件, 也丰富, 会涉及到cache相关的内容, 指令集y-86相比LC-3更加接近真实场景。并且可以考虑后续继续选修计算机组成原理, 操作系统, 编译原理等课程。(虽然名字叫计算机系统导论, 但是最精神续作的课程居然是组成原理而不是操作, 好扭曲的关系)
可以和我打造一辈子国产基础软硬件体系吗?
