Made by 晚安浩宇
本学期有两门学科基础课(DI21004 和 DI21011),一门公共基础课(DI21013):
DI21004 - Computer systems 2A: Architecture fundamentals and Unix 计算机系统 2A(架构基础与Unix)
DI21011 - Multi-paradigm Programming and Data Structures 多范式编程与数据结构
DI21013 - Mathematical Logic in Computing 数理逻辑
以下内容均为23届情况,往后届应该会有变动,内容仅供参考
以下内容均为23届情况,往后届应该会有变动,内容仅供参考
以下内容均为23届情况,往后届应该会有变动,内容仅供参考
以下内容均为23届情况,往后届应该会有变动,内容仅供参考
以下内容均为23届情况,往后届应该会有变动,内容仅供参考
Year 24-25的教师情况:
DI21004 - 王磊(CSU)
DI21011 - 余腊生(CSU)
DI21013 - 谌昭(CSU)
均为中方老师授课
1. 计算机系统 2A
课程时间表:
1-5周:Linux操作系统初步和Bash脚本语言
6周:Assignment 1:Bash Scripting
7-10周:早期电脑(算盘->安提凯西拉->Turing Machine),逻辑门,微处理器和 “获取-运行”周期,总线,LMC
11周:Assignment2:Manchester Baby
12-16周:
内存 (内存空间, 地址解码, 内存映射)
IO chips(SIO/PIO, Polling/Interrupt/DMA)
两个重要的微处理器(MC68000和8086)
汇编器和编译器+解释器
CISC vs RISC, The Stack in RAM, OS
Assignments:
本学期共有两个Assignment和一次考试,其中Assignment 1占20%,Assignment 2占30%,最后的考试占50%。学期中穿插几次关于Linux操作系统和Bash语言的小测,主要是帮助巩固知识点,不占分。
Assignment 1 – Bash Scripting
团队项目,3人
项目时间:第六周发布,第八周周六截止
提交内容:代码(Linux based)+ Report (500-600 words) + 个人 Peer Review
Assignment 内容:
在Linux操作系统中使用Bash脚本语言实现一个文件控制系统,做到版本管理,同时有很多个Extension,实现可以获得额外的分数。
需要的知识:
• 熟练掌握Bash脚本语言
• 一些关于版本管理的知识,可以问老师,可以看网课,可以问GPT
曾经Chris和我说过他认为Bash是最垃圾最无聊最难学的编程语言,我也深信不疑。学Bash和做这个Assignment首先要解决的就是Linux终端编译环境缺少错误检查的问题(C语言等编译器都会提示syntax error 和 semantic error 但是这个Linux终端不会),所以这个Assignment一定一定要一边做一边调试,做完每个功能后都要进行调试。
Project Specification中有一些有歧义的地方一定要问老师,我们这一届做这个项目的时候把一些地方想的太复杂实现的太复杂了。
不是很卡分,但是如果一些功能做的不好导致老师用他的测试文件去测试失败就会扣分,我个人认为比Assignment2得高分的难度稍微大一点点,但是本身难度没有Assignment2大
Assignment 2 - The Manchester Baby
团队项目,2人
项目时间:第十一周发布,第14周周三截止
提交内容:代码(Run on Linux) + Report (700-800 words) + ReadMe说明文件+个人 Peer Review
Assignment 内容:
使用 C/C++ 实现 Manchester Baby (SSEM) 的两个部分:Assembler(将汇编程序转为机器代码并有一定的错误检索能力)和simulator(完整逐步的展示Manchester Baby的Fetch and Execute Cycle)
做基础功能需要的知识:
• C/C++ 语言编程能力(本学期的DI21011会教)
• 汇编器Assembler的两遍扫描和编译原理(学期末才会教,需要提前了解)
• Manchester Baby Simulator的工作原理(课上会教,确保上课就搞懂)
实现拓展功能并取得额外分数的方向:
• 需要自己想一些Specification中没有列出来又很重要的功能并实现
• 编译器Assembler的报错机制(越具体越好)
• Simulator的内存拓展,指令集拓展和寻址模式拓展等
这个项目是我这个学期做的最痛苦的项目
总的来说这是王磊教授进行的一次大胆的课程创新,学期开始的时候王磊教授就说过Manchester Baby这个项目会是我们大一大二做过的最大的项目(后面发现并不是, Scrabble还是永远的神)临近项目发布他突然变脸宣布我们原本5人组全部改组为2人,为了让我们每个人都能参与到项目的伟大建设中来,并安慰我们说他进行了一定的项目简化。(虽然也没有感觉简化多少)但是事实证明这次创新是成功的。
这个项目给我最大的感受就是C++的熟练掌握程度直接决定了这个项目大不大,我花了三周的时间(周末也是一起床就开始写代码)才写出来了一个符合基础和拓展要求的汇编器,中间还一直在改BUG,但是班上有的大神五天就连带编译器和模拟机全部写完了,对于水平一般的同学建议这个项目还是早点开始不然到最后真的有可能做不完。
给分蛮高的,不是很卡分,只要报告写清楚加上做完所有的extension项(包括自己的拓展)就能拿到满分
期末考试
时间为2小时,纸笔,闭卷,时间可以由你们自己和教授商量。
形式:四个Task,每个Task下有很多道小题,每道大题会覆盖一些PPT,第一个Task是Linux操作系统,文件权限和bash command等,第二个关于bash scripting和binary logic,第三个关于CPU,memory,第四个关于IO和一些其他的内容(有点记不清了,内容仅供参考)
学习建议
• PPT上的知识很零碎,但是所有考试的内容都在PPT上,切记要抓大放小,我和我们这一届吸取了上一届的经验教训,对细节复习的很全面(比如我把Linux File System architecture都背下来了),但是考试因为是我们中方教授命题,都很基础并且很简单(比如连逻辑门电路都没考,考了很简单的AND,OR,XOR定义)往后届不知道会怎么样,但是还是建议如同王磊教授说的所有大鱼抓到就行。
• 题目非常重要,王磊教授做完之后就给你隐藏了,以后就看不到了。所以珍惜每次小测的题目!!!必要的时候记下来或者拍下来但是最好不要拍(这是可以说的吗)
• 这一届考的概念题都比较简单而且重要。考到了Manchester Baby的大端序和小端序的定义等。这个学期学到的LMC,Manchester Baby,MC68000和8086都要认真学,考试都会考!!
这一门课本身比较零碎,建议每学完一章或者一个PPT就按时复习或者总结知识点,构建知识图谱。比如Computer System Unit 的三大组件和它们下面的各种知识点,它们怎么相互关联的,每个组件学过哪些有代表性的例子。最后拿高分应该是不难。王磊老师人很尽心负责,讲的课也很通俗易懂,学术英语比较好的同学完全可以跟上老师的节奏学PPT,非常好的一个老师。
2 多范式编程与数据结构:
课程时间表:
1-10周:C语言基础(基础语法,结构体,指针,动态内存分配,文件IO)和部分数据结构(栈,双端队列,图)
11-16周:C++基础(基础语法,OOP三大特性,内存划分和分配等,模板,运算符重载,友元,文件IO等等)和部分数据表结构(栈,队列,堆,哈希表)
学习内容
• C/C++ 语言基础(指针学懂了基本就没什么太大的难点了,C++也就是加上了一个OOP)
• 数据结构及其实现(大部分应该都在大一下那门数据结构课学过,除了图和主要学习在C语言和C++中的实现方式,加了一个指针就会变难一些,而且因为C的内存回收机制缺陷动态分配内存要特别小心不然会导致内存泄漏)
注意:Binary Search Tree并不是一个重点,这学期只会简要讲解,因为大部分我们都在大一下学了
• 涉及到数据结构的算法(比如图的prim算法)排序算法(主要是选择,插入,冒泡,快速,堆排序五种,希尔排序等了解即可)和它们的时间复杂度
Assignments:
在 Year 24-25 中,本课程分为C和C++两部分,每一部分有一个个人Assignment和一次小测(5%+10%)一共30%,一个C和C++的总结项目占20%,和最终的期末考试占50%。
C语言Assignment – 数据结构的实现
个人项目,无需 Pre
提交内容:项目 + Report(有明确的内容板块和评分标准)+代码调试video
Assignment 内容:
在自己的开发环境中用C语言实现栈,队列,双端队列,二叉树中其中一种的数据结构并用自己写的接口写一个算法。
注意:
• 选择最好做的一项做就行了,没必要难为自己。我选的实现栈代码半个小时就写完了,然后我试着实现了一下二叉树结果做了两天
• 只需要按照要求写就行了,不需要额外创新。代码没有太大的问题都是98 99等
• 报告比较繁琐,要写很多东西,画很多图,建议早点开始写不然写不完。
C语言Exam
C语言相较于C++的东西少很多,所以复习起来会比较快。但是一定要多敲代码才能保证最后的一道写代码题能写出来。只要指针搞懂了C的小测基本就没问题了。还有一个比较重要的点就是记得去做一些题,一些比较细节的问题要去做选择题巩固不然会被坑(比如case穿透)这次的小测我考的不太好就是因为我犯病犯太多了选择题就错了很多。
老师上课讲的,老师的PPT,老师给的刷题网站都要去细看,去做,认真做完基本问题就不大了。
我们这一届小测不考学过的数据结构,减轻了很多负担,但是不知道后面几届怎么样
C++ Assignment – ADT Set实现
个人项目 - 无需 Pre
提交内容:项目 + Report(可能有格式要求)+调试代码的video
Assignment 内容:
在 C++ 中实现一个数据结构(链表,哈希表等),在这个基础上去实现一个set的数据结构和它要包含的一些函数,老师给定了这些函数的接口细节。
注意:
• 我选的是用哈希表实现,因为查找起来很快,用链表也可以,不过我没试过。
• 只需要按照要求写就行了,不需要额外创新。代码没有太大的问题都是98 99 100等
• 报告比较繁琐,要写很多东西,画很多图,建议早点开始写不然写不完。记得reference。
C++ Exam
C++的考试相较于C难一点,因为能考的东西比较多,比如OOP,比如模板和any范型编程,比如作用域,运算符重载,友元。一定要多敲代码才能保证最后的一道写代码题能写出来。
复习建议以老师上课讲的笔记和PPT为重点,老师给的刷题网站和B站上的C++网课为辅助。这次小测我印象很深是因为大家考的都不是很好,但是我考的比我C的小测要高了快20分。
老师出题重点是PPT里讲的东西(比如any范型编程)而不是我们自认为的重点(OOP的三大特性啥的)老师上课提到的重点和PPT真的很重要。
结课团队项目-实现一个系统
团队项目 – 3人
提交内容:项目 + Report(可能有格式要求)+调试代码的video
Assignment 内容:
在很多很多给出来的系统中挑选一个实现(比如课表系统,列车时间管理系统,网上购物系统),可以用标准库中的数据结构。
注意:
• 我们组选的是网上购物系统,这个实现起来比较困难而且比较大,包括三个大类(登录/用户管理模块—商品管理模块—购物车/历史购物记录管理模块)
• 需要进行创新,在给定的要求基础上做一些重要且有用的功能拓展。老师也明确说了这个项目会一定程度上卡分,为了区分大家。
• 报告比较繁琐,要写很多东西,画很多图,建议早点开始写不然写不完。记得reference
期末考试:
2小时,闭卷,纸笔
形式:若干道选择,然后是简答题。简答题考数据结构和算法,最后一道8分题是写代码。
无需多言,余腊生教授是最伟大的教授。选择题部分只要把我们考过的小测和给的刷题网站和复习课上给的都弄懂就没有问题了。大题考的数据结构和算法内容也之前上课强调过很多很多次(比如排序算法,图的最短路径和最小生成树,哈希冲突的两种处理方式,都考了)
如果弄不清楚复习的方向,多和老师聊天就行了。老师人很好,最后的期末考试也很简单。
学期末有一个复习课,含金量极高,尽量能记多少记多少
学习建议:
- 一定要做预习,比如在暑假的时候去b站上看黑马程序员的网课,这样上课才能跟上。上课讲的和PPT都很重要,切忌抓小放大。
- 只要多问和多敲代码就一定能学好。我的感觉是经历了大一下学期的Java和Scrabble这两场catastrophe,C和C++这门课反而比Java更好学更容易拿到高分,同时也感谢余腊生教授让我重拾了对于编程的热情。
- 不会的和代码的BUG都可以去问GPT,GPT是你学习最好的老师。
3 数理逻辑
课程时间表:
1-7周:真值表,集合论,命题的证明(没有难度)
8-9周:Project1:mini project/formative project
10-14周:谓词演算,binary relations(稍微难一点)三种推理方式(没有难度)
15-16周:Project2:AI and Mathematical logic
Assignment:
第8周的mini project不计入总分,但是会有Grade和Feedback,形式也和15周的Summative project形式类似,非常有借鉴作用。
15周的Summative project占50%,最后的期末考试占50%
Project1,2:
团队项目- 人数不限,可能以后会变
提交内容:
分为两部分:presentation和 report,每个占这个项目50%的分数,presentation的分数一部分和小组整体有关(team work和 structure)一部分和个人有关(pace和intelligibility)
Assignment 内容:
给定一个方向,选定一个主题,做PPT进行小组报告,然后交一份关于自己调研的主题的report
注意:
- 组队人数不宜过多或者过少,过多会导致一个人几乎没怎么讲就下去了,过少会导致一个人讲很长时间,增加犯错扣分的机会。最后presentation的评分比较严,谌昭教授都是一个一个等级扣的。我们这一届有一个同学准备的不是很充分讲的比较结巴,谌昭教授跟我说他给他pace这一块扣了大分,直接给了D3,还有直接照着PPT念的给了MF3和CF3
Presentation的区分度较高,一定要准备充分!第一年学的Presentation技巧一定要捡起来
- Report给分相对宽容一点,注意一定要内容完整,reference正确,控制在字数以内,有疑问直接问教授。上课教授说的有两个部分在report里很重要并且区别于其他的report的Motivation和Analytical Discussion一定要包含
期末考试:
闭卷,纸笔,一个小时40分钟
含10几道选择题和6道解答题。
只要把PPT上讲的全部搞懂,老师发的practical全部做完问题就不大了。以下是我的一些想说的:
上一届有多难这一届就有多简单。这次考试反而更像个教学事故,可能考前一天开始学第二天上考场都能做个85 90分。
本学期学到的知识可能还没有上一届的一半多,难度更是没得比。关键是稍微难一点的谓词演算和二元关系几乎没考,比较重要也稍微有点难的carton定理,one to one correspondence和阿列夫0也几乎没考,我还花时间去了解了对角线法证明有理数和自然数等势,结果最基础的都没考到。
谌昭教授提到过他出的期末考试题原本题量很大,后面Karen介入了才删掉了一部分。而且他也给我提到过考试很简单。但考虑到上一届提到的很难和去年的calculus II的灾难我还是多学了很多知识,但实在是没有想到会这么简单,100分钟的考试39分钟就做完了,剩下的时间从结论又推回条件推一遍。
谌昭教授也说过他出题和给分都相当宽容,上学期教的离散数学分也高得离谱。如果下一届你们还是谌昭教授教那你们就有福了。
我也提了很多建议给谌昭教授,比如项目添加peer review,比如提高课程难度,比如项目的specification要给清楚,毕竟这是他第一年教DIICSU,第二年或许很多地方也都会更加完善。如果不懂的或者没说清楚的地方一定要及时和他交流,谌昭教授人真的很好。遇到不懂的问题也可以直接问他或者在他的Office hour去数理楼
写在最后:
Acknowledgement:
身处学期末的节点,我衷心感谢这一个学期我的组员,我的朋友们,尤其是我的教授们对我的鼎力支持,没有你们就没有今天的我。
At this moment, standing there, I want to express my deepest gratitude for the dedication and tireless effort of my professors throughout this semester. Your passion for teaching and unwavering commitment to your students have truly set all of you apart as the most inspiring professors I have ever had the privilege to learn from.
You are my torches in my darkest days, illuminating the path forward. Your support and encouragement have been my pillar of strength through challenging times. Your influence extends far beyond the classroom, and I am truly grateful for the positive impact you've had on my academic journey.
I sincerely hope you have a restful break and return next semester with renewed energy and vigor. Thank you for being not just a professor, but a mentor and inspiration.
With sincere appreciation
如果我的总结中有任何问题,欢迎各位在下面留言,不胜感激,祝学弟学妹们都能在这个课最少的学期取得优异的成绩
格式借鉴于WatercoFire学长的:计算机专业 第二学年第一学期 课程学习指南,侵权删