记2021年小程序大赛

记2021年小程序大赛

从本科到现在总共参加过三次微信小程序大赛,前几天刚完成赛区决赛的答辩,心想着以后应该都不想再参加了,于是想记录一下这次的参赛经历。

2018 和 2020

2018 阴差阳错

微信小程序从 2017 年正式上线博得广大关注,在第二年 2018 年春季,微信就推出了全国高校微信小程序开发大赛,吸引了很多大学生参加,我就是其中一个。正在读大二的我报名了一位学长组织的 SRT(Student Research Training) 项目,原本的题目是要开发一款在线客服平台。然而当时已经把项目申请里面提到的客服平台提前完成了,于是我们真正做的就变成了小程序。甚至还用这个小程序参加了第一届的微信小程序大赛。

虽然做的东西和项目选题没太大关系,不记得当时具体开发的小程序有些什么功能,最后也没有拿到什么奖项(但隐约记得有证书)但通过这项目我第一次接触到了 Javascript、Vue 和微信小程序这些新东西,也认识了几位非常靠谱的队友(在之后的课程作业组队当中也延续了组队),我的收获不少,所以还是非常感谢这次项目经历的。

2020 毫无波澜

第二次是在 2020 年用课题组的一个项目参加的比赛,进了华北赛区的决赛,但着实因为我们准备的不够充分而且其他队伍的作品也比较优秀,我们最终也止步于此。得到这个结果我不是特别遗憾,因为我在准备赛区答辩时就有了心理预期,所以说这次参加比赛的内心感受就是毫无波澜吧。

2021 年

小程序背景

如果说对第二次参加比赛的小程序我只是一知半解,那么今年参加比赛的作品我就是了如指掌。因为这是我们大三学期上《软件工程》课程时做的课程作业,它的背景是给学校艺教中心开发一套能够方便琴房管理和琴房预约的系统。

本来以为这个作业像往常那样只停留在“作业”这个层面,不会有实际使用价值。但是授课老师认为我们组做得不错,于是真正帮我们联系到了艺教中心的老师开了个会。会上艺教中心老师对我们的系统非常满意,这让我们喜出望外,但同时也给我们提了一些问题,例如还没有接入清华校内统一身份认证接口、没有接入校内支付接口等等,但我们相信后面都可以解决的。

那个学期过得很快,我们组的作品获得了 A 的评分,但是我们小程序的上线过程却不那么顺利:因为要接入校内的接口,我们需要把程序部署到校内的服务器上,之后经历了漫长的申请服务器、申请域名、申请安全扫描、申请证书、申请身份认证接口权限、申请财务接口权限等流程,期间还经历了新冠疫情爆发回不了学校的一个学期以及需求变动重新开发新模块… 功夫不负有心人,终于万事俱备申请上线了,那报名参加比赛吧。小程序名字叫做“掌上艺教”。

定位和需求分析

小程序的定位

掌上艺教是一个涵盖清华大学艺术教育中心琴房租赁和课程管理的一站式系统。面向三类不同的用户,他提供不同的功能。 
面向在校师生、教职工和居民,掌上艺教提供了校内外两种安全高效的身份认证方式,认证用户可查看琴房空闲时间、预约琴房、在线付款、查看订单和核验电子票等;面向艺教中心开课教师,除了琴房预约外,还提供课程申报、志愿填报等功能;艺教办公室老师可以使用系统的管理后台应用对琴房租赁和课程业务进行管理;

需求痛点

清华大学艺教中心历史悠久,业务众多。它每年开设艺术类选修课程 160 门次,指导学生艺术团 12 支队伍共 1300 名队员的排练,同时需要管理校内众多文艺场馆。

但是艺教中心目前的业务存在信息化不足、办公效率低的问题。表现在具体的业务当中有以下两个方面:

  1. 在琴房业务中,艺教中心采用“办卡储值,打孔消费”这样比较原始的机制,容易造成浪费和卡片丢失的问题;同学们要想预约琴房只能亲自去艺教中心询问是否有空余的琴房,这样费时又费力;另外,老师如果想查询、统计和备份数据或者是进行用户管理就很难办到了。这样的局面对于老师管理琴房和同学预约使用琴房来说都非常麻烦。

  2. 在课程管理上,开课教师和办公室老师们通过邮件和微信沟通开课意向和期望志愿缺乏系统性,而且在邮件或微信往来过程中信息很容易丢失;最最要命的是,收集到课程信息后,办公室老师需要把 160 门课程的开课时间、上课地点手动地排在一张 Excel 大表里。手动操作出错的概率很高,但是一旦出错会给开课教师、艺教中心和学校教务带来很大的麻烦。下面这张图片就是手动排课时用的表格截图,当然这只是冰山一角。

我们的系统就是要解决上述的痛点。

功能介绍

我们开发了掌上艺教小程序和与之配套的两个管理后台(分别对应琴房和课程业务),其中小程序的主要功能有:

  1. 身份认证:对校内外用户分别进行相应的身份认证,对接清华大学统一身份认证;
  2. 查看课程表:开课教师能够查看当前学期自己开课的课程表;
  3. 课程信息查看:开课教师能够查看自己或者其他教师所开课程的信息;
  4. 开课意向填报:开课征集期间,任课教师可以在小程序中填写开课意向和排课志愿;
  5. 排课信息确认:艺教办公室老师在后台生成排课表之后,开课教师能够查看并确认课表是否符合预期;
  6. 琴房浏览:使用掌上艺教能查看艺教中心对外开放租赁的琴房列表并查看它们的信息如空闲时间、租赁单价、位置简介等;
  7. 支付定金:预订琴房后可在线支付定金,完成支付后将获取订单核验二维码;
  8. 代金券折扣:支付定金时可使用代金券抵扣指定额度的琴房定金;
  9. 电子票核验:琴房入检人员可以扫描支付完成的订单二维码核验信息并准入。

课程管理后台的主要功能有:

  1. 课程信息管理:可以对系统内课程信息进行增删改查,包括但不限于某一学期内开课教师所创建的课程;
  2. 教学场地资源管理:可在系统中维护教学场地包括教室地点、教室容量、教室属性等在内的信息;
  3. 排课表生成与调整:开课教师提交完成排课志愿后,系统将根据开课教师的志愿信息和在系统中设置的权重策略,对所有课程进行自动编排。自动生成出的课表可以进行手动调整;
  4. 后台账号管理:可以对人员进行账号管理,包括启用/禁用账号、账号密码重置及权限管理;
  5. 教师名单维护:通过维护教师名单可控制哪些用户能够使用排课系统;
  6. 通知公告:在管理后台可使用富文本编辑器编辑发布通知公告,并查看教师们的阅览情况(已读或者未读)。

琴房管理后台的主要功能有:

  1. 琴房信息维护:可以对琴房列表和琴房信息进行维护,包括琴房名称、位置、头图和占用规则(规律性占用)等;
  2. 订单管理:可以通过姓名、手机号、证件号、预约时间段、预约琴房等条件进行订单查询与统计,并查看或修改订单详情;
  3. 用户管理:可通过姓名、手机号、证件号等字段查询用户详情,进入用户详情可将用户纳入黑名单、查看用户的订单和代金券等;
  4. 用户组管理:通过设置用户组对琴房的预约权限、租赁单价和用户列表,可以实现用户的权限管理和租赁单价管理;
  5. 代金券管理:可向指定用户手动发放代金券或向指定用户组周期性发放代金券用于琴房定金抵扣。

系统架构

系统架构方面,我们选用了 Vue.js 作为 Web 应用的开发框架,小程序则使用微信原生框架进行开发。前后端通讯方面我们使用的是 GraphQL(可能需要科学上网),这和传统的 RESTful API 相比有很多优点,在这里就不展开说了。后端则借鉴了流行的微服务架构的思想,把两部分后端服务进行了实现和部署上的拆分(可以看到两个后端服务的开发语言都不一样),同时两个服务都采取了容器化的部署方式,极大地降低了开发和运维成本,同时减少了系统整体不可用的风险。

后端服务拆分实现部署的开发方式我们还是第一次采用,这确实给我们的系统带来了很高的灵活性,技术栈的选择也更加自由。而且,通过实现服务间通信,各个实体之间的交流更加密切,可以做到更多有趣的事情。例如微信小程序用户的登录状态存在一个服务 A 上,当另一个服务 B 也需要用到该状态时,可以通过直接向 A 发请求拿到相应的信息。在我们的系统当中,服务间通信是直接发 HTTP 请求,以前实习时做的系统用的是 gRPCprotobuf 来完成的。不过本质都差不多。

比赛结果

赛区决赛当天晚上其实就已经出结果了,我们的小程序是华北赛区第 5 名,是三次比赛当中名次最高的了。虽然可能进不了全国决赛,但是我还是能够接受这个名次的。前几名的作品确实有着非常好的产品定位(例如第 2 名“帮你学拼音打字”目标是帮助中老年人学习使用手机拼音打字)和非常高的完成度(例如第 1 名“方仔照相馆”),我们的小程序作为一款在校内使用的半开放式小程序,格局比起他们的来说还是小了不少。

最后的感想

2021 年的微信小程序大赛其实已经稍见颓势,从取消微信小游戏赛道这方面就能看出微信不太重视这场比赛了。参赛作品的多样性和创新性也随着时间的推移逐渐降低,越来越难以见到让人眼前一亮的好的作品。所以比赛不再受重视也不奇怪,微信一开始推出这个比赛就是想借助有热情有活力的大学生群体带动小程序的市场,而到了 2019~2020 年微信小程序其实已经占据市场主导地位,不再需要依靠比赛来扩大影响力了。

另外比赛的风气也不太好,2020 年的华北赛区决赛好像就出现了相互举报的状况,有点无语也有点无聊。不知道明年这个比赛还会不会办下去,不过就算继续办我也不太想再参与:我的热情被小程序开发消磨掉不少,也没有太多创新的点子想付诸小程序开发。小程序对于用户来说有着很不错的体验,但是对于我们开发者来说小程序是处处受限的前端应用,这也不能用那也不行。没错现在我已经不想“用户至上”了,我想做更纯粹一些的开发。

作者

PowerfooI

发布于

2021-07-20

更新于

2024-08-04

许可协议

评论