教学案例 | 一次人机协作的完整迭代记录
一个页面的九次迭代
这一页记录 江阴·兴港社区研学读本(johnonlife.com/xg)从零到现在的全过程:每一次改动的触发是什么、做了什么决定、哪些判断后来被证明是错的、以及错在哪里。它原本只是一份社区调查报告,最终变成了一份面向上海张江研学家长的读本——中间最关键的一次修订,是把一条画反了的街道改回来。
01 / 关于本页
为什么要把变更历史单独做成一页
一个"看起来还行"的成品页面,最容易掩盖的恰恰是它怎么变成这样的。对教学而言,过程比结果更有价值:学生需要看到哪些判断是靠得住的、哪些是靠不住的、出错之后怎么收场。
所以这一页刻意保留了完整的迭代痕迹,包括那次犯错与更正。全页事实均可回溯到政府公开信息、统计公报与官方通告;未能核实的,一律标注为"示意"或"以实际为准"。
02 / 迭代时间线
九次迭代,逐条复盘
时间线按实际发生顺序排列。蓝色节点为常规演进,红色节点为纠正错误的修订。
-
v0.1初始调研
从零生成一份社区调查报告
触发:「全面调查江苏省江阴市利港街道兴港居委」- 多路检索公开资料:政府站点、地名志、统计公报、司法系统与新闻报道
- 整理出社区概况、人口住宅、历史沿革、网格化治理、荣誉特色、民生动态、所属街道七个板块
- 输出单文件 HTML,约 9.9 KB
产出:一份信息密度尚可、但没有任何视觉设计的纯内容页面。
-
v0.2部署上线
发布到 johnonlife.com/xg
触发:「将网页发布到 http://johnonlife.com/xg」- 先排查本地 SSH 配置,确认服务器归属,避免动到别人的机器
- 读取 nginx 配置定位文档根 /opt/johnonlife.com,确认 /xg 此前不存在才新建目录
- 上传为 /xg/index.html;实测跳转链:http://…/xg → 301 → https → 补斜杠 → 200
原则:先确认"没有旧内容",再落盘;发布后用 curl 实测而非想当然。
-
v0.3新增地图
补一张手绘位置图
触发:「补一个手绘地图,注意符合上北下南左西右东的标准」- 新增"八、手绘地图"章节,原小结顺延为第九章
- 用 SVG 实现手绘质感:feTurbulence + feDisplacementMap 抖动笔触滤镜、楷体字族
- 标注四至:北滨江西路、南利中街、东利港社区、西西奚墅村;右上角配指北针,左下角配图例
注意:此刻的地图基于社区简介的文字表述绘制——这成为下一个版本的隐患。
-
v1.0风格统一
与主站视觉语言对齐
触发:「保持与 https://johnonlife.com 主页风格一致,继续完善」- 先把线上主页 index.html 与 site.css 拉到本地,提取设计令牌:朱红 #c0392b、墨青 #1f3a4d、竹绿 #4c7a60、米色 #f6f2e9、纸白 #fbf9f4
- 标题改为宋体衬线(Songti SC),正文保留系统无衬线
- 补齐主站组件:毛玻璃固定导航、01–09 编号章节、白底雾绿顶边卡片、暗色小结块、深蓝 #0c2637 页脚
- 改为自包含内联样式(不依赖 site.css),保证本地与线上渲染一致
方法:风格统一不是"照着感觉调",而是先把设计令牌提取出来,再逐项对齐。
-
v1.1关键纠错
把画反的利中街改回来,并重绘路网
触发:「认真检查一下手绘图,完善手绘图,手绘图中的路线保持与地图一致,可以参考腾讯地图、高德地图、百度地图、天地图等等」- 查到权威依据:江阴市政府《关于公布江阴市实施市容环卫管理区域范围和主要街道及重点地区的通告》——利康路、利南街为东西向;兴港路、利中街为南北向
- 发现原图错误:把南北向的利中街画成了社区南界的东西向道路;社区四至随之全错
- 校正四至:西兴港路、东利中街、北利康路、南利南街;与"兴港新村位于兴港路×利康路交叉口东南角"的官方地址互相印证
- 补全真实路网(原图只有 2 条路),并新增居委会(利康路187号)、利港公园、长江、指北针、图例与依据说明
- 正文第一章"地理位置"改为双轨标注:保留社区简介原文 + 注明按道路拓扑的校正
详见下一章的深度复盘。这是全案最有教学价值的一次修订。
-
v1.2渲染修复
截图检查后修掉两处显示瑕疵
触发:(自检环节,非用户提出)- 用无头 Chrome 实际截图渲染,发现图例最后一项"长江(示意)"被框底裁切 → 图例框高度加至 112
- 社区中部网格虚线穿透文字、影响可读性 → 给文字加同色描边 paint-order="stroke"
方法:SVG 不能只"看代码对不对",必须真的渲染出来看一眼。
-
v2.0受众重构
从"调查报告"改写为"研学读本"
触发:「面向上海张江的研学家长,继续完善页面,增加江阴的介绍,主要是兴港居委的介绍」- 结构重排为 13 章,采用"由大到小"漏斗:01 江阴市 → 02 利港街道 → 03–09 兴港社区主体 → 10 研学课堂 → 11 出行指南 → 12 家长问答 → 13 小结
- 新增江阴城市速览(2024 统计公报口径:GDP 5126.13 亿、常住 178.68 万、人均 28.70 万、上市公司 62+、县域经济二十二连冠)
- 利港街道补充关键研学资源:利港长江生态湿地(长江江阴段最后一块原生态湿地,岸线约 10 km)、临港开发区背景、远景能源分布式风电、双良石墨烯光催化治水
- 新增四大研学课堂、出行指南(含第二张 SVG:张江→江阴区位示意)、家长问答 8 条
- 核实真实交通:沪宁沿江高铁江阴站⇄上海虹桥约 1 小时 13 分(D5559/D5560),江阴站→社区约 25–30 km
页面体积 16 KB → 55 KB;兴港居委始终是主体,江阴介绍是"为了让家长理解它所在的位置"。
-
v2.1细节修复
区位示意图的箭头压字问题
触发:(自检环节)截图发现红虚线箭头从三行说明文字中间穿过- 箭头路径下移、标签整体上移并重排基线,彻底分离
- 重新单独渲染该 SVG 复核后才上线
当时版本。所有时效性信息(车次、票价、开放时间)均标注以官方当日公告为准;随后在 v3.0 又被大幅扩充。
-
v3.0背景补全
补齐三级背景:江阴 · 利港 · 兴港,外加名人与区位图
触发:「江阴的介绍、利港的介绍、兴港的介绍都补上,江阴历史及当代名人有哪些都简单介绍。几张图都可以补一下江阴在长三角的位置、利港在江阴的位置、兴港在利港的位置」- 章节数 13 → 14:新增「02 江阴名人」整章,其余章节整体顺延重编号
- 名人 12 位:徐霞客、阎应元、季札与春申君、缪荃孙、刘氏三杰、郑觐文;当代俞敏洪、吴仁宝、周建平、缪双大(利港人,双良集团创始人)、沈鹏、上官云珠
- 新增 3 张区位图,构成逐级放大的定位链:江阴在长三角 → 利港在江阴 → 兴港在利港;加上原有街区路网图与张江⇄江阴交通图,共 5 张 SVG
- 利港章节补地名考据:利港本名"渔浦",因渔得利而名;宋代设利港所、明洪武十一年(1378)置巡检司;"上乡/下乡"两种口音的人文细节
- 兴港章节补"这个社区长什么样"的生活场景描述
- 江阴章节补"这座城的性格"时间线:忠义之邦、江阴要塞、渡江战役、江阴长江大桥(缆索之都)、远望号
方法延续:三张新图的方位仍严格"上北下南、左西右东",凡无精确依据的相对位置一律标注"示意";并修掉了新图中指北针与长江色带的重叠。
03 / 关键纠错
一条画反的街道,和它牵出的连锁错误
这是整个案例中最值得讲的一段。错误不在排版、不在配色,而在事实;而且它不是凭空编造的,是"照着一段看起来很可靠的文字"画的。
错误是怎么发生的
社区简介原文写着:社区"东接利港社区,西临西奚墅村,南至利中街,北靠滨江西路"。这句话来自官方渠道,读起来毫无问题。v0.3 的地图就是照它画的:把利中街画成社区南边一条东西向的横路。
但检索政府通告后发现:利港街道四条主要街道的起止点明确写着——兴港路(利康路—利南街)、利中街(利康路—利南街)。既然起止于两条东西向道路之间,那利中街本身必定是南北走向,不可能成为东西向的南界。一句话里的矛盾,只有把道路拓扑摆在一起时才看得出来。
连锁后果
| 原判断 | 南界=利中街(东西向);北界=滨江西路;图中只有 2 条道路 |
|---|---|
| 实际拓扑 | 西界兴港路(南北向)、东界利中街(南北向)、北界利康路(东西向)、南界利南街(东西向) |
| 交叉验证 | 兴港新村官方地址为"兴港路×利康路交叉口东南角",与"西界兴港路、北界利康路"完全吻合,形成互证 |
| 滨江西路 | 位于利康路以北、更靠近长江,并非社区直接北界 |
| 处理方式 | 地图按通告拓扑重绘;正文保留原文表述 + 加"修订说明"框说明差异,不静默覆盖 |
三条可迁移的教训
教训一
文字描述 ≠ 空间拓扑
一段话里每个词都对,拼起来仍可能不成立。凡是把文字转换成图形(地图、流程图、结构图)的地方,都必须找一份独立于文字的结构性数据源来交叉验证——本例用的是政府通告里的道路起止点。
教训二
官方来源也可能只是"口径"
社区简介的"南至利中街"未必是错,它可能沿用的是旧地名或未更新的表述。正确做法是双轨呈现:保留原文,同时标注校正依据,让读者自己判断。静默改写会抹掉线索,也可能引入新的错误。
教训三
不确定就标"示意"
地图上每一个无法核实的要素(如"利港公园"的相对方位)都明确标注"示意方位",并在图边注明"非严格按比例"。把不确定性写在图上,比画得很像却不准要负责得多。
方法论
它的逆向用法
这个错误反过来也是一个可用的教学工具:让学生先读那段社区简介,自己画出地图,再给他们看政府通告里的道路起止点,问"哪里对不上"。制造一次可控的认知冲突,比直接讲正确答案记得牢。
04 / 数据来源
信息从哪来,可信度怎么分
全页事实按可信度分为三级,教学中可以让学生练习"给信息分级"。
| A 级 · 官方权威 | 《2024 年江阴市国民经济和社会发展统计公报》(江阴市统计局)、江阴市政府《主要街道通告》、江阴临港经济开发区政务服务网、江阴市政府铁路调图公告。 用于:所有城市与街道数据、道路走向、高铁车次。 |
|---|---|
| B 级 · 公开报道 | 地方党媒与主流媒体报道(如长江岸线整治、利港湿地修复、社区妇女议事活动)。 用于:社区治理细节、生态整治过程。已尽量交叉比对。 |
| C 级 · 商业平台 | 地图/票务/列车查询类平台(门牌与交叉口关系、景点地址、票价)。 用于:辅助定位与价格参考,一律标注"以实际为准"。 |
05 / 教学要点
从这一页能拆出的六条方法
方法 01
先问"给谁看",再问"写什么"
v2.0 的全部改动都源于一句受众描述:"面向上海张江的研学家长"。定位从"资料汇编"变成"决策辅助"后,内容清单自然变了——要交通、要行程、要问答、要"孩子能学到什么"。受众变了,信息结构必须重排,而不是加几段。
方法 02
由大到小的漏斗结构
江阴市 → 利港街道 → 兴港社区 → 研学课堂 → 出行 → 问答。读者每往下一层,心智负担都在下降。讲一个陌生的小地方,先把它放进读者已知的坐标系(这里是"高铁 1 小时 13 分")。
方法 03
把不确定性显式化
"示意方位""非按比例""以 12306 当日为准""以景区公告为准""需提前预约"——这些标注不是免责套话,而是内容质量的一部分。敢标不确定的内容,才值得信它标确定的部分。
方法 04
渲染出来再看一遍
v1.2 与 v2.1 的问题(文字被裁、虚线穿字、箭头压字)在代码层面全都"正确",只有渲染后才暴露。凡是图形输出,截图检查是必经工序,不是可选项。
方法 05
改之前先确认不会破坏现状
部署前先读 nginx 配置确认文档根、先确认 /xg 目录不存在;发布后用 curl 实测状态码与内容关键字。对线上环境的每一次写入,都应该先做只读探查。
方法 06
保留痕迹,包括错误
正文保留社区简介原表述、本页完整记录那次画反街道的经过。把错误留在文档里,它就从"失误"变成了"材料"。这也是这一页存在的理由。
06 / 复现
如果要重做一遍
本页是纯静态单文件 HTML,无构建、无依赖,可直接在浏览器打开。线上部署只需一条 scp。
# 1) 本地渲染自检(无头 Chrome 截图,检查布局与 SVG) "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \ --headless=new --disable-gpu --no-sandbox --hide-scrollbars \ --screenshot=/tmp/xg.png --window-size=1200,14000 \ --virtual-time-budget=8000 "file:///path/to/index.html" # 2) 部署(nginx 文档根 /opt/johnonlife.com,/xg 目录) scp index.html johnonlife.com:/opt/johnonlife.com/xg/index.html # 3) 线上校验:状态码 + 关键内容是否就位 curl -s -o /dev/null -w "%{http_code}\n" https://johnonlife.com/xg/ curl -sk https://johnonlife.com/xg/ | grep -c "兴港社区"
07 / 当前状态
它现在是一个能用的读本,也是一个能讲的案例
页面现为 13 章、约 55 KB,面向上海张江研学家长,主体仍是江阴市利港街道兴港社区(兴港居委)。内容涵盖江阴城市背景、利港街道与长江生态湿地、社区概况与人口、村改居历史、网格化治理、荣誉民生,以及四堂研学课、出行行程与家长问答。
而作为教学案例,它留下的是另外三样东西:一次可复盘的事实纠错、一套可迁移的内容重构方法、以及一段没有被擦掉的迭代痕迹。