USTC 评课社区背后的故事
USTC 评课社区 是我和李博杰(boj)、常震,于2015年一起开发的针对中科大师生的课程评价网站。这是我大一的时候一门课《新生“科学与社会”研讨课》的课程项目。该网站创办的初衷就是促进校内课程信息公开,帮助学生找到更适合自己的课程。时至今日(2022年7月2日),该网站已经运行了2606天,有注册用户6851人,课程点评 17463条。如今,网站上有1120门课程至少有5条点评,有535门课程至少有10条课程点评。可以当之无愧的认为,如今的评课社区,已经成为科大学生选课时的重要信息来源。
这篇博客我想分享一下评课社区背后的故事。为什么会在物理学院凝聚态物理教授——赵瑾老师的《新生“科学与社会”研讨课》上做了 USTC 评课社区网站?而且还真的做出来这个像模像样的网站?下面且听我慢慢道来。
关于2015年前后的故事,主要参考我当时新生研讨课的一些记录。
我的选题报告 Report,选题报告 Slides,发表于 2015年3月19日
我的中期报告 Slides,发表于 2015年4月26日
我的结题报告 Report,结题报告 Slides,发表于 2015年5月30日
2015年前后
与新生研讨课结缘
大一的时候,我对计算机技术感兴趣,认为它可以让我更好地改变生活、实现自己的想法。我当时特别想学习网站开发的技术,所以就趁着新生研讨课自由选题的机会,选择了”学习网站开发”的课程。因为就算没有新生研讨课我也会做这个,而且大一学生时间也很紧张,所以想利用新生研讨课的DDL来监督自己。
至于为什么会想做一个课程评价网站,那是因为作为一名大一学生选课是我的一大烦恼。因为选课之前我得不到足够的课程信息,我无法判断这是不是我想学的课程,我不知道这个老师是不是我喜欢的风格。我希望科大有一个课程评价网站,同学们在上面分享自己的课程经验,可以让我选课的时候有所参考,而不是只能根据课程名称猜测这门课大概会教什么…
另一个原因是受 MOOC 学习经历的影响。我在进入科大之前,学了好几门 MOOC课程,还是果壳网 MOOC 学院(该网站已下线)的活跃用户。MOOC 学院当时主打 MOOC 中文学习社区、交流平台,是用户分享课程笔记、课程点评的地方。我当初也在 MOOC 学院上面发表了很多课程笔记和点评,还受邀做过几门课的“课程评价员”,就是快速上完一门课,然后在平台上评价这门课程。
对我来说,MOOC 课程的选择是非常自由的。由于我当时学习 MOOC是自发的、主动的,因此我想要上一门课,主要考虑这几个方面,
- 课程内容本身是否是我想学习的内容
- 课程本身是否有趣
- 课程难度怎么样,我的水平是否合适
- 课程负担大不大,需要投入多少时间
MOOC学院在选择MOOC课程这方面给我提供了很大的帮助。所以,在我进入大学之后,我想做这么一个中科大的课程评价网站也就是自然而然的事情了。因为我认为学生应该在选课上面有更大的主动权,应该提前了解课程内容、教师风格、课程难度等等,才能更好基于自己的兴趣、偏好、需求来选课。而只有掌握选课的自主性,才能在课程学习上有最大的主动性,而不是被动学习。
以上就是为什么我会在大一的新生研讨课上做 USTC 评课社区这个网站的答案。
网站开发过程
开发团队与分工
我的新生研讨课课题是“学习网站开发”,所以我一开始是打算自己一个人来开发这个网站的。于是,我在选题报告中列出来自己需要学习的内容有
学习网页开发涉及前端和后端,前端我需要学习:HTML&CSS,JavaScript,jQuery,前端框架(我选择Bootstrap);后端我需要学习:数据库,后端语言(我选择Python),Web 框架(我选择Flask),HTTP 服务器(我选择Nginx)。这些是我需要学习的主要技能树,有偏重,具体看实现的需求。(感觉很可能学不会全部这些)
我在高中的时候已经学过了Python,但我对网站开发还一窍不通。我从大一上学期期末(2015年1月22日)开始学习 HTML 和 CSS,大一寒假都在家抱着电脑学习前端开发。后来我意识到了,自己一个人没办法短时间内学会前、后端所需的所有技术。所以就找了两个队友,我负责产品设计和前端开发,两个队友负责后端开发。关于这个团队是怎么组建的,我在结题报告中写道:
有些人好奇我们这个团队是怎么组建的,是因为兴趣而聚集到一起的吗?其实不完全是的。做这个项目是我的想法, boj 是我当时的男朋友,再加上他本科也想过做这样的网站就加入了。而常震是 boj 的舍友,经常问他技术问题。我也不知道为什么常震会对这个项目感兴趣,当初是他听说我们要做这个,主动加入的。这就是为什么我们的团队里,会有一个物院大一的学生和两个计算机学院研一的学生。不过由于项目初期的时候,我和 boj 都不懂 Flask,而常震有过 Flask 开发的经验,所以最早的时候他帮了不少的忙。郑子涵是我们的朋友,他也对这个项目本身感兴趣,但由于他当时不会Python也不会前端,所以在项目进展了一半的时候,他才加进来,主要是负责帮忙找找网站的漏洞。
还记得大一的时候,我曾混进研究生男生宿舍,在 boj 宿舍里和他舍友三个人一起开发网站。此外,我和 boj 也经常在 USTC LUG 活动室开发网站,甚至到凌晨1-2点。我在大学的时候,很少因为作业熬夜,开发评课社区应该是我为数不多的会因此熬夜的事情。
开发过程中遇到的问题
做USTC评课社区这个项目,前后经历了快三个月,我们从3月8日开始,到5月25日发布内测,期间其实断断续续停过一段时间,真正每天都在开发的时间大概只有一个多月。我在中期报告中提到了项目推进过程中遇到的几个问题:
- 没人干活
- 合作混乱
- 对工具不熟悉
没人干活的问题原因很简单,因为大家都是科大学生,我当时是物理学院大一的学生,另外两个队友是计算机学院研一的学生,大家都有繁重的课业负担,能抽出时间开发这个网站实属难得。拿我自己来说,大一下学期,我已经打算从物理学院转去计算机学院了,所以那个学期我是跟着计算机学院的同学一起上课了,我上了以下10门课:
程序设计II (黄章进)、代数结构(韩文廷)、线性代数 B1(陈发来)、多变量微积分(李娟)、数字媒体技术 (谢栋)、大学英语听说III (方晶)、大学英语读写中级 (陈静)、国际体育舞蹈(女步) (徐雄杰)、马克思主义基本原理 (张顺铃)、新生“科学与社会”研讨课 (赵瑾)
其中硬核的课有3门数学课(代数结构、线性代数、多变量微积分),还有1门计算机学院的C++课程。我可以说被这几门课虐得焦头烂额。大一上学期我的GPA 还有3.4
,大一下学期结束的时候,我GPA只剩下 2.46
了,可见当年惨状。以至于我后来产生了弃理从文,产生了再也不学数学的想法。我也身体力行了自己的想法,于是大二上学期开始我转到科技传播系去了(这是后话)。总之,我在那样黑暗的一个学期,我和男朋友及其室友一起开发了评课社区这个网站,可见兴趣真的是最好的老师。
合作混乱的问题,具体包括干活时间不同步、分工混乱、没有文档、经常吵架等等,都很好理解。我在中期报告中还提到了这次项目开发给我带来的几点经验
- 兴趣,再忙也能投入时间
- 合作,需要规则和利益约束
- 学习,实战与边做边学冲突
关于第一点我在上面已经解释过了,如果不是兴趣,我是不可能在大一下学期有时间做这个项目的。第二点和第三点实际上解释了项目推进过程中遇到的一些问题。一方面我之前没有网站开发的经验,所以是边学边做的,这必然会导致项目进展比较慢,但我认为这是学东西最快的方式。而合作的问题,我在结题报告里提到
在项目开发的过程中经常有程序员不干活,大概是因为我们的项目没有激励机制。就经常出现十几天没人干活的情况,所以我们经常因为干活这件事吵架。想想我们的项目最后能发布出来也是挺不容易的,新生研讨课的几次报告起到了不错的督促作用。所以,感谢赵老师没有限制我们的选题。
正式发布
和学校教务处沟通
在评课社区网站正式发布之前,我还给当时科大教务处的领导发过邮件,主要是想提前和学校有关部门沟通好,让他们知道我们创建这平台的初衷是什么,平台的开发者都是谁,希望能够得到教务处的支持(至少不要反对我们)。毕竟我们的网站课程信息都是从教务系统抓取的,而且一开始服务器就在东区图书馆。后来教务处的负责人真的回了我邮件,和我约了一个时间在东区老图书馆当面交流。基本上得到的回复是,教务处不会干预我们的网站,不支持也不反对,让我们自己发展。现在想想,这次主动的和教务处沟通,也许得到了不错的效果。在后来7年时间,我们收到了若干次来自学校老师的投诉,但中科大从来没有以校方的身份干涉我们,让我们删除课程的负面评价。
儿童节当天上线
评课社区正式发布应该是 2015年6月1日,当时发布的 slides 写着下一步的计划包括
- 多平台运营(微信、微博、BBS、海报…)
- 通知系统(@功能)
- 重新美化首页
- 显示同班同学
- 课程作业黑板报
以上计划,除了通知系统实现了,其他的功能直到现在都没有实现。
网站初期的宣传
正式发布之后,我在新生研讨课、科技传播系,做过两次项目的演讲。一开始想的多平台运营,实际上我们并没有花时间去做。所以评课社区现在能火起来,完全靠科大同学们口口相传。
向科大老师群发邮件
我们在2015年7月,给科大所有的老师群发过一次邮件,标题是“用USTC评课社区推广您的课程”,主要目的除了宣传推广以外,是希望老师们能给我们发送他们的课程简介。当时那封邮件的部分内容:
目前我们正打算开发一个新功能,给每一门课加上课程简介的功能。作为一个学生,我特别希望在下学期选课之前,能够了解一门课到底教什么内容,作业和考核的方式是什么样,这是我选课时需要考虑的因素。如果老师您下学期有课的话,可不可以写一份课程简介并发邮件给我们,我们会手动加到网站上。有了课程简介,会有更多学生选择您的课程,学生在上课时也会做好更充分的准备。
关于课程简介的建议
USTC评课社区启发自果壳MOOC学院,MOOC把课程信息、材料、互动都放在网站方便人们自主学习。优秀的课程简介可以具有以下信息(只是作为启发,不需要全都有):
- 课程概述(这是一门什么样的课程,有什么样的学习目标)
- 课程主页(如果有现成的课程主页的话,没有就不用了)
- 教学大纲(课时安排等等)
- 教材与参考资料
- 授课形式(讲授为主?习题课、讨论课?采用多媒体?如何互动?)
- 考核方式(作业、考试所占比例?有无期中考、大作业、答辩演讲?)
- 先修要求(面向什么样的学生,有哪些先修课程的要求)
- 常见问题解答(如之前课程情况、对学生的期待、是否有助教)
….
我查了查我的科大邮箱,发现有超过20位教师回复了这封邮件,大部分老师表示了对这个网站的支持,也有一些老师真的给我们发来了课程简介,我们就加到了网站上。
写点评送书活动
评课社区开发初期,遇到的主要问题就是点评太少。如果一门课程底下点评太少,则不太有参考价值。2015年9月我搞过一次写点评送书的活动,以下是活动详情,是的我甚至设计了 banner 放在网站首页。
活动规则:在USTC评课社区,点评任一门课程,获得至少10个赞,免费赠送一本书!共25本,送完为止!
领取方式:320楼的女生可以到401宿舍挑选,其他同学可以联系张静宁,联系暗号:写点评送书
书籍:主要有数学专业和托福考试方面的书籍,数学类书籍大部分是全新的
书籍捐赠:如果你希望USTC评课社区有更多的点评,也欢迎给我们捐书,所有捐赠书籍都将作为用户写点评的奖品。
联系邮箱:service@icourse.club
印象中这次活动很失败,我没有送出去一本书,被 cuihao 嘲笑“你那些书谁要呀?”。但我觉得不是书本的问题,而是当时就的确很少很少人写点评,更不要说10个赞了。现在翻历史数据,2015年9月新增点评17个,10月新增5个,11月新增2个,12月新增4个,一直到2016年1月份才新增了234个。现在我们通过网站统计数据知道,点评新增是非常有季节性的,一般学期末(7月,1月)新增点评比较多。
2016~2021年
2015年我在评课社区最后一次 commit 是在 2015年9月22日,在那之后,长达5、6年时间我再也没有给评课社区 commit 过代码,一直是 boj 在默默维护着评课社区(表示感谢)。那么2016年以后发生了什么呢?
人员各自的变动
经过大一下学期好几门数学课的毒打,我决定不转到计算机学院了(2022年的我无比后悔这个决定),本着再也不想学数学课的心态,我打算转到科技传播系去。所以我2015年秋季学期在科技传播系上课,但2015年11月我认识了吴明卫教授,在他的影响(洗脑)下我又打算留在物理学院了(关于这部分详情请见我的 转专业系列文章)。所以我从2015年12月开始加入了吴教授的实验室,接受数理基础再教育,至此我彻底放下了网站开发的大业,开始刷机米多维奇。后来我在吴老师实验室呆了3个月,又被Fire了,只好自己硬着头皮继续在物理学院读下去。
提到吴老师,这里还有一个趣事,吴老师向来对学生管的很多很严,当他得知我有这么一个评课社区网站,让科大学生评价老师的课程时,他专门给我打了个电话。在电话里,他建议我把评课社区网站关掉,理由是他觉得学生不知道什么样的课程是好的课程,用他的话来说就是“学生没有资格评价教授们的课程”。当然我没有听他的建议,而是拒绝了他的这一要求。
2015年秋季学期, boj 去北京了,因为他的博士项目是中科大和微软亚洲研究院联合培养项目。印象里,他去了北京之后科研上就变得非常忙,远不像他研究生第一年在合肥的时候,把很多时间花在了和科研不相关的事情上。常震应该是在评课社区发布之后,就没有怎么参与网站开发和维护的事情了。
2016年夏天,我和 boj 分手了,当时分手的唯一一个约定就是他得继续维护评课社区(否则这个网站要下线了)。后来, boj 有了新女友,一度联系我,表示他不能再参与评课社区的开发和维护了,要把网站全都交给我,也是那个时候起 icourse.club 的域名到了我的手里。好在过了几个月, boj 又开始默默的维护网站了。
所以,从2016~2021年,评课社区实际上没有新增很多功能,基本上是 boj 一个人在定期导入课程。每个学期初,他从教务处网站抓课程,再导入到评课社区数据库。偶尔,有用户给我们发邮件,反馈一些网站的 bug, boj 也都很及时的修 bug 回邮件。我和他的沟通仅限于邮件沟通评课社区相关业务。
2022年
时间很快来到了2022年。boj 已经博士毕业入职了华为,我也硕士毕业成为了一名普通的打工人。
新的公关事件
评课社区成立7年以来,我们其实只收到屈指可数的投诉,屏蔽的课程点评也是屈指可数。过去几次投诉事件中,课程教师往往只投诉1条点评,并且那些点评明显是存在问题的,因此我们很快屏蔽了。还有一次,被投诉的点评在我们看来完全没问题,就回复了不会删除,对方也没有继续纠缠下去。
2022年3月我们收到了某位教师要求删除课程点评的邮件,这次投诉涉及了将近10条评论,并且很多评论在我们看起来并不属于明显的人身攻击。该老师先后给我们发了十几封邮件,一开始态度还比较好,后来见我们没有快速回应他的诉求,就开始发送威胁、谩骂的邮件,并且开始通过各种方式联系网站管理员。尽管我们一开始回复了他的邮件,并且告诉他我们都是利用业余时间开发网站,所以需要时间处理他的请求。这次公关事件,让开发团队重新建立起来联系,我们发现2015年撰写的《社区规范》已经无法适应当前网站的情况了。除了讨论如何处理该老师投诉,我们还讨论了该如何完善评课社区的社区规范、增加与修改哪些功能、未来如何应对类似事件。最终我们发布了新的《社区规范》(主要由 cuihao 撰写)和 《投诉点评的流程》(主要由我撰写)。
也是由于这次公关事件,我们意识到之前评课社区的维护过于依赖 boj 一个人。因此,2022年3月 cuihao 开始加入评课社区的开发团队,参与公关事件的处理和网站数据库的备份工作。而我在2021年再次学习了网站开发(主要是后端和数据库),我在开发 PI Review 网站的过程中,重新读了评课社区的很多代码。至此评课社区可以不再依赖 boj 一个人,可以说如果哪天 boj 不能够继续维护评课社区,我和 cuihao 两个人也可以扛起这面大旗,继续把这个网站做下去。
时隔7年开发新功能
2022年这次公关事件给评课社区带来了更多的是积极的影响,一方面让我们开发团队重新建立起了联系,另一方面我们意识到现在的评课社区和2015年已经很不一样了,主要是课程点评的数量大大增加了。因此,很多当年没有考虑到的功能,现在成了刚需,比如一门课程可以有100多条点评,这时候课程点评的排序就非常重要了。
重新审视现在的评课社区后,我们开发了一系列新功能
- 课程列表页面,可以筛选课程类别、按照课程评分和点评数量排序
- 课程页面,点评支持多种排序方式、可以按照学期和评分进行筛选,同时展示点评学期和评分的分布
- 关注页面,分成关注的人的动态和关注的课程的动态
- 通知系统,修改了通知系统的逻辑,如点评点赞只通知作者本人,并且作者本人可见哪些人点赞
- 新增了网站站点统计页面,显示课程评分分布、课程点评数量分布、新增点评/用户曲线等数据
- 新增评课社区排行榜,显示最受欢迎的老师、课程、点评等排行榜
- 新增保护用户隐私的功能,匿名点评、仅登录学生可见、隐藏个人主页、隐藏点评等(即将上线)
- 导入培养方案信息(还在开发中)
这些功能,有些是我自己实现的(前后端),有些是我和 boj 一起实现的(我提的需求、实现了前端、他负责后端,和2015年的开发一样),还有一些就完全是 boj 实现的(我只负责产品设计和提修改意见)。很高兴时隔7年,评课社区开发团队原班人马还能继续合作,继续开发这个网站,并且推出这些让我觉得很不错的新功能。
之前和赵老师沟通,感谢赵老师当年没有限制我这个和物理毫不相关的选题,如果没有赵老师当年自由的课堂氛围,也许就没有评课社区的诞生了。赵老师表示,她以为这个网站早就不是我们在维护了,想不到还是原班人马。是啊,其实在我毕业的时候,我们一度考虑过把评课社区交给 USTC LUG 同学 维护,但后来也没有后续,也许是因为 LUG 的同学们对网站开发不感兴趣。但现在我们认为这个网站由我和 boj 继续维护不是坏事,因为如果交给在校生维护,他们可能会面临来自学校、学院、老师的压力,让他们删除点评、甚至网站下线。另一方面我们有技术、有能力,而且有坚定的信念继续把这个网站做下去。
拿我自己来说吧,我2019年从科大物理学院毕业后,来到了美国,入学了 UCSD NanoEngineering 系的博士项目。后来因为各种原因,选择了博士退学,拿了硕士学位毕业,开始找 Data Engineer 和 Software Engineer 相关的工作。过去多年的经历让我意识到,我其实对于网站开发是很感兴趣的,尤其是开发一些自己觉得很有意义的项目。去年,我曾花了3个月,一个人开发了 PI Review 网站(也是边学边做,很像2015年开发评课社区的感觉),那段时间我几乎就是把所有的办公时间都用来开发网站,后来 cuihao 加入,一起做这个网站。(所以,事情就是我和前男友开发了 USTC 评课社区,我又和我现在的老公一起开发维护 PI Review 网站,这两个网站就像我的两个孩子,但我可以很自豪的说 PI Review 目前大部分代码还是我写的。)
而我在科大的几年2016-2019,其实大多数时候都比较自卑,由于科大一切都唯绩点论的氛围,我这个学渣其实过得挺艰难的(比如没有获得任何优秀学生的奖学金、没有加入任何英才班、延毕1年导致比较离群)。很长的时间里,我很怀疑自己,我没有再关注 USTC 评课社区,甚至很多认识我的朋友可能都不知道这个网站是我参与做的。直到最近两年,我才意识到这个网站对我的重要性,对我来说它是我最自豪的项目。它让我觉得,我结合自己的兴趣和能力能够创造有价值的东西,自己可以做出很不错的产品。
不仅如此,我还能感受到自己在这方面的热情。开发这两个网站的时候,我是很快乐的,哪怕由于打工人的身份,我只能用每天下班后的时间干活。哪怕牺牲睡眠、牺牲运动、牺牲做饭的时间。我常常在睡觉前,在洗澡的时候,在开车的时候思考,我能给这两个网站加什么新功能,而我会为自己想到的好主意兴奋很久,并且马不停蹄的去实现它。加上之前高中的时候做的字幕组、MOOC进中学的项目经历,让我意识到我的兴趣就是通过计算机、互联网技术来改变传统的教育行业。于是我把这个当成了我目前的理想、我长远的事业目标(career goal)。我希望可以把评课社区和 PI Review 这两个网站做大,覆盖更多的大学,帮助更多的大学生选择课程、帮助更多的研究生选择导师。这是我的目前最大的理想,而我将为它一直努力下去。