对于大三上三门课的一些想法

偷懒打鱼了一段时间,终于考完试可以更博了。连着三场考试在一天半之内考完,着实考验时间管理能力和抗压能力。不过好在一切圆满结束,大三上学期也画上了句号。

这学期只有三门主课,比之前着实轻松了不少。但不知怎的,也比之前几个学期稍显懈怠了一些,past year paper 也没有很认真地再刷,像大一那种刚入学的热情似乎已经消退了不少吧。不过话虽如此,今天更新这篇博客的目的呢,也算是回顾一下这学期三门主课的学习路程吧。

CZ2005 Operating System 操作系统

OS 这门课可以说是计算机科学中最基础的一门课了,不仅如此,它在帮助你理解计算机原理的方面是非常重要的。譬如,进程(process)和线程(thread)的差别、在 CPU 中,进程是如何相互协作的、在协作中如何保证数据更新不会出现不准确的情况等。掌握好这一门课,对于计算机的了解十分有益。但这门课的缺点就是,太抽象了。如果不是具备了坚实的计算机科学基础,如数字逻辑(digital logic)和计算机组织架构(computer organization & architecture)的话,OS 其中的很多概念都很难理解。建议在学习 OS 之前,应该认真复习数字逻辑于计算机组织架构中所学到的知识点,打好基础。

CZ2007 Introduction To Database 数据库入门

DB 这门课是十分实用的一门课,因为在工作中,作为一名 Software Engineer,你无可避免地会接触到数据库。因此,掌握数据库的运用是十分有必要的。这门课主要分为两个部分,数据库概念和 SQL。

其中 SQL 我是非常熟悉的,从理工学院开始就一直接触并应用各种 select 查询的命令了。但这门课除了基本的 select、insert、update 和 delete 之外,着重介绍了 trigger、constraint check、assertion 和 view 这类 Software Engineer 较少使用到的功能。虽然不常用到,但如果将来的职业规划是做 Database Administrator 的话,还是大有用处的。

另一部分,数据库概念包括了,Entity Relationship Diagram (ERD), Normalization Form (NF) 和 Relational Algebra(RA)。

  • ERD 是很实用的概念,它可以使你系统性地把需求的描述从文字转化为数据库的设计,实际工作中大概率都会用到。
  • NF 也是非常实用的概念。如果将来要设计数据库的话,必须要懂得 NF。因为 NF 可以帮助你设计更高效运作的数据库,减少数据冗余,也就是重复的数据,从而达到更准确的操作。
  • RA 是我在这门课之前从未听说过的。简单地来说,就是利用代数的形式来解释数据的查询。因为我是先接触 SQL 的,RA 相当于是把 SQL 抽象化出来用代数表示,稍加习惯便可。也许是因为我已经接触过 SQL 了,我并不认为 RA 使我对数据关系的理解有太多的提升。

CZ3002 Advanced Software Engineering 高级软件工程

这一门水课我实在是无力吐槽。相比起 CZ2006 软件工程有更多的概念要记以及更多的文档要写。Project 的内容也是十分的迷,据说内容并不重要,重要的是格式,因为我们得模拟真实的项目管理工作。在概念上,以项目管理、敏捷开发、版本控制等方面为主,该介绍的部分也都介绍了。但有一些东西我认为实在是没什么用,比如用来计算成本的 COCOMO 模型,一个莫名其妙的公式,一堆莫名其妙的 magic numbers 满天飞,然后又莫名其妙地算出一个项目期限和所需开发人头数。这真的靠谱?真的大丈夫?我想现实中应该没有哪家公司是用这种方法来管理项目吧???

对于这门课,我更希望能做一些正儿八经的软件开发,并且以此为主。如果是真的主要学项目管理的话,我认为更多的 case study 才是必要的,学学真实世界的案例,关起门来学概念并没有什么用,除了让你的分数好看以外,真的什么都学不到。

小小结一下

不管考得好与不好,大三下也已经结束了。我也不知这次是不是还能站稳在 4.50 这条钢丝上,但尽全力去做总是好的。接下来要开始忙我的 FYP 了,又是一波愉快的自虐。插句题外话,最后一门考试结束我还没出考场,我坐在考位上就收到 prof 发来的 email 问我 FYP 做得怎么样了。额,这真是催命啊…不过下周就应该开始了,deeplearning.ai 继续学起~