free-programming-books「BY SUBJECT」主题书目录:组织结构、条目规范与使用指南
【免费下载链接】free-programming-books:books: Freely available programming books项目地址: https://gitcode.com/GitHub_Trending/fr/free-programming-books
本文围绕 free-programming-books 这份「按主题组织(BY SUBJECT)」的免费编程书籍目录展开,详解它约 50 个学科分类的完整索引、条目标注规范(格式、许可证、状态标记)的精确含义,以及该目录在 Jekyll 站点中的渲染方式与维护规则。读完本文,你可以熟练按学科定位免费电子书、正确解读每条目的元信息,并了解如何按仓库规范贡献和维护这份目录。
定位:与「按语言」目录互补的双轨体系
BY SUBJECT 目录收录的是以与语言无关的方式讲解编程相关学科的书籍(语言无关即 "programming-language agnostic")。文档开篇第一句就明确了它的边界:
This list, organized by subject, is for books that cover a programming-related subject in a programming-language agnostic way. Books that cover a specific programming language can be found in the BY PROGRAMMING LANGUAGE list.
也就是说,仓库内英文书籍目录被拆分为两条互补的轨道:
| 目录 | 文件 | 收录范围 |
|---|---|---|
| BY PROGRAMMING LANGUAGE(按语言) | free-programming-books-langs.md | 讲解某一具体编程语言的书籍(如 C、Python、Rust 等语言专著) |
| BY SUBJECT(按主题) | free-programming-books-subjects.md | 算法、操作系统、机器学习等跨语言学科书籍 |
从 free-programming-books-langs.md 的头部注释可以看到这次拆分的历史脉络:该文件原来有一个叫 "Language Agnostic" 的章节,专门放不绑定特定语言的学科类书籍;由于这一章膨胀得太大,维护者决定把它拆分成独立的 BY SUBJECT 文件。因此两个文件之间存在相互引用:langs 文件的索引中保留了[Language Agnostic](https://link.gitcode.com/i/425c43fe5dc556a6b13597c1808b68a1)的入口(输出到仓库内即为 books/free-programming-books-subjects.md),而 free-programming-books-en.md 作为英文书籍的总入口,把两条轨道并列呈现,并注明 "The list of books in English is here for historical reasons."(英文列表集中放置属于历史原因)。
仓库根目录 README.md 的 Resources 部分同样把两者作为 "Books" 分组下的首要资源列出:English, By Programming Language与English, By Subject,与 40 多种语言版本的书籍列表、速查表、课程、播客等其他资源并列。
文档结构:约 50 个学科分类的全景索引
BY SUBJECT 文档共约 1086 行,由「Index(索引)+ 各学科小节」两部分构成。索引部分给出了完整的分类目录,这也是该文档的骨架,可以完整还原为下表(分类名称与原文档索引一致,按原文档出现顺序排列):
| 序号 | 学科分类(英文原名) | 内容定位 |
|---|---|---|
| 0 | Meta-Lists | 其他免费书籍聚合站点与元目录 |
| 1 | Algorithms & Data Structures | 算法与数据结构 |
| 2 | Artificial Intelligence | 人工智能 |
| 3 | Blockchain | 区块链 |
| 4 | Cellular Automata | 元胞自动机 |
| 5 | Cloud Computing | 云计算 |
| 6 | Competitive Programming | 算法竞赛 |
| 7 | Compiler Design | 编译器设计 |
| 8 | Computer Organization and Architecture | 计算机组成与体系结构 |
| 9 | Computer Science | 计算机科学通识 |
| 10 | Computer Vision | 计算机视觉 |
| 11 | Containers | 容器(Docker/Kubernetes) |
| 12 | Data Science | 数据科学 |
| 13 | Database | 数据库 |
| 14 | Embedded Systems | 嵌入式系统 |
| 15 | Game Development | 游戏开发 |
| 16 | Graphical User Interfaces | 图形用户界面 |
| 17 | Graphics Programming | 图形编程 |
| 18 | IDE and editors | 集成开发与编辑器 |
| 19 | Information Retrieval | 信息检索 |
| 20 | Licensing | 许可证 |
| 21 | Machine Learning | 机器学习 |
| 22 | Mathematics(含 Algebra / Calculus / Mathematics For Computer Science 三个子节) | 数学 |
| 23 | Misc | 杂项 |
| 24 | Networking | 网络 |
| 25 | Object Oriented Programming | 面向对象编程 |
| 26 | Open Source Ecosystem | 开源生态 |
| 27 | Operating Systems | 操作系统 |
| 28 | Parallel Programming | 并行编程 |
| 29 | Partial Evaluation | 部分求值 |
| 30 | Professional Development | 职业发展 |
| 31 | Programming | 编程基础 |
| 32 | Programming Paradigms | 编程范式 |
| 33 | Prompt Engineering | 提示词工程 |
| 34 | Quantum Computing | 量子计算 |
| 35 | Regular Expressions | 正则表达式 |
| 36 | Reverse Engineering | 逆向工程 |
| 37 | Search Engines | 搜索引擎 |
| 38 | Security & Privacy | 安全与隐私 |
| 39 | Software Architecture | 软件架构 |
| 40 | Standards | 标准(Linux Standard Base、POSIX) |
| 41 | Theoretical Computer Science | 理论计算机科学 |
| 42 | Version Control Systems | 版本控制系统(Git/SVN/Mercurial) |
| 43 | Web Performance | Web 性能 |
| 44 | Web Services | Web 服务 |
| 45 | Workflow | 工作流 |
从分类覆盖面可以推断,这份目录的定位是「计算机学科知识图谱」式的书籍导航:既覆盖语言基础(Programming、Programming Paradigms),也覆盖系统层(Operating Systems、Computer Organization and Architecture、Embedded Systems)、数据与智能层(Database、Data Science、Machine Learning、Artificial Intelligence)、工程实践层(Software Architecture、Security & Privacy、Version Control Systems、Professional Development),以及新兴方向(Prompt Engineering、Quantum Computing、Blockchain)。
值得注意的两个结构细节:
- 锚点别名机制。Version Control Systems 小节标题写成了
<a id="version-control-systems"></a><a id="git"></a><a id="svn"></a><a id="subversion"></a><a id="mercurial"></a>Version Control Systems——在标题前内嵌了多个空锚点,使其他文档可以直接通过#git、#svn等别名跳转过来。这是一种利用 Markdown 内嵌 HTML 实现"分类别名"的技巧,方便按具体工具名(而不仅是分类名)定位。 - 交叉引用提示。例如 "IDE and editors" 小节开头有一行引用块提示:See also ... Emacs Lisp(指向 langs 文档的 Emacs Lisp 锚点)、Regular Expressions(指向本文档自身锚点),用
> :information_source:表情符号引导跨文档导航。
条目标注规范:格式、许可证与状态标记
BY SUBJECT 文档中每一条书目的书写都遵循统一的元信息标注规范,理解这些标记是准确使用该目录的前提。规范可以从文档实际条目中归纳,并与仓库贡献规范 CONTRIBUTING.md 中的 "Formatting" 章节相互印证。
基础条目结构
标准格式为「书名(链接)- 作者(格式)(许可证) 其他备注」,贡献规范中的具体细则包括:
- 链接与格式之间用一个空格分隔(Put a single space between the link and its format);
- 作者写在格式之前(Author comes before format);
- 同一资源存在多种分发格式时,各格式各加一条链接,并注明各自格式;只有当无法用一个链接同时访问多种格式时才拆成多链接;
- 不同版本(edition)若差异足够大,同样拆成独立条目。
格式标记(format note)
条目中以圆括号标注资源的可用格式,全文出现过的格式标记包括:(PDF)、(HTML)、(HTML, PDF)、(EPUB)、(Kindle)、(MOBI)、(Jupyter Notebooks)、(AsciiDoc)、(Markdown)、(HTML, Slides)、(HTML, PDF, Slides, Videos)、(ePub & ODT)等。格式标记告诉读者该资源的载体类型,例如 "Operating Systems: Three Easy Pieces" 标注(PDF),"Pro Git" 标注(HTML, PDF, EPUB, Kindle)。
许可证标记(license note)
贡献规范要求:当资源以自由/开放许可证分发时,在格式标记之后、其他备注之前追加一个简短的许可证说明。文档中出现的许可证标记包括:(CC BY)、(CC BY-SA)、(CC BY-NC)、(CC BY-NC-SA)、(CC BY-NC-ND)、(GFDL)、(BSD)等。例如 "Purely Functional Data Structures"(Chris Okasaki, PDF)无许可证标记,而 "The Little Book of Deep Learning"(François Fleuret)标注(CC BY-NC-SA)。
状态与访问条件标记
文档中还有一组带表情符号(经 Jekyll 的jemoji插件渲染)的状态标记:
| 标记 | 含义 | 示例条目 |
|---|---|---|
:card_file_box:+ "archived" | 原始链接已失效,条目指向 web.archive.org 的存档副本 | "Vim Recipes"、"Git Reference" |
:construction:+ "in process" | 书籍仍在撰写/更新中 | "AI Agent Evaluation"、"Learn OpenGL RS" |
| (email address required) | 访问资源需登记邮箱 | "Distributed Systems 4th edition" |
| (account required) | 访问资源需注册账号 | "Designing Distributed Systems"、"Monitoring Modern Infrastructure" |
| (Leanpub account or valid email requested) | 需 Leanpub 账号或有效邮箱 | "What to Look for in a Code Review" |
| (email address requested, not required) | 会请求邮箱但非强制 | "Azure Functions Succinctly" |
这套标记体系让目录不仅是书签列表,还隐性地承担了"链接健康度"信息:带 archived 标记的条目说明维护者已经发现原链接失效并替换为存档链接,读者可以据此评估资源的时效性。
重点学科概览与代表性资源
以下按学科小节概述条目构成与代表性资源(书名与作者均以 BY SUBJECT 文档 实际条目为准,本文不复制外部网址,完整链接见文档原文)。
0 - Meta-Lists(元目录)
收录其他免费技术书籍聚合站点,如 Build your own X、IBM Redbooks、InfoQ Minibooks、Free Tech Books、Learn X in Y minutes、Visualgo(算法与数据结构可视化)、O'Reilly's Open Books Project 等,并收录大量 Microsoft 免费电子书合集。可以推断这一节的用途是"目录的目录",帮助读者跳出本仓库发现更多资源。
Algorithms & Data Structures(46 条)
条目数量最多的核心学科之一。代表资源:Jeff Erickson 的《Algorithms》(PDF)、Princeton 的《Algorithms, 4th Edition》(Sedgewick & Wayne)、Steven S. Skiena 的《The Algorithm Design Manual》(HTML)、《Purely Functional Data Structures》(Okasaki, PDF)、《Think Complexity (2nd Edition)》(Downey)、《Open Data Structures: An Introduction》(Pat Morin)、《Matters Computational》(Arndt, PDF)等。既有教材级专著,也有 Stanford CS Library 的短章节(Binary Trees、Linked List Basics、The Great Tree List Recursion Problem 等,均为 Nick Parlante 的 PDF)。
Artificial Intelligence 与 Machine Learning
AI 小节收录约 27 条,代表资源包括:《Artificial Intelligence: Foundations of Computational Agents》(Poole & Mackworth,HTML + 幻灯片)、Peter Norvig 的 PAIP(Lisp 案例集,Git 仓库)、《The Quest for Artificial Intelligence》(Nilsson, PDF)、Stanford CS224N 课程视频、Hugging Face LLM Course 等。
Machine Learning 小节是全文条目最多的学科之一(约 59 条),覆盖经典到现代:《A Course in Machine Learning》(ciml.info, PDF)、《Deep Learning》(Goodfellow, Bengio, Courville)、《Dive into Deep Learning》(d2l.ai)、《Neural Networks and Deep Learning》(Michael Nielsen)、《Reinforcement Learning: An Introduction》(Sutton & Barto, PDF, CC BY-NC-ND)、《An Introduction to Statistical Learning》(ISLR)、《Interpretable Machine Learning》(Molnar)、《Probabilistic Machine Learning》两卷(Murphy)等,并含 MLOps 实践白皮书(Google)与 fast.ai 课程。
系统类:Operating Systems、Parallel Programming、Computer Organization
Operating Systems 小节约 18 条,经典资源密集:《Operating Systems: Three Easy Pieces》(OSTEP,Arpaci-Dusseau 夫妇)、MIT 的 xv6 教学操作系统(Russ Cox, Frans Kaashoek, Robert Morris)、《The Little Book About OS Development》、Allen Downey 的 Think OS 与《The Little Book of Semaphores》、Eric S. Raymond 的《The Art of Unix Programming》等。
Parallel Programming 收录 8 条,含 Victor Eijkhout 的《Introduction to High-Performance Scientific Computing》、Paul E. McKenney 的《Is Parallel Programming Hard, And, If So, What Can You Do About It?》(kernel.org, HTML)、OpenCL 编程书籍等。注意该节中 "Programming on Parallel Machines" 条目下方有一行无列表符号的悬挂文本 "Kerridge (PDF) (email address requested, not required)"——从文档现状看,这是一处排版遗留(作者名 "Kerridge" 脱离了列表项),读者在引用时需注意。
Compiler Design(14 条)
编译器方向的经典目录:Bob Nystrom 的《Crafting Interpreters》(HTML)、Jack Crenshaw 的《Let's Build a Compiler》(PDF)、Torben Mogensen 的《Basics of Compiler Design (Anniversary Edition)》、Douglas Thain 的《Introduction to Compilers and Language Design》(PDF)、The ANTLR Mega Tutorial、Stanford CS143 课程讲义等。
数学(Mathematics 及其三个子节)
Mathematics 是结构上唯一带子分类的学科:主节约 86 条(离散数学、概率统计、微积分、数论、组合、应用数学等),子节包括:
- Algebra(约 25 条):《Linear Algebra Done Right》(Axler)、《Linear Algebra Done Wrong》(Treil)、《Abstract Algebra: Theory and Applications》、《Algebraic Topology》(Hatcher, PDF)等;
- Calculus(约 18 条):MIT OCW 的 Strang《Calculus》、OpenStax Calculus 三卷、UBC 的 CLP-1 至 CLP-4 系列、《Calculus Made Easy》等;
- Mathematics For Computer Science(8 条):MIT 6.042《Mathematics for Computer Science》(Lehman, Leighton, Meyer, PDF)、Shannon 的《A Mathematical Theory of Communication》、《PROGRAM = PROOF》等。
其他值得关注的学科小节
- Networking(约 23 条):Kurose & Ross《An Introduction to Computer Networks》(HTML/PDF/Kindle)、Beej's Guide to Network Programming、《High-Performance Browser Networking》(Ilya Grigorik)、《The TCP/IP Guide》、Kafka 相关指南等;
- Software Architecture(约 41 条):《Site Reliability Engineering》(Google SRE Book)、《Building Secure & Reliable Systems》、Fielding 的 REST 架构博士论文、Eric Evans 的 DDD Reference(CC BY)、《Test Driven Development, Extensive Tutorial》、《The Catalog of Design Patterns》等;
- Security & Privacy(约 28 条):《A Graduate Course in Applied Cryptography》、《Security Engineering》(Ross Anderson)、《Fuzzing Book》、OWASP Testing Guide 4.2、《OpenSSL Cookbook》、《The Joy of Cryptography》(Mike Rosulek, PDF)等;
- Version Control Systems(约 34 条):《Pro Git》(Chacon & Straub,HTML/PDF/EPUB/Kindle)、Scott Chacon 的 Git Internals(PDF)、Git Magic、Happy Git and GitHub for the useR、Mercurial/Subversion 的官方书籍等;
- Containers(9 条):SemaphoreCI 的 CI/CD with Docker and Kubernetes、Kubernetes for Full-Stack Developers、Uncomplicating Kubernetes 等;
- Web Performance(5 条):《Book of Speed》(Stoyan Stefanov)、《High Performance Browser Networking》(与 Networking 节交叉出现,说明同一资源可跨学科归类)、《Mature Optimization》(Carlos Bueno, PDF)等;
- Prompt Engineering(6 条):DAIR.AI 的 Prompt Engineering Guide、DALL·E 2 prompt book 等,反映目录对新领域的跟进。
渲染与呈现机制
这份 Markdown 目录并非纯文本展示,仓库用 Jekyll 构建静态站点,其配置 _config.yml 揭示了渲染要点:
remote_theme: pages-themes/minimal@v0.2.0 # 使用远端 minimal 主题 markdown: kramdown # kramdown 解析 Markdown plugins: - jekyll-remote-theme - jemoji # 将 :card_file_box: 等表情短代码渲染为图标 - jekyll-relative-links relative_links: enabled: true collections: true由此可以解释文档中的两个现象:
:construction:、:card_file_box:、:information_source:这类表情短代码会在站点上渲染成图标(施工中、存档盒、信息提示),这是jemoji插件的作用;- 文档内部相对链接(如
[BY PROGRAMMING LANGUAGE](https://link.gitcode.com/i/5fb8bf1feecc665647dcfe311ff28403),输出到仓库内即 books/free-programming-books-langs.md)能正确解析,依赖jekyll-relative-links插件与relative_links.enabled: true;kramdown引擎则保证了内嵌<a id="...">锚点 HTML 的合法解析。
README.md 还提到两种消费方式:动态搜索站点(可按书名或作者搜索整个列表)与静态站点(整库渲染为网页)。搜索框表单提交到独立搜索站,静态站则完整呈现各 Markdown 文件。因此 BY SUBJECT 目录既可离线阅读原始 Markdown,也可在渲染站中利用 Index 锚点跳转。
维护规范:如何正确新增一条书目
从 docs/CONTRIBUTING.md 可以提取与维护本目录直接相关的规则(其 "Formatting" 一节专门约束列表文件格式):
- 遵循文件内既有格式:链接后跟一个空格、格式标记、作者位置、多格式拆分规则均如上节所述;
- 许可证标注有明确流程:确认资源确以自由/开放许可证分发 → 在格式标记之后追加短许可证说明 → 不同版本许可证不同时拆成独立条目分别标注 → 不确定时在 PR 中说明判断依据;
- 同一资源多版本处理:链接到不同版本时各加一条并注明;版本差异足够大时拆条目(贡献规范引用了 Issue #2353 作为格式讨论背景);
- CI 校验:贡献规范明确说明 GitHub Actions 会自动运行测试,检查列表按字母序排列且格式规则被遵守("Be sure to check that your changes pass the tests"),格式执行由
fpb-lint工具完成。BY SUBJECT 文档各小节内条目确实按书名首字母排序(例如 Algorithms & Data Structures 节从 "A Common-Sense Guide..." 到 "Think Complexity..."),与该规则一致。
对读者而言,这意味着目录中的字母序、格式与许可证标注不是随意的,而是有自动化检查保障的——按主题浏览时可放心依赖其组织结构。
小结:这份目录的价值与使用建议
- 按学科检索免费书籍:先在 Index 中定位学科(如 Machine Learning),再在该节内按字母序浏览;同一资源可能出现在多个学科节中(如《High Performance Browser Networking》同时见于 Networking 与 Web Performance),说明分类遵循"相关即收录"而非唯一归属。
- 解读元信息:
(PDF, EPUB)是格式、(CC BY-NC-SA)是许可证、archived表示已替换为存档链接、in process表示仍在更新、account required提示访问门槛。 - 注意时效:条目中大量带 archived 标记说明维护者持续做链接巡检,但目录本身随 PR 更新,个别条目(如 Networking 节的悬挂文本)存在排版遗留,引用具体书目时建议以原文条目为准。
- 横向扩展:语言类书籍见 free-programming-books-langs.md,其他语言书籍、免费课程、速查表、播客与互动教程等资源的入口均在 README.md 的 Resources 分组中。
【免费下载链接】free-programming-books:books: Freely available programming books项目地址: https://gitcode.com/GitHub_Trending/fr/free-programming-books
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考