教育行业的业务后台系统搭建(二):排班组课
编辑导语:大家都没有对课表好奇过,系统是怎么做到把老师和学生的时间安排的恰到好处?排一节课业务后台是如何进行操作的?本文作者从排一节课到排一个学校的课,由浅入深地详细介绍了排课的流程,供大家一同参考学习。
排课?这玩意儿不就是指定一个时间,把老师、学生塞到一个教室,然后给他们一本书,让他们自己玩去,很简单呀,有啥可说的?
确实,“排课”听起来不过如此。
不过排一节课简单,排一个学期的课也不难。但是给一个学校排一个学期的课可就不是几句话能说清楚的了。
为了让大家比较容易理解,我们由浅入深得“推倒”:如何排课?
01 排一节课
其实上一篇文章就已经提到过如何排一节课。
唯一老师、一课件、一班学员、一个时间、一教室而已,见下图
具体就不细说了,没什么逻辑在里面。
02 排一个学期的课
知道如何排一节课,那么排一个学期的课就不难了。
在排一节课的时候,添加一个学期的概念即可。
那什么是学期呢?
学期指的是一学年中上课时间的一个单位。
——百度百科
说白了就是一个较长的时间内,定期循环上课,直到该学期预设的学习内容讲完为止。
翻译一下,一个学期会有以下三个要素:
- 起止时间:即从第一节课开课,直到最后一节课下课,经历的时长称之为一个学期。换而言之,一个学期是提前做好计划的,只有明确了起止时间,才能明确“学期”
- 循环周期:即在一个学期内,明确课程内容。每天上哪些课,每周上哪些课,每个月上哪些课,是否有定期模考等等。
- 连贯的课程内容:即同一个科目,每节课上的内容必然出自同一份教材。前后课节也必然是有关联的,通常都是由浅入深,并且定期测试学习效果,并微调课程内容,以确保一个班级内的学生不会拉开太大差距(其实上过学的大家都知道亲身经历过这个情况,此处点到为止)
然后我们抽象一下上述三要素,以及一些排课的基本要素,得出以下这张图:
注意:要确保教材的“课程小节”与学期内“课节总数”是一一对应的。可以额外预留几个多余的课节,用作小节考试、月考、期中考、期末考等练习课使用。
为了让大家更容易理解什么是“循环周期”,在这里举三个实际场景作为例子:
先定个前提:
- 科目:数学
- 一个学期历时30周(相当于循环30周)
- 例1【每周1节数学课】:即每周只上一节数学课,且每节课都在同一天的同一个时间,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“一周”的前提条件,再设置循环次数为30次,即可生成30节课,分布在连续的30周内,每周的同一天同一时间上课。此时,一个学期的课就算排好了。
- 例2【每2周1节数学课】:即隔周上一节数学课,且每节课都在同一天的同一个时间,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“两周/隔周”的前提条件,再设置循环次数为15次,即可生成15节课,分布在间隔的15周内,每隔周的同一天同一时间上课。此时,一个学期的课就算排好了。
- 例3【每周2节课数学课】:即每周上2节数学课,且每周内的所有课节时间相对固定,那么只需要在排课的时候,确定好上课日,以及加上一个循环周期为“一周”的前提条件,再设置循环次数为30次,即可生成60节课,分布在连续的30周内,每周的固定时间上课。此时,一个学期的课就算排好了。
- 同理如果每月1节,规则同【例1】
- 同理如果隔两周、隔月等,规则同【例2】
- 同理如果每周同一科目数大于2,规则同【例3】
03 排一个学校的课(重点来了,做好笔记)
本文的重头戏来了,实话实说,排课的最难点就在这里。即如何做到大量排课的同时,又不会造成时间冲突。
首先,我们要考虑,排课的核心关键点就是“能开课”。那什么情况会导致不能开课,或者说开课无意义?
第二次引用这张图:
究其根本,还是上面提到的一句话:唯一老师、一课件、一班学员、一个时间、一教室而已。也就是说,只有同时满足以上5个条件,才是一节有意义的课。反过来说,以上5个条件缺少至少一个,这节课将毫无意义。
那好,为了让一节课变得有意义,我们先来梳理所有条件(或称之为维度):老师、学员、课件、时间、教室
看下来,上面这几个维度,好像没什么交集。如果一定要有,也只能是时间维度。
- 同一名老师,在不同时间,可以教不同的课程;
- 同一名学生,在不同时间,可以学习不同的课程;
- 同一处教室,在不同时间,可以被许多课循环使用;
- 课件没有时间交集,随时可以被重复使用。
这么看来,一旦老师、学生、教室三者之中任一维度,同时做多件事,都可能会造成这节课变得毫无意义:
- 同一名老师,精力有限,不可能同时教多门课程; ❌
- 同一名学生,精力有限,不可能同时学习多门课程; ❌
- 同一处教室,物理空间有限,不可能同时开多个班级。 ❌
所以我们在设计系统时,一定要避免上述任一场景发生。
那么该如何避免呢?继续往下看
1. 如何确保一个学校能够排出有意义的课?
最重要的是确保各维度在同一时间线,只能安排一件事(即单线程):
- 同一名老师,同一时间,只能安排教一节课;
- 同一名学员,同一时间,只能安排学习一节课;
- 同一个教室,同一时间,只能安排一个班级上课。
有没有发现,好像又回到了最开始的“排一节课”,只不过现在的场景不再是排一节课了,而是排若干个“一节课”。
第三次引用这张图:
既然知道了排课时要注意各个维度“单线程”,那么为了排好一节课,我们应该在排课前就把一切可能造成“多线程”的“意外”排除在外。
2. 如何排除“意外”?
想要排除“意外”,无非就是在系统中操作排课时,添加限制:
- 同一名老师在一个时间只能安排在一个班级上课;
- 同一名学生在同一时间只能安排在一个班级学习;
- 同一个教室在同一时间只能安排一个班级上课。
但身为资深挖坑人,不得不告诫大家一句:真实场景远比我们想象中的复杂得多。
在此举4个实际业务场景给大家做参考:
场景一:一名学生买了多门科目,但同一时间只能上一节课。
针对这种情况,我只能说,一定要给时间加上限制!!!不然学生一看同一时间有多节课,学生学得一脸懵逼,家长看着暴跳如雷,顺便发起退费。
为什么呢?因为虽然教育行业直接服务的是学生,间接服务的是家长,但是家长的实际控制权比学生要大得多。如果排课混乱的事情被家长发现,家长内心肯定会认为该教育机构不专业,退费也将成为必然。
所以,面向客户一定要做到严谨、专业。因此,该加的限制必须加,不容马虎。
场景二:一名老师,一个可排课时间只能安排一节课。(这个时候就要分场景了)
- 如果是全职老师,那这个时间限制其实可以不做控制,因为老师都是自己人,毕竟再乱的排课,只需要面对面一句话就搞得定;
反过来说,如果为了所谓的“专业严谨”,而在系统中加上时间限制,那么恭喜你,排课端同事正拿着板砖朝你走来。(有的时候,所谓的“专业严谨”,给一线业务人员造成的困扰远大于便利。而且,如果因为所谓的“专业严谨”最终导致业务方使用系统降低了工作效率,那这系统不用也罢);
- 如果是兼职老师,此时又必须“专业严谨”了。
因为兼职老师是外人,相比给自己人带来不便而言,给外人带来困扰影响更大,范围更广,同理“学员家长”。因此系统必须确保兼职老师一个时间有且只能有一节课。
场景三:老师的休息时间,不能排课。
无论是自己人还是外人,在非工作时间给他安排任务,都会在上班那天拿着板砖来找你你(手动滑稽)。
场景四:一处教室,同一时间,只能排一个班级的课程。(此处也需要分场景)
- 线下课程:最好还是不要加时间限制。完全由排课端同事自行处理教室问题。同理“全职老师”。
- 在线课程:没有物理教室的说法,无需做任何判断。
3. 排一个学校的课
其实到了这里,大家对于如何排好学校的课程,心里应该都已经有一个大致概念了。
我再给大家梳理一遍注意事项:
- 同一名学员,同一时间,只能安排学习一节课;
- 如果是兼职老师,那么同一名老师,同一时间,只能安排教一节课;
- 找出排课规律,根据规律,设置合适的“循环周期”和“循环次数”;
- 要确保教材的“课程小节”与学期内“课节总数”是一一对应的。
- 可以额外预留几个多余的课节,用作小节考、月考、期中考、期末考等练习课使用。
根据注意事项,我们来按照业务步骤排课:
(注意:不同的业务场景,可能排课的流程不同,此处我根据一个虚拟场景进行排课)
场景一:创建第一个班级
- 我要在一所学校,名为阿里巴巴的教室,创建一个三年级数学的班级,教材为人教版;
- 这个班级在2020年10月1日,下午13:00(周四)正式开班,下午14:30第一节课下课;
- 且每周只上一节课,即每周四有课,上课时间为周四下午的13:00 ~ 14:30。
- 该班级总历时15周;
- 上课老师是业内知名的数学老师麦斯
- 学员是路人甲乙丙丁….
在业务明确的情况下,我们开始排课:
Step1.创建一个班级,命名班级A。这个班级只是一个空壳子,没有起止时间、没有老师、没有学员、没有对应的科目。
Step2.给班级A添加一个学期的上课时间。
- 开课日期:2020年10月1日
- 上课时间:13:00
- 下课时间:14:30
- 循环周期:“每周”
- 循环次数:15次
Step3.给班级A设置上课年级:三年级。
Step4.给班级A设置上课科目:数学。
Step5.给班级A设置上课教材版本:人教版。
Step6.给班级A设置一名老师:麦斯。
Step7.给班级A设置若干名学员:路人甲乙丙丁….
Step8.给班级A设置一名班主任:小丽。
得出下图:
到了这里,场景一的班级A想必已经能够开班了。
(注意:实际业务场景中,创建班级可不是像例子这样穷尽,一定要根据业务做变通!!)
场景二:创建第二个班级
在创建好班级A以后,如果还想再创建同样上课条件的班级B,这个班能创建以后会有意义吗?根据我们总结的注意事项来看,答案显然是不能的。
原因:同一批学员,在同一时间,不能上两门课。(可不考虑教室和全职老师)
所以为了是班级B有意义,只有两种选择:
- 当学员固定时:换一个上课时间;
- 当时间固定时:换一批学员。
如果排课同事坚持要同样的时间,同一批学员开两个班级。我建议换一批排课同事(手动滑稽)。
总结
至此,大家了解了如何排一个班、如何排两个班,我相信仅凭各位看官的举一反三能力,想必只要资源允许,排多少班对大家来说都是易如反掌的事情!
#相关阅读#
本文由 @Ron 原创发布于人人都是产品经理,未经许可,禁止转载。
题图来自 Unsplash,基于CC0协议
这个是不是不适用于 每周课表不一样的场景
不适用,建议每周挑一天(一般是周末),用excel导入形式,创建下一周的课表
比如班级ID一致,上课时间批量导入(如果有大量班级)
行云流水,重点突出,会讲故事
写得太棒啦~
感谢支持!