| 选课类别:计划内与自由选修 | 教学类型:理论实验课 |
| 课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
| 课程层次:专业基础 | 学分:4.0 |
本课程作为计算机科学技术专业的入门课程,采取自底向上的教学模式,跨系统地介绍计算机系统的核心概念和设计思想。从介绍计算机系统的底层基础知识开始,逐步上升到操作系统和高级语言程序的接口层,将软件和硬件联系起来,阐述从问题描述到算出结果的七个层次的转换过程:从问题到算法的转换、从算法到高级语言程序的转换、从高级语言程序到(用指令集结构描述的)机器语言程序的转换、从指令集结构到微结构的转换、从微结构到逻辑电路的转换、从逻辑电路到晶体管器件的转换。主要讲授内容包括:从MOS晶体管开始,依次介绍逻辑门、锁存器、各种逻辑结构的设计;然后围绕一个简单的计算机设计LC-3,依次介绍冯?诺伊曼计算机系统模型、指令系统设计、汇编语言程序设计和微结构设计,为初学者建立起对计算机系统的完整认识。在此基础上,介绍汇编语言程序设计、物理设备的输入和输出机制、操作系统的陷入机制和子程序调用和返回机制、以及栈和数据转换的原理和机制。
安虹老师的《计算机系统概论(H)》课旨在从底层构建一台小计算机(LC-3),涉及从门电路到汇编语言的多层次内容。课程前期与数字电路有一些重叠,但也提供了更广泛的计算机系统概念,虽然课程名为概论,却未能全面涵盖计算机系统各模块。课程强调level of abstraction,但实验中未能充分体现这一思想,尤其是汇编语言练习更显繁复。
安虹老师授课细致且从容,时常重复内容以确保学生理解。然而,一些同学反映课程节奏较慢,信息密度低。上课采用英文教材和课件,增强了学生的英语阅读能力。课程还包含多次讨论课,但组织较为松散,收获有限。
课程包括多次作业和实验,作业虽不计分但必须提交,实验部分尤其受到重视,占总评比重较大。实验涉及编写LC-3汇编程序,后期大实验(汇编器和模拟器)工作量大且位于考试周附近,耗时较多。实验报告的详细程度对分数有显著影响,报告要求英文撰写。
期中和期末考试为开卷,题量大且全英文,涵盖抽象思维考察。给分强调实验表现,期末考试结束后有调分,优秀率较高达50%以上。然而,部分年份曾出现临时调整给分策略的情况,引发部分学生不满。
课程的在线资源丰富,包含作业、实验及教材链接,但助教表现不一,回应速度和反馈较为缓慢。一些年级的助教在出题方面过于复杂,增加考试难度。
这门课受益于其对计算机系统的系统性介绍,但在课程安排和给分标准上有调整空间。大部分同学认为课程适合理解底层系统设计,是为后续学习打下基础的好课;然而对于非计科专业选修学生,可能体验不佳,需慎重考虑课程难度和时间投入。
非常赞同前面几位同学的观点:
关于老师:安虹老师是我非常敬重的老师,但是不知道为什么感觉这一学期对待这门课程不像以前所说的那么用心。首先,花了太多时间将开头几章没有太多用处的东西,导致后期的实验太过紧张,只好减少到四次,最后一次实验的DDL还是考完期末考之后的那个周末 ;其次,有两到三次课都因为老师的出差而停上了,老师后来也没有补(虽然这个课没什么补的必要了。。。)
但怎么说,安虹老师毕竟还是我非常,非常敬重的老师之一。
关于助教:确实如同前面几位同学所说,这几个助教全程不知道在干些什么,期中考试的时候很多题目出的有问题,同学向助教反馈了以后助教大言不惭说没问题,快等到考试结束了又突然改条件,让人做得非常不爽。讨论课应该是其中两个助教轮流来听,有一个的助教感觉就十分不耐烦的样子,态度十分恶劣。基本上除了有一个助教长的比较帅以外,没有什么值得称赞的地方。
关于课程:本身课程不难,所以不会有什么学习的压力,甚至我感觉大部分重要的知识都不是老师上课讲到的,而是自己看书看到的,或者是做题时领悟到的。每周都有一次讨论课,安排的也十分不合理,每周都会有三四组同学讲同一个话题,到了第三组往往也就已经乏善可陈。实验确实是一大亮点,每次做完都有一股成就感。尤其是按原先的总评计算方式,大家都非常努力地在做实验。(原先的总评计算方法老师说是:期中*10%+期末*20%+实验*54%+讨论课和课堂表现*15%+签到*1%)。结课前还有汇编器和编译器两次实验有加分,似乎是各五分。但因为本人较菜就没做。
关于给分:期中考完全班哀鸿遍野,但考虑到期中只占10%,大家还是把大部分时间花在上了。期末结束我满心以为按照原先的计算方式不是优秀至少也有3.3,结果教务系统上先登了一次成绩,似乎是出错了,后来更改成绩的时候老师说总评计算方式改为(期中*25%+期末*45%+平时分*30%),其实我期末考的不是非常差(虽然也不是很好了),但好歹也有80+,但就因为期中是50+,所以总评自然不高。
其实老师怎么制定总评计算方式都可以,但是应该提前告诉学生。
而且我总是怀疑,是因为助教没有时间(或许是真的太忙了,或许是懒得看)去认真审视我们的实验代码和报告(毕竟我每次报告都写4000-6000字左右),所以就把平时分降到这么低。然而助教声称是因为我们到课率太低了所以改变总评计算方式(真是可笑之极,老师唯一统计到课率的方式是给大家一起拍张照,显然根据照片逐一排查谁来没来不现实)。
助教最后说优秀率还是有百分之五十以上,如果真的是这样的话,我估计优秀的人大部分都是做了加分实验加分加上去的,少部分可能是期末考得很好,期中也不是很差。
总之,这门课给我的感受就是,那些认真上课,到课,听课的人,反而最后不易拿到好成绩,反而是不怎么听课,但做了加分实验的人能拿到更高的成绩,可能是因为课本上的知识太简单的缘故,但我自己菜没能力用Python写编译器和汇编器怨谁呢?也许这就是H课程本身带有的特性吧。
最后说一句,我依然很敬重安虹老师,但是从这门课讲的内容来看,更多地应该当做一门公选课来帮助外系的同学了解计算机的最简单的硬件组成,开给计科英才班实在不是非常的有用,反而会占用大量时间。
这门课有很多缺点,但是想到高达76的优秀率,这些都是小问题了。
一个一直以来都在探讨的问题是:学习ICS的不可替代性、必要性在哪里?这门课或者说这本书的初衷应该是作为程序员的第一门导论课,但时间上它并不是第一门,内容上前半段大量的是程设或者数电之类的课涉及到的内容,后半段却一头扎进了LC-3的深坑里做无用功。很明显,LC-3是简陋低效甚至不存在于现实世界的,没有任何实用意义。我大概能理解书的作者是以此为例初步总览指令集、数电设计、操作系统、汇编等内容,但课程却误入歧途,舍本逐末。
上面很多评论都在讨论这个问题,而在我们2023级这个问题尤为严重,是因为助教的出题风格更是在歧途上走了太远太远。比如,期中卷有LC-3机器码程序推断,通过加长程序长度、减少提供的信息、构建复杂的跳转结构甚至不惜用16进制写机器码来无谓地增加难度。再比如,期末卷有算周期数的问题,本来这是一件很简单的事,书上有很明确的状态图,但出题时却又要跟程序推断揉到一起,用周期数来反推指令。似乎我们应当成为一名LC-3大师而非初步了解计算机系统的计科学生。不过,助教很负责,除了出题风格之外我能给满分。
吐槽了这么多,我也该给一点学习建议,毕竟H课没得换,总得学。
首先是最后的两个大实验,LC-3汇编器和模拟器,助教提供的模板是C++版本,而且是高度“C++化”,即大量使用了类等功能,一眼就看出不是C。对于没有基础的人,虽说临时抱佛脚也来得及(比如我),但还是建议有时间自学一点C++。不仅如此,还要在Linux虚拟机上面跑,以及简单地用到Makefile。其实这些都不难,但是有所准备更好。
另外,实验的时间和分数的安排值得注意一下。上面提到的期末周附近实验扎堆,这一点很烦。两个大实验ddl大概率推到寒假,实测下来学期内至少把汇编器初步完成是合适的。评论区能找到不止一个学长的开源代码,不过大实验的真正难点其实在于每年新增的附加要求。还有一个问题没人提到过,就是大实验的分数占比其实和小实验是一样的,而且大实验给分很宽松。换句话说,爆肝一个星期半个月的“精美”汇编器对绩点的贡献可能还不如一次小实验的报告的完成度。
还有一个忠告值得反复强调:用第三版的英文原版!不要贪那个中译,第二版和第三版差别真的很大!甚至涉及到LC-3系统区的exception处理。另一个原因是考试作业课件都是英文,不要到考场上还不知道某个常见名词中文啥意思。
说了这么多,还是真心希望这门课能发挥真正的作用,同学们能学到东西。也许可以少讲点LC-3,可以讲点课本后半部分C的内核。也许可以用CSAPP替换ICS(?)
课是好课,但是安虹老师把这个课上成了我2020秋最难受的课之一。
首先是上课信息密度太低,一条指令能讲半小时,于是每节课我选择坐在最后一排的角落里写当天晚上要交的实验报告()其次是教室的问题,一百多号人的课,用3A的教室是不是有点太挤了,每次上课都感觉黑压压的一片,考虑到这里面大部分还是计科英才班的同学,每次上课都让人有一种被dl们压迫的感觉;然后是形同虚设的讨论课,几乎没学到什么,还每次占用一个周末的晚上,唯一的好处可能是教会了我如何从容地面对尴尬的社死场合;然后是实验的布置,实验交上去是没有反馈的,直到最后也不知道自己的实验评价是是什么。
不过课上的收获还是挺大的,相当于提前上了组成原理的一部分内容,帮我省了不少事。
老师的给分也很不错。可能是被之前评课社区的评价吓到了,这门课难度没我想象的那么大,甚至不如同学期的模电,光原等课,作为H课实在是有失水准。
最后还有一点,有个助教很帅/可爱,算是这门课为数不多的好处了吧()