《大道至简,给所有人看的编程书》目录

2023-12-13 00:00 [book]


很早就想写一本关于编程的书。我之前写过几本书,专业性比较强,受众比较窄。这本书,我希望能覆盖大部分的读者。本书基于以下几点考虑:

  • 理清基本的概念,洞悉编程本质。
  • 科普,但又有一定深度。
  • 覆盖面广,求精务实。
  • 通过真正的代码和示例帮助读者理解,而不是只讲概念和理论。
  • 对于开发者,本书希望成为读者编程路上的催化剂,不代替任何一本编程书。
  • 帮助不需要编程的读者真正理解计算机和程序是怎样工作的,降维打击。
  • 大道至简,无招胜有招。

本书基于墨问便签微信小程序连载,不断更新。不买书也可以关注我并看到部分内容并发表评论。购买 后可以在微信小程序上阅读,评论互动,也可以加我微信并加入我的读者群。

下面是本书规划的目录,可能写也可能不写,也可能随时调整。欢迎大家提出意见和建议。

  • 到「墨问便签」微信小程序上给我留言。
  • 我的博客上留言互动。
  • 我的微博上留言互动。

大道至简——给所有人看的编程书 杜金房

  • 1 神奇的数
    • 1.1 认识数
    • 1.2 数的起源
    • 1.3 阿拉伯数字与数的表示
    • 1.4 很大的数
    • 1.5 数的进制
      • 1.5.1 不同进制的数
      • 1.5.2 二进制数与逻辑运算
      • 1.5.3 八、十六及三十六进制数
      • 1.5.4 进制转换
      • 1.5.5 二进制移位
    • 1.6 整数和自然数
    • 1.7 代数和方程
    • 1.8 有理数
    • 1.9 无理数
    • 1.10 指数和对数
    • 1.11 实数和虚数
    • 1.12 数列
      • 1.12.1 简单数列
      • 1.12.2 指数增长
      • 1.12.3 斐波纳契数列
      • 1.12.4 级数
    • 1.13 汉诺塔
    • 1.14 矩阵
    • 1.15 函数
    • 1.16 微积分
      • 1.16.1 导数
      • 1.16.2 加速度
      • 1.16.3 微分
      • 1.16.4 积分
    • 1.17 无穷大与无穷小的比较
    • 1.18 高维空间
    • 1.19 坐标系
    • 1.20 小结
  • 2 计算机是怎样工作的
    • 2.1 环境准备
    • 2.2 晶体管和门电路
      • 2.2.1 二极管和三极管
      • 2.2.2 门电路
      • 2.2.3 加法器
    • 2.3 计算机的组成
      • 2.3.1 CPU
      • 2.3.2 存储器
    • 2.4 操作系统
      • 2.4.1 Windows
      • 2.4.2 UNIX
      • 2.4.3 Linux
      • 2.4.4 Mac OS 和 macOS
      • 2.4.5 iOS 和 Android
      • 2.4.6 鸿蒙
    • 2.5 原码、反码和补码
      • 2.5.1 原码
      • 2.5.2 反码
      • 2.5.3 补码
      • 2.5.4 为什么要用补码?
    • 2.6 浮点数
    • 2.7 字符编码
      • 2.7.1 ASCII 码
      • 2.7.2 中文编码
      • 2.7.3 字节序
    • 2.8 文件格式
      • 2.8.1 文本文件
      • 2.8.2 二进制文件
    • 2.9 多媒体在计算机中的表示
      • 2.9.1 音频
      • 2.9.2 颜色和图像
      • 2.9.3 电影、电视和视频
      • 2.9.4 音视频封装、传输和未来
      • 2.9.5 视频图像的像素点数据格式
      • 2.9.6 扫描线与电视制式
    • 2.10 小结
  • 3 操作系统
    • 3.1 Linux 入门
      • 3.1.1 认识命令行
      • 3.1.2 文件权限
      • 3.1.3 用户和组
      • 3.1.4 简单文件操作
      • 3.1.5 输入输出重定向
      • 3.1.6 文本编辑器
      • 3.1.7 文本文件处理
      • 3.1.8 Shell
      • 3.1.9 man
      • 3.1.10 Linux 上的图形用户界面
      • 3.1.11 安装 Linux
      • 3.1.12 SSH 远程连接
      • 3.1.13 文件系统层次结构
      • 3.1.14 进程
    • 3.2 Docker 入门
      • 3.2.1 虚拟化技术
      • 3.2.2 Docker 简介
      • 3.2.3 Docker 安装
      • 3.2.4 Docker 基本概念
      • 3.2.5 Docker 常用命令
      • 3.2.6 Docker Compose
      • 3.2.7 宿主机文件挂载
    • 3.3 Windows
    • 3.4 macOS
      • 3.4.1 Homebrew
      • 3.4.2 软件包
      • 3.4.3 常用软件
    • 3.5 Android 和 iOS
      • 3.5.1 Android
      • 3.5.2 iOS
    • 3.6 计算机网络
      • 3.6.1 以太网和无线通信技术
      • 3.6.2 OSI 和 TCP/IP 网络模型
      • 3.6.3 IP 地址
      • 3.6.4 MAC 地址
      • 3.6.5 单播、多播和任播
      • 3.6.6 DNS
      • 3.6.7 路由
      • 3.6.8 TCP
      • 3.6.9 UDP
      • 3.6.10 网络安全
      • 3.6.11 加解密和证书
    • 3.7 基本概念和理论
      • 3.7.1 进程和线程
      • 3.7.2 进程调度
      • 3.7.3 进程间通信
      • 3.7.4 中断
      • 3.7.5 内存管理
      • 3.7.6 文件系统
      • 3.7.7 设备管理
      • 3.7.8 用户界面
    • 3.8 内核
      • 3.8.1 特权级
      • 3.8.2 微内核与单一内核
      • 3.8.3 再说 GNU
    • 3.9 小结
  • 4 开发工具
    • 4.1 Windows 上的效率工具和开发环境
      • 4.1.1 winget
      • 4.1.2 Windows Terminal
      • 4.1.3 WSL
      • 4.1.4 经典 UNIX 工具
    • 4.2 Git
      • 4.2.1 Git 安装和设置
      • 4.2.2 一个 Git 实例
      • 4.2.3 Git 基本概念
      • 4.2.4 Git 工作流程
      • 4.2.5 Git 协作流程
      • 4.2.6 Github
      • 4.2.7 分支
      • 4.2.8 Squash
      • 4.2.9 误区和最佳实践
      • 4.2.10 Git Server
      • 4.2.11 Gitea
      • 4.2.12 Git 图形界面
      • 4.2.13 我的 Git 小工具
      • 4.2.14 我的 .gitconfig
      • 4.2.15 Git 小结和延伸阅读
    • 4.3 构建工具
      • 4.3.1 Makefile
      • 4.3.2 Autotools
      • 4.3.3 CMake
      • 4.3.4 Ninja
      • 4.3.5 Meson
      • 4.3.6 Bazel
      • 4.3.7 Java 构建工具
      • 4.3.8 JavaScript 构建工具
      • 4.3.9 其他构建工具
    • 4.4 其他编辑器和 IDE
      • 4.4.1 Neovim
      • 4.4.2 VS Code
      • 4.4.3 Eclipse
      • 4.4.4 Android Studio
      • 4.4.5 Xcode
  • 5 编程语言
    • 5.1 编程语言串讲
    • 5.2 汇编语言
      • 5.2.1 感受十六进制数
      • 5.2.2 汇编语言的 hello world
      • 5.2.3 汇编程序
      • 5.2.4 反汇编
      • 5.2.5 汇编语言做加法
      • 5.2.6 寄存器
      • 5.2.7 Linux 上的汇编
      • 5.2.8 计算机是怎么启动的?
      • 5.2.9 写一个操作系统内核
      • 5.2.10 从硬盘启动操作系统
      • 5.2.11 将操作系统装到硬盘上
      • 5.2.12 制作安装光盘
      • 5.2.13 调试与排错
    • 5.3 小结
  • 6 C 语言
    • 6.1 基本语法
      • 6.1.1 注释
      • 6.1.2 Hello, World!
      • 6.1.3 变量和赋值
      • 6.1.4 变量的作用域
      • 6.1.5 静态变量
      • 6.1.6 运算符
      • 6.1.7 自增和自减运算符
      • 6.1.8 格式化输出
      • 6.1.9 条件语句
      • 6.1.10 循环
      • 6.1.11 预编译和宏
      • 6.1.12 可变长参数
      • 6.1.13 结构体
      • 6.1.14 联合体
      • 6.1.15 枚举
      • 6.1.16 数组
    • 6.2 指针
    • 6.3 代码风格
      • 6.3.1 C 语言代码风格
      • 6.3.2 代码自动格式化
      • 6.3.3 代码风格和使用习惯
      • 6.3.4 命名规范
      • 6.3.5 错误处理
    • 6.4 WAV 文件示例
    • 6.5 main 函数的参数
    • 6.6 Socket 通信
      • 6.6.1 TCP 服务器
      • 6.6.2 TCP 客户端
      • 6.6.3 UDP 服务器
      • 6.6.4 UDP 客户端
    • 6.7 实现 HTTP 协议
      • 6.7.1 HTTP 协议简介
      • 6.7.2 HTTP 客户端实现
      • 6.7.3 写一个简单的 Web 服务器
    • 6.8 写一个函数库
      • 6.8.1 编写函数库
      • 6.8.2 写一个使用库的例子
      • 6.8.3 动态库的加载路径
      • 6.8.4 用 CMake 编译库
      • 6.8.5 添加单元测试
      • 6.8.6 使用单元测试框架
      • 6.8.7 库的查找和引用
      • 6.8.8 使用 Autotools 查找依赖库
      • 6.8.9 在 CMake 中检查依赖库
      • 6.8.10 创建一个 CMake 版本的查找规则
      • 6.8.11 libtool
    • 6.9 动态内存分配
    • 6.10 生成 BMP 格式的图片
    • 6.11 JPEG 和 PNG
      • 6.11.1 将 BMP 转成 PNG 格式
      • 6.11.2 使用stb_库函数写 JPEG 和 PNG
      • 6.11.3 使用libpng写 PNG
    • 6.12 生成二维码
    • 6.13 在图片上渲染文字
    • 6.14 在汇编语言中调用 C 函数
    • 6.15 在 C 语言中调用汇编函数
      • 6.15.1 C 调用汇编示例
      • 6.15.2 使用gdb调试代码
      • 6.15.3 检查main函数的参数
      • 6.15.4 64 位 x86 平台上的汇编
      • 6.15.5 ARM64 平台上的汇编
    • 6.16 写一个简单的 C 编译器
      • 6.16.1 生成汇编代码
      • 6.16.2 从汇编生成机器码
      • 6.16.3 了解 ELF 格式和内存布局
      • 6.16.4 生成 ELF 格式的可执行文件
      • 6.16.5 生成最终的可执行文件
    • 6.17 写一个简单的 libc
      • 6.17.1 write系统调用
      • 6.17.2 开始写一个libc库
      • 6.17.3 实现printf函数
      • 6.17.4 实现更多系统调用
      • 6.17.5 实现 C 运行时
      • 6.17.6 实现更多库函数
      • 6.17.7 打印环境变量
      • 6.17.8 实现一个cat示例
      • 6.17.9 实现一个简单的 Shell
      • 6.17.10 实现动态内存分配
      • 6.17.11 实现一个简单的ls命令
      • 6.17.12 输出到标准错误
      • 6.17.13 实现errno支持
      • 6.17.14 实现头文件
      • 6.17.15 使用 TCC 编译器
      • 6.17.16 交叉编译
    • 6.18 用 C 写操作系统
      • 6.18.1 启动 C 语言版内核
      • 6.18.2 内核头文件
      • 6.18.3 实现 kprintf
      • 6.18.4 调用kprintf打印字符
      • 6.18.5 获取和设置光标位置
      • 6.18.6 在光标处输出字符
      • 6.18.7 在 Bochs 中调试内核代码
      • 6.18.8 中断处理
      • 6.18.9 设置中断描述表
      • 6.18.10 初始化中断控制器
      • 6.18.11 初始化键盘
      • 6.18.12 获取键盘输入
      • 6.18.13 实现队列
      • 6.18.14 实现一个内部 Shell
      • 6.18.15 实现一个虚拟文件系统
      • 6.18.16 实现内存文件系统
      • 6.18.17 实现系统调用
      • 6.18.18 从文件中读入文件系统
      • 6.18.19 生成用户空间程序
      • 6.18.20 运行init进程及用户空间的 Shell
      • 6.18.21 实现read系统调用
      • 6.18.22 实现system系统调用
      • 6.18.23 实现其他系统调用
  • 7 数据结构和算法
    • 7.1 数据类型
    • 7.2 线性表
      • 7.2.1 冒泡排序
      • 7.2.2 链表
      • 7.2.3 栈
    • 7.3 这个人不懂指针
    • 7.4 哈希表
    • 7.5 树
    • 7.6 图
    • 7.7 实现一个文件系统
  • 8 系统编程
    • 8.1 多路复用
      • 8.1.1 select
      • 8.1.2 epoll
      • 8.1.3 kqueue
      • 8.1.4 完成端口
    • 8.2 写一个 Redis 客户端
    • 8.3 写一个 Redis 服务端
    • 8.4 多线程
    • 8.5 多进程
    • 8.6 mutex,fork,pipe
    • 8.7 同步和异步
    • 8.8 共享内存
    • 8.9 信号
    • 8.10 操作系统进程调度
  • 9 更多编程语言
    • 9.1 TypeScript
      • 9.1.1 特性
      • 9.1.2 Ref
    • 9.2 kotlin
      • 9.2.1 语法
      • 9.2.2 REF
    • 9.3 Python
    • 9.4 Ruby
    • 9.5 Erlang
    • 9.6 PHP
    • 9.7 Java
    • 9.8 JavaScript
    • 9.9 Go
    • 9.10 C#
    • 9.11 Lua
    • 9.12 Perl
    • 9.13 Bash
    • 9.14 Basic
    • 9.15 Objective-C
    • 9.16 Swift
    • 9.17 Scala
    • 9.18 Haskell
    • 9.19 Clojure
    • 9.20 Rust
    • 9.21 Kotlin
    • 9.22 Dart
    • 9.23 Groovy
    • 9.24 F
    • 9.25 TypeScript
    • 9.26 V
    • 9.27 Nim
    • 9.28 Zig
    • 9.29 Julia
    • 9.30 R
    • 9.31 Elixir
    • 9.32 Crystal
    • 9.33 OCaml
    • 9.34 D
    • 9.35 Ada
    • 9.36 Makefile autotools cmake
    • 9.37 JNI
    • 9.38 SWIG
  • 10 数据库
  • 11 Web 编程
    • 11.1 Web 服务器代码导读
    • HTTP 协议
    • HTML
    • cURL
    • HTTP Server
      • Nginx
      • Apache
    • HTTP Client
    • HTTP BASIC/Digest
    • OAuth
    • Websocket
    • CSS
    • CORS
    • 数据格式 XML/JSON
    • Markdown
    • CURD
    • REST
    • gRPC
    • MVC
    • 前后端分离
      • jQuery
      • React
      • Vue
    • CDN
  • 第十二章 多媒体应用与开发
    • 音视频
    • MP4
    • 流媒体
      • RTMP
      • RTSP
      • HLS
      • SRT
    • 直播
    • RTC
      • SIP 协议
      • FreeSWITCH
      • WebRTC
  • 第十三章 客户端开发
    • Windows
    • Linux
      • KDE
      • GTK
    • Mac
    • 跨平台开发
      • Qt
      • Electron
      • Flutter
      • React Native
      • Xamarin
      • NativeScript
      • Cordova
      • Unity
      • Unreal
      • Godot
      • wxWidgets
        • wxPython
        • wxPerl
        • wxRuby
      • tauri
  • 第十四章 移动端应用开发
    • 移动通信技术的发展
    • iOS
    • Android
  • 第十五章 其他
    • 缓存技术
      • Redis Cache
      • memcache
    • 消息队列 MQ PubSub
    • 分布式技术
    • 高并发、限流、熔断、灰度发布
    • 服务降级、限流、秒杀
    • HA、Cluster
    • 微信公众号
    • 微信小程序
    • 人工智能
      • TTS
      • ASR
      • NLP
    • 人脸识别
    • 二维码
    • 数字人
    • 云计算
    • 机器学习
    • 大数据
  • 第十六章 成为程序员

    • Git
    • 文档/Markdown
    • 开发工具
    • 环境搭建
    • 代码规范
    • 调试
    • 重构
    • 维护
    • 引用第三方库
    • 开源软件
      • 历史
      • 用好开源软件
      • 向开源软件做贡献
  • 附录或其他
  • 所有自然数的和是 -1/12
  • Git 入门
  • 橡皮鸭子程序调试法
  • 电磁场与电磁波
  • 调幅与调频
  • 载波
  • 调制与解调

本目录可能与实际顺序有差异,也可以对比墨问便签上的版本

更多信息,参考《大道至简》详细说明和购买链接 https://book.dujinfang.com/2023/12/07/dead-simple.html

本文永久链接:https://www.dujinfang.com/2023/12/13/simple-toc.html

《大道至简》

七歌
微信公众号

七歌杜金房
微信视频号