第二天上午,二号教学楼204的空调恢复了。
代价是课程平台坏了。
老师在讲台上刷新了三次,屏幕里的小组作业页面始终只显示一行提示:
当前服务繁忙,请稍后重试。
“昨天的课堂练习改成三人仓库作业。”他索性关掉投影,“中午十二点前,各自完成负责部分并提交。平台恢复以后看个人记录,不只看最后结果。”
教室里安静了两秒。
随后,二十多个小组同时打开了代码托管页面。
陆小川点进昨天第三组的仓库。组长权限还留在他名下,右上角的“合并”按钮已经从灰色变成绿色,像是在提醒他:只要三个人把文件发过来,他一个人就能结束这场作业。
韩铮显然也是这么想的。
“我做完把数据文件扔你那儿。”他说,“你不是组长吗。”
周宁抬起头,敲了敲要求最后一行:“老师刚说看个人记录。你想让平台判我们俩围观?”
“文档里写分工。”
“老师刚说看个人记录。”周宁把作业要求拉到最后一页,“只在最终文档里写名字,平台会判另外两个人没过程。”
韩铮看向陆小川:“组长能开权限吗?”
“能。”
陆小川的鼠标已经停在合并按钮上。
男性人生里,他和韩铮做小组作业时很少讨论这个问题。韩铮把数据清理完,直接通过聊天软件发压缩包;陆小川合并、测试、提交,谁顺手谁多做一点。只要最后能过,没人计较平台上留下的是谁的名字。
他甚至记得韩铮的文件习惯。
文件夹一定叫“新建文件夹”,改过一次叫“新建文件夹2”,真到提交前才会变成“最终版”。
现在韩铮发来的目录叫data-check,分支名也按课程要求写得规规矩矩。
陆小川把鼠标从合并按钮上移开。
“先别发文件。”他说,“你们各自要保留什么?”
周宁回答得最快:“过程说明、测试截图,还有最后一版提交记录。”
韩铮想了想:“我自己做数据校验。你帮我看一眼就行,别最后连我的那份一起换了。”
“接口部分呢?”
“你负责。”韩铮说,“昨天都是你告诉我点哪里,今天总得让我自己写一块。”
这个分法不快。
三个人如果按陆小川熟悉的方式做,他可以把昨天的排错顺序直接套过来,十点前就完成全部内容。现在要分别建分支、开权限、互相检查,再让每个人用自己的账号提交,至少会多花半小时。
老师刚从旁边经过,敲了敲他们桌面:“还没开始?”
“在拆提交记录。”陆小川说。
“拆完就做。十二点不会因为你们讨论过程延后。”
带着期限讨论公平,听起来很像一种低效率的奢侈品。
陆小川还是打开了成员权限。
“周宁负责过程文档,每次失败都留,不等最后补。韩铮做数据校验,我做接口和合并。”他顿了顿,“合并前互相确认,不直接往主分支塞。”
三个账号旁边依次亮起可提交标志。
周宁截下这张图,放进记录首页。
“这也记?”
“记。”她说,“第一步,先保证每个人有干活的地方。”
上午九点四十,教学楼的下一节课要开始,三个人抱着电脑转移到软件学院公共机房。
机房还剩最后一排空位。风扇转得很慢,主机箱里不断传来细碎的嗡鸣。陆小川刚连上校园网,韩铮那边已经跑出了第一版校验结果。
“二百四十七条,三条格式错误。”韩铮说。
陆小川把数据拖进自己的测试脚本。
结果是五条。
“少了两条。”
“哪两条?”
陆小川扫过原始数据,目光停在两行空白字段上。他知道韩铮漏掉了什么,也知道只要把条件补在第十九行,这部分立刻就能通过。
他的手已经伸到韩铮电脑的触控板旁。
韩铮把电脑往自己这边拉了一点。
“说哪儿错了就行。”他说,“手拿开。”
“我还没碰。”
“你眼神已经改完了。”
陆小川的手停了半秒,收回来:“你以前不是都——”
“我以前什么?”
“算了。”
话没说完,反而比说完更像一个问题。韩铮看了他一眼,没有追问,只把测试窗口重新拉到中间。
可陆小川忽然想起男寝406里那些被自己顺手改完的作业。韩铮有时端着泡面回来,问哪里出了问题,他通常只会回答一句“已经好了”。
那时候他们是很熟的朋友。
熟到不必解释,也熟到有些步骤永远只留在一个人的脑子里。
“第八列。”陆小川说,“用空值和只有空格的值各跑一次。”
韩铮新建两条测试数据,没有看陆小川的脚本。
第一次运行,空值被判定为错误,只有空格的字段却通过了。
“清理顺序有问题。”韩铮低声说。
他往回翻自己的处理逻辑,先删掉多余字符,再重新判空。第二次运行时,五条异常全部出现。
陆小川对照输出:“结果对了。”
“等等。”
韩铮没有立即提交。他把五条异常重新分成缺失值、格式错误和重复记录,又给每一类补了单独提示。
这比陆小川原本打算使用的统一错误提示多花了九分钟。
也比统一写一句“数据不合法”清楚得多。
周宁把第一次漏检和第二次通过并排放进文档:“失败记录留着?”
韩铮点头:“留。没有第一次,就看不出为什么要改顺序。”
陆小川看着那两张截图。
如果由他直接接手,失败大概不会出现。
这份更完整的异常分类也不会出现。
十点三十七分,三个人开始第一次交叉检查。
周宁发现陆小川的接口说明只写了输入和输出,没写失败时返回什么;韩铮发现周宁把一张旧截图贴进了新版步骤;陆小川则在韩铮的数据说明里补上复现所需的编码格式。
没有谁的部分能原样进入最终版本。
也没有谁的部分被另一个人整块替换。
最后一个问题出在三个人都改过的说明首页。
周宁按实际过程重写了任务顺序,韩铮在同一段补上异常分类,陆小川则把接口地址换成了最终版本。合并页面把三段文字挤在一起,整片标红,谁直接选择“保留我的版本”,都会删掉另外两个人的一部分。
“这次组长按钮也不能一键解决。”韩铮说。
“能解决。”陆小川把三个版本并排展开,“只是不能一键。”
他先让周宁确认过程顺序,再让韩铮把分类说明移动到对应步骤,最后才替换接口地址。周宁盯着页面逐行核对,在删除旧段落前要求三个人各看一遍。
红色冲突提示消失时,说明首页没有变成任何一个人的原稿。
陆小川在合并备注里写:
三方确认,保留过程、分类与最终地址。
这句话比“解决冲突”长,也更准确。
十一点零六分,课程平台恢复。
右上角的绿色按钮还在那里。
陆小川没有立刻按。他先在小组群里发出合并请求,让周宁和韩铮分别确认最终内容。两个账号依次留下同意记录以后,他才完成合并。
平台页面跳出三行状态:
周宁:过程文档已提交。
韩铮:数据校验已提交。
陆小川:接口与合并记录已提交。
“这次谁都不是附件。”周宁收起电脑,“我十二点有课,审核结果你们看吧。”
她端起水杯走出机房,没留下来等一句“辛苦了”,也没有把文档所有权交给技术部分。
韩铮盯着三行记录看了一会儿。
“昨天你是不是故意让我操作的?”
“老师要求小组过程。”
“又拿老师挡。”韩铮说,“今天老师也要求,你手不还是伸过来了。”
“我没碰。”
“对。”韩铮合上电脑,“你眼神改完了。”
“……条件反射。”
“什么条件?”
陆小川拔下充电线:“看见错误就想改。”
这是真话。
只是不完整。
男性人生里的韩铮让他形成了另一层条件反射:知道对方下一步会做什么,知道他什么时候会把电脑推过来,也知道自己可以不问就接手。
现在这些熟悉没有消失。
只是不能再当作权限。
两个人去第二食堂等审核结果。
午间队伍已经绕过立柱。韩铮去排盖浇饭,陆小川在另一边买面,最后端着餐盘坐到同一张四人桌的对角。位置不近,也不用刻意挤到一起看一块屏幕。
韩铮先说起昨天的课堂练习:“你排错确实快。”
陆小川夹面的动作慢了一点。
“做过类似的。”
“昨天听过了。”韩铮扒了一口饭,“你别每次都抢答。我又没审你。”
韩铮低头翻了翻手机,把一条通知转进两人的聊天窗口。
可用性与数字叙事实验室秋季招新。
报名方向下面列着前端开发、地图数据、访谈记录和影像叙事,第一轮作业是校园问题观察。报名截止在下周一,通知末尾附着一行小字:所有岗位均需参加后续安全与门禁培训。
“梁可转到班级群了,你可能没看。”韩铮说,“这类排错你应该适合。”
陆小川点开报名页面。
姓名和学号已经由临大通自动填好。只要再选一个方向,上传材料,就能按下提交。
韩铮咬了一口排骨:“先说好,我只负责转发。报不报你自己看。”
“你今天怎么处处防代办?”
“刚才差点被你抢了鼠标。”韩铮说,“权限意识,现学现卖。”
“你报吗?”
“看数据方向。今天那五条异常能算材料的话,我就报。”
不是陪陆小川,也不是把一个进入实验室的位置让给他。
韩铮有自己的方法、自己的提交记录,也有自己想申请的方向。
陆小川把通知保存下来,没有当场填写。
十一点四十二分,三个人的小组群同时弹出课程审核结果。
【课堂小作业第三组】
【系统】:三名成员过程记录均有效,最终结果通过。
周宁很快回了一句:
【周宁】:看见了,文档署名顺序别动。
【韩铮】:不动。
陆小川也回了一个“好”。
较慢的分工没有让作业迟交。
韩铮不一样的方法也没有把事情做坏。
他过去认识的那个室友并没有回来,今天坐在对面的同学却第一次不需要依靠一段不存在于当前世界的友情,也能和他完成同一件事。
陆小川把招新通知退出,继续吃已经有些坨的面。
韩铮抬头:“下午还有课?”
“没有。回寝室。”
“那下次作业还三个人?”
陆小川看了一眼小组群里周宁刚补上的最终目录。
“系统还肯把我们仨塞一起的话。”他说,“再说。”
这不是一句保证。
但也不再是一场验证。
离开食堂前,陆小川把餐盘送到回收处。手机里的招新链接安静地留在收藏列表,没有替他作出任何决定。
韩铮没再问,他也没有急着把它变成今晚必须完成的事。