OpenDSA 中文版:哈佛 CS50 上线,与一轮全站深度打磨
距离上次发布说明(9 月 30 日)两周过去,OpenDSA 中文版做了一件”从 0 到 1”的扩容和一大批”从 90 到 99”的打磨:新增第 41 本书——哈佛大学 CS50 计算机科学入门的中文讲义,同时完成了一次全站范围的术语裁定、中文排版修复和交互式组件的深层本地化。
先重新介绍一下这个项目:
OpenDSA 是一个国际开源的交互式电子教材体系,长期服务于世界各地的数据结构与算法课程。它和普通电子书的区别在于”每一页都是可操作的”:算法可视化动画(AV)可以单步播放插入、删除、分裂、探测的每一步;随堂练习即时判分;术语表、概念图与正文超链接交织成网。我们将其课程体系系统性翻译为简体中文,全部免费开放,无需注册。
不知道从哪开始的话:零基础选下面新上线的 CS50,系统学数据结构与算法选林雪平大学的 TDDD86(见 上次说明)。
成果预览
| 指标 | 数量 | 上次 |
|---|---|---|
| 中文教材 / 课程书 | 41 本 | 40 本 |
| 已翻译 RST 模块 | 703 个 | 691 个 |
| 中文练习页 | 1256 个 | 1253 个 |
| 术语表中英对照条目 | 809 条 | 757 条 |
结构一致性门控(中英逐模块比对公式、引用、指令骨架)保持全绿,全量构建 41/41 通过。数字增长不大——因为这两周的重心不在”摊大”,而在”做深”。下面先说新书,再说变化。
新书目:CS50 计算机科学入门(中文版)
https://dsa.ariostar.com/Books/CS50_zh/html/index.html
这是本站第一本非 OpenDSA 原生课程的书:我们把哈佛大学 CS50x(2026 版)的每周讲义笔记翻译改编进 OpenDSA 教材框架,得到一本中文的 CS50 课程讲义。
为什么是 CS50:它是全球最著名的计算机入门课,没有之一。CS50 在 2025 年完成了一次大改版——开篇改为 Scratch 图形化编程切入,新增 AI 专题周,后半程以 Web(HTML/CSS/JavaScript)与 Flask 收尾;目前的官方 2026 版沿用这套新大纲并持续微调。中文版的底本即 2026 版官方讲义,完整跟随其结构,共 12 章:
Scratch → C 语言 → 数组 → 算法 → 内存 → 数据结构 → Python → SQL → 人工智能 → 网页开发 → Flask → 结课
CS50 与 OpenDSA 的其余书目形成清晰的互补关系:CS50 讲”计算机是什么、程序怎么跑”(从二进制、指针、内存布局讲起,这是它独有的强项),TDDI16/TDDD86/CS3 讲”数据结构与算法怎么设计分析”。零基础同学建议 CS50 前六章 → TDDI16 的路线;有基础的可以直接从 C/内存两章查漏后进入主线教材。
内容忠实性说明:译文以 2026 版官方讲义为准逐周校对(抓取走官方年份无关的规范地址,始终对齐最新学期),代码清单保留英文原文(编程课的作业语言不应翻译),仅叙述与注释中文化。
重大变化
一、中文排版:段落不再”千疮百孔”
这是肉眼最可见的一项。OpenDSA 的英文源文件沿袭技术写作惯例,在约 80 列处硬换行;中文翻译早期逐行对应,而 docutils 会把段落内的换行渲染成空格——于是中文页面里到处出现”存储相同数据的 BST 获得更好的性能”这类句中间距,甚至把词语劈开。
我们写了一个保守的段落收缩器(tools/reflow_zh.py):把段落内部的硬换行缝合回单行,中英文交界处按排版规范保留一个空格;代码块、表格、列表、字面块、数学环境一律不碰。全站共收缩 3494 个段落、删除约 1.5 万行冗余换行。过程中还揪出并修好了两类深层问题:术语表词条行被误缝导致全站 :term: 链接失效(已恢复并加保护)、OpenDSA 特有的双目标引用语法(:ref:显示词 <术语> <标签>``)只认原始换行布局(91 个文件整体豁免)。
二、术语裁定:一次全站”正名”
两周里逐项裁定并全库统一的术语(多数由读者在真实阅读中指出):
| 英文 | 定译 | 说明 |
|---|---|---|
| hash / hashing | 哈希 | 推翻此前”散列”取向,向主流工程用法靠拢 |
| bin / bucket / slot | 箱 / 桶 / 槽位 | 基数排序、散列两章体系性区分 |
| node | 结点(树/表)/ 节点(网络) | 严格二分:数据结构用”结点”(教材正统),区块链网络用”节点” |
| string | 字符串 | 318 处清理,”串”不再单独出现在术语位 |
| skip list | 跳表 | 弃”跳跃表” |
| grammar / syntax | 文法 / 语法 | 形式语言域用”文法”(乔姆斯基文法、上下文无关文法),程序 syntax 用”语法”;并补齐”上下文相关文法”等残缺标签 |
| adversary argument | 对抗论证 | 模块标题定为”对抗性下界证明” |
| primitive element | 原始元素 | 集合记号语境;”本原元”留给域论,FFT 章”本原单位根”不动 |
| problem lower/upper bound | 问题下界 / 问题上界 | 与一般”下界”区分,术语表标签补全 |
术语表从 757 条扩充到 809 条,并清除了全部英文残留标签(如 FIFO 的中文标注此前竟是一串英文)。
三、可视化组件:从”能跑”到”全中文”
OpenDSA 最值钱的是交互式组件,这块此前只做了表层汉化,两周补完了深层:
- PIFLA(形式语言)程序指令题库:86 个文件、约 1250 个对话帧全部译成中文,判分键与答案映射经程序化校验保持一致;
- 99 个幻灯片组件的配置镜像修复:本地化脚本按自身 URL 寻找同名
.json,此前大量组件因缺镜像而静默回退英文甚至加载失败(练习显示 0/0); - 区块链交互组件:默克尔树、加解密、挖矿等 12 个 HTML 部件的界面词、按钮、说明全部本地化(含一个上游拼写错误的按钮,仅在中文版修正);
- 命令行与 Git:题库尾部 6 组任务与全部挑战标题补齐中文;
- 练习引用纠偏:88 处正文引用仍指向英文原版练习页(尽管中文副本早已存在),已切换,如链式栈 push/pop 熟练度练习。
四、渲染缺陷清剿
读者报告的疑难杂症逐个归零:超宽图片溢出正文列(全站 CSS 约束,源头 140 张超宽图受益)、术语链接粘连成纯文本、幻灯片字幕里的加粗标记原样显示星号、LR 分析伪代码被翻译压扁的行结构、以及 CYK 分析表与编译器管线图——它们的英文原版用了 MathJax 至今不支持的 \cline/\multicolumn 画法(我们连 MathJax 3 都实测了一遍,确认不支持),已用兼容语法重绘,三处图形从”红色报错”变成正常渲染。
五、质量与工程
- 逐书 LLM 审查:对 PY4E、PIFLA、区块链、命令行与 Git 等书做了全书逐模块的机器审查+人工分诊,命令行与 Git 书实现 106 个模块 0 失败收官;
- 部署流水线重构:Gitea Actions 改为”单一变更检测 job + 条件跳过”架构,无改动书籍的构建任务不再占用 runner,全站重推从十余分钟降到秒级跳过;重建脚本全面并发化。
关于与反馈
本项目基于开源项目 OpenDSA(https://opendsa.org/)翻译;CS50 内容依据哈佛 CS50x 2026 版公开讲义改编。术语裁定难免有偏好之争,每一项我们都记录了理由,欢迎带着依据来辩——更欢迎直接丢来一个”这页看着不对”的链接,过去两周的多数修复就是这么来的。