业务系统搭建教学

把工作里一件反复要做的麻烦事,做成一个自己能用的工具。

不用会编程。这一页讲的七件事,没有一件是编程技巧。

先说一个可能让你意外的事:现在搭一套能用的小工具,最难的已经不是写代码了。

写代码这件事,AI 已经能替你做掉大半。真正卡住人的,是想不清楚三件事——到底要什么、什么算做对了、做到哪一步算够用。而这三件事,恰好是你天天在做的:你比任何程序员都更懂你那摊业务。

所以这一页不教编程。它讲的是动手前后必须想清楚的事。这些事来自两套真实落地过的系统,不是凭空总结的道理。

第一套:磨课评课把老师的一节录音课,变成一份说得出"哪里要改、怎么改"的评分报告。已在客户公司落地试点。
第二套:学情分析从成绩表和试卷里,看出每个学生卡在哪个知识点上。也在客户公司落地试点过。

两套都在客户公司落地试点过,不是凭空想的例子。而且它们留下了开发过程的记录,所以下面讲的每件事,都能指到当时真实发生过的哪一步。七件事,就是它们的过程里最值得你拿走的部分。

先说整条路

从提需求到能用,走了 17 天和 20 天

两套系统的需求是同一天提出来的。一套 17 天后上线,另一套 20 天后上线。

在往下看七件事之前,先把这条路整个走一遍——先看形状,再看道理。

时间发生了什么
第 1 天 需求拆开,先做最短的一条路。学情分析明确「先用 Excel 导成绩,拍照识别放到第三期」;磨课评课明确「排课系统先预留,这一期不做」。
同一天,磨课评课的系统骨架立了起来(47 个文件),学情分析的「能导入 → 能算 → 能出报告」跑通。也就在这一天,学情分析做网页的那套工具被换掉了一次。
第 7 天 学情分析:家长报告从「把结果念一遍」改成「说清这说明什么、下一步做什么」
第 11 天 需求变大了一次。学情分析从「给老师和家长看」扩到「给老板看的六个场景」:全局总览、教师效能、退学预警、家长满意度、招生支撑、标准化管理。定成五期,先做前两个。
同一天,磨课评课在做 PDF 导出——改了四版
第 12–14 天 两边都在造演示数据和修问题。磨课评课修四个数据质量问题、重造演示数据;学情分析改招生看板、改考试详情页。
学情分析「班」的隐患,就是这两天造演示数据时埋下的——一个班被陆续派了好几门课的考试(第 01 件事)。
第 14 天,磨课评课的管理端界面按「教导主任要做什么决定」重做了一遍
第 18 天 磨课评课:给评分维度改名(「板书与多媒体」→「激发兴趣与引导」),并统一九个维度的评分描述与权重。改这一个名字,要动六个地方
第 21 天 学情分析:业务方自己看出「班」有问题——「八年级平行C班」底下同时挂着数学、英语、语文三门课的考试。现实里不会这样:英语班和语文班是两个不同的班。根因是系统里的「班」没有"是哪一科的"这个属性——6 月 16 日造演示数据时就长歪了,一直没被发现。随后彻底重构:12 个混合科目的班拆成 48 个单科班

这条路的形状,有五件事值得注意

01

把你脑子里那句「这还用说」写下来

这一条不涉及技术,但它是最容易被跳过、也最贵的一步。

做系统的人不是你这一行的。他不知道「一个班有几门课」「一张单子要几个人签」「月底对账先看哪张表」。这些在你看来不用想的事,他必须知道,而且必须知道对。

学情分析这套系统在这里栽过一次。根子在系统里的「班」:它只是一个名字,没有"是哪一科的"这个属性。

班就叫「七年级火箭班」「八年级平行班」——不带科目。而考试是带科目的。这个缺口从第一天就在,只做单科的时候看不出来。

造演示数据的时候,这个缺口直接长成了数据:同一个「七年级火箭班」,先被安排了数学,又被安排了英语和语文——四场考试,三个科目。

直到业务方打开班级列表,看到了一个问题:

「八年级平行C班」底下,怎么会同时挂着数学、英语、语文三门课的考试?

这个情况现实里根本不会发生——英语班和语文班是两个不同的班。

造数据的人不会觉得这有什么:对他来说,「八年级平行C班」就是一个班名。可对业务来说,「英语班」和「语文班」是两回事。

而这恰恰是「这还用说」最危险的地方:「英语班和语文班是两个班」这句话,在培训机构的日常里根本不需要说——排课的人心里门儿清,特意说一句反倒奇怪。但系统里的「班」只是一个名字,你不说,它就当它们是同一个。

当时摆在面前的是两个选择:只把班级的名字改掉,让它看起来像单科班(便宜,当天就能完);或者把班级按科目真正拆开。选了后者——只改名字的话,底下的数据还是"一班多科目",下次做任何一张新报表,都会再撞上同一个问题。

彻底的做法是这几件事一起做:

  1. 给班级加上"科目"这一列
  2. 再建一张表,记录哪个学生属于哪个班
  3. 把原来"一个班多门课"拆成"一个班一门课"
  4. 把已有的考试,重新归属到拆出来的新班上

代价是真实的:当时库里 12 个班,每一个都挂着不止一门课的考试,全都要拆开重排。而且那个用来搬迁数据的程序,第一次还没写成就失败了,重写一遍才跑起来。

拆完的结果是这样的——班级的名字里带上了科目,一个班只考一门课:

拆之前拆之后
八年级平行C班
(挂着数学、英语、语文的考试)
八年级数学平行C班 / 八年级英语平行C班 / 八年级语文平行C班
(各考各的,共 48 个班)

这种不对,只有你看得出来——因为你天天在这个业务里。做系统的人看到的是一个班名,看不出它少了什么。

会听到的词:你怎么把东西记下来、分几类记、彼此怎么关联,程序员叫数据结构或数据模型。改这个叫迁移。你可以理解成「给已经装满东西的柜子重新分格子」——麻烦就麻烦在,柜子里已经放着东西了。

换个场景就好懂:你带新人时,那些你从来不解释、默认他"应该知道"的规矩,他一定会做错。做系统也是一样——你不说的,它不会知道。

02

改主意没关系,但要让后来的人看得懂

做任何东西的过程,都是不停改主意的过程。问题不在改,在于改完有没有人知道为什么改。

还是学情分析那套系统。它的文件夹里躺着六个名字很像的小程序:三个改记数据方式的,两个专门修数据的,一个补内容。你从名字能猜出它们干了什么,但猜不出为什么。

因为除了这几个小程序本身,没有任何一份文档说明当初为什么这么定、后来又为什么改。它们还在,你还能看懂;一删,这段历史就没了。

对照着看另一套——磨课评课留下了完整的设计说明,末尾附了一张「决定记录」表,三列:日期、决定了什么、为什么。哪怕当时只有一条,也写清了。

不过更能说明问题的是磨课评课的一次改名。把评分维度「板书与多媒体」改成「激发兴趣与引导」——听起来是一句话的事,实际要动六个地方:系统里那份默认的维度清单、发给 AI 的评分标准、给老师的建议提示、网页上「关于」页的三处文字、示例报告的网页、示例报告的数据文件。漏掉任何一处,就会出现"页面上叫一个名字、报告里叫另一个名字"。

而且改的时候才发现:代码里的默认清单写着 6 个维度,系统实际在跑 9 个。多出来的三个是在管理后台里加的,代码从来没跟上。

会听到的词:这类记录程序员叫变更记录或决策记录。重点不在"改了什么"——那个看结果就知道——而在「当时为什么这么想」。这一条是后来的人唯一猜不出来的。

换个场景就好懂:项目里改需求要签变更单。不签,下个月接手的人看到这块被砍了,不知道为什么,很可能又给加回来。

03

只给结论没用,要告诉人"错在哪、怎么改"

磨课评课那套系统的报告,是最值得看的部分。它不是给一个分数就完事。

一节课从九个角度打分,每个角度下面是三样东西:AI 的评语、扣分项、改进建议。比如"师生互动"这一项,得了 5 分,下面会写清扣在哪两处、具体建议怎么调整。

报告里另有一块,是按优先级排序的改进建议——先改哪条、后改哪条,排好了。

这一点决定了用户会不会来第二次。如果报告只给一个总分和一个等级,老师看完不知道该干嘛,下次就不想看了。分数是给管理者看的,"怎么改"才是给干活的人看的。

换个场景就好懂:给下属做绩效反馈,只说"你这次 3.5 分"没有意义。得说清哪件事做得好、哪件事下次换个做法。评分体系的价值在反馈,不在分数。

04

一个数字,必须有参照系

同一份磨课报告里,除了总分,还带着另外两个数:

为什么必须带上?因为单独一个分数,读不出高低。是这个年级普遍水平高、所以这个分数算差?还是这届学生难教、这个分数已经不错?

横向和同年级比,纵向和自己的过去比——这个分数才变成信息。

换个场景就好懂:汇报时甩一个"本月转化率 12%",没人知道这是好是坏。得说清上个月多少、同行大概多少。没有参照系的数字,只是噪音。
05

结论要能指回原话、原题

这是让用户"服气"的关键一步。

磨课评课的录音会转成逐字稿,而且是分了段的。说"你这节课互动不够",得能指到是哪个环节、哪几句话——老师才会认,也才知道具体回去改哪里。

学情分析同理。它在题目和知识点之间建了一层关联:知识本身是分层的(大知识点下面挂着小知识点),每道题、每份试卷都连到具体的知识点上。

有了这层关联,才可能说出"这个学生在'分数的四则运算'上错了 4 题"——而不是只知道他考了 63 分。

两步都做,结论才有落点:先建好"结果和原始材料之间的连线",再用它说话。少了这一步,系统给出的判断就是悬空的——不管多准,别人都有理由不信。

换个场景就好懂:说"这块业务有问题"没人服。得能指出是哪张表、哪一笔。反馈要落到具体位置,才有行动价值。

06

能不能用起来,卡在两头

很多人以为系统做出来就能用。真正卡住的地方通常在两头:数据进不来,结果送不出去。

进来这一头

现实是:学校和机构的数据,都躺在 Excel 和 Word 里。成绩是 Excel 表,试卷是 Word 文档,没人会替你整理成标准格式。

所以学情分析专门做了两个导入的部件:一个读 Excel 成绩表,一个读 Word 试卷。数据进不来,后面分析得再好也等于零。

出去这一头

同一批数据,它出三类报告,给三种完全不同的人:

把全班排名塞进家长报告,家长看不懂也没用。同一个结论,对不同的人要说不同的话。

换个场景就好懂:你辛苦做了一份分析,如果别人拿不到、或者拿到了看不懂,这份分析在实际工作里的价值是零。做之前先想清楚:数据从谁手里拿、结果送到谁手里。

07

改了三遍还是不对,先别改内容

磨课评课要把报告导出成 PDF,方便存档和当面沟通。这件事花了整整一天,改了四个版本。

前三个版本都在改样式:

  1. 第一版:版式塌了
  2. 第二版:换了排版方式,还是乱
  3. 第三版:干脆把所有装饰都删掉,只留表格和文字——还是乱

到第四版才反应过来:问题根本不在样式上,在用来生成 PDF 的那个工具身上。它处理中文和复杂排版本来就不太靠得住。换成用浏览器的方式来生成,一次就对上了。

当时点醒人的是一个很简单的观察:同一份内容在浏览器里看是完全正常的,导出来才乱。——那说明内容没问题,是把它变成 PDF 的那个环节有问题。

会听到的词:把网页"画"成你能看到的样子的那一步,程序员叫渲染。同一份内容用不同的工具画,结果可能完全不同——所以"看起来不一样"不一定是内容错了,也可能是画它的那支笔不一样。

一句话记住它:同一处改到第三遍还不对,就停下来怀疑工具,别再改内容。继续改下去,你会把本来对的东西也改坏——那三个版本里有两次是白改的。

最后

里面装的是真人的事,边界要在动手时定

这一条不占编号,因为它不是"七件事里的第八件",而是从第一天就要摆在那儿的前提。

学情分析处理的是真实的学生信息:档案、成绩、排名、家长报告——报告里还会写明孩子的短板和波动。这类数据天生敏感。

所以一套涉及真人的系统,在上线之前就得先回答:谁能看、能看多少、看的时候留不留痕迹、离职的人还能不能进得去。

这不是"以后再补"的功能,是动手时就要划的边界。等系统跑起来再想这件事,通常已经晚了。

一句话:不涉及真人的工具,怎么快怎么来;一旦里面有别人的信息,先把门锁想清楚,再考虑做多大。

这一页出现的词

以后和技术同事聊,你会听到这些词。记住它们的意思就够了,不用记拼写。

你会听到的词其实是什么意思
数据结构 / 数据模型你怎么把东西记下来、分几类、彼此怎么关联
迁移给已经装满东西的柜子重新分格子
前端用户看得见的那一层——网页、界面、按钮
后端背后干活的那一层——用户看不见,负责处理和存东西
部署 / 上线把你做好的东西传上去,让别人真的能用上
变更记录 / 决策记录改主意的变更单,重点在"当初为什么这么想"
逐字稿录音转成的文字,分段存好,方便指到具体位置
知识点把一门课拆成的小块,题目挂在它下面,才能算清哪块弱
导入 / 导出把 Excel、Word 里的数据收进来;把结果送出去给别人看
接口别人(或别的程序)从外面访问你这套系统的入口

想看看完整的?

上面每一件事,都能在这两套真实系统里看到它原本的样子。