Notes · 2024.10.19

课设 100 分

数据结构课程设计。

1 min · school · code

成绩单刷新出来,数据结构课程设计那一格是 100。我先截了一张图,又把仓库里最后一次提交的时间对了一下。好看的是分数。当时交上去的是一份能跑、能讲、边界有测试的程序。老师不看你同时在准备国创。截止时间就一个。

机房的空调有点过冷。邻座在改报告封面的学号。我把演示用的输入文件单独放进 demo/,再写了一份最短操作步骤:打开、导入、查、插、删、把越界那一次也点出来。步骤超过一页我就删。答辩老师时间短,不会陪你走完所有菜单。

先冻住能跑的那一包

课设做到后半段,人会想「再抽一层会更漂亮」。漂亮和能交不是同一件事。我吃过亏:头天晚上把链表改成更「教科书」的写法,第二天演示插入卡在空表。从那次起,能跑的版本先打成压缩包,文件名带日期。改结构之前允许自己玩;改坏了滚回那一包,不要在答辩当天凌晨赌手感。

测试我写得很土。空输入、重复键、删一个不存在的结点、文件读到一半断掉。有的测例老师未必看。我自己看。看过才知道哪条路径只在自己电脑上成立。Windows 和机房那台机器路径分隔符不一样,相对路径写错一次,演示就会停在打开文件的对话框里。后来我把数据文件和可执行放在同一层,步骤里写死「不要改目录」。

老师给 100,评的是作业完成度和现场能讲清。我没有把 100 理解成「算法研究」。课设范围就那么大。范围外的优化,交完再做,做了也不写进报告,免得报告和程序对不上。

机房那台机器和宿舍电脑差在磁盘权限和杀毒软件。宿舍能写的临时文件,机房可能写不了。我把临时文件改到程序目录下的 tmp/,演示前先清空再生成一份。清空这一步写进步骤第三条。第三条漏了,老师点开会看见上次调试留下的乱文件名。乱文件名不扣你算法分,扣的是现场观感。观感在 100 分这种齐的作业里很显。

截止和答辩撞周

同一周里课设截止和项目答辩撞上过。睡眠切成两段,两段都不够。那一周我把课设的演示数据冻住,只改注释和报告里的截图;项目那边只动评委可能问的三页。其余想改的结构,写在一个 later.txt 里,周末再动。

国创材料就在同一个硬盘分区。评委问的是数据从哪来、一个智能体挂了怎么办。课设老师问的是你的树怎么遍历、复杂度你自己算过没有。两套问题不能混着答。对着课设说多智能体,老师会皱眉;对着评委讲中序遍历,评委会看表。

我把两个闹钟分开设。一个叫「课设冻结」,一个叫「路演再录」。冻结之后禁止大改。再录的时候用冻结后的课设当背景噪音:它已经结束了,不要再打开。

树、图、哈希,课设里常见。我实现里把接口先定:插入返回什么、查找失败返回什么、遍历输出顺序。接口不定就写内部,内部改一次,演示步骤全要重录。重录比写代码烦。烦了就会想跳过失败演示。失败演示跳过,老师随手输入一个不存在的键,现场就停。停过一次之后,我把失败输入写进步骤第二页,第二页只有三行,三行都是会出错的操作。出错要按预期出错。预期出错才叫测试,不叫事故。

报告比代码更容易扣分

代码能跑,报告仍可能写崩。我见过自己一稿:截图是旧界面,正文还在写已经删掉的按钮。老师对报告的耐心比对代码短。目录、功能列表、测试表、复杂度,四块对齐,比多写两段「设计思想」有用。

测试表我按「输入 / 预期 / 实际」三列。实际那一列必须是跑出来的,不要抄预期。有一次实际和预期不一致,我改的是程序,没有改表去迁就。迁就表是自己骗自己,答辩被问到会当场穿帮。

复杂度那一节很多人抄课件。我只写自己实现里真正走的那条:平均和最坏分开,最坏给一个具体输入规模。老师若追问,我能在白板上比划。比划不出来的句子,删。

截图窗口我切成只留程序。聊天、赛的稿、排名页,都可能在任务栏闪。闪到报告里,老师会笑,笑完该扣还是扣。交之前把报告打印预览翻一遍,页码、图号、功能列表对程序菜单。菜单改过名字,列表没改,是最常见的穿帮。穿帮一次,100 分会变成口头解释。口头解释我不想要。我想要包和报告自己站着。

后来还在用的习惯

后来做检测平台、做接口,仍是这套:先有一条能复现的路径,再加功能。路径的意思是,从冷启动到出结果,中间每一步有日志。功能可以第二天再加。答辩前一晚加的功能,课设里害过我,项目里也会害。

100 分留在成绩单上。仓库里那份冻结包我也留着。下一次课设或者下一次演示,先把包的习惯搬过去,再谈新结构。新结构没有冻结包托底,我不敢在截止当天动。