
16000道编程挑战题如何组织深入解读freeCodeCamp课程数据模型【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCampfreeCodeCamp 是全球最大的免费编程学习平台它的课程仓库里存放着16000 多道编程挑战题。这么多题目是怎么被组织、校验和分发给全球学习者的本文带你深入解读 freeCodeCamp 的课程数据模型看看这个开源项目如何用超级区块Superblock→ 区块Block→ 挑战Challenge的三层数据模型支撑起 16000 道挑战题与 30 多个认证课程。课程数据模型总览三层结构 认证出口整个课程数据都存放在 curriculum/ 目录下核心是三个层次的嵌套层级概念存放位置数量级Superblock 超级区块一门认证课程curriculum/structure/superblocks/98 个Block 区块课程内的一组主题挑战curriculum/structure/blocks/1032 个Challenge 挑战一道具体题目curriculum/challenges/16000 道Certification 认证若干挑战组成的证书curriculum/challenges/english/certifications/31 个全局的课程目录由 curriculum/structure/curriculum.json 统一管理它的superblocks字段列出全部课程如responsive-web-design、learn-python-loops-and-sequences等certifications字段列出所有可颁发证书的认证。第一步Superblock 定义课程骨架 每个超级区块对应一个 JSON 文件声明该课程包含哪些区块。以 curriculum/structure/superblocks/basic-css.json 为例它按顺序列出了 lecture讲解、workshop工作坊、lab实验、review复习、quiz测验等区块lecture-what-is-css→workshop-cafe-menu→lab-business-card→ … →quiz-css-backgrounds-and-borders这种讲解 → 实战 → 测验的排列方式就是学习者在网站上看到课程目录的直接来源。对于带章节的课程curriculum/schema/superblock-structure-schema.js 还定义了 chapters章节→ modules模块→ blocks 的更深层级。第二步Block 把挑战题分组成主题 每个区块目录下存放着属于该主题的所有挑战题文件名是一个 MongoDB ObjectId如58c383d33e2e3259241f3076.md这是为了与线上数据库中的题目 ID 一一对应。区块的元信息名称、排序、布局方式则记录在 curriculum/structure/blocks/ 下的同名 JSON 中例如 basic-html.json。blockLayout字段决定了这个区块在前端以列表、网格还是链接的形式展示。第三步一道挑战题的内部结构 打开任意一道挑战题你会发现它就是一个带 YAML frontmatter 的 Markdown 文件。以 curriculum/challenges/english/blocks/basic-css/58c383d33e2e3259241f3076.md 为例它的内部结构非常精巧frontmatterid、title、challengeType、dashedName生成 URL 的短横线名等元数据# --description--题目背景描述# --instructions--给学习者的具体任务# --hints--提示其中直接内嵌 Jest 断言代码# --seed--学习者打开编辑器时看到的初始代码题目正文用自定义的#标记分段这种一份 Markdown 包含题目、答案测试、初始代码的设计让课程作者用纯文本就能完整维护一道题也让 Git diff 评审课程修改变得直观。challengeType34 种题型的数字编码每道题的challengeType字段决定它在网站上的渲染方式和判题逻辑。这些类型统一定义在 packages/shared/src/config/challenge-types.ts 中从 HTML0、JavaScript1到 step7、quiz8、video11、exam17、multipleChoice19、dailyChallengeJs/Py28/29共 34 种。同一文件还维护了两张映射表viewTypes题型 → 前端视图组件classic / quiz / exam / step 等submitTypes题型 → 提交判题方式tests / project.frontEnd / exam 等这意味着一道挑战题如何被展示、如何被判定通过完全由数据驱动前端无需为每种题目写死逻辑。认证出口把挑战题打包成证书 完成区块里的所有挑战并不自动等于获得证书。认证定义在 curriculum/challenges/english/certifications/ 下的 YAML 文件中例如 responsive-web-design.yml 只列出该证书要求的 5 个 capstone 项目如 Build a Survey Form。其余普通挑战通过tests字段中的 ID 参与验证——这就是为什么16000 道题最终只对应 30 多个认证大多数题目是练习少数项目是认证关卡。数据质量防线16000 道题如何保持一致 ✅如此大规模的结构化数据靠人工维护必然出错freeCodeCamp 用多层校验兜底Joi 模式校验curriculum/schema/challenge-schema.js 定义了完整的题目结构约束比如challengeType必须是 0–33 的数字、quiz 必须恰好 10 或 20 题、视频题必须有videoId等整体课程校验curriculum/schema/curriculum-schema.js 保证每个超级区块都包含合法的 blocks挑战题 Linterpackages/challenge-linter/ 作为独立包在 CI 中静态检查所有课程 Markdown工具链辅助tools/challenge-helper-scripts/ 提供创建、重命名、排序挑战题的命令行脚本规范课程作者的操作流程总结一份 Markdown撑起一个学习平台 回顾 freeCodeCamp 的课程数据模型它的设计精髓在于文件系统即数据库16000 道挑战题 16000 个带 ID 的 Markdown 文件Git 天然提供版本控制与协作数据驱动一切从课程目录、题目渲染到判题逻辑全部由challengeType和结构 JSON 决定模式先行Joi 校验 Linter 让课程内容的质量在合并前就被守住如果你想亲手查看这份课程数据可以从 curriculum/structure/curriculum.json 出发沿 superblock → block → challenge 的路径亲自走一遍这 16000 道挑战题的组织脉络。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考