在编程学习中,学生最需要的不只是题目和判题结果,还需要一种持续可见的反馈。
一道题从 Wrong Answer 到 Accepted,可能只是一行代码的修改;但对学生来说,这是一次理解、调试、坚持和突破。传统 OJ 往往只记录提交结果,却很少把这些学习过程转化为清晰的成长画像。
因此,我们在 OJ 系统中加入了用户档案、荣誉墙、365 天贡献格和勋章机制。它们共同组成了一套面向青少年编程学习的激励系统:既展示成果,也记录坚持;既鼓励优秀,也避免简单地奖励刷提交次数。
什么是 OJ 用户档案?

OJ 用户档案是每个学生的公开学习主页。
它不是简单的个人资料页,而是一个编程学习档案。学生可以在这里看到自己的 AC 题数、荣誉积分、连续练习天数、已获得勋章、365 天学习贡献格、最近 AC 记录、普通练习/考试表现、语言分布和知识点覆盖情况。
档案的作用是把零散的练习记录变成一个完整的成长故事。
学生不再只能看到某一次提交是否通过,而是能看到:
- 我已经解决了多少道题?
- 我最近有没有持续练习?
- 我在哪些类型的题目上更擅长?
- 我是否完成了难题突破?
- 我有没有在普通练习或考试中拿到满分?
- 我的学习轨迹是否越来越稳定?
这些信息会让学生更容易建立目标感,也让老师和家长更容易理解学生的学习状态。
荣誉墙:展示稳定成就,而不是刷提交次数

荣誉墙是 OJ 系统中的公开榜单入口。
它不是简单的提交次数排行榜。因为如果只按提交次数排名,学生可能会为了排名频繁提交无效代码,反而削弱学习质量。
当前荣誉墙更关注这些健康指标:
- 去重 AC 题数
- 难题 AC 加成
- 普通练习/考试满分次数
- 普通练习/考试参与情况
- 最近 30 天成长表现
荣誉墙包含多个榜单:
- 总榜:展示长期综合荣誉积分。
- 月度成长榜:鼓励最近 30 天有进步、有练习的学生。
- AC 榜:关注去重解决题目数量。
- 比赛荣耀榜:展示普通练习/考试中的优秀表现。
这样的设计可以避免“谁提交多谁排名高”的问题,让榜单更接近真实学习成果。
365 天贡献格:记录每天的学习痕迹
档案页面中的 365 天贡献格类似 GitHub contributions。
每一个小格子代表一天的学习活动。颜色越深,说明当天有效学习行为越多。贡献格统计的不只是提交次数,还包括 AC、新解决题、客观题/问答题作答和普通练习/考试参与。
每日贡献值由这些行为组成:
- 当天提交次数
- 当天 AC 次数
- 当天新增解决题数
- 当天客观题/问答题有效作答次数
- 当天普通练习/考试参与次数
这种设计的重点不是制造压力,而是让学生看见自己的坚持。
对很多学生来说,一整片连续的学习格子会带来很强的成就感。它告诉学生:你不是只在某一天完成了一道题,而是在持续建立自己的编程能力。
勋章机制:用成就感鼓励正确的学习行为
勋章是档案 中最直观的激励元素。
当前 OJ 勋章围绕四类能力设计:
- 入门突破
- 解题稳定性
- 高质量通过
- 坚持与比赛表现
例如:
- 初露锋芒:完成第一次 AC。
- 解题新星:累计 AC 10 题。
- 稳定解题者:累计 AC 50 题。
- 百题达人:累计 AC 100 题。
- 一发入魂:至少 5 题首次提交即 AC。
- 难题猎手:AC 多道低通过率题目。
- 稳定输出:连续 7 天有效学习。
- 月度坚持者:连续 30 天有效学习。
- 满分选手:普通练习/考试中获得满分。
- 赛场常客:多次参与普通练习/考试。
未获得的勋章不会显示在档案 中。这样可以让学生主页保持正向展示,减少“缺失感”,更像一面属于学生自己的成就墙。
为什么不把正式考试纳入荣誉墙?
本系统明确区分普通练习体系和正式考试体系。
荣誉墙、Profile、贡献格和勋章只统计从普通登录入口进入的练习和普通考试记录,不统计正式考试入口产生的数据。
这样做有几个原因:
第一,正式考试更偏向测评和管理,不适合作为公开激励内容。
第二,普通练习更能反映学生长期学习过程,适合展示在档案 中。
第三,分离统计范围可以保护正式考试的严肃性,也能避免学生把考试数据和日常成长数据混在一起理解。
简单来说,正式考试用于评估,档案用于成长展示。
对学生有什么帮助?
这套机制可以让学生获得更清晰的学习反馈。
学生完成一道题后,不只是看到 Accepted,还可能看到自己的 AC 数增加、贡献格变深、荣誉积分提升,甚至获得一枚新勋章。
这种反馈会把抽象的编程能力变成可见的成长路径。
它尤其适合青少年编程学习,因为学生往往需要短期反馈来维持动力,也需要长期记录来建立信心。
对老师有什么帮助?
老师可以通过档案 更快了解学生状态。
相比只看一次考试分数,档案能展示更完整的信息:
- 学生是否持续练习?
- 学生解决题目的数量是否增长?
- 学生是否只靠大量试错,还是有较高的一次通过能力?
- 学生是否开始挑战难题?
- 学生在哪些题型或语言上更活跃?
这些信息可以帮助老师更精准地辅导学生。
对于班级管理来说,荣誉墙也可以提供一种积极的学习氛围。它不是单纯制造竞争,而是把不同类型的努力都展示出来。
对家长有什么帮助?
家长通常不容易理解编程学习中的细节。
他们可能知道孩子“做了题”,但不知道这意味着什么。档案可以把编程练习转化为更直观的成果:
- 孩子解决了多少题
- 有没有坚持练习
- 有没有拿到成就勋章
- 最近是否有新的学习记录
- 是否参加了普通练习或考试
这让家长更容易看到孩子的努力,也更容易给予正向反馈。
一个好的编程激励系统,应该奖励什么?
我们认为,好的 OJ 激励系统不应该奖励无意义的重复提交。
它应该奖励:
- 真正解决问题
- 持续学习
- 高质量通过
- 勇于挑战难题
- 在练习和考试中稳定发挥
- 扩展知识面和题型覆盖
因此,荣誉墙和档案 的设计重点不是“谁提交最多”,而是“谁在持续成长”。
这也是整个机制的核心价值:让编程学习更可见、更健康、更有成就感。
总结
OJ 用户档案、荣誉墙、365 天贡献格和勋章机制共同构成了一套完整的学习激励系统。
它帮助学生看到自己的成长,帮助老师理解学生的学习状态,也帮助家长更直观地感知孩子的努力。
对青少年编程学习来说,持续反馈非常重要。一次 AC 是结果,一段连续的贡献格是坚持,一枚勋章是里程碑,而一个完整的档案,就是学生编程成长的可视化档案。
这套机制的目标很简单:让每一次认真练习,都被记录;让每一次突破,都值得被看见。
FAQ
OJ 用户档案 是什么?
OJ 用户档案 是学生的公开编程学习主页,用于展示 AC 题数、荣誉积分、贡献格、勋章、最近 AC、普通练习/考试记录和能力分布。
OJ 荣誉墙按什么排名?
荣誉墙主要按荣誉积分、月度成长、去重 AC 题数和普通练习/考试表现排名,不以单纯提交次数作为高权重指标。
365 天贡献格统计什么?
贡献格统计每日提交、AC、新解决题、客观题/问答题作答和普通练习/考试参与情况,用颜色深浅展示学习活跃程度。
为什么不统计正式考试?
正式考试更适合用于评估和管理。荣誉墙和档案 更关注日常练习成长,因此只统计普通练习和普通考试,不统计正式考试入口产生的数据。
勋章有什么作用?
勋章用于鼓励学生完成关键学习里程碑,例如第一次 AC、累计 AC、连续学习、难题突破、首次提交即 AC 和普通练习/考试满分。
这套机制会不会鼓励刷题或刷提交?
系统刻意降低了单纯提交次数的权重,更重视去重 AC、新解决题、难题 AC、连续有效学习和高质量通过,从机制上减少刷提交带来的收益。
