临危受命。本文可能会被持续改进。
Made by WaterCoFire
本学期中将有三门专业相关课,包括两个学科基础课以及一门公共基础课:
- DI21004 - Computer systems 2A: Architecture fundamentals and Unix 计算机系统 2A(架构基础与Unix)
- DI21011 - Multi-paradigm Programming and Data Structures 多范式编程与数据结构
- DI21013 - Mathematical Logic in Computing 数理逻辑
均采用英文授课。
Year 23-24 中的教师情况:
DI21004 - 王磊(CSU)
DI21011 - 余腊生(CSU)
DI21013 - 刘路(CSU)
1 计算机系统 2A
它叫“2A”的原因是因为第二学期有“2B”。
学习内容
- Unix/Linux 操作系统
- BASH 脚本
- 计算机的基础特性,演变历史,冯诺依曼架构
- 微处理器的“获取-执行”周期
- 操作系统入门
Assignments
在 Year 23-24 中,本课程设置了两个Assignments:(仅供参考,请以实际为准)
Assignment 1 - Shell Scripting with Bash
团队项目,3人
提交内容:项目 + Report (500-600 words) + 个人 Peer Review
无需 Pre
Assignment 内容:
在 Linux 中使用 BASH 脚本,实现一个简易的版本控制系统(类似Git),对文件实现版本管理。
需要的知识:
- 掌握 BASH 脚本语言及其执行(课程将覆盖)
- 对版本控制系统的管理逻辑有一定了解(不会讲太多这个,需要自己了解)
Assignment 2 - The Manchester Baby
团队项目,5人
提交内容:项目 + Report (700-800 words) + 个人 Peer Review
无需 Pre
Assignment 内容:
使用 C/C++ 实现 Manchester Baby (SSEM) 的硬件(执行二进制机器码)和汇编程序(将汇编语言转译为机器码)。
需要的知识:
- 熟悉 C/C++ 语言(本课程不会教语言本身,但同步进行的多范式编程课程会教)
- 了解 Manchester Baby 机器的原理(很重要!确保上课搞懂)
- 了解处理器的“获取-运行”周期(也很重要)
- (Optional) 掌握 C/C++ 图形库(比如Qt),因为实现 GUI 能获得额外分数
考试
期末考试时间为2小时,纸笔,闭卷
形式:4道大题,每道大题由多个小题组成(含选择、填空、简答、写代码)等,每道大题覆盖一个方向(如一个大题考Linux操作系统)
学习建议
- PPT课件上覆盖的知识点很全,王磊保证所有的考试内容都在PPT里
- 考的很多都是一些细节,复习的时候要留意,比如期末考试考到了根文件的inode是多少。
- Lab中的所有题型都要掌握(比如画那个架构图),期末考试会考一样的,只是变个样子变个数据
- 会考概念题,包括某某的定义,甚至考到了举一例模拟计算机这种,知道和用英文准确表述出来是两码事
2 多范式编程与数据结构
学习内容
- C/C++ 语言基础和编译原理
- 数据结构及其实现(大部分应该都在大一下那门数据结构课学过,主要学习在C语言中实现方式,比如利用指针特性这些)
- 一些排序算法
Assignments
在 Year 23-24 中,本课程设置了四个Assignments:(仅供参考,请以实际为准)
特别注意:关于这个课我的记忆较淡,以下信息可能与当时实际略有出入
Assignment 1 - 栈的实现
个人项目,无需 Pre
提交内容:项目 + Report(可能有格式要求)
Assignment 内容:
在C语言中实现栈数据结构,并自主编写程序实现一系列数据操作(如push, pull, traverse这些)。
需要的知识:
- 除必备的C语言基础外,掌握struct、指针等C语言知识
- 了解栈数据结构(这个大家应该都会了)
Assignment 2 - 学生管理系统
团队项目 - 3人
提交内容:项目 + Report(可能有格式要求)
无需 Pre
Assignment 内容:
在C语言中利用数据结构实现学生管理系统。
需要的知识:
- 相关数据结构知识(下同,由于我忘记当时的很多细节了因此这里不敢说,以防误人子弟)
Assignment 3 - 哈希表
个人项目 - 无需 Pre
提交内容:项目 + Report(可能有格式要求)
Assignment 内容:
在 C++ 中实现哈希表。
Assignment 4 - 排序算法
个人项目 - 无需 Pre
提交内容:项目 + Report(可能有格式要求)
Assignment 内容:
在 C++ 中实现一些常见的排序算法,如冒泡排序,选择排序等。
考试
整个学期中穿插着2次小测,每次大约1小时,闭卷,纸笔,覆盖截至当时所学的内容(应该是算入平时分)
还有最后的期末考试,2小时,闭卷,纸笔
形式:若干道选择,然后是简答(含概念性较强的解释题,比如这段代码中哪里出现了问题,C语言与Java相比的内存回收机制缺陷)、代码补全等
学习建议
- 这不是老师的问题,但C/C++天生就具备难学、且很搞人心态的特征。建议课外补充一些书籍/网课等,比如我经常不懂就去看C++ Primer Plus。
3 数理逻辑
学习内容
????????????(是我故意打的)
作业
整个学期中穿插着若干次作业。会有专门的课讲一系列例题,然后作业是一些类似的题。
考试
开卷,纸笔,2个小时
含若干道解答题
刘路说过,它本应是闭卷的,但希望减轻我们的负担(但由于题量较大,当时全程我个人没时间翻材料,我估计大部分人也是)
学习建议
- 发现自己课上听不懂太正常了。
- 这是这学期的所有课程中(包括近代史等公共课在内)我最不建议“平时摆烂,期末突击”的一门课。
- 这是需要一门大量去问老师,结合自己“悟”的课程。这门课虽是数学,但并不是那种算来算去的,反而是逻辑性很强,或者说“哲理”性很强的课程。你需要像哲学家一样,多去思考,多去“悟”,问老师,问同学,问GPT。
- 作业如果不会做,可以偷偷地去找并“参考”一下答案。但麻烦至少确保自己最后算是搞懂了,不要只知道“借鉴”。
写在最后:
感谢您看到这里。
由于撰写的时间有限,且写的时候确实很难去找准一个方向(去猜测各位学弟学妹们更偏重的点)仔细地写,因此整篇其实写的很浅,可能有一些各位希望了解的点这里没有提到。So if that's the case, 请 do not hesitate to 在评论内提出。
如果这篇给大家带来哪怕一丝丝帮助那我也不胜荣幸。