首页
/ free-programming-books 马拉地语(mr)免费在线课程清单:完整目录、格式规范与自动化维护机制

free-programming-books 马拉地语(mr)免费在线课程清单:完整目录、格式规范与自动化维护机制

2026-09-06 17:59:21作者:吴年前Myrtle

本文以 courses/free-courses-mr.md 为主,完整梳理该文档收录的 12 个技术领域、共 26 个马拉地语(मराठी)免费编程课程,并结合仓库的 docs/CONTRIBUTING.mdREADME.md 与 GitHub Actions 工作流,解析这类语言子列表的命名约定、Markdown 格式规则、YouTube 课程收录标准以及 fpb-lintawesome_bot 等自动化校验机制。读完本文,你可以准确使用这份目录、理解其维护规则,并知道按仓库规范扩展新条目需要经过哪些校验。

文档在仓库中的定位

free-programming-books 是一个按语言与资源类型组织免费学习资料的仓库,所有列表文件按类型分目录存放:books/courses/casts/more/。根据 docs/CONTRIBUTING.md,仓库共维护 6 类列表(Books、Courses、Interactive Tutorials、Playgrounds、Podcasts and Screencasts、Problem Sets),本文档属于 Courses 一类。其定义是“不是书籍的学习材料”(learning material which is not a book),典型特征是包含讲座、练习、测验与教学笔记;仓库特别强调“单独的讲座或视频不构成一门课程”。

courses/ 目录下的文件遵循统一的命名约定 free-courses-<locale>.md,其中 <locale> 是语言代码。马拉地语的 ISO 639-1 代码是 mr,因此文件名为 courses/free-courses-mr.md。该文件在 README.md 的 “Free Online Courses” 章节中被登记为 Marathi / मराठी,与中文(zh)、印地语(hi)、泰卢固语(te)等 40 余种语言版本并列。

从仓库的 _config.yml 可以看到,整个仓库同时是一个 Jekyll 站点:使用 pages-themes/minimal@v0.2.0 远程主题,Markdown 转换引擎为 kramdown,并启用了 jekyll-relative-links 插件。这意味着每个 .md 列表文件都会被渲染为静态站点中的一个网页,而列表文件内部以 ### 组织的分类标题、锚点链接会直接体现到渲染后的页面导航中。

文档结构与格式约定

courses/free-courses-mr.md 共 89 行,结构上完全遵循 docs/CONTRIBUTING.md 的 Formatting 章节要求:

  1. 顶部 Index:文件开头是一个 ### Index 区块,以无序列表链接全部 12 个分类的页内锚点(#android#angular#arduino#c#csharp#cpp#datascience#databases#html-and-css#java#javascript#python),且锚点按字母序排列。
  2. 分类使用三级标题 ###:每个分类是一个独立的 H3 小节;条目使用 * 标题 - 创作者 的标准行内格式。
  3. 空行规则docs/CONTRIBUTING.md):上一分类最后一个链接与新分类标题之间留 2 个空行,标题与该分类第一个链接之间留 1 个空行,两个链接之间 0 空行,每个文件末尾保留 1 个空行。
  4. 标点细节]( 之间不留空格;作者信息用前后各一个空格的 -(破折号)分隔;作者名写在格式标注之前。
  5. 条目按字母序插入:同字母前缀的标题按第二字符继续比较,fpb-lint 会在 CI 中强制这一点(见下文“自动化校验”)。

值得注意的实现细节是 C、C#、C++ 三个分类标题携带了显式锚点,例如文档第 34 行的 ### <a id="c"></a>C、第 40 行的 ### <a id="csharp"></a>C#、第 45 行的 ### <a id="cpp"></a>C++。由于 C#C++ 含有非字母数字字符,在 kramdown 渲染与 GitHub 标题 slug 化行为上可能存在差异,显式 <a id> 锚点保证了顶部 Index 中的 #csharp#cpp 链接在两种渲染环境下都能稳定命中,这是一个针对多渲染器兼容性的防御性写法。

完整课程目录:12 个分类、26 门课程

下表汇总了各分类的条目数量与创作者分布(依据 courses/free-courses-mr.md 全文统计)。全部 26 个条目均为 YouTube 播放列表(playlist)链接,无单个视频链接、无缩短链接,这与仓库对 YouTube 资源的收录规则一致:

分类 条目数 创作者
Android 1 उत्तर
Angular 2 Finishing School、Developers Marathi
Arduino 2 Marathi Computer、Asawari Shiposkar
C 2 MaRaTHi ProGrammer、M Computers
C# 1 The Pro Code
C++ 2 Prasad Computer、MaRaTHi ProGrammer
Data Science 1 Rajesh MORE
Databases 2 Dnyaneshwar Cholke、Code Marathi
HTML and CSS 2 SA Infolines、MaRaTHi ProGrammer
Java 3 JavaKatta、Learn with Ajit More、I.T. मंडळ
JavaScript 2 Shodkk Shantanu、AMIT GAIKWAD
Python 4 MITU Skillologies、I.T. मंडळ、Marathi ProGamer、Code Marathi

Android

Angular

Arduino

C

C#

C++

Data Science

Databases

HTML and CSS

Java

JavaScript

Python

从目录结构可以观察到几个特征:

  • 创作者跨分类复用:MaRaTHi ProGrammer 同时提供 C、C++ 和 HTML and CSS 课程,Code Marathi 覆盖 Databases(SQL)与 Python,I.T. मंडळ 覆盖 Java 与 Python。这说明该列表以“创作者(子平台)”而非“YouTube”为组织单元。
  • 覆盖范围:分类集中在入门级全栈与系统编程方向(C/C++/Java/Python、前端 HTML+CSS、Android、Angular、Arduino、SQL/数据库、数据科学),没有单列 Node.js/React 等 JavaScript 子框架分类。对比同目录的 courses/free-courses-te.md,其 JavaScript 分类下还细分为 ExpressJS、NextJS、NodeJS、ReactJS、VueJs 等 H4 子节,可见各语言列表的分类粒度由内容贡献决定,仓库规范允许 H4 子节但本文件未使用。
  • 多语言标题混排:部分标题同时使用天城文(Devanagari)与英文,如 C++ Full Course in Marathi Live Teaching (Oct 2021 Batch)Python Tutorial for Beginners In Marathi {आता आपल्या भाषेत कोडिंग },标题忠实取自资源自身命名,符合 docs/CONTRIBUTING.md “标题不虚构、不用全大写”的要求。

内容收录规则:什么样的课程能进入这份列表

courses/free-courses-mr.md 中的每一条都满足 docs/CONTRIBUTING.md 的几条硬性规则,理解这些规则有助于判断该列表的可信度与边界:

  • 课程定义docs/CONTRIBUTING.md):课程通常包含讲座、练习、测验、讲义等教学辅助材料;单独的讲座、单节视频或一份 PowerPoint 不构成课程。本文件全部条目为结构化播放列表,符合该定义。
  • YouTube 平台规则docs/CONTRIBUTING.md):仓库不将 “YouTube” 记为平台,而是记其创作者(creator);除非单个视频超过一小时且结构上像一门完整课程,否则不链接单个视频;禁止 youtu.be/xxxx 形式的缩短链接。本文件 26 个条目全部为 /playlist?list= 形式的播放列表链接,尾部作者字段均为创作者名称(如 - MaRaTHi ProGrammer- I.T. मंडळ),与规则完全一致。
  • 免费且可持续docs/CONTRIBUTING.md):不收录有期限的限时免费课程、限时注册或试用类资源——六个月后需要删除的东西不进入列表。
  • URL 质量docs/CONTRIBUTING.md):禁止缩短 URL;URL 中的跟踪参数必须去除;同一内容优先 https 版本;不收录 Google Drive、Dropbox、Mega 等文件托管平台链接。本文件中 youtube.comwww.youtube.com 两种写法并存,属同一域名的可接受变体。
  • 书写方向:马拉地语使用天城文书写、自左向右(LTR)。仓库针对阿拉伯语、希伯来语、波斯语、乌尔都语(*-ar.md*-he.md*-fa.md*-ur.md)另有专门的 RTL/LTR linter(见下文),.github/workflows/rtl-ltr-linter.yml 中的触发条件明确只匹配这四类文件,因此 free-courses-mr.md 不需要插入 &rlm;/&lrm; 方向控制实体。

自动化校验:修改该文档会触发哪些检查

该文档不是一次性写就的静态文件,提交改动后会经过多道 CI 校验。相关配置可在仓库中逐一对应:

  1. 格式与字母序校验(fpb-lint).github/workflows/fpb-lint.yml 在每个 pull_request 上安装 free-programming-books-lint 并执行:

    fpb-lint books casts courses more
    

    命令显式覆盖了 courses/ 目录,因此对 courses/free-courses-mr.md 的新增条目会检查:条目是否按字母序插入、]( 是否留空、- 作者分隔符、空行数量等 Formatting 规则。结果会清理路径前缀后上传为工件(artifact),便于在 PR 中查看错误定位(工作流第 23-35 行)。

  2. URL 有效性校验(awesome_bot).github/workflows/check-urls.ymltj-actions/changed-files 检出本次变更的文件,对每个 .md/.yml 文件并行运行(max-parallel: 10):

    awesome_bot <file> --allow-redirect --allow-dupe --allow-ssl
    

    各文件的检查结果以 JSON 工件形式上传,最终由 reporter 作业汇总为 PR 报告(.github/workflows/check-urls.yml)。此外,docs/CONTRIBUTING.md 提供了手动触发方式:在 commit message 中包含 check_urls=courses/free-courses-mr.md 即可单独对该文件做 URL 校验;多文件用单个空格分隔,且多个文件时构建结果以最后一个文件为准,需要自行查看 build log。

  3. RTL/LTR linter(不适用于本文件).github/workflows/rtl-ltr-linter.yml 基于 Python 脚本 scripts/rtl_ltr_linter.py 与配置文件 scripts/rtl_ltr_linter_config.yml,仅在 PR 带 RTL 标签或变更文件命中 ar|he|fa|ur 时运行,用于在 RTL 文本中纠正 LTR 关键词(如 HTMLJavaScript,需追加 &rlm;)与 LTR 符号(如 C#C++,需追加 &lrm;)。马拉地语为 LTR 书写系统,此流程对 free-courses-mr.md 不生效——这也是该文档可以包含 C#C++ 等符号标题而无需方向控制标记的原因。

  4. 渲染一致性_config.yml 启用 jekyll-remote-themejemojijekyll-relative-links 插件,Markdown 经 kramdown 转换。列表文件中的锚点链接在渲染后的静态站点中可用,这也是 Index 区块显式使用 <a id> 锚点(针对 C/C#/C++)的原因。

使用与扩展方式

  • 查阅入口:仓库根 README.md 的 “Free Online Courses” 章节是所有语言版课程列表的导航入口,马拉地语条目位于 README.mdcourses/free-courses-mr.md 顶部的 Index 锚点则是文件内的快速导航。
  • 横向对比:如需对照其他语言的覆盖范围,可参考 courses/free-courses-en.md(英语)、courses/free-courses-hi.md(印地语)、courses/free-courses-te.md(泰卢固语)等文件,它们的命名与格式约定完全一致,均受同一套 fpb-lint 规则约束。
  • 按规范补充条目:遵循 docs/CONTRIBUTING.md 的流程,通过 Fork + Pull Request 提交:将新条目按字母序插入对应 ### 分类(必要时新增分类并同步更新顶部 Index)、使用 * 标题 - 创作者 格式、遵守空行与标点规则;提交后 CI 会自动运行 fpb-lint(格式与字母序)与 awesome_bot(URL 有效性)两道检查,必要时可用 check_urls=courses/free-courses-mr.md 的 commit message 单独触发 URL 校验。

小结

courses/free-courses-mr.md 是 free-programming-books 仓库多语言课程列表体系中的一个完整实例:它以 12 个 ### 分类组织了 26 个马拉地语 YouTube 播放列表课程,覆盖 Android、Angular、Arduino、C、C#、C++、Data Science、Databases、HTML and CSS、Java、JavaScript、Python 方向;其结构(Index 锚点 + 字母序条目 + 显式 <a id>)、内容标准(结构化播放列表、创作者署名、免费且可持续)与 CI 校验链路(fpb-lintawesome_bot、渲染配置)共同保证了这份目录的可维护性与长期可用性。

登录后查看全文
热门项目推荐
相关项目推荐