🤔高程Project设计与思考

status
Published
type
Post
date
Mar 24, 2025
slug
ap-project
summary
本文介绍了高级程序设计的期末大作业设计思路,以及对本门课程的一些思考。
tags
思考
category
随笔
icon
password
💡
本文是南京大学计科 高级程序设计 25 spring 期末大作业的设计,及助教过程中的思考。笔者在 24 spring 修读本课程,取得了 90 分的成绩,在 25 spring 担任这门课的助教,并完全负责期末大作业的设计工作。
先奉上 GitHub 仓库:
Kniflash
AryxisUpdated Apr 8, 2026

期末大作业的设计

本门课程的期末大作业,按照往届惯例,是用 Qt/C++ 开发一个小游戏。不过,作业为助教负责布置,助教们也没什么时间把心思放在游戏 idea 上,所以基本上是借鉴现有的游戏,进行阉割或改编。我修读的 24 spring 是一个塔防游戏,之前还做过异形工厂、环世界什么的。
上次修读时,期末那一个月基本上全是在赶这个作业,给我留下了不小的心理阴影。这学期轮到我来设计,肯定要给学弟学妹们手下留情,因此我在写大作业文档时遵守这些规则:
  1. 难度一定要适中,并且尽量控制开放程度。期末大作业依托课程设计,目的在于锻炼编程能力而不是游戏开发能力,甚至 Qt 也不是必须的(只是为了学习面向对象编程)。这只是一个作业而已,上学期我花了太多时间在这个上面,我不希望这个作业影响到同学们的心理健康。
  1. 描述一定要精准。尽量不出现歧义,CS 尤其是 OJ 描述极有可能出现歧义,导致 100 个人写出 100 个实现。虽然这是一个项目,可以有一定程度的自由发挥,但是在具体得分的地方还是尽可能精准为好。
  1. 尽力让做完项目的同学收获更多东西。此时我也只是一个大二学生,编程才刚学一年多,因此论知识可能不比来上课的同学丰富,仅仅比他们多上了一年学而已,大部分都是现学现卖。
首先是游戏 idea,本次项目选择了“转刀游戏”这个主题,借鉴了逛 CrazyGames 时遇到的一个挺好玩的游戏(点此体验)。 这个游戏界面简单,玩法丰富,很适合拿来做期末项目😋。
然后就是项目设计了。我参考了往届的两个项目手册,并砍掉了一些个人觉得不太必要的地方(比如强制使用异常处理)。至于难度方面,这个就见仁见智了,我只能说从零开始熟悉一个库并用它来做项目着实不易,但是这门课向来如此,每年的期末大项目都是用 Qt 写游戏,我能做的就是深度体验这个游戏,仔细斟酌手册中描述的每一句话,尽可能做到循序渐进和没有歧义。由于手册写得有一些长,为了让同学们在实现时快速抓住重点,我在每一章的结尾都写了一个任务清单,保证评分标准公开透明。
为了让同学们学到更多东西,我也是将上大学以来积攒的经验在手册里倾囊相授了。首先是 Markdown,这几乎是对我本人影响最大的一门语言了,改变了我记录和思考的方式。大一上的时候我还拿着平板在写写画画,从大一下开始我每天都会面对数个 Markdown 文件,通过 Typora 进行写作(typoratyporaA new way to read & write Markdown 是我最喜欢的 Markdown 写作工具,也是我认为买的最值的软件)。关于这个项目,我引入 Markdown 的方式是项目文档,通过让学生写项目文档来熟悉 Markdown。项目文档的要求来自 Project 2: Gitlet | CS 61B Spring 2021
其次是 clang-format 自动格式化代码。这个工具我第一次知道时惊为天人,世界上竟然还有如此之工具,我立刻在所有 C/C++ 仓库都加上了 .clang-format 文件。有一个 formatOnSave 的格式化工具,真的可以减轻很多编码负担。
最后,是关于如何学好 CS 的一点点经验。当了助教才发现,有相当一部分不是计科的同学来选修这门课,他们可能之前只有一点基础,想通过这门课程学 C++(傻孩子们,快跑吧),因此更需要让学生们了解一下 CS 的“自学传统”和”提问技巧“这两个问题。
综上,这也算是我一个挺用心的项目手册了,在具体实施时确实获得了同学们的好评。我也通过书写手册了解了很多东西,算是用心投入的回报吧。下面附上手册的最终版:

关于这门课的一些思考

高级程序设计这门课,其实一直以来都风评褒贬不一,劝退力度很大,知乎上甚至有拖了好几个学期也不敢来上的同学。究其原因,我认为是这门课程的教学方法有一些问题。作为大一下开展的一门编程课,其 OJ 基本上全是数据结构与算法的内容。课堂讲 C++ 编程语言,OJ 来写算法题,本身是比较割裂的。另一方面,OJ 和项目全为助教负责,导致难度完全取决于助教的心情和水平。而这门课的学生呢?跨专业的就不说了,CS 本院学生,如果没有基础的话,大部分只学过微积分和一点点编程。大一上的程序设计基础(C 语言)和 SICP (Python) 是二选一,如果选择了 SICP,那确实得到了不小的训练,但是这些同学可能连 C++ stl 都不会用,怎么会写算法题。听说 26 spring 这门课变成必修的,而且 OJ 全程断网在机房限时做,对同学们的要求更高了。作为曾经的助教,肯定是希望这门课程越来越好,可现实是这种模式在很长一段时间都不会有所改观,每年一换的助教也使得每次 OJ 和项目的方差较大。只能期待 jyy 的教改大手颠覆呢喃 CS 的教学体系了(bushi)。
 
Loading...

© Qiyue Zhang 2026