今天(昨天) DS 考完试结课,第一次上姥姥的课有点感慨,晚上正好没有事情趁闲写一个总结。
高中从 OI 过来的同学应该都会不太重视 DS 以及接下来的 ADS 课程,因为这两门课里面学的数据结构以及算法在高中的时候已经被我们写得滚瓜烂熟了。但是结课后再想想,其实认真学与否真的存在很大差别。
写程序时心态的变化
栈、表、队列、堆,这些最基础的数据结构和 DFS、BFS 这种最基本的算法我们几乎已经熟悉到可以无视他们的地步了。但是他们是出于什么目的被设计出来的、其中有哪些需要注意的地方,是只学 OI 很难接触到的。看到作者在书上每一次
、 1
malloc
等都要检查内存溢出,每一个可能出现不可预知错误的地方都会加上处理,就突然明白这作者其实是在以软件开发的角度在教学,与单纯做题不是同一个等级。1
pop
我们用的这本教材给出了比较详细的代码实现。每个数据结构都会根据 ADT 先把所有的操作和结构定义在头文件中给出,然后再在实现文件中给出具体的代码。开始的时候按照这种方法写了栈和队列的实现,感觉比之前想用的时候直接在具体的程序中撸一个要优雅和靠谱许多。后来时间太紧张就没再继续,想想如果每个都坚持这样做,课程结束的时候就可以拥有一个自己写的库了。虽然不比成熟的库实现,但作为课程的一项成果也是蛮好的。
代码风格的变化
命名方面,书上的代码基本上所有的变量、函数都用了首字母大写的驼峰命名法,我在实现的时候感觉略微不科学。在 OOP 中,首字母大写通常表示类名,在 C 里完全没有必要这样做(而且按得好麻烦啊)。一般来说,使用
声明的结构名,比如 1
typedef
、1
List
这样做有类似 OOP 中类的意思,是可以说通的,不过函数和普通变量感觉就没有必要了。1
Heap
另一个印象比较深刻的地方就是指针的显式化命名,比如
和 1
node
避免了打很多星号,也在变量声明的时候就说明了含义。1
typedef node *ptrToNode
报告
姥姥对报告格式内容要求很严格,我觉得是很有道理的。平时很多同学写报告的时候不太注意格式,即使用 Word ,方式也不太正确。排版其实也是门学问,应该正确使用 Word 的模板定义功能,让文字处理软件知道这里的内容属于哪一部分,而不是通篇都使用正文,最后再手动逐个调字号字体。正式报告英文正文应该使用 Times New Roman ,代码使用等宽的 Courier New 应该都是最基本的常识(最起码不要用 Comic Sans)。不过写了这么多报告,还是觉得这些文字处理工具都多多少少的有点 buggy ,所以用了 LaTeX(这应该开一个新坑来讲)。这里不多说,总之排版是很重要的事情,能做 Best Report Writer 也是一件值得骄傲的事情。
总结
姥姥上课是很认真地在讲课,连包袱都很认真地抛(虽然不好笑)。所以觉得选上姥姥的课但没认真上课的同学真的很可惜(后来快考试周我也没认真听,有点后悔)。对比学院其他专业课的老师,有的是科研型,科研做得很厉害但是对教学一点也不重视,上课就只是念 PPT ,还有的是虽然很认真,但逻辑真的很混乱,听课还不如自学。真正教学到姥姥这个水平的很少。我觉得如果学校能把教学重视起来,根本不会有那么多挂科的同学。我周围很多人挂科都是因为老师实在讲得太烂,上课听不进去,自学又不得法,最后只能放弃。暑假上的 Patt 的课和这学期上的姥姥的课让我感觉好老师真的还是很重要的,同时也是很少的。所以才要更努力去一个比较靠谱的学校吧。
冬学期要把每门课都跟上。