本 书 基 于 GNU Free Documentation License, Version 1.2 Or Any Later 1 发 布, 你 可 以 自 由 修 改 并 发 布 本 文 档, 但 不 得 当 它 用.. 第 一 部 分 书 前 前 言 大 师 的 禅 语 并 非 一 无 所 指



Similar documents
何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

《C语言基础入门》课程教学大纲

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和


<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

Microsoft Word - 第7章 图表反转形态.doc


0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

深圳市新亚电子制程股份有限公司

I


修改版-操作手册.doc

Microsoft Word - 文件汇编.doc

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

珠江钢琴股东大会

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

新, 各 地 各 部 门 ( 单 位 ) 各 文 化 事 业 单 位 要 高 度 重 视, 切 实 加 强 领 导, 精 心 组 织 实 施 要 根 据 事 业 单 位 岗 位 设 置 管 理 的 规 定 和 要 求, 在 深 入 调 查 研 究 广 泛 听 取 意 见 的 基 础 上, 研 究 提

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

2006年顺德区高中阶段学校招生录取分数线

3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05

<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。


( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以

untitled

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

 编号:

名 称 生 命 科 学 学 院 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院

证券代码: 证券简称:长城电脑 公告编号:

第2章 数据类型、常量与变量


工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业


附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

!!!!!

第1篇 道路桥梁工程技术核心专业课程标准及学习绩效考评体系

<4D F736F F D20D0A3B7A2A1B A1B BAC5B9D8D3DAD7E9D6AFBFAAD5B9C8ABD0A3BDCCD6B0B9A4B8DACEBBC6B8D3C3B1E4B6AFB9A4D7F7B5C4CDA8D6AA2E646F63>

课程类 别

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

年 8 月 11 日, 公 司 召 开 2015 年 第 五 次 临 时 股 东 大 会, 审 议 通 过 了 关 于 公 司 <2015 年 股 票 期 权 激 励 计 划 ( 草 案 )> 及 其 摘 要 的 议 案 关 于 提 请 股 东 大 会 授 权 董 事 会 办 理 公

国债回购交易业务指引

登录、注册功能的测试用例设计.doc

<4D F736F F D C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>

《应用数学Ⅰ》教学大纲

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

学 年 第 二 学 期 集 中 考 试 安 排 (18 周 ) 考 试 日 期 :6 月 27 日 星 期 一 8:10-9:50 第 二 公 共 教 学 楼 A 区 A 高 等 数 学 ( 理 二 2) 复 材 材 料 科 学 与 工 程


黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类


一、资质申请

微 积 分 ( 二 ) 教 学 大 纲 2 (2010 版 ) 课 程 编 码 : 课 程 名 称 : 微 积 分 学 时 / 学 分 :36/2 先 修 课 程 : 初 等 数 学 立 体 几 何 平 面 解 析 几 何 微 积 分 ( 一 ) 适 用 专 业 : 人 力 资 源 管

Microsoft Word - 第3章.doc

国家职业标准:网络课件设计师

第二讲 数列

现 场 会 议 时 间 为 :2016 年 5 月 19 日 网 络 投 票 时 间 为 :2016 年 5 月 18 日 年 5 月 19 日 其 中 通 过 深 圳 证 券 交 易 所 交 易 系 统 进 行 网 络 投 票 的 时 间 为 2016 年 5 月 19 日 9:30-

<4D F736F F D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

中 国 软 科 学 年 第 期!!!

第二部分 阅读理解(Part II Reabing Comprehension)

抗 日 战 争 研 究 年 第 期

附件1:

·岗位设置管理流程

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

教师上报成绩流程图

¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个

中 值 定 理 与 泰 勒 公 式 : 中 值 定 理 ; 不 定 式 的 定 值 法 ; 泰 勒 公 式 微 分 学 的 应 用 : 函 数 的 升 降 极 值 最 大 ( 小 ) 值 ; 凸 性 拐 点 渐 近 线 函 数 作 图 (1) 了 解 : 隐 函 数 和 参 数 方 程 表 示 的

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管


GONGZUO JUJIAO 宝 山 区 领 军 人 才 名 单 宝 山 区 第 七 批 拔 尖 人 才 名 单 2

i 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使

本 期 目 录 1. 一 图 看 懂 : 湖 南 大 学 两 学 一 做 学 习 教 育 实 施 方 案 习 近 平 : 要 整 顿 不 合 格 基 层 党 组 织 平 语 近 人 习 近 平 谈 党 章 党 规 习 近 平 为 何 要 求 在 两 学 一

试 论 后 民 权 时 代 美 国 黑 人 的 阶 层 分 化 和 族 裔 特 征 学 者 年 代 黑 人 中 产 阶 层 定 义 弗 瑞 泽 毕 林 斯 勒 马 克 艾 德 威 尔 逊 科 林 斯 兰 德 里 奥 力 威 夏 佩 罗 帕 锑 罗 收 入 来 源 于 从 事 可 以 定 义 为 白

<4D F736F F D20C6F3D2B5C5E0D1B5CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

上证指数

( 此 页 无 正 文, 为 广 东 东 方 精 工 科 技 股 份 有 限 公 司 关 于 提 供 资 料 真 实 准 确 和 完 整 的 承 诺 函 之 签 署 页 ) 广 东 东 方 精 工 科 技 股 份 有 限 公 司 法 定 代 表 人 : 唐 灼 林 2016 年 7 月 28 日

Template BR_Rec_2005.dot


21 业 余 制 -- 高 起 专 (12 级 ) 75 元 / 学 分 网 络 学 院 学 生 沪 教 委 财 (2005)49 号 江 西 化 校 工 科 22 业 余 制 -- 高 起 专 (12 级 ) 70 元 / 学 分 网 络 学 院 学 生 沪 教 委 财 (2005)49 号 吉

三武一宗灭佛研究

三门峡市质量技术监督局清单公示

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

收 入 支 出 项 目 2016 年 预 算 项 目 2016 年 预 算 预 算 01 表 单 位 : 万 元 ( 保 留 两 位 小 数 ) 一 公 共 财 政 预 算 拨 款 一 人 员 经 费 一 般 财 力 人 员 支 出 成 品

2014年中央财经大学研究生招生录取工作简报

Transcription:

GameRes 游 戏 开 发 资 源 网 http://www.gameres.com: Abstract in Computer Science and Programming 4th Writen By Minlearn Frequently Updated @ http://thousandd.appspot.com/ 版 本 历 史 : 版 本 详 情 日 期 Ver0 初 步 写 出 了 本 书 的 一 个 草 稿 编 程 新 手 真 言 200803-04 Ver1 确 定 了 最 初 的 目 录 安 排, 及 完 成 了 前 几 章 的 开 头 部 分 20090417 Ver2 拖 拖 拉 拉, 并 潦 草 地 填 了 300 多 页 途 中 书 名 几 经 改 动 200904-08 Ver3.. 重 整 理 了 前 100 多 页 使 之 变 得 可 读 并 确 定 了 最 终 的 目 录 安 排 20090810 Ver4: Tobecontiue: 改 名 为 计 算 机 科 学 与 编 程 中 的 抽 象 学,, 整 合 部 分 目 录,, 简 化 写 作 难 度, 并 开 始 写 本 书 第 三 部 分 graphics 添 加 代 码 - 本 书 第 三 部 分 实 践 章 开 发 一 个 VR 引 擎, 弄 满 700 页, 预 计 在 2010 年 初 最 终 整 理, 并 完 成 20091001 敬 语 : 丛 书 里 有 少 数 文 章 是 我 很 早 不 成 熟 的 时 候 写 的. 为 了 不 必 要 的 澄 清 与 反 澄 清, 本 人 只 推 荐 此 套 丛 书 作 为 参 考 书 使 用, 如 果 您 先 前 没 能 看 到 这 条 警 告, 请 在 不 小 心 使 用 本 丛 书 后 去 看 医 生. 另 外, 本 丛 书 有 一 些 部 分 和 章 节 摘 自 网 上,, 我 在 行 文 中 极 力 对 他 们 的 出 处 和 作 者 进 行 了 提 及, 感 谢 他 们 为 丛 书 带 来 的 一 切, 如 有 遗 漏 或 错 误, 请 告 知 我.. 最 后, 如 果 你 不 是 从 thousandd.appspot.com 上 下 载 的 本 丛 书, 那 么 可 能 你 得 到 的 不 是 最 新 版 本, 请 同 样 去 看 医 生.. -- 版 权 声 明 --

本 书 基 于 GNU Free Documentation License, Version 1.2 Or Any Later 1 发 布, 你 可 以 自 由 修 改 并 发 布 本 文 档, 但 不 得 当 它 用.. 第 一 部 分 书 前 前 言 大 师 的 禅 语 并 非 一 无 所 指, 一 切 只 是 你 还 没 有 拿 到 那 个 水 晶 球 而 很 多 问 题, 仅 仅 只 是 没 在 语 言 上 被 道 破 过 By Chenyi 眼 前 这 本 书 充 分 体 现 了 作 者 的 所 思 所 想 所 感, 他 用 自 己 独 特 的 眼 光 审 视 着 计 算 机 技 术 的 世 界, 也 用 自 己 独 特 的 思 维 逻 辑 对 技 术 进 行 解 读, 并 用 自 己 特 有 的, 呵 呵, 偶 尔 带 有 四 个 逗 号 = 一 个 逗 号 这 样 的 语 言 风 格, 进 行 着 自 己 的 诠 释 创 新 是 一 种 美, 独 立 思 考 也 是 :) 学 习 是 一 件 因 人 而 异 的 事 情, 因 为 每 个 人 的 生 活 经 历 教 育 背 景 年 龄 认 知 模 型 等 等, 都 是 不 尽 相 同 的, 也 就 是 每 个 人 所 处 的 维 度 2 不 同, 而 作 者 有 一 种 建 立 更 高 层 抽 象 的 能 力, 用 一 种 特 有 的 方 法 尝 试 着 给 大 家 建 立 一 个 学 习 计 算 机 的 相 对 高 层 的 构 架, 这 样, 可 以 在 一 定 程 度 上 突 破 个 人 的 维 度, 使 大 家 从 与 周 围 事 物 建 立 联 系 开 始, 一 步 一 步 的 走 向 计 算 机 的 世 界 不 识 庐 山 真 面 目, 只 缘 身 在 此 山 中 确 实 的, 在 学 习 技 术 的 过 程 中, 横 看 成 岭 侧 成 峰, 远 近 高 低 各 不 同, 但 是 作 者 却 尽 力 想 让 这 高 低 或 是 远 近 都 不 同 的 山 峰, 能 在 我 们 面 前 呈 现 出 一 种 规 律 共 性 来, 这 是 难 能 可 贵 的, 因 为 这 个 架 构 的 过 程 对 思 维 的 要 求 是 比 较 高 的 :) 哲 语 有 云, 动 身 的 时 候 到 了, 有 的 人 去 生, 有 的 人 去 死, 只 有 上 帝 知 道, 于 是 这 个 问 题 被 回 归 到 To Be? Or Not To Be 的 问 题, 是 生, 是 死, 只 有 上 帝 知 道 但 是, 人 类 对 真 理 的 探 索 和 对 知 识 的 追 求, 却 从 来 没 有 因 为 生 死 的 维 度 而 停 止 过, 是 的, 一 颗 崇 尚 真 理 探 寻 真 理 的 海 洋 之 心, 将 从 来 不 会 因 为 泰 坦 尼 克 号 的 沉 沉 而 消 沉, 它 将 永 远 绽 放 在 人 们 的 心 中, 激 励 着 我 们 向 更 广 阔 更 深 髓 的 世 界, 一 路 前 行 风 雨 无 阻 :) 在 这 个 意 义 上, 鼓 励 作 者 的 写 作 和 思 路, 也 是 对 我 们 自 身 追 寻 真 理 的 一 种 鼓 励 一 1 请 参 见 Free Software Foundation 的 说 明 2 在 本 书 第 六 章 的 开 始 可 以 找 到 对 抽 象 和 维 度 的 解 释 Page 2 of 455

种 回 路 是 为 一 点 小 感 想 :) 与 作 者 分 享!! By Minlearn 对 思 想 的 认 识 和 界 定 是 重 要 的!! 因 为 我 们 需 要 一 个 知 识 体 系 才 能 不 致 于 困 惑!!( 而 身 处 编 程 界, 纷 繁 复 杂 的 术 语 和 概 念 足 以 让 一 个 初 学 者 却 步 ) 我 抓 住 了 哪 些 转 瞬 就 在 我 脑 中 消 失 的 思 想,, 因 为 它 们 远 比 一 切 成 书 的 东 西 都 让 我 感 到 它 的 珍 贵! 而 更 玄 的 是, 他 们 竟 然 真 的 能 够 被 文 字 描 述 出 来!! 这 整 本 书 就 是 小 说 式 的 教 学 它 力 求 呈 现 出 一 个 精 致 化 了 的 术 语 集 以 使 初 学 者 能 真 正 理 解 至 关 重 要 的 那 些 概 念 正 如 Chenyi 所 说, 每 个 人 都 是 某 个 维 度 上 的 人, 有 他 自 己 的 年 龄 和 认 知, 具 体 到 某 个 历 史 时 刻, 我 们 的 人 生 阅 历 已 然 被 格 定, 而 这 决 定 了 你 接 受 新 事 物 的 能 力 和 眼 界, 人 生 在 世, 已 经 不 可 能 脱 离 某 种 信 念 ( 也 异 或 某 种 阻 力 和 障 碍 ) 而 活, 当 我 们 开 始 学 习 编 程, 我 们 永 远 都 是 用 外 行 的 眼 光 来 看 待 它 的, 而 当 你 占 在 巨 人 的 肩 膀 上 成 为 一 个 专 家 之 后, 你 就 能 够 用 全 局 的 眼 光 去 看 待 曾 经 陌 生 的 知 识, 你 看 问 题 的 维 度 发 生 了 质 变, 此 时 你 不 再 是 个 学 习 者, 而 会 开 始 审 视 你 学 过 的 东 西 并 学 会 产 生 你 自 己 的 认 知, 但, 那 毕 竟 是 要 过 的 第 二 道 槛, 而 初 学 者 就 是 那 些 连 第 一 道 槛 都 难 以 过 去 的 群 体 这 其 中 最 大 的 拦 路 虎 就 是 对 术 语 的 理 解, 很 多 书 并 不 切 合 初 学 者 的 实 际, 从 他 们 的 角 度 呈 现 一 条 清 楚 可 见 的 理 解 路 线, 而 只 是 一 些 大 部 头 衍 生 下 的 反 复 抄 袭 品 给 你 一 个 术 语 或 道 理, 这 个 道 理 有 什 么 用? 没 用, 是 的, 因 为 要 给 你 一 个 情 景, 一 些 台 阶, 你 才 能 理 解 它, 仅 仅 让 你 去 学 一 个 知 识, 而 知 识 和 众 多 其 它 知 识 之 间 相 似 而 微 有 不 同, 如 果 不 给 出 它 被 产 生 时 的 历 史 和 它 所 处 的 架 构 3, 那 么 我 们 就 会 迅 速 迷 惑, 更 遑 论 运 用 它, 因 为 我 们 不 是 泛 化 主 义 者, 形 而 上 学 者 4, 我 们 需 要 一 种 与 自 身 相 联 系 点 去 理 解 它, 我 们 只 是 生 活 的 人, 有 自 己 的 维 度 和 局 限, 我 们 不 是 高 高 在 上 的 学 院 派 高 手 一 个 高 手 必 定 是 与 常 人 有 不 同 的 思 想 级 深 层 的 东 西 和 他 自 己 特 有 的 体 会, 因 为 他 也 走 过 初 学 者 才 走 过 来 的 路 经 历 过 与 所 有 人 一 样 的 迷 惑, 可 是 往 往 人 们 都 忘 了 归 纳 那 些 至 关 重 要 的 经 验, 那 会 是 什 么 经 验 呢, 那 些 是 不 会 出 现 在 市 面 上 任 何 描 述 具 体 技 术 细 节 的 书 里 的 思 想 级 的 东 西!! 如 果 你 苦 于 找 不 到 那 样 的 一 本 书, 那 么 本 书 正 是 尝 试 记 录 那 些 秘 诀 的 一 本, 本 书 展 开 的 过 程, 正 是 为 初 学 者 呈 现 一 条 清 楚 的 理 解 路 线 的 过 程 5, 在 这 条 路 线 中, 所 有 的 编 程 相 关 的 概 念 都 自 然 地 围 绕 着 抽 象 逐 次 展 开, 请 紧 记 本 书 的 意 义 重 点 在 这 里. 如 果 真 的 想 当 高 手, 请 你 不 要 错 过 这 本 书 里 任 何 一 个 字 眼!! 如 果 你 是 高 手, 这 本 书 一 定 与 你 内 心 深 处 的 某 些 想 法 偶 合 3 这 本 书 不 但 给 你 思 想, 而 且 给 你 对 应 的 细 节, 整 书 中 有 大 量 珍 贵 入 微 的 分 析 而 不 仅 仅 是 从 大 架 构 着 手. 4 但 是 的 确 存 在 超 前 主 义 学 说, 只 是 为 了 创 立 一 种 学 说, 后 来 才 慢 慢 与 实 践 相 结 合 5 着 重 了 对 学 习 上 方 法 论 的 讨 论 Page 3 of 455

本 书 过 后, 再 辅 于 其 它 教 科 书 ( 比 如 本 丛 书 的 第 二 本 和 第 三 本 书 ) 你 应 该 会 具 备 编 程 的 基 于 抽 象 能 力 和 用 C++,Python 进 行 基 本 和 高 级 的 编 程 能 力 和 编 程 理 解 能 力 本 书 前 半 部 分 是 对 思 想 和 认 知 的 导 论 ( 第 一 部 分 ), 后 半 部 分 注 重 真 实 的 代 码 控 制 能 力 的 形 成 ( 第 二 部 分 尾 ) 书 中 错 误 再 所 难 免, 望 不 吝 赐 教!! 别 怀 疑, 这 正 是 一 本 同 时 可 作 为 入 门 和 进 阶 级 的 书 ( 更 偏 重 入 门 )! 然 而 真 正 的 高 手 和 真 正 的 初 学 者 都 将 从 中 有 所 得 你 还 在 为 学 不 懂 大 量 术 语 而 烦 恼 吗? 如 果 你 真 有 这 种 体 会, 那 么 你 可 能 先 要 看 这 本 书 再 看 你 正 在 看 的 C++,Python 的 书, 因 为 你 仅 仅 缺 少 一 根 主 线, 而 它 是 能 让 你 少 走 很 多 弯 路 的 拐 棍 对 架 构 的 学 习 才 是 真 正 的 学 习, 知 识 也 有 它 的 架 构, 然 而 在 这 本 书 内 有 架 构 也 有 细 节 ( 高 手 固 然 知 道 细 节, 然 而 高 手 也 有 精 神 空 洞, 因 为 你 还 需 要 懂 得 一 些 细 节 之 外 的 知 识 系 统 的 东 西 )! 当 满 目 的 书 摆 在 你 面 前, 请 相 信, 你 只 需 要 那 么 一 本, 仅 仅 能 让 你 知 道 这 一 切 是 怎 么 回 事 的 不 致 以 迷 惑 的 那 本 from programming to game programming 最 后, 如 果 说 任 何 行 为 都 是 功 利 的, 那 么 我 写 这 本 书 的 目 的 只 为 博 你 一 笑 感 谢 CCTV, 感 谢 MTV,, 噢, 错 了 目 录 第 一 部 分 书 前... 2 第 二 部 分 Minly and Corely Learn Programming... 9 导 读... 9 1.1. 什 么 是 编 程...10 1.1.1. 对 编 程 部 分 ( 第 二 部 分 1,3,4 章 ) 的 安 排...21 1.1.2. 对 问 题 部 分 ( 第 二 部 分 2,5 章 ) 的 安 排...29 1.2. 本 部 分 用 到 的 图 例...37 第 2 章 冯 氏 系 统 与 编 程 ( 面 向 系 统 的 实 现 编 程 )...39 2.1. 机 器 系 统...40 2.1.1. 图 灵 机 与 冯 氏 模 型...40 2.1.2. CPU 与 内 存 地 址...42 2.1.3. CPU 的 类 型 系 统 和 指 令 系 统...44 2.1.4. 指 令 系 统...48 Page 4 of 455

2.1.5. 对 子 系 统 和 中 断 的 支 持...48 2.1.6. (*) 对 裸 机 的 汇 编 编 程...51 2.1.7. 编 程 中 的 ( 硬 件 ) 系 统 编 程...57 2.2. 作 为 程 序 执 行 宿 主 的 OS( 上 )...59 2.2.1. 保 护 模 式...59 2.2.2. 软 件 系 统 的 出 现...62 2.2.3. OS Kernel 与 任 务 机 制...65 2.3. 高 级 语 言 对 于 人 的 写 法 与 表 达 逻 辑 的 数 据 产 生 模 式 与 代 码 产 生 模 式 : ( 系 统 实 现 语 言 C)...71 2.3.1. 编 程 的 三 种 结 构 : 运 行 模 型 与 语 言 模 型, 设 计 模 型...72 2.3.2. 冯 氏 开 发 中 的 数 据 与 代 码 : 从 顺 序 确 定 的 指 令 到 结 构 化 的 语 法 代 码 与 数 据 76 2.3.3. 高 级 语 言 开 发...77 2.3.4. 抽 象 与 编 译 原 理...81 2.3.5. 编 译, 编 译 语 言 与 静 态 类 型 语 言...98 2.3.6. C 语 言 的 名 字 修 饰... 102 2.3.7. (%%) 语 言 的 类 型 系 统 与 表 达 式 求 值... 104 2.3.8. 语 句 与 过 程... 123 2.3.9. 过 程, 函 数, 过 程 范 式 与 结 构 化... 127 2.3.10. 形 象 理 解 C 语 言 中 的 一 些 至 关 重 要 的 二 义 性... 130 2.3.11. C 的 观 点 : 底 层 不 需 要 直 接 代 码 抽 象... 131 2.3.12. C 与 C++ 是 二 种 不 同 的 语 言... 133 2.3.13. C 可 以 用 来 表 达 应 用 吗?... 135 2.4. 作 为 程 序 执 行 宿 主 的 OS( 下 )... 136 2.4.1. OS 级 的 执 行 路 径... 137 2.4.2. 用 户 态 与 语 言 级 的 调 试 与 systemerror... 137 2.4.3. 其 它 OS 子 系 统 的 职 能... 138 2.5. 算 法 与 数 据 结 构 : 加 进 了 对 组 织 内 存 中 的 数 据 与 对 问 题 固 有 解 法 的 编 程... 139 2.5.1. 算 法 + 数 据 结 构 的 本 质... 139 2.5.2. 数 据 类 型 和 数 据 结 构 是 二 种 不 一 样 的 东 西... 140 2.5.3. 用 ADT 来 表 达 数 据 结 构... 141 2.5.4. 数 据 与 数 据 属 性... 142 2.5.5. 函 数 增 长 与 算 法 复 杂 性 分 析... 144 2.5.6. 算 法 的 设 计 模 式 : 算 法 设 计 方 法... 145 2.5.7. 数 据 结 构 初 步 引 象... 145 2.5.8. 线 性 表, 树 与 ordered... 147 2.5.9. 树 初 步 引 象... 153 2.5.10. 图... 160 2.5.11. 真 正 的 递 归... 160 Page 5 of 455

2.5.12. 真 正 的 散 列 表... 162 2.5.13. 快 速 排 序 思 想... 164 第 3 章 系 统 实 现 与 初 级 系 统 开 发 ( 以 原 始 的, 未 经 设 计 的 方 式 )... 164 3.1. Basic system programming... 165 3.1.2. low level implentment... 167 3.1.1. low level IO... 172 3.1.2. low level shedule... 173 3.2. 解 决 程 序 关 于 桌 面 系 统 模 型 的 问 题... 177 3.2.1. 高 级 任 务 逻 辑... 180 3.2.2. IO 与 持 久... 180 3.2.3. 窗 口 系 统 与 桌 面 环 境... 185 3.2.4. Internet 上 面 的 诸 多 协 议 Http,Ftp... 199 3.3. (*)C 的 标 准 库 与 Gnu Libc... 211 3.3.2. 为 什 么 这 章 不 写 更 多? C 还 善 于 用 来 作 什 么 编 程?... 214 3.4. API 与 复 用... 215 3.4.1. 如 何 更 好 地 解 决 可 复 用 问 题 及 其 它 问 题... 216 第 4 章 抽 象 了 的 运 行 系 统 和 虚 拟 机 上 的 抽 象 编 程 ( 面 向 程 序 员 的 抽 象 编 程 )... 224 4.1.1. 再 谈 可 复 用... 225 4.1.2. 什 么 是 抽 象, 抽 象 是 设 计 的 一 种 高 级 形 式... 225 4.1.3. 语 言 之 争... 227 4.2. 整 合 了 编 译 层 与 运 行 层 的 语 言 系 统 : 虚 拟 机 语 言... 256 4.2.1. (*) 虚 拟 机 的 实 现... 257 4.2.2. (*) 虚 拟 机 是 对 OS 执 行 功 能 的 强 化... 257 4.2.3. Python Vm... 259 4.3. (%%) 抽 象 了 的 数 据 产 生 模 式, 代 码 产 生 模 式 :(C++,Python)... 271 4.3.1. 抽 象 了 的 过 程 控 制 抽 象 : 基 于 对 象 编 程... 271 4.3.2. 抽 象 冯 氏 开 发 中 的 数 据 与 代 码 : 从 平 铺, 过 程 的 代 码 到 预 置, 类 化 的 对 象 代 码 (ADT&UDT 编 程 : 面 向 对 象 范 式 )... 273 4.3.3. 抽 象 眼 光 看 OO... 276 4.3.4. Better C... 282 4.3.5. C++ 的 UDT 语 义... 282 4.3.6. Py 的 OO 实 现... 291 4.3.7. OO 的 缺 点... 292 4.3.8. py 语 言 系 统 的 c/py api 扩 展 层 次... 294 4.4. 设 计 : 当 编 程 考 虑 进 与 人 有 关 的 那 些 东 西 时... 296 4.4.1. 大 设 计... 298 4.4.2. 开 发 中 的 语 言 模 型 与 对 问 题 的 设 计 形 成 的 方 案... 300 4.4.3. 软 件 活 动 的 特 点... 308 Page 6 of 455

4.4.4. 什 么 是 设 计... 309 第 5 章 超 越 平 台 与 语 言 的 编 程 ( 语 言 内 和 语 言 外 对 高 阶 设 计 手 段 与 应 用 方 案 的 支 持 ) 323 5.1. 使 用 OO 技 术 的 方 式... 325 5.1.1. Pure OOA 与 OOD... 325 5.1.2. 使 用 设 计 模 式 : 加 进 了 对 应 用 进 行 固 有 OOA,OOD 的 编 程 (OOA,OOD Patterns) 325 5.1.3. (%%) 设 计 模 式 问 题 与 软 件 设 计 原 则... 331 5.1.4. 使 用 面 向 切 面 的 方 式... 334 5.1.5. (%) 使 用 C++ 的 语 言 内 模 板 的 方 式 : 参 数 化 类 型... 335 5.1.6. 使 用 语 言 层 的 Interface : 抽 象 方 法 集... 356 5.1.7. 使 用 独 立 语 言 的 二 进 制 级 Interface 的 方 式 : COM,IDL... 357 5.2. 使 用 了 语 言 和 DSL 为 后 台 支 撑 应 用 的 方 式 : 统 一 化 应 用 方 案, 将 编 程 逼 到 用 户 级 的 语 义 方 式 进 行... 362 5.2.1. 文 本 的 语 义 : 正 规 表 达 式... 363 5.2.2. 文 档 的 语 义 : 元 数 据... 363 5.2.3. 文 本 识 别 的 统 一 语 义 : 编 译 原 理 ( 前 端 )... 365 5.3. 使 用 企 业 开 发 的 方 式 : 利 用 中 间 件 技 术 淡 化 非 业 务 逻 辑... 365 使 用 辅 助 手 段 与 工 具 的 方 式... 366 5.4. 使 用 统 一 软 件 开 发 过 程 的 方 式 : 设 计 与 方 法 论... 367 第 6 章 以 分 布 式 为 特 征 的 企 业 应 用 问 题, 基 于 平 台 上 的 一 般 应 用 问 题, 脱 离 平 台 的 一 般 应 用 问 题 的 开 发 ( 以 加 进 了 设 计 的 方 式 )... 370 6.1. (*)C++ 与 库... 370 6.1.2. 第 三 方 的 解 决 方 案 :QT,MySQL,ACE... 373 6.2. (*) 不 光 是 高 级 系 统 问 题, 还 是 通 用 应 用 问 题 (C++ 的 第 2 层 )... 377 6.2.1. 为 什 么 只 写 这 些?C++ 还 善 于 用 来 作 什 么 编 程?... 378 企 业 应 用 实 现 与 开 发 (Java)... 379 6.2.2. 什 么 是 企 业 开 发... 380 6.2.3. 硬 件 程 序, 内 核 程 序, 桌 面 程 序, 以 及 什 么 是 企 业 程 序... 381 6.2.4. SOA... 383 6.2.5. 领 域 逻 辑 与 框 架... 385 6.2.6. 构 件... 390 6.2.7. 企 业 开 发 与 分 布 式 计 算... 390 第 三 部 分 Minly and Corely Learn graphic Programming... 391 导 读... 391 1.1. 什 么 是 图 形 编 程... 392 1.1.1. 对 问 题 ( 第 三 部 分 2,3,4 章 ) 部 分 的 安 排... 399 1.1.2. 对 实 践 ( 第 三 部 分 5,6 章 ) 部 分 的 安 排... 401 Page 7 of 455

1.2. 本 部 分 用 到 的 图 例... 402 第 2 章 3D 中 的 2D... 403 2.2. 3D 中 的 2D... 403 2.2.1. 2d 图 像, 图 形, 图 元 表 示... 403 2.2.2. 2D surface model... 405 第 3 章 Rending 前 端... 405 3.1. 3D 中 的 数 据 准 备 (1) 预 生 成 为 顶 点 的 模 型 : 空 间 与 物 体 表 现... 405 3.1.1. 从 数 学 上 解 释 空 间 与 空 间 内 变 动... 405 3.1.2. 从 计 算 几 何 上 解 释 多 边 形... 409 3.1.3. 从 数 学 上 解 释 插 值 与 曲 面... 413 3.1.4. 复 杂 物 体 的 建 模... 415 3.2. (*) 暂 且 使 用 D3D 查 看 一 下 效 果... 416 第 4 章 Rendering 后 端 与 rendering... 417 4.1. (3D 中 的 数 据 准 备 2) 预 生 成 为 像 素 的 图 形 : 表 面 与 环 境 的 必 要 与 选 要 真 实 感 呈 现 417 4.1.1. 用 物 理 来 解 释 灯 光... 417 4.1.2. 贴 图 空 间, 贴 图... 418 4.1.3. 虚 拟 全 局 灯 光 空 间, 照 明 与 阴 影... 419 4.2. 4D 中 的 数 据 准 备 ( 实 时, 可 交 互 的 virtual real world)... 419 4.2.1. 从 数 学 和 物 理 上 来 解 释 动 画 与 动 力 动 画... 420 4.2.2. 交 互 式 3D : 碰 撞 反 应 与 拾 取... 421 4.3. Rending 前 投 数 据 (highlevel Rendering w/o gpu)... 422 4.3.1. 用 数 学 来 解 释 投 影 与 流 水 线... 423 4.3.2. 投 影 到 屏 幕... 425 4.4. 渲 染 中 动 态 投 数 据 (lowlevel Rendering)... 425 4.4.1. GPU hardware 与 Real Time rending 原 理... 426 4.5. (*) 暂 且 使 用 D3D 查 看 一 下 效 果... 426 第 5 章 制 作 一 个 引 擎... 426 5.1. 模 型 模 块... 426 5.1.1. xx... 427 5.2. 动 画 模 块... 427 5.2.1. xx... 427 5.3. 脚 本 模 块... 427 5.3.1. xx... 427 5.3.2. 还 可 以 怎 么 样 设 计... 427 第 6 章 重 构 与 Demo... 427 Page 8 of 455

6.1. 完 善 模 型 模 块... 428 6.1.1. xx... 428 6.2. 完 善 动 画 模 块... 428 6.2.1. xx... 428 6.3. Demos... 428 6.3.1. xx... 428 第 四 部 分 书 后... 428 附 录, 结 语 及 建 议... 429 1.1. 附 录... 429 1.1.1. 关 于 本 书,C++ 为 主,Python 为 辅 : 本 丛 书 的 初 衷... 429 1.1.2. 3D 开 发 中 的 数 学 与 物 理... 441 1.1.3. 本 书 涉 及 到 的 概 念 列 表... 448 1.1.4. 分 散 在 本 书 中 的 源 码 归 类... 448 1.1.5. 一 般 性 应 用 问 题 和 一 般 性 设 计 问 题 列 举... 450 1.1.6. 参 考 书 籍... 453 1.2. 结 语 与 建 议... 454 第 二 部 分 Minly and Corely Learn Programming 6 系 统 眼 光 看 语 言, 开 发 眼 光 看 通 用 问 题 导 读 6 Focused on C,C++ and system programming,desktop programming Page 9 of 455

1.1. 什 么 是 编 程 既 然 是 谈 编 程, 自 然 有 编 程 到 底 难 不 难, 学 习 编 程 到 底 应 该 怎 么 进 行 诸 如 这 样 的 话 题 的 产 生 7, 这 些 话 题 很 自 然 地 都 会 导 到 一 个 最 基 本 的 话 题 什 么 是 编 程, 只 有 对 编 程 有 一 个 公 共 并 格 定 一 致 的 理 解, 我 们 才 能 进 一 步 讨 论 那 些 稍 微 高 级 一 点 的 话 题 而 不 必 经 常 回 到 这 个 个 人 狭 小 的 境 地 ( 这 个 话 题 不 应 是 成 功 个 人 的 私 人 体 会 之 类 的 见 识 而 应 是 大 家 都 承 认 的 某 种 共 识, 这 样 的 问 题 才 算 是 被 解 决 了 的 问 题 ) 什 么 是 编 程, 从 最 直 观 的 意 义 来 说, 编 程 是 一 种 活 动, 当 然 这 句 话 说 了 等 于 没 说, 然 而 这 也 正 只 是 因 为 它 没 有 继 续 把 话 说 破, 如 果 着 眼 于 编 程 活 动 中 出 现 的 各 大 主 体, 那 么 编 程 实 际 上 可 以 表 述 为 : 由 人 进 行 的, 利 用 编 程 语 言 写 系 统 逻 辑 或 应 用 逻 辑. 针 对 计 算 机 的, 完 成 从 方 案 域 到 应 用 域 的 一 个 变 换 的 活 动 这 样 的 说 法 虽 然 也 比 较 空 白, 但 它 至 少 提 到 了 计 算 机, 人, 应 用, 语 言, 这 就 开 始 涉 及 了 一 些 对 编 程 的 理 解 较 为 本 质 的 东 西 即 : 编 程 要 通 过 计 算 机 解 决 编 程 能 解 决 的 问 题, 它 就 必 须 ( 在 功 能 层 面 ) 首 先 解 决 对 于 计 算 机 系 统 本 身 的 实 现 手 段 问 题 ( 软 件 的 OS), 编 程 首 先 要 通 过 计 算 机 解 决 编 程 能 解 决 的 问 题, 它 就 必 须 在 系 统 层 面 解 决 编 程 的 结 果 ------ 程 序 的 运 行 问 题, 即 计 算 机 系 统 ( 可 能 是 硬 件 的, 或 软 件 的 ) 要 提 供 给 程 序 一 个 执 行 路 径 联 系 中 的 主 体 执 行 路 径 中 的 栈 8 式 数 据 和 代 码 9 栈 式 代 码 运 行 体 联 系 静 态 数 据 子 程 序 抽 象 代 码 或 数 据 编 程 要 通 过 计 算 机 解 决 编 程 能 解 决 的 问 题, 它 就 必 须 ( 在 编 程 层 面 ) 首 先 解 决 对 于 计 算 机 系 统 本 身 的 实 现 手 段 问 题, 比 如 统 一 使 用 数 据 结 构 和 算 法 来 解 决 功 能 开 发 上 的 问 题, 即 编 程 首 先 是 对 于 计 算 机 的 实 现 而 这 个 实 现, 在 冯 氏 系 统 上 ( 冯 氏 系 统 是 一 种 本 质 上 的 数 据 处 理 系 统 ), 是 通 过 一 种 数 据 化 模 式 ( 先 是 以 抽 象 类 型 的 方 式 达 到 描 述 一 种 数 据 化 的 模 式, 再 是 数 据 结 构 ) 来 进 行 的. 这 里 你 要 着 重 看 到 冯 氏 系 统, 类 型 和 数 据 结 构 这 二 个 字 眼 以 及 它 们 之 间 的 联 7 每 个 人 心 中 都 有 一 个 编 程, 因 为 每 个 人 所 处 的 维 度 都 不 尽 相 同 8 在 堆 栈 机 上, 程 序 执 行 即 很 深 的 堆 栈 嵌 套 9 比 如 可 重 定 位 代 码, 从 内 存 的 眼 光 来 看, 它 们 也 是 数 据, 只 是 他 们 活 动 起 来, 就 成 了 执 行 路 径 中 的 递 归 堆 栈, 而 且, 带 有 程 序 上 的 子 程 序 抽 象 的 意 义 Page 10 of 455

系, 归 纳 如 下 : 联 系 中 的 主 体 冯 氏 系 统 和 类 型 联 系 以 抽 象 类 型 的 方 式 达 到 描 述 一 种 数 据 化 的 模 式 ( 在 编 程 层 提 供 给 冯 氏 系 统 更 强 大 的 编 码 能 力 ) 类 型 与 数 据 结 构 在 抽 象 类 型 的 基 础 上, 用 组 织 数 据 形 成 数 据 结 构 的 方 法 来 解 决 开 发 中 的 问 题 冯 氏 系 统 和 代 码 结 构 在 编 程 层 提 供 给 冯 氏 系 统 某 种 代 码, 让 其 操 作 处 理 经 类 型 化 的 数 据 所 以 对 类 型 和 代 码 的 抽 象, 都 是 基 于 人 的 要 求 来 的, 同 时 编 译 器 做 了 计 算 机 与 人 之 间 的 媒 介 再 者, 现 代 的 编 程 必 然 跟 语 言 有 关 10, 所 以 它 必 须 首 先 解 决 语 言 的 问 题, 即 语 言 的 内 部 实 现 问 题 ( 比 如 语 法, 语 义 ), 而 语 言 是 由 人 来 学 的, 所 以 对 语 言 设 计 的 考 虑 还 包 括 着 眼 于 它 的 外 部, 考 虑 其 语 法 对 于 人 的 简 单 性 和 简 单 入 阶 性, 语 义 映 射 到 应 用 的 那 些 能 力 ; 语 言 对 于 工 业 的 统 一 性 和 强 度 性 要 求 等 这 里 你 要 着 重 看 到 语 言 这 个 字 眼, 通 俗 来 说, 这 就 是 人 们 常 常 说 的, 编 程 就 是 学 一 门 语 言 这 里 的 联 系 在 于 : 联 系 中 的 主 体 语 言 与 语 法 语 义 语 言 与 人 联 系 语 言 作 为 其 内 部 实 现 的 二 大 支 撑 概 念 语 言 是 由 人 来 学 的, 要 注 意 一 个 学 习 曲 线 问 题 语 言 与 应 用 比 如 语 言 如 何 在 语 言 内 部 实 现 的 基 础 上 表 达 并 解 决 问 题, 以 及 形 成 一 种 做 法 标 准, 满 足 工 业 化 快 速 开 发 的 需 要 还 是 那 个 问 题, 编 程 是 通 过 计 算 机 来 解 决 问 题 ( 这 里 侧 重 说 的 是 问 题 ) 的, 故 它 必 须 在 语 言 的 基 础 上 抽 象 应 用, 解 决 对 于 应 用 端, 问 题 端 的 抽 象 问 题, 比 如 对 应 用 的 设 计 问 题 即 设 计 模 式. 在 一 个 大 的 范 围 里 来 说, 应 用 问 题 本 身 是 可 以 脱 离 语 言 被 独 立 考 虑 的, 但 具 体 到 用 编 程 的 方 式 来 体 现 它, 必 然 要 涉 及 到 如 何 用 这 种 语 言 来 体 现 上 述 应 用 与 设 计 的 问 题 这 里 你 要 着 重 看 到 设 计 模 式 和 应 用 这 里 的 联 系 在 于 : 联 系 中 的 主 体 联 系 10 编 程, 准 确 的 说 法 是 语 法 编 程, 所 以 编 程 还 要 解 决 以 何 种 语 法 的 语 言 来 进 行 的 事, 不 可 能 为 每 种 应 用 写 一 个 DSL 即 现 代 的 编 程 还 不 是 语 义 编 程 或 应 用 编 程 Page 11 of 455

问 题 与 人 设 计 与 语 言 对 于 问 题, 编 程 如 何 解 决 人 与 它 产 生 的 设 计 关 系 语 言 如 何 更 好 体 现 设 计 模 式 11 最 后, 编 程 是 人, 而 且 是 大 量 人 来 进 行 的, 所 以 它 还 必 须 解 决 它 关 于 人 的 要 求 的 那 些 东 西, 即 解 决 写 法 上 的 问 题 和 对 逻 辑 的 表 达 方 面 的 问 题, 设 计 上 的 问 题 和 解 决 大 规 模 开 发 的 问 题 即 软 工 问 题 ( 它 还 包 括 分 工 等 问 题, 软 件 过 程 问 题 ) 这 里 你 要 着 重 看 到 人 和 设 计 这 里 的 联 系 在 于 : 联 系 中 的 主 体 语 言 与 对 逻 辑 的 表 达 语 言 与 写 法 人 和 设 计 联 系 编 译 实 现 里 面 的 类 型 对 数 据 的 产 生 模 式 编 译 实 现 里 面 的, 对 写 法 的 产 生 模 式, 对 代 码 的 组 织 模 式 综 合 考 虑 全 部 因 素 12 编 程, 如 果 往 深 处 说, 它 还 应 处 理 跟 用 户 有 关 的 事, 这 个 用 户 是 产 生 软 件 需 求 的 人, 它 不 懂 任 何 语 言 或 库, 你 可 以 想 象 django 中 的 template 语 言, 这 个 用 户 使 用 无 语 法 的 声 明 性 代 码, 这 就 将 编 程 层 次 上 升 到 了 用 户, 将 设 计 的 任 务 从 编 程 层 次 ( 我 们 说 过, 编 程 有 运 行 层, 语 言 层 和 设 计 层 ) 中 独 立 出 来 即, 对 跟 领 域 密 切 有 关 的 设 计 的 支 持, 可 以 不 是 语 法 编 程 要 做 的 事, 也 可 以 不 是 程 序 员 的 事, 它 可 以 做 到 用 户 层 和 语 法 语 言 外 面 比 如, 用 一 种 类 UML 的 接 口 语 言 转 成 语 言 的 类 体 系 ( 但 是, 迫 切 需 要 一 种 比 OO 还 要 高 阶 的 语 法 语 言, 作 为 这 种 UML 的 目 标, 我 们 会 在 后 面 南 辕 北 辙 的 UML 加 以 详 细 讨 论 ) 可 见 这 些 问 题 都 不 是 独 立 的 而 是 联 系 着 的, 澄 清 它 们 是 一 个 巨 大 的 工 程, 于 是 我 愿 意 只 用 上 述 列 举 出 的 表 格 来 表 达 它 们 所 以 到 底 什 么 是 编 程 呢? 答 案 其 实 早 就 出 来 了, 既 然 语 言 都 面 向 综 合 解 决 编 程 中 出 现 的 这 些 问 题, 那 么 实 际 上 对 编 程 的 概 念 的 负 责 任 的 探 索 只 能 是 一 个 无 尽 的 过 程, 因 为 需 要 一 切 都 综 合 而 论, 比 如, 谈 对 于 一 门 编 程 语 言 的 学 习, 一 旦 谈 到 了 语 言, 即 使 在 不 13 谈 到 任 何 语 言 要 素 的 情 况 下, 选 择 什 么 样 的 语 言 这 个 小 话 题 实 际 上 都 会 是 一 个 巨 大 的 问 题, 因 为 选 择 语 言, 它 首 先 要 解 决 如 上 我 们 谈 到 的 几 大 问 题, 而 只 有 弄 清 了 这 些, 才 能 正 确 选 好 一 门 语 言, 而 这 只 是 编 程 的 第 一 步, 但 问 题 是 : 初 学 者 不 可 能 对 所 有 这 些 都 有 一 个 他 们 的 理 解,( 我 们 这 里 谈 到 的 编 程 是 狭 义 的, 即 选 择 某 种 编 程 语 言 写 系 统 逻 辑 或 应 11 这 个 人 可 能 是 程 序 员, 脚 本 程 序 员, 或 产 生 软 件 需 求 及 制 定 设 计 的 非 专 业 用 户 12 我 们 在 这 里 提 到 用 户, 说 明 它 不 是 程 序 员, 也 甚 至 不 是 脚 本 程 序 员, 而 普 通 意 义 上 的 程 序 员, 只 是 一 类 实 现 者, 它 同 时 接 上 了 机 器 的 C 逻 辑 和 对 于 用 户 和 设 计 者 的 设 计 逻 辑, 一 般 地, 现 今 的 程 序 员 都 是 利 用 某 种 面 向 运 行 期 的 语 言 进 行 某 种 类 型 编 程 type programming 或 abstract type programming 13 程 序 设 计 语 言 的 选 择 非 常 重 要, 它 将 影 响 人 们 理 解 问 题 的 出 发 点 Page 12 of 455

用 逻 辑, 而 实 际 上 还 有 广 义 的 编 程 ) 对 任 何 编 程 问 题 的 讨 论, 实 际 上 都 是 以 先 后 顺 序 解 决 平 台 问 题, 语 言 问 题 和 人 的 问 题 的 过 程, 即, 执 行 模 型, 语 法 模 型, 和 设 计 模 型 的 三 段 式 过 程 关 于 这 个 三 个 模 型, 后 面 还 会 有 更 深 的 讲 解 但 是 正 如 书 中 冯 氏 系 统 与 编 程 没 有 把 系 统 跟 语 言 分 开 写 一 样, 应 用 和 设 计 也 不 14 可 能 被 分 开 讨 论, 其 实 这 四 个 部 分 都 是 相 互 连 接 的 不 可 分 解 的 事 呢? 所 以, 如 果 说 问 题 与 问 题 之 间 总 是 关 联 着 的, 所 以 怎 么 样 向 他 们 去 简 单 地 说 明 白 一 件 比 如 对 于 初 学 者 来 说, 什 么 是 真 正 最 简 单 最 实 用 的 语 言 呢? 也 许 我 们 只 能 从 某 些 侧 面 和 形 式, 唯 度 去 说 明 我 们 永 远 做 不 到 把 握 事 情 真 相 的 全 部 即 使 有 全 世 界 那 么 多 的 纸 张, 什 么 是 人 生 这 样 简 单 的 问 题 我 们 也 坚 信 写 不 完 但 是 对 于 人 生, 我 们 至 少 可 以 给 出 下 面 这 样 一 些 描 述 性 的 唯 度, 就 像 我 们 在 本 节 的 开 头 导 出 对 于 编 程 的 那 个 描 述 性 概 念 一 样 人 生 是 一 场 由 出 生 到 死 亡 的 存 在, 人 生 是 一 场 梦 想 与 财 富 的 追 逐 ------ 还 比 如, 什 么 是 计 算 机, 这 个 问 题 其 实 跟 什 么 是 人 生 一 样 简 单 常 见 但 是 难 解, 但 是 我 们 可 以 站 在 计 算 机 抽 象 组 成 的 角 度, 给 出 一 个 足 够 简 单 的 答 案, 计 算 机 = 硬 件 架 构 + 软 件 OS, 只 要 了 解 了 硬 件 架 构 和 软 件 OS, 那 么 我 们 就 可 以 说 我 们 理 解 计 算 机 了 ( 当 然, 只 是 在 某 个 唯 度 上 而 已, 而 且, 具 体 到 硬 件 架 构 和 软 件 OS, 又 有 巨 大 的 唯 度 ), 让 我 们 进 入 我 们 还 没 有 完 成 的 话 题 继 续 深 入, 什 么 是 编 程, 在 本 章 的 开 头 已 经 给 出 了 一 个 初 步 的 概 念, 在 那 里, 我 们 选 择 的 抽 象 和 唯 度 的 组 合 是 : 程 序 被 编 程 和 被 产 生, 被 执 行 的 主 体 与 客 体 : 即, 编 程 的 根 本 在 于 抽 象 本 书 即 在 站 在 这 个 大 角 度 来 讨 论 所 有 的 大 小 唯 度. 要 谈 的 抽 象 编 程 ( 编 程 是 一 种 抽 象 ) 选 取 的 唯 度 程 序 被 执 行 的 宿 主 和 编 程 语 言, 写 程 序 的 人 和 程 序 针 对 的 应 用 编 程 绝 对 不 止 是 这 样 一 个 泛 而 论 之 的 话 题, 因 为 在 每 个 客 体 和 主 体 的 内 部, 又 存 在 数 量 巨 大 的 唯 度 和 抽 象, 但 我 们 可 以 照 样 根 据 找 唯 度 的 方 法 去 理 解 它 们 以 下 我 们 将 极 力 从 以 上 唯 度 中 找 到 一 些 我 们 常 见 的 词 汇, 以 它 们 为 根 据, 深 入 到 这 些 词 汇 内 部 进 行 对 编 程 的 探 讨 并 附 带 讨 论 什 么 是 最 简 单 的 语 言, 怎 么 样 学 习 编 程, 为 什 么 要 这 样 学 于 是 可 以 产 生 以 下 一 张 图 : 14 应 用 中 的 系 统 问 题, 强 烈 跟 语 言 和 系 统 有 关, 所 以 我 反 而 把 它 们 放 在 了 书 的 前 面 整 书 的 后 半 部 分 才 着 重 讲 解 设 计 与 应 用 相 结 合 的 地 方 Page 13 of 455

机 器 / 机 器 编 程 : 本 地 / 本 地 编 程 : 虚 拟 化 / 虚 拟 化 编 程 : 程 序 宿 主 : 机 器, 我 们 得 学 关 于 裸 机 功 能 的 东 西, 比 如 CPU 如 何 执 行 程 序 程 序 宿 主 : 操 作 系 统, 我 们 得 学 关 于 OS 的 东 西, 比 如 进 程, 多 线 程, 中 断 程 序 宿 主 : 虚 拟 机, 我 们 得 学 关 于 VM 的 东 西, 比 如, 为 执 行 优 化 的 了 进 程, 中 断,GC 语 言 : 机 器 语 言, 汇 编 语 言 -- 原 始 的 编 程 -- 语 言 : 本 地 语 言, 高 级 语 言 -- 抽 象 了 的 编 程 -- 语 言 : 某 种 虚 拟 机 语 言 -- 高 度 抽 象 了 的 编 程 -- 指 令 语 言 : 语 法 语 言 : 高 级 语 法 语 言 : 表 达 什 么 逻 辑 : 简 单 类 型,Primitve Types 写 什 么 样 的 代 码 结 构 形 式 : 指 令 对 数 据 的 调 用 与 跳 转, 用 汇 编 模 拟 的 子 程 序, 指 令 级 的 三 种 流 程 控 制 结 构 数 据 抽 象 数 据 结 构 代 码 产 生 模 型 赋 值 类 型 定 义 声 明 三 种 流 程 控 制 结 构 抽 象 了 的 类 型 Ducking Type ( 以 函 数 为 子 例 程 的 代 码 抽 象 出 来 的 代 码 结 构 : 闭 包, 递 归, 线 程 等 ) 人 的 设 计 : 利 用 数 据 结 构 和 算 法 统 一 解 决 问 题 利 用 设 计 上 的 设 计 模 式 解 决 问 题 学 习 曲 线 : 加 入 了 数 据 结 构 和 算 法 的 编 程, 加 入 了 对 应 用 设 计 的 编 程 应 用 问 题 : 系 统 编 程 问 题 不 直 接 涉 及 到 对 于 系 统 的 实 现 的 一 类 编 程 问 题, 即 应 用 编 程 得 到 的 编 程 知 识 词 汇 * 注 : 当 然, 汇 编 也 有 保 护 模 式 下 基 于 OS 的 编 程, 表 示 一 个 抽 象 过 程, 而 且, 我 们 这 里 谈 到 的 语 言 都 是 命 令 式 语 言, 而 非 函 数 式 或 逻 辑 式 我 们 来 解 释 其 中 出 现 的 一 些 词 汇 ( 在 以 上 图 表 中 被 加 粗 的 部 分 ), 由 于 这 些 词 汇 是 放 在 以 上 这 个 大 唯 度 中 被 讨 论 的, 所 以 对 这 些 词 汇 的 讲 解 本 来 就 是 站 在 了 它 们 一 产 生 时 的 Page 14 of 455

那 个 大 角 度 的 ( 而 我 们 本 书 就 是 按 这 个 大 思 路 写 的, 这 个 大 角 度 大 唯 度 保 证 了 : 只 要 我 们 写 完 了 这 里 面 出 现 的 这 些 东 西, 实 际 上 就 谈 完 了 关 于 编 程 的 几 乎 一 切 东 西, 而 且, 因 为 这 些 唯 度 道 出 了 这 些 东 西 产 生 的 本 源, 所 以 是 沿 着 一 条 正 确 的 学 习 曲 线 来 的 ) 机 器 : 裸 机 是 整 个 计 算 机 在 硬 件 级 基 本 能 执 行 程 序 的 本 形, 此 时 并 没 有 出 现 任 何 软 件 上 的 东 西 ( 包 括 软 件 上 的 执 行 系 统, 所 以 更 不 可 能 有 除 了 执 行 功 能 以 后 的 其 它 系 统 功 能 的 软 件 概 念, 比 如 软 件 上 对 编 程 的 支 持 ), 机 器 的 这 个 状 态 跟 指 令 和 汇 编 语 言 有 关, 由 于 没 有 出 现 任 何 软 件 的 概 念 ( 我 们 把 出 现 OS 作 为 拥 有 软 件 意 义 的 标 志 ), 本 书 开 头 处 就 把 握 好 这 个 机 会, 谈 了 三 个 方 面 的 内 容 即, 裸 机 中 CPU 与 内 存 是 如 何 作 为 硬 件 二 大 主 体 进 行 工 作 的 ( 主 要 是 执 行 指 令 调 用 数 据 和 实 现 跳 转, 所 以 说 冯 氏 系 统 是 顺 序 串 行 的 确 定 的, 确 定 就 是 说, 它 是 预 定 义 的, 它 一 定 是 被 预 先 生 成 为 顺 序 的 ), 汇 编 语 言 是 如 何 在 CPU 加 内 存 的 工 作 方 式 下 天 然 地 引 入 了 那 些 指 令, 以 及 它 基 于 指 令 选 择 的 初 级 编 程 层 面 模 拟 sub 例 程 的 方 式 ( 这 是 完 全 没 有 语 法 意 义 的 ), 然 后 谈 到 裸 机 加 汇 编 语 言 的 组 合 是 低 级 的 平 台 加 编 程 的 组 合 方 式 ( 平 台 模 式 和 计 算 模 型 的 一 个 组 合 ), 是 注 定 要 被 改 变 的 计 算 机 都 是 基 于 某 种 形 式 系 统 的 理 论 基 础 的 ( 这 正 是 本 书 第 一 章 开 始 就 要 解 释 的 问 题 ), 而 且 它 是 有 架 构 的, 计 算 模 型 都 是 通 用 系 统 解 决 通 用 问 题 的, 语 言 和 语 言 系 统 也 是, 特 定 的 计 算 模 型 决 定 了 这 种 平 台 上 都 有 什 么 语 言 存 在 其 上 ( 比 如 冯 氏 机 上 的 类 型 语 言,Lisp 机 上 的 表 处 理 语 言 ), 所 以 了 解 你 正 在 处 于 的 平 台, 是 你 使 用 这 个 平 台 上 的 某 种 语 言 来 解 决 问 题 的 前 提 即, 平 台 模 型, 计 算 模 型 是 和 语 言 模 型 相 联 系 的, 你 首 先 要 明 白 的, 就 是 要 把 平 台 看 成 是 执 行 系 统 加 编 程 支 持 系 统 的 综 合 才 能 更 好 明 白 这 种 平 台 下 语 言 系 统 和 开 发 的 由 来 而 对 编 程 的 有 效 学 习, 是 注 定 要 明 白 这 些 关 于 系 统 的 东 西 先, 才 能 明 白 后 来 的 东 西 的 一 个 过 程 而 系 统 本 身 由 C 写 成,C 在 语 法 语 义 级 所 呈 现 出 来 的 那 些 东 西, 对 理 解 open source 的 Linux 是 一 个 巨 大 的 工 具 再 来 说 语 言 为 了 编 程, 固 然 得 学 一 门 语 言, 然 而 语 言 与 语 言 间 又 是 不 同 的, 这 种 不 同 会 直 接 地 影 响 到 你 选 择 的 语 言 是 否 正 是 你 要 表 达 的 应 用 所 需 要 的, 而 且 会 影 响 到 你 学 习 这 门 语 言 的 曲 线 长 短, 历 史 上 地, 编 程 为 了 越 来 越 抽 象 ( 以 更 好 表 达 应 用, 或 满 足 人 们 使 用 某 种 语 言 进 行 更 好 设 计 的 要 求, 实 际 上 这 二 者 也 并 非 毫 无 联 系 ), 发 展 出 来 一 系 列 历 史 抽 象, 比 如 数 据 结 构 和 算 法,VM, 语 言 的 语 法 和 语 义, 设 计 模 式, 等 等, 对 某 阶 段 的 编 程 需 要 涉 及 到 的 东 西 各 有 不 同 ( 因 为 它 们 处 在 高 低 不 同 的 层 次 上, 解 决 实 现 或 设 计 的 偏 向 程 度 不 一 样 ), 低 抽 象 的 编 程 只 需 理 解 某 种 固 定 的 平 台 细 节 和 语 言, 解 决 常 见 的 系 统 内 编 程, 而 高 抽 象 的 语 言 及 编 程, 使 编 程 工 作 进 入 一 种 复 用 和 设 计 多 于 自 己 实 现 轮 子 的 现 状, 此 时 他 们 面 向 解 决 应 用 问 题 居 多, 自 然 开 发 语 言 应 直 接 内 置 某 种 高 级 语 法 语 义, 或 库 标 准, 或 设 计 模 式, 这 些 就 可 以 不 必 事 事 重 新 发 明 轮 子, 重 复 那 些 在 低 编 程 阶 段 就 不 断 反 复 解 决 过 了 的 问 题 ( 比 如, 高 级 开 发 可 以 使 用 直 接 形 成 标 准 的 IO,GUI, 任 务 逻 辑, 或 高 级 数 据 结 构 ) 这 二 种 编 程 学 习 Page 15 of 455

曲 线 自 然 不 可 相 比 这 使 编 程 语 言 按 集 成 的 抽 象 度 分 为 二 种, 一 种 是 C 这 样 的 实 现 语 言, 它 主 要 面 向 系 统 本 身, 利 用 实 现 逻 辑 的 数 据 结 构 和 算 法 ( 之 所 以 称 数 据 结 构 和 算 法 是 实 现 逻 辑, 因 为 它 们 解 决 问 题 时 使 用 了 组 织 内 存 的 手 段, 而 内 存, 是 初 级 系 统 级 的 东 西 ), 解 决 的 是 系 统 编 程 问 题, 上 面 说 了, 系 统 软 件, 包 括 OS 和 编 译 器 的 制 造 与 设 计, 都 是 不 断 被 证 明 可 以 用 数 据 结 构 和 算 法 的 那 些 知 识 很 好 解 决 的 一 类 问 题 的 典 型, 人 们 说 系 统 程 序 员 是 幸 福 的, 因 为 系 统 程 序 员 只 需 掌 握 有 限 的 固 定 的 系 统 知 识 成 型 的 标 准 理 论, 和 C 这 样 的 语 言, 外 加 数 据 结 构 和 算 法 以 设 计 和 解 决 问 题 的 手 段 就 行 了 而 以 此 对 立 的 另 一 面 就 是 Python 这 些 的 高 抽 象 语 言, 它 面 向 比 系 统 问 题 更 复 杂 的 现 实 问 题, 涉 及 到 新 的 框 架 ( 比 如 web) 新 的 理 念, 涉 及 到 很 多 与 设 计 与 设 计 模 式 有 关 的 东 西, 还 涉 及 到 高 抽 象 的 语 言 虽 然 这 些 东 西 名 为 抽 象, 但 实 际 上, 还 是 要 求 程 序 员 对 所 有 这 些 抽 象 前 面 的 铺 垫 知 识 有 一 个 大 概 理 解 的 处 在 二 个 极 端 的 C 和 Python,C 是 典 型 的 实 现 语 言, 而 Python 是 典 型 的 高 级 抽 象 的 语 言 (C++ 的 better c+oo 层 次 组 成 的 语 言, 是 介 于 C 和 Python 之 间 的 中 间 语 言 ) 以 同 样 的 应 用 高 度 来 说, 由 于 c 本 身 不 够 抽 象, 所 以 由 C 到 语 言 到 应 用, 中 间 经 过 了 太 多 抽 象, 理 解 曲 线 过 于 曲 折, 相 比 Python 来 说, 语 言 到 应 用 中 间 的 抽 象 相 对 少 一 点, 学 习 Python 开 发 的 学 习 曲 线 要 平 滑 一 点,C 太 靠 近 描 绘 底 层, 细 节 太 多, 而 C++ 除 了 用 C 的 底 层 能 力 来 描 述 数 据 结 构 它 还 加 了 一 层 设 计 和 代 码 结 构 逻 辑, 它 假 设 人 们 只 需 要 在 高 层 次 懂 它 的 设 计 就 可 以 编 程 了 ( 于 是 它 给 人 们 一 种 这 样 的 假 像 : 即 C++ 进 行 对 系 统 的 编 程 不 再 需 要 涉 及 到 系 统 低 层, 言 下 之 意 这 是 跟 C 比 较 而 言 的 ), 但 实 际 上 理 解 这 种 OO 设 计 本 身 也 需 要 对 高 层 次 下 面 层 次 的 理 解 Python 学 习 曲 线 短, 是 因 为 它 能 迅 速 看 到 正 确 的 程 序 结 果, 让 学 习 者 明 白, 而 C, 需 要 做 太 多 的 工 作 原 始 的 编 程 : 不 同 的 编 程 还 是 不 同 的, 甚 至 有 着 本 质 的 差 别, 存 在 三 种 编 程, 即 未 经 抽 象 的 编 程 ( 或 原 始 的 编 程 ), 此 时 的 程 序 执 行 体 是 裸 机, 编 程 支 持 也 是 汇 编, 而 抽 象 了 的 编 程, 程 序 执 行 体 是 软 件 的 OS, 编 程 支 持 是 高 级 语 言, 解 决 问 题 的 方 法 上 实 现 了 数 据 结 构 和 算 法, 高 度 抽 象 了 的 编 程, 程 序 执 行 体 是 虚 拟 机, 编 程 支 持 是 某 种 工 业 成 熟 的 高 级 虚 拟 机 语 言 ( 往 往 它 们 把 执 行 体 和 语 言 作 为 它 们 的 标 准 ), 而 且 在 抽 象 了 数 据 结 构 和 算 法 的 基 础 上, 语 言 还 把 设 计 模 式 这 样 的 越 来 越 高 级 的 编 程 理 念 加 入 其 中 语 言 与 应 用 之 间 是 紧 密 相 连 的, 不 同 的 语 言 解 决 不 同 层 次 的 问 题, 有 的 语 言 善 于 解 决, 这 就 跟 语 言 内 提 供 了 什 么 样 的 设 计 方 法, 它 的 语 言 内 核 中 内 置 了 什 么 样 的 语 言 元 素, 这 些 元 素 是 15 除 了 C++ 和 Ada, 目 前 的 语 言 都 不 具 有 泛 型, 目 前 绝 大 多 数 语 言 都 是 为 了 运 行 期 而 15 运 行 期 的 语 言 要 进 入 运 行 期 才 体 现 设 计, 在 源 程 序 级, 很 难 见 到 真 正 的 设 计 在 C++ 中, 泛 型 从 源 Page 16 of 455

准 备 的, 所 以, 学 编 程, 第 一 件 事, 就 是 学 习 运 行 时 的 栈, 和 运 行 时 的 数 据 ( 这 也 是 本 书 程 序 二 大 部 分, 在 第 一 部 分 先 讲 系 统 环 境, 系 统 环 境 中 程 序 的 执 行 路 径, 然 后 再 讲 具 体 的 语 言 机 制 和 某 门 语 言, 这 样 的 步 骤 的 由 来 ), 因 为 运 行 期 语 言 对 它 们 都 做 了 编 程 机 制 上 的 直 接 封 装 再 来 说 数 据 结 构, 现 今 的 编 程 都 还 只 属 于 某 种 未 脱 离 数 据 处 理 模 式 的 语 言 ( 冯 氏 下 的 编 程 就 是 数 据 抽 象 加 数 据 结 构 抽 象, 这 些 都 对 应 着 冯 氏 机 作 为 处 理 数 据 的 机 器 的 本 质 而 代 码, 实 际 上 在 冯 氏 机 里 也 是 作 为 数 据 被 对 待 的, 这 就 是 本 节 一 开 头 谈 到 的 问 题 ) 还 未 脱 离 运 用 处 理 数 据 的 方 式 来 解 决 编 程 以 解 决 问 题 的 方 式 所 以, 对 数 据 结 构 和 算 法 的 运 用 永 远 是 一 门 冯 氏 下 的 语 言 编 程 所 要 涉 及 到 的 ( 只 要 这 个 过 程 未 被 设 计 完 全 抽 象 掉 ) 再 来 说 语 法, 和 OO, 比 如, 即 使 对 一 些 已 经 似 乎 成 为 常 识 接 受 的 OO, 许 多 人 都 抱 有 疑 问 他 们 问,OO 真 的 就 简 化 了 人 们 编 程 的 工 作 吗? 遗 憾 的 是 许 多 人 并 不 认 同 这 个 说 法 关 于 对 OO 的 理 解, 重 要 的 是 要 分 清 这 里 面 其 实 有 一 个 代 码 抽 象 模 式 和 数 据 抽 象 模 式 的 区 别 类 实 际 上 是 一 种 数 据 抽 象 ( 也 是 一 种 代 码 抽 象 ), 而 不 是 一 种 数 据 结 构,, 因 为 它 将 代 16 码 抽 象 为 一 个 一 个 的 数 据 模 式, 即 将 C++ 这 样 的 通 用 语 言 增 加 DSL 词 汇, 让 它 成 为 DSL, 使 之 可 以 表 达 Class Cat,Class Pig, 阿 猪 阿 猫 阿 狗 诸 如 这 样 的 领 域 词 汇, 所 以 类 是 一 种 数 据 抽 象 模 式 ( 解 决 编 译 器 向 计 算 机 提 供 编 码 实 现 的 数 据 模 式 问 题, 把 词 汇 抽 象 为 语 言 的 一 级 first class 数 据, 即 UDT 17,ADT 这 里 面 D 的 意 义 ), 也 是 代 码 模 式 ( 解 决 对 于 语 言 的 代 码 抽 象 问 题, 计 算 机 操 作 什 么 样 的 代 码 来 影 响 这 些 逻 辑 和 数 据 ), 而 数 据 结 构 学 是 一 种 实 现 模 式, 而 不 是 代 码 模 式 数 据 结 构 学 与 代 码 结 构 学 的 区 别, 是 解 决 问 题 的 问 题 和 解 决 语 言 映 射 问 题 的 区 别, 两 者 在 不 同 抽 象 层 次, 这 就 是 为 什 么 数 据 结 构 可 以 用 任 何 语 言 可 以 用 基 本 流 程 实 现 也 可 以 C++ 的 类 来 实 现, 因 为 数 据 结 构 学 跟 它 如 何 用 一 种 代 码 结 构 来 抽 象 是 没 有 直 接 关 联 的, 前 者 是 如 何 解 决 问 题 的 抽 象 18 19 在 编 程 的 实 现 领 域, 从 来 最 终 都 是 过 程 编 程 即 Core C 的 那 些 指 使 计 算 机 如 何 工 作 程 序 级 体 现 的 设 计, 要 比 C++ 的 运 行 期 OO 在 源 码 级 体 现 设 计 来 得 明 显 16 系 统 编 程 大 量 用 到 处 理 字 段, 数 据 结 构, 变 量 API, 这 些 细 节 ( 因 为 历 史 上, 它 们 既 发 挥 系 统 开 发 的 任 务, 其 实 还 发 挥 系 统 实 现 的 任 务 ), 而 python 这 样 的 封 装 式 ( 这 也 就 是 脚 本 粘 合 的 意 思 ) 系 统 开 发 语 言, 只 提 倡 简 单 的 接 口 应 用 并 且, 它 对 于 win32 等 本 地 系 统, 是 unnative 的 关 系 17 说 到 UDT,user s data type, 说 明 它 跟 compiler s data type 对 应 18 是 一 种 脱 离 了 语 言 的 映 射, 即 我 在 1 中 谈 到 的 设 计 ), 后 者 是 代 码 问 题 ( 如 何 面 向 用 了 类 的 可 复 用 目 的 来 进 行 对 具 体 语 言 的 映 射, 即 我 在 2 中 谈 到 的 实 现, 人 类 的 话 动 中,2 往 往 处 在 1 的 未 端 19 系 统 问 题, 是 用 C 和 数 据 结 构, 算 法 来 解 决 问 题 的 那 一 类 典 范, 实 现 这 个 概 念 是 语 言 相 关 的, 用 C 的 语 句 和 语 法 写 代 码, 和 用 py 的 语 句 语 法 写 代 码, 二 者 在 各 自 所 属 的 语 言 内, 都 是 实 现, 我 们 把 语 言 内 除 了 抽 象 语 法 和 设 计 语 法 的 那 些 基 础 语 言 设 施 ( 基 本 类 型 语 义 和 流 程 控 制 ) 称 为 core c, 在 编 程 的 实 现 领 域, 从 来 都 是 Core c 的 那 些 逻 辑 Page 17 of 455

的 过 程 式 动 作 很 好 表 现 的 逻 辑 类 体 里 面 也 是, 任 何 抽 象 了 的 代 码 其 内 部 都 是, 所 以, 用 了 类, 只 是 将 面 向 过 程 抽 象 到 了 一 个 更 好 被 复 用 的 问 题, 并 没 有 将 如 何 实 现 这 层 抽 象 到 程 序 员 不 需 要 理 会, 所 以 对 于 不 懂 C 的 人 来 说, 即 使 它 能 很 好 理 解 C++ 的 OO, 也 做 不 了 什 么 好 的 C 程 序 20,OO 的 强 大 只 是 指 它 类 外 的 那 些 代 码 抽 象 模 式 C 和 C++ 是 一 脉 相 承 的, 遗 憾 的 是, 就 Better C 部 分 来 说,C++ 只 是 对 C 的 增 强 而 非 替 代, 如 果 他 离 开 了 Better C, 就 只 能 有 类 的 代 码 模 式 的 复 用 能 力, 却 无 法 保 留 C 的 强 大 而 直 接 的 实 现 能 力 ( 如 果 写 数 据 结 构 这 样 的 东 西 都 要 强 制 用 到 类, 那 么 除 非 有 必 要 为 复 用 作 目 的, 否 则 没 有 用 C++ 的 必 要 OO 提 供 的 最 本 质 的 意 义 和 作 用 有 二 1, 将 C++ 这 样 的 通 用 语 言 在 类 层 次 变 成 为 某 种 程 度 上 的 DSL,2 正 是 因 为 1 的 作 用 在 先, 所 以 普 通 个 人 也 可 以 开 发 复 杂 的 软 件 系 统 甚 至 是 数 据 结 构, 这 样 的 要 求 程 序 员 自 己 实 现 某 些 逻 辑 的 知 识.), 而 它 的 标 准 库 里 虽 然 也 有 与 原 C 一 样 的 那 些 模 板 实 现 的 库 但 是 却 是 抽 象 的 不 像 原 C 那 样 原 始 而 直 接 的, 业 界 一 开 始 是 用 C 的 方 式 而 非 STL 来 表 达 数 据 结 构, 所 以 一 个 C++ 程 序 员 ( 假 设 他 用 了 OO 来 实 现 数 据 结 构 ) 既 是 一 个 实 现 者, 也 是 一 个 设 计 者 因 为 它 既 抽 象 了 如 何 能 被 解 决 的 问 题, 又 抽 象 了 如 何 能 被 复 用 的 代 码 你 可 以 这 样 说,OO 这 样 的 代 码 抽 象, 正 是 为 了 抽 象 数 据 结 构 这 样 的 实 现 抽 象 和 数 据 抽 象. 使 你 在 复 用 层 次 上 可 以 直 接 使 用 现 成 的 数 据 结 构, 而 不 是 实 现 它 们 和 重 造 轮 子. 如 果 说 OS 是 抽 象 硬 件 为 软 件,OO 就 是 抽 象 数 据 结 构 这 样 的 实 现 问 题 为 复 用 问 题, 而 C 之 类 的 语 言,. 需 要 你 自 己 实 现 数 据 结 构. 因 为 它 的 标 准 并 不 允 许 你 直 接 使 用 它 们. 首 先,OO 将 用 这 门 语 言 进 行 开 发 的 工 作 发 展 成 了 ADT 和 UDT 编 程, 这 使 程 序 表 达 的 概 念 接 上 了 人 类 的 思 想 21, 而 程 序 也 能 处 理 这 种 表 示, 但 程 序 员 的 绝 大 部 分 工 作 在 于 定 义 一 个 DT 表 示 它 们 想 要 表 达 的 逻 辑, 而 且 提 倡 以 A Abstract 的 方 式, 但 实 际 上, 这 种 形 式 反 而 有 时 候 是 一 种 禁 锢, 第 一 是 因 为 把 任 何 实 体 和 概 念 都 封 装 为 语 言 的 DT, 固 然 做 到 了 统 一, 但 凡 事 巨 细 都 要 做 成 数 据, 这 很 烦 人, 第 二, 也 是 最 大 的 问 题, 程 序 员 之 间 的 水 平 参 差 不 齐, 他 们 定 义 出 来 的 DT 可 能 会 给 未 来 复 用 它 的 程 序 员 造 成 理 解 上 的 麻 烦, 并 不 是 所 有 人 对 于 某 个 东 西 都 有 一 致 的 封 装 及 理 解, 当 然, 这 些 问 题 也 是 语 言 间 不 同 的 22, 对 于 没 有 OO 的 语 言,C++ 的 Vector 数 组 固 然 比 C Plain Old 的 数 组 版 本 好 用, 对 于 拥 有 OO 的 语 言 间,Java 大 量 规 范 设 计 的 OO 库 比 C++ 只 有 一 个 STL 和 松 散 的 BOOST 要 好 当 然, 这 是 对 于 跟 用 C 来 表 达 这 些 概 比 较 来 说 的 Java 的 库 是 高 度 OO 经 过 设 过 的, 规 范 了 应 用, 相 比 C++ 语 言, 比 如 它 规 范 了 流 的 20 类 只 是 将 实 现 套 了 一 壳, 从 而 将 面 向 对 象 层 次 的 复 用 维 持 在 这 壳 外, 壳 的 里 面 却 不 行, 照 样 是 过 程 编 程 21 而 且 OO 继 承 是 为 了 重 用, 封 装 是 为 了 复 用, 等 等 22 泛 型 的 型 与 OO 的 型 Page 18 of 455

概 念,Java 的 OO 和 规 范 的 库 是 人 们 说 Java 比 其 它 语 言 易 的 二 个 方 面 只 要 熟 悉 这 层 抽 象 人 们 就 可 以 拿 来 编 程 但 是 虽 然 熟 悉 编 程 的 人 可 以 拿 来 用, 但 是 对 于 没 有 编 程 经 验 的 人 来 说, 它 照 样 跟 C 一 样 难 因 为 对 于 初 学 者, 是 根 本 没 有 经 验 可 言 的 而 一 切 照 样 都 是 经 过 了 大 量 铺 垫 的 只 是 存 在 多 少 上 的 差 别 因 此 Java 的 所 谓 易, 是 相 对 用 过 C 和 C++ 的 这 样 的 熟 悉 编 程 者 来 说 的 至 少 使 用 Java, 我 们 照 样 得 学 好 跟 C 一 样 的 数 据 结 构 知 识 就 拿 比 Java 更 抽 象 的 语 言 来 说 人 们 说 Ruby,Python 偏 向 于 人, 但 是 几 乎 所 有 的 语 言 都 脱 离 不 了 数 据 结 构,, 都 脱 离 不 了 底 层, 如 果 数 据 结 构 这 些 实 现 问 题 没 有 搞 清, 语 言 机 制 也 就 是 一 种 更 大 的 障 碍 了,Ruby 的 OO 只 是 指 类 的 那 一 方 面,,Ruby 的 IO, 数 据 结 构,Python 那 些 抽 象 的 语 言 机 制 比 如 Lamada,, 也 跟 其 它 语 言 和 语 言 机 制 是 一 样 的,,, 复 杂, 跟 底 层 相 关, 有 众 多 细 节. C 用 最 初 级 的 封 装 了 汇 编 的 逻 辑 写 应 用,C++ 用 类 来 封 装 逻 辑, 如 果 你 看 过 用 C 表 达 的 数 据 结 构 和 用 C++ 来 表 达 的 数 据 结 构 你 就 会 发 现 这 二 者 的 不 同 23, 有 时 看 出 来 样 子 普 通 的 一 堆 语 句, 你 根 本 不 知 道 它 想 表 达 什 么 上 下 文 数 据 结 构 逻 辑, 就 C 来 说, 虽 然 你 真 一 开 始 就 明 白 它 想 写 什 么 ( 比 如 有 文 档 的 情 况 下 ) 但 你 如 果 不 明 白 数 据 结 构 在 先 也 不 会 明 白 用 C 表 达 的 数 据 结 构 究 竟 在 表 达 什 么, 就 C++,Java 这 样 的 面 向 对 象 语 言 来 说, 似 乎 能 够 整 体 上 看 起 来 是 一 个 一 个 的 类, 显 得 意 义 明 了, 但 实 际 上 语 言 越 接 近 应 用 问 题 反 而 代 码 看 起 来 更 复 杂 24, 况 且,C 与 C++,Java,Python,Ruby 都 是 通 用 语 言, 现 实 生 活 是 很 复 杂 的 你 根 本 做 不 到 绝 对 靠 近 除 非 你 为 每 一 个 问 题 写 一 个 DSL 25 ( 比 如 像 SQL 语 言 那 种 专 门 处 理 数 据 库 逻 辑 的 语 言, 不 会 写 SQL 语 言 的 人 至 少 可 以 大 致 看 懂 其 意 思 ), 一 堆 有 机 类 有 时 反 而 难 于 让 人 看 出 它 想 表 达 什 么, 而 且 另 外 一 方 面, 类 里 同 也 是 函 数, 也 是 类 C 的 进 程 式 的 语 句 逻 辑 而 不 是 封 装 上 的 类 逻 辑, 这 样 问 题 又 回 到 C 的 那 些 问 题 了. 这 些 都 应 该 被 尽 量 在 语 言 被 设 计 时 就 避 免 而 不 是 人 脑 避 免, 当 一 门 语 言 复 杂 到 你 真 正 需 要 掌 握 这 些 才 能 编 程 的 时 候, 编 程 就 演 变 为 远 远 不 是 那 些 所 谓 的 简 单 复 用 的 工 作 了, 对 OO 的 真 正 理 解 涉 及 到 设 计, 涉 及 到 编 译 原 理 的 类 抽 象 本 质, 涉 及 到 它 如 何 以 层 级 的 方 式 来 抽 象 数 据 结 构 和 应 用 26, 虽 然 我 们 以 为 OO 语 言 就 是 简 单 的 复 用 语 言 但 它 们 明 显 做 得 不 够. 所 以, 语 法 绝 对 是 新 手 最 大 的 拦 路 虎, 没 有 一 门 语 言, 即 使 高 阶 抽 象 语 言 如 Python,Ruby, 也 没 有 把 语 言 细 节 弄 得 足 够 简 单, 使 得 你 可 以 不 管 任 何 语 法 产 生 式 的 机 制 去 直 接 构 建 你 的 应 用,, 在 不 损 耗 语 言 表 达 能 力 的 情 况 下, 而 且 RUBY 的 一 些 语 法 机 制 也 不 是 不 简 单. 需 要 你 有 深 厚 的 系 统 知 识 去 理 解 他 们, 比 如 协 程, 元 编 程 等 技 术, 在 接 确 过 一 点 23 还 比 如, 用 c 实 现 的 数 组 和 用 Python 内 置 的 List 实 现 的 数 组 24 因 为 C++ 代 码 本 身 虽 然 没 有 跟 C 一 样 跟 现 实 问 题 处 在 二 个 最 远 的 极 端, 但 你 看 懂 了 代 码 却 看 不 明 白 代 码 后 面 数 据 结 构 方 面 的 东 西, 这 是 因 为 你 还 得 理 解 数 据 结 构 这 些 非 语 言 的 东 西, 和 现 实 问 题 25 C 表 达 的 向 系 统 问 题 接 近 和 Java 表 达 的 向 现 实 靠 近 各 有 各 的 难 处, 作 为 一 门 工 业 语 言, 要 求 它 看 起 来 便 于 程 序 员 理 解 和 复 用,Java 这 方 面 是 做 得 不 错 的 而 C 肯 定 只 是 专 家 语 言, 在 本 书 后 来, 你 还 可 以 发 现 更 多 的 语 言 之 间 的 比 较, 比 如 本 书 第 二 部 分 第 三 章 语 言 之 争 26 OO 在 语 言 端 有 抽 象 事 实, 访 问 控 制, 复 用, 接 口, 代 码 和 数 据 抽 象 的 意 义, 在 应 用 端 有 OOAOOD 的 意 义 新 手 难 以 直 接 理 解 其 真 正 有 用 的 那 层 意 义 Page 19 of 455

27 C++ 人 的 眼 里, 丝 毫 不 比 C++ 简 单 在 数 据 结 构 与 OO 的 结 合 点 上, 比 如 ADT 表 达 数 据 结 构, 其 实 也 是 语 言 与 冯 氏 编 程 联 系 的 结 构, 冯 氏 上 的 编 程 提 倡 用 数 据 化 模 式 的 方 式 去 解 决 开 发 问 题, 冯 氏 上 的 语 言 用 ADT 来 表 达 抽 象 ADT 编 程 方 式 中 的 D, 这 是 一 种 设 计, 是 对 问 题 的 抽 象, 也 是 对 如 何 写 代 码 和 如 何 被 复 用 的 抽 象, 要 知 道, 你 想 要 明 白 STL 必 须 要 理 解 一 些 Adt 和 数 据 结 构 (Adt 是 类 型 抽 象, 数 据 结 构 抽 象 就 是 数 据 结 构 了 ) 的 东 西, 而 这 不 光 是 C 语 言 算 法 和 数 据 结 构 的 一 些 东 西, 而 且 还 是 某 种 语 言 本 身 设 计 方 面 的 东 西 和 程 序 语 言 机 制 方 面 的 东 西,C++ 并 没 有 完 全 做 到 Adt 完 全 的 抽 象 ( 没 有 抽 象 到 你 能 以 一 种 脱 离 底 层 完 全 不 同 的 眼 光 去 看 待 数 据 结 构 的 Adt),, 这 不 是 C++ 的 错 28,, 这 是 你 没 能 学 习 算 法 跟 数 据 结 构 的 错 冯 氏 系 统 中 的 要 素, 比 如, 异 常, 进 程 等 概 念 在 编 程 中 都 有 体 现 ( 这 就 是 系 统 编 程 要 解 决 的 问 题 ), 冯 氏 语 言 针 对 冯 氏 平 台 上 的 这 些 问 题 并 从 编 程 层 抽 象 它 们 以 进 行 解 决 ( 因 为 它 们 都 是 系 统 形 成 任 务 执 行 程 序, 建 立 出 错 机 制 以 更 好 运 行 程 序 的 逻 辑, 所 以 这 种 逻 辑 由 系 统 执 行 层 面 下 放 到 编 程 层 面, 给 程 序 员 以 配 置 这 些 逻 辑 的 时 机 或 为 了 更 好 调 试, 就 在 编 程 层 对 应 地 有 了 这 些 语 言 机 制 ), 于 是 可 以 把 它 们 做 到 语 言 内, 即 可 以 或 者 做 到 语 言 的 语 法 语 义 里, 或 仅 仅 做 到 buit-in lanuage 库 或 扩 展 库 里 都 是 无 穷 无 尽 复 杂 的 语 法 和 系 统 细 节 让 初 学 者 停 滞 了 他 们 学 习 一 门 语 言 的 脚 步, 在 你 开 始 满 怀 欢 喜 地 按 书 上 的 例 子 用 C++ 开 始 写 Hello World 时 却 发 现 少 引 用 了 一 个 头 文 件 之 类 的 问 题 折 腾 得 一 头 恼 怒 不 知 所 措, 却 在 花 了 很 长 一 段 时 间 之 后 才 发 现 这 是 C 系 29 语 言 的 分 离 编 译 机 制 在 作 怪 ( 这 就 是 那 些 被 称 为 语 言 陷 阱 的 东 西, 然 而 这 是 一 个 大 问 题, 虽 然 对 于 个 人 来 说 不 是, 但 对 于 软 工 这 个 多 人 共 工 的 人 类 活 动 来 说, 语 言 上 的 陷 阱 它 是 ), 这 根 本 上 是 因 为 我 们 依 赖 了 太 多 粗 糙 的 抽 象, 因 为 它 们 根 本 做 得 不 彻 底, 比 如, 你 依 然 得 学 习 算 法 跟 数 据 结 构 才 能 理 解 这 样 的 ADT. 而 且, 你 得 理 解 设 计, 放 大 到 整 个 人 的 层 面, 一 切 活 动 都 是 人 的, 随 着 编 程 发 展 起 来 的 那 些 历 史 抽 象 是 巨 大 的, 现 今 的 编 程 是 软 工, 抽 象 不 可 能 做 得 对 所 有 人 都 足 够 像, 比 如 那 些 不 懂 得 ADT 就 想 看 一 本 诸 如 数 据 结 构 JAVA 版 的 初 学 者 30 当 然, 能 举 出 的 实 例 和 联 系, 词 汇 远 远 不 止 这 些, 还 有 很 多 很 多 27 编 程 应 该 是 死 的, 然 而 它 被 做 得 太 灵 活 了, 这 就 是 它 的 错 28 C++ 的 错 就 在 于 : C++ 是 语 言, 作 为 解 决 问 题 的 工 具, 语 言 都 做 得 那 么 复 杂, 这 就 是 C++ 的 错 29 以 我 的 个 人 经 验 来 说,C 的 声 明 和 实 现 分 离 机 制 尝 试 解 决 的 问 题 比 他 没 有 提 供 这 种 机 制 带 来 的 问 题 少 得 多 30 编 程 难 就 难 在 对 其 的 切 入 困 难, 对 于 新 手 来 说, 他 得 同 时 了 解 语 言, 设 计, 才 能 看 懂 一 个 稍 微 中 等 的 程 序, 如 果 我 们 能 提 供 二 套 实 现 同 样 功 能 的 程 序, 一 个 用 过 程 式, 一 个 用 OO, 那 么 新 手 就 会 知 道, 所 谓 过 程,OO 只 是 程 序 表 达 手 段, 真 正 的 应 用 其 实 是 另 外 一 回 事, 而 他, 会 去 尝 试 了 解 编 程 界 对 问 题 本 身 的 抽 象, 也 会 主 动 去 学 习 OO, 过 程 式. 这 样 的 学 习 过 程 是 最 好 的. Page 20 of 455

1.1.1. 对 编 程 部 分 ( 第 二 部 分 1,3,4 章 ) 的 安 排 宜 交 叉 来 读 本 书!! 本 书 的 架 构 是 自 成 体 系 的, 除 掉 第 一 部 分 ( 书 前 附 录 ) 和 最 后 一 部 分 ( 书 后 附 录 ) 外, 中 间 三 部 分 是 主 体, 这 三 部 分 自 成 体 系, 其 中 的 每 一 章 的 每 一 节 都 专 注 于 一 个 主 题, 三 部 分 的 目 录 定 得 很 详 细, 它 们 是 对 应 并 自 我 解 释 的, 既 有 知 识 架 构, 也 有 学 习 方 法, 技 术 细 节 的 描 述, 下 面 一 一 讲 解 : 第 二 部 分 主 要 是 关 于 实 现 编 程 的 导 论, 这 一 部 分 过 后, 你 基 本 上 可 以 看 到 编 程 界 常 见 的 那 些 概 念 的 解 释 这 一 部 分 重 点 解 释 了 C 的 基 础 实 现 语 法, 故 谓 之 实 现 编 程, 第 三 部 分 专 注 于 抽 象 编 程, 描 述 了 Python,C++ 中 抽 象 的 实 现 语 法, 故 谓 之 抽 象 编 程, 如 果 说 第 一 部 分 是 基 础 实 现, 那 么 这 一 部 分 描 述 的 就 是 抽 象 实 现, 第 四 部 分 就 是 设 计 编 程, 因 为 任 何 语 句 都 是 一 种 设 计 语 法 ( 是 语 言 赋 于 你 以 流 程 控 制 的 手 段 写 程 序 的, 所 以 也 是 一 种 设 计 31 ), 如 果 说 整 个 第 二, 三 部 分 描 述 的 是 隐 式 的 设 计, 那 么 整 个 第 四 部 分 描 述 的 就 是 显 式 的 设 计, 独 立 于 语 言 的 那 些 大 的 设 计 手 段 第 二 部 分 实 现 篇 开 头 部 分 这 一 章 从 抽 象 角 度 解 释 了 PC 系 统 的 架 构, 首 先 指 出 整 个 PC 系 统 的 形 成 是 一 个 32 不 断 由 机 器 向 人 抽 象 的 结 果, 在 机 器 内 部, 先 是 图 灵 机 作 为 最 底 层 计 算 模 型, CPU 的 控 制 作 用 在 整 个 硬 件 内 部 是 最 高 的,CPU 和 主 存 协 作 ( 协 作 以 执 行 指 令 完 成 硬 件 级 的 冯 氏 计 算 ) 的 方 式 决 定 了 冯 氏 编 程 的 基 本 模 型 ( 顺 序 确 定 性 和 面 向 运 行 期 ),( 在 没 有 出 现 软 件 前 ) 这 个 意 义 上 的 编 程 是 硬 件 编 程 ( 描 述 硬 件 在 运 行 期 的 功 能 性 的 编 程 ), 我 们 选 取 了 最 有 代 表 性 的 实 模 式 下 的 汇 编 来 讲 解 了 硬 件 上 的 编 程 从 汇 编 语 言 如 何 寻 址 数 据 和 实 现 跳 转 这 二 大 方 面 谈 了 汇 编 语 言 和 用 它 来 对 硬 件 进 行 编 程 控 制 的 一 些 方 面, 比 如 IO, 并 指 明 这 是 编 程 的 一 种 初 级 形 态, 然 后 从 计 算 模 型 和 语 言 模 式 的 大 角 度 谈 了 这 种 以 机 器 功 能 为 目 标 和 以 指 令 编 程 为 手 段 的 功 能 性 编 程 组 合 的 限 制 谈 到 出 现 以 描 述 抽 象 的 软 件 功 能 为 目 标 (OS) 和 基 于 OS 上 的 更 高 级 的 以 语 法 编 程 为 手 段 的 新 编 程 组 合 方 式 其 实 是 一 种 历 史 必 要 在 引 出 作 为 编 程 的 重 要 主 体 :OS 的 时 候, 我 们 谈 了 32 位 CPU 为 了 支 持 更 强 大 的 执 行 功 能 而 区 别 于 它 在 实 模 式 下 的 迥 然 不 同 的 那 些 机 制 与 设 施 这 些 都 为 导 出 OS 提 供 了 必 要 的 基 础, 而 且, 我 们 还 由 此 导 出 了 机 器 级 执 行 路 径 和 OS 级 执 行 路 径 ( 即 OS 的 任 务 机 制 ) 的 分 别, 这 为 第 三 章 讲 解 编 程 的 另 外 一 个 主 体 因 31 程 序 设 计 语 言 的 各 种 语 句, 其 实 是 设 计, 比 如 四 种 结 构 化 语 句, 就 把 语 言 弄 成 了 结 构 化 语 言, 现 在 的 语 言, 都 不 可 能 不 是 结 构 化 的, 而 且 大 都 是 在 结 构 化 的 基 础 上 加 入 了 OO,, 所 以 又 成 了 OO 语 言 计 算 机 界 的 高 低 级 成 果 之 间, 往 往 不 是 相 互 替 代 的, 而 是 相 互 承 接 相 互 补 充 的 32 抽 象 其 实 是 统 领 整 个 计 算 机 领 域 和 编 程 领 域 的 Page 21 of 455

素 : 高 级 语 言 奠 定 了 基 础, 因 为 编 程 都 需 要 涉 及 到 某 种 执 行 宿 主 33, 无 论 在 硬 件 上 还 是 软 件 上, 针 对 汇 编 还 是 高 级 语 言 程 序, 冯 氏 系 统 最 迫 切 解 决 的 任 务 是 提 供 某 种 运 行 程 序 的 机 制 来 完 成 其 计 算 (computation) 的 本 质 34, 而 当 执 行 任 35 务 完 成 了 之 后, 用 OS 上 的 高 级 语 言 来 解 决 开 发 上 的 问 题, 它 同 时 解 决 了 程 序 36 产 生 ( 编 译 器 实 现 在 某 种 OS 上 ) 和 程 序 运 行 (OS 必 需 为 运 行 它 上 的 程 序 提 供 一 种 执 行 机 制 ) 的 事 而 高 级 语 言 产 生 于 这 种 OS 之 上, 也 反 过 来 服 务 于 对 这 种 OS 进 行 系 统 开 发 ( 系 统 语 言 与 系 统 开 发 ) 这 就 导 出 了 系 统 开 发 的 概 念 ( 对 高 级 语 言 程 序 所 处 的 运 行 环 境 OS 的 讲 解, 重 点 是 讲 解 程 序 如 何 如 何 在 OS 被 执 行 的 逻 辑, 即 OS 对 以 它 为 宿 主 的 程 序 提 供 任 务 机 制 的 具 体 内 容 ) 这 章 中 重 点 介 绍 了 CPU 与 内 存 在 冯 氏 系 统 中 的 管 理 作 用, 突 出 了 CPU 在 整 个 PC 中 的 控 制 作 用 及 这 种 作 用 导 致 下 的 冯 氏 模 型 对 开 发 的 影 响 CPU 的 那 些 沿 袭 到 些 语 言 机 制 的 特 性 比 如 异 常 与 跳 转, 信 号 37, 调 试 第 二 章 系 统 之 Linux 第 一 章 并 不 企 图 讲 解 整 个 汇 编 语 言 和 机 器 编 程, 更 不 是 针 对 某 个 平 台 进 行 讲 解, 比 如 intel 平 台, 而 只 是 为 了 给 读 者 呈 现 一 个 最 清 晰 的 跟 编 程 由 来 有 关 的 那 些 东 西 的 梗 概 ( 关 于 平 台 和 语 言 本 身 的 ) 对 应 地, 本 章 也 并 不 企 图 讲 解 整 个 Linux 平 台, 而 选 取 了 它 作 为 宿 主 执 行 高 级 语 言 程 序 ( 这 跟 讲 解 冯 氏 硬 件 体 系 只 讲 解 了 它 用 于 支 持 程 序 执 行 的 那 些 机 制 类 似, 即 关 于 平 台 的 ) 所 提 供 的 一 些 逻 辑 ( 这 些 逻 辑 跟 下 一 节 要 讲 解 的 高 级 语 言 编 程 38 有 关, 即 关 于 语 言 本 身 的 ) 比 如 任 务, 异 常, 调 试 (IO,GUI 这 样 的 东 西 放 到 系 统 编 程 那 一 章 再 详 细 讲 解, 而 且, 这 一 章 只 讲 解 基 本 的 任 务 机 制, 而 不 涉 及 到 多 任 务, 并 发 任 务 的 讲 解 请 同 样 参 见 系 统 编 程 那 一 章 ) 如 果 说 硬 件 级 的 执 行 路 径 是 一 段 电 器 化 的 recursived nested 堆 栈, 那 么 软 件 级 的 执 行 路 径, 即 任 务, 就 是 基 于 C 语 义 的 纯 软 件 逻 辑 了 它 提 供 了 进 一 步 的 比 机 33 我 们 现 今 的 语 言 都 是 某 种 运 行 期 语 言 运 行, 运 行, 必 然 关 乎 某 种 运 行 原 理 34 以 前 的 硬 件 机 器, 程 序 ( 这 个 时 代 标 准 意 义 上 的 程 序, 是 各 自 独 立 控 制 机 器 各 自 独 立 完 成 自 身 任 务 的 指 令 程 序 ) 直 接 在 机 器 内 运 行, 在 出 现 OS 后, 程 序 ( 此 时 标 准 意 义 上 的 程 序 是 用 户 程 序 ) 是 运 行 在 OS 上 的,OS 是 发 挥 原 来 硬 件 平 台 运 行 程 序 的 那 些 任 务, 而 且 它 还 将 这 个 工 作 做 得 更 远, 它 不 但 支 持 程 序 运 行, 而 且 是 个 多 面 手, 比 如 它 还 将 编 程 本 身 纳 入 计 算 机 内 部 OS 之 上 实 际 上, 系 统 内 部 并 不 一 定 需 要 一 个 编 译 系 统, 它 只 需 作 为 一 个 运 行 系 统 就 可 以, 因 为 编 程 本 身 是 并 不 一 定 要 做 到 计 算 机 内 部 的, 而 OS 的 功 能 仅 仅 是 运 行 程 序 就 可 以 了, 而 我 们 见 到 的 编 程 方 式, 都 是 直 接 在 计 算 机 里 使 用 编 译 器 来 完 成 的 35 这 就 是 编 程 的 本 质, 它 是 人 跟 计 算 机 系 统 交 流 的 手 段, 然 而 这 种 手 段 仅 被 我 们 用 来 实 现 和 控 制 机 器 本 身, 指 使 计 算 机 为 我 们 服 务 36 跟 纸 带 编 程 的 离 线 方 式 相 比, 编 译 器 让 编 程 做 进 了 PC 内 部, 而 且 解 决 这 种 程 序 如 何 在 这 种 OS 上 产 生 的 机 制, 和, 解 决 这 种 程 序 如 何 在 这 种 OS 上 运 行 的 机 制 都 做 到 了 PC 内 部 都 需 要 被 完 成, 前 者 是 编 译 器 的 事, 后 者 是 OS 的 事 37 如 果 说 中 断 机 制 是 CPU 与 硬 件 交 互 的 手 段, 中 断 使 硬 件 接 上 了 计 算 机, 那 么 信 号 就 是 进 程 间 通 讯 的 手 段, 它 使 进 程 能 相 互 协 调 完 成 任 务 实 际 上, 并 没 有 完 全 独 立 的 进 程, 进 程 本 来 就 不 是 被 设 计 成 为 自 冶 的, 只 是 它 们 的 任 务 空 间 自 冶 而 已 38 这 样 的 除 执 行 之 外 的 其 它 系 统 本 职 逻 辑, 把 它 们 与 任 务 分 开, 是 因 为 任 务 是 OS 最 迫 切 解 决 的 问 题, 而 且 是 针 对 编 程, 最 靠 近 跟 讲 解 编 程 有 关 的 东 西, 而 IO,GUI, 相 对 来 说, 是 可 以 慢 慢 来 讲 解 的 Page 22 of 455

器 执 行 路 径 更 好 的 封 装 和 更 强 大 的 抽 象 照 例 地, 我 们 先 是 从 抽 象 角 度 谈 了 OS 本 身 ( 这 里 的 OS 主 要 指 OS Kernel), 它 首 先 将 硬 件 抽 象 为 软 件 可 用 的 东 西 ( 硬 件 驱 动 层 ), 并 提 供 一 套 接 口 (Posix, 硬 件 抽 象 层 ), 在 OS 的 实 现 层 次 上, 任 务 机 制 的 提 供 是 居 首 的, 对 任 务 机 制 的 讲 解, 本 章 将 重 点 做 到 阐 明 其 中 对 系 统 编 程 有 意 义 的 那 些 细 节 在 OS 把 硬 件 问 题 转 换 为 一 组 软 件 问 题 之 后, 所 有 的 开 发 问 题 也 由 机 器 硬 平 台 上 的 指 令 编 程 转 化 到 基 于 OS 的 软 平 台 上 的 高 级 语 言 编 程 上 了 ( 所 以 系 统 问 题 39 和 语 言 问 题 从 来 都 是 不 分 家 的, 是 要 时 时 刻 刻 被 同 时 考 虑 进 开 发 问 题 的 ), 开 发 问 题 首 先 是 解 决 现 实 问 题 与 系 统 有 关 的 那 些 逻 辑, 即 系 统 编 程 逻 辑, 比 如, 编 程 可 以 如 何 运 用 native 40 的 任 务 机 制 产 生 新 进 程, 之 类, 之 类,,, 然 后 指 出 界 面 和 IO 都 是 系 统 编 程 中 的 表 现 抽 象 ( 这 是 由 程 序 的 现 实 模 型 决 定 的 ) 41, 另 外, 本 章 还 介 绍 了 操 作 系 统 与 语 言 的 关 系, 即 系 统 与 开 发 的 关 系 42, 从 而 进 而 提 出 了 虚 拟 机, 虚 拟 机 提 出 的 必 要 以 及 它 是 如 何 导 出 虚 拟 机 语 言 的, 虚 拟 机 是 为 了 成 就 语 言 的 这 一 章 从 抽 象 角 度 说 明 了 常 见 系 统 的 架 构 及 它 对 系 编 编 程 的 方 方 面 面. 重 点 是 系 统 的 设 计 对 于 系 统 编 程 的 影 响. 第 三 章 高 级 语 言 与 C 这 一 章 紧 密 承 接 上 一 章, 如 果 说 第 一 章, 第 二 章 讲 解 了 到 了 计 算 模 型 和 系 统 模 型, 那 么 对 于 编 程, 它 实 际 上 还 漏 掉 了 一 个 话 题, 即 高 级 语 言 本 身 43, 那 么 这 一 章 主 要 是 讲 解 编 译 原 理 和 C 语 言 的 ( 包 括 C 标 准 库 ) 即 基 于 计 算 模 式 和 系 统 模 式 之 上 的 语 言 模 型 和 开 发 模 型 编 译 原 理, 即 高 级 语 言 原 理, 它 解 释 了 很 多 语 言 被 设 计 出 来 的 原 理, 一 如 既 往 地, 在 这 一 章 中, 我 首 先 指 出 编 译 器 是 一 种 抽 象, 因 为 它 使 人 们 的 编 程 工 作 变 成 一 种 面 向 行 编 写 源 程 序 的 工 作 因 为 同 时 承 接 了 语 言 对 于 系 统 的 实 现 ( 编 译 后 端 : 高 级 语 言 的 程 序 在 软 件 系 统 上 实 现, 运 行, 而 针 对 目 标 硬 件 系 统 产 生 指 令, 所 以 需 要 运 行 时 系 统 和 代 码 生 成 逻 辑 ) 和 对 于 人 的 应 用 需 求 ( 语 言 的 语 法 定 义 和 设 计, 编 译 前 端 : 如 何 表 达 逻 辑, 怎 么 样 的 书 写 形 式 ), 所 以 编 译 器 其 实 只 是 一 个 底 层 工 作 者 ( 如 果 不 是 为 了 专 门 39 这 一 章 只 讲 系 统 问 题, 语 言 问 题 放 在 下 一 章 讲 解 40 如 果 系 统 是 用 C 来 实 现 的, 而 你 正 是 用 C 来 开 发, 并 调 用 系 统 用 C 语 义 实 现 的 那 些 功 能 和 API, 那 么 这 种 关 系 叫 native. 41 是 设 计 问 题 中 的 show 抽 象, 当 然 GUI 也 可 以 是 应 用 逻 辑 里 standalone 的 比 如 微 软 将 GUI 和 核 心 作 为 一 个 整 体 的 设 计 作 法 42 细 心 的 读 者 会 发 现 这 正 是 慢 慢 过 渡 到 第 三 章 对 语 言 的 专 门 介 绍 作 准 备 43 冯 氏 计 算 机 有 二 个 层 次, 系 统 层 次 和 开 发 层 次, 第 一, 二 章 讲 系 统 实 现 层 次 的 那 些 东 西, 那 么 这 一 章 就 讲 到 了 构 筑 在 系 统 实 现 层 上 面 的, 对 开 发 进 行 支 持 的 层 面, 开 发 层 面 最 重 要 的 问 题 当 然 是 语 言 问 题 本 身 Page 23 of 455

实 现 一 个 编 译 器 或 者 基 于 学 习 的 目 的 探 究 其 中 的 算 法 和 数 据 结 构 实 现, 而 是 为 了 更 好 继 续 学 习 编 程, 完 成 本 章 的 学 习 任 务, 那 么 本 书 就 不 鼓 励 初 学 者 找 这 方 面 的 材 料 细 读 ), 所 以 在 讲 解 中, 我 重 点 澄 清 了 一 些 至 关 重 要 的 概 念 而 又 不 深 入 到 太 多 编 译 原 理 的 技 术 细 节 而 我 们 在 本 章 的 讨 论 重 点 也 将 放 在 : 联 系 编 译 原 理 在 语 法 语 义 上 的 实 现 细 节, 进 行 对 某 一 种 具 体 的 高 级 语 言, 比 如 C, 的 种 种 语 言 设 施 的 讲 解, 比 如 C 的 类 型, 表 达 式, 语 句 逻 辑 的 底 层 语 法 语 义 支 持 44 本 章 首 先 指 出 冯 氏 下 编 程 语 言 其 实 都 是 以 类 型 抽 象 为 中 心 动 作 的 语 言, 类 型 及 编 译 器 关 于 类 型 的 那 些 推 理 判 断 逻 辑 ( 静 态 或 动 态 语 义 级 的 ), 是 决 定 使 用 这 门 语 言 的 程 序 员 用 什 么 载 体 来 表 达 逻 辑 的 手 段 ( 这 是 编 译 前 端 为 程 序 员 解 决 的 第 一 大 任 务 ),C 是,C++ 是,Java 也 是 然 后 再 详 细 介 绍 了 类 型 最 后 介 绍 了 脚 本 语 言 的 类 型 比 如 在 讲 解 对 编 译 后 端 与 编 译 前 端 的 区 别 时 我 指 出 语 言 语 法 机 制 只 是 抽 象, 它 可 以 抽 象 出 Rope, 还 可 以 是 其 它 东 西, 所 以 它 跟 设 计 有 关, 编 译 后 端 才 需 要 具 体 产 生 表 达 这 些 逻 辑 的 运 行 时, 运 行 时 是 对 数 据 数 据 在 宿 主 平 台 上 的 宿 主 语 言 C 实 现 而 指 令 数 据 主 要 用 OS 的 执 行 路 径 进 行 解 决 我 指 出 语 法 前 就 是 设 计, 一 旦 进 入 语 法, 还 是 设 计, 只 是 编 译 后, 就 进 入 了 运 行 期 了, 这 二 个 阶 段 是 有 本 质 差 别 的 解 释 语 言 与 编 译 语 言 的 差 别 不 在 于 它 们 何 时 出 现 了 编 译 跟 解 释 的 分 野, 而 是 在 于 它 们 对 运 行 期 和 设 计 期 孰 轻 孰 重, 这 种 差 别 使 我 们 可 以 明 白 一 些 东 西, 比 如 字 符 串 这 样 的 东 西 更 多 地 是 一 种 抽 象,C 语 言 可 以 有 指 针 来 实 现,C++ 可 以 有 模 板 来 实 现, 模 板 实 际 上 是 靠 近 设 计 期 的, 本 章 的 另 外 一 个 重 点 是 讲 解 对 C 语 言 的 学 习 ( 这 也 是 本 书 在 接 下 来 的 系 统 编 程 部 分 要 求 读 者 掌 握 的 能 力 ) 如 果 说 这 章 主 要 是 介 绍 C 语 言 的, 实 际 上 不 如 说 它 是 介 绍 整 个 过 程 式 语 言 的 首 先 介 绍 了 C 与 C++ 的 根 本 区 别 在 于 C++ 对 C 的 那 些 增 加 部 分, 而 非 对 C 的 保 留 部 分 即 C++ 的 OO 和 模 板 导 致 的 泛 型 机 制 这 二 种 机 制, 而 它 们 与 C 过 程 式 解 决 问 题 的 方 式 迥 然 不 同, 所 涉 及 到 的 语 言 抽 象 能 力 是 处 在 不 同 抽 象 层 次 的, C++ 相 对 更 靠 近 人,C 是 用 指 针, 过 程 语 法 机 制 这 些 底 层 来 呈 现 应 用 逻 辑 的, 比 如 字 符 串, 但 C++ 是 用 模 板,OO 等 代 码 抽 象 来 呈 现 的, 这 使 得 程 序 员 能 更 好 远 离 底 层 更 专 注 他 们 的 应 用, 这 是 这 二 门 语 言 的 根 本 区 别 所 在 然 后 指 出, 在 利 用 数 据 结 构 等 实 现 抽 象 来 解 决 现 实 问 题 时,C 好 像 只 有 这 么 一 种 手 段 ( 比 如 它 不 像 C++ 一 样 能 很 好 表 现 设 计 模 式 ), 而 其 它 第 四 代 语 言, 不 但 有 数 据 结 构 加 算 法 的 方 式, 而 且 还 有 更 强 大 的 语 言 内 抽 象 机 制, 比 如 代 理 闭 包 然 后 从 类 型 机 制 开 始, 浅 而 扼 要 地 谈 了 C 语 言 各 个 方 面 的 东 西 当 然, 这 一 章 44 用 栈 式 机 的 执 行 路 径 的 眼 光 来 看, 类 型 就 是 出 现 在 执 行 路 径 中 的 数 据 ( 的 模 板 ), 但 是 因 为 静 态 化 的 东 西, 包 括 数 据 和 代 码, 都 是 数 据, 所 以 一 般 仅 把 子 程 序 作 为 跟 数 据 对 立 的 代 码 来 看 指 令 跟 代 码 的 区 别 就 在 这 里 Page 24 of 455

作 为 介 绍 C 语 言 的 章 节, 重 点 介 绍 了 指 针, 并 指 出 指 针 是 C 语 言 的 一 种 抽 象 机 制, 而 不 仅 仅 是 作 为 操 作 底 层 的 工 具, 这 就 将 指 针 上 升 为 C 语 言 的 一 种 语 法 机 制, 把 它 上 升 为 跟 OO 这 样 的 第 四 代 语 法 机 制 的 范 畴 而 不 仅 仅 指 针 就 是 一 个 操 作 符, 相 比 C 语 言 其 它 语 法 机 制 是 固 定 的, 而 指 针 是 可 以 加 以 丰 富 变 形 形 成 其 它 语 法 抽 象 的 这 样 就 抓 住 了 其 本 质, 第 四 章 数 据 结 构 对 于 一 门 语 言, 程 序 员 要 学 到 什 么 程 度 才 可 以 胜 任 一 份 工 作 呢? 前 面 讲 了 很 大 一 部 分, 那 么 这 里 正 是 复 盖 了 用 一 门 语 言 胜 任 编 程 工 作 所 需 能 力 的 方 面 数 据 结 构 篇 根 据 我 们 在 前 面 最 小 内 核 语 言 C 那 一 章 提 到 的, 冯 氏 顺 序 式 语 言 的 本 质 就 是 编 码 更 抽 象 的 数 据 和 提 供 程 序 员 能 用 的 处 理 数 据 的 高 级 方 法, 写 程 序 的 过 程 就 是 操 作 这 二 个 东 西,, 第 三 部 分 抽 象 篇 第 二 部 分 开 头 部 分 这 一 章 从 语 言 的 选 择 说 起, 力 求 澄 清 初 学 者 对 语 言 选 择 方 面 的 疑 惑, 从 现 实 情 况 这 个 根 本 的 角 度, 首 先 说 明 了 语 言 本 不 存 在 功 能 上 的 差 别, 语 言 功 能 的 差 别 只 是 它 们 各 自 的 表 达 能 力 范 围 内 能 解 决 的 不 同 问 题 而 已 所 以 语 言 的 选 择 根 本 是 受 应 用 左 右 的 对 各 种 语 言 的 优 劣 比 较 只 是 在 有 限 的 范 围 做 的 狭 隘 的 事 情 接 着 介 绍 了 C,C++ 语 言 团 队 之 间 的 一 些 矛 盾 指 出 矛 盾 的 根 本 是 源 于 语 言 间 的 过 度 抽 象 使 得 从 C 抽 象 过 渡 到 C++ 抽 象 的 各 个 阶 层 的 人 群 大 为 存 在 这 揭 示 了 系 统 编 程 和 系 统 编 程 语 言 的 某 些 弱 点 它 们 都 处 在 不 成 标 准 过 于 低 级 的 平 台 上 再 者, 提 出 了 第 四 代 语 言 Java, 指 出 C,C++ 没 有 被 流 行 的 Web 作 为 开 发 语 言, 是 因 为 使 用 C 开 发 规 模 跟 不 上, 而 C++ 又 存 在 太 多 语 言 陷 阱, 它 的 库 又 没 有 及 时 跟 上 历 史 发 展 就 系 统 编 程 的 眼 光 来 看, 一 门 语 言 的 I/O 最 能 体 现 它 开 发 Web 的 能 力, 然 而, 语 言 对 应 用 的 适 配 只 是 狭 隘 的 一 面,Java 虽 然 有 很 强 的 I/O 能 力 但 并 不 是 它 决 定 了 工 业 界 采 用 了 它, 其 实 反 过 来 正 是 Web 开 发 促 成 的 Java 的 流 行 这 一 切 的 一 切,( 不 止 是 为 了 澄 清 初 学 者 对 语 言 选 择 方 面 的 疑 惑 ) 其 实 更 主 要 的 目 的 是 为 了 导 出 新 的 话 题 : 语 言 选 择 的 问 题 首 先 是 是 一 个 跟 设 计 有 关 的 问 题 ( 本 书 到 此 为 止, 整 个 第 一 部 分 只 是 讲 解 到 了 编 程 主 体 和 客 体 中 的 系 统 和 语 言, 应 用 中 的 系 统 编 程 部 分, 这 一 部 分 的 使 命 就 是 导 出 其 它 编 程 中 的 主 体 因 素 ) 为 连 惯 起 见, 本 章 接 着 本 书 开 头 ( 和 第 一 部 分 结 束 时 遗 留 的 话 题 ) 谈 到 的 什 么 是 Page 25 of 455

编 程, 编 程 的 几 个 层 次 话 题, 继 续 往 下 面 推 导 : 编 程 不 但 跟 系 统 和 语 言, 系 统 应 用 有 关, 在 它 上 面 其 实 是 受 人 和 设 计 主 导 的 ( 这 就 导 出 了 编 程 中 的 主 体 : 人 和 应 用 ), 如 果 仅 从 我 们 从 本 书 第 一 部 分 获 到 的 能 力 ------ 系 统 编 程 的 狭 隘 眼 光 看, 我 们 会 看 不 到 编 程 问 题 的 全 部, 这 是 因 为, 系 统 编 程 太 专 注 于 机 器 和 实 现, 它 降 低 了 人 的 主 观 作 用 整 个 编 程 其 实 是 一 个 系 统 和 语 言 占 主 体 的 世 界 而 不 是 应 用 和 人 这 种 现 象 需 要 出 现 某 种 根 本 的 改 观, 比 如 当 出 现 某 种 深 克 不 同 于 系 统 实 现 的 现 象 时 ( 最 大 的 事 件 莫 过 于 时 代 的 变 迁,Web 开 发 需 要 新 的 一 致 的 平 台, 更 高 级 和 抽 象 的 语 法 机 制 ), 编 程 就 需 要 出 现 新 的 因 素 比 如 重 新 设 计, 不 种 设 计 不 只 是 对 于 编 程 本 身 的 设 计, 而 且 可 能 是 对 平 台 和 语 言, 以 及 编 程 理 念 的 设 计 而 所 有 的 问 题, 包 括 进 行 什 么 样 的 编 程, 选 用 什 么 样 的 系 统, 发 展 什 么 样 的 语 言, 都 是 首 先 属 于 人 的 设 计, 基 于 某 种 特 殊 或 普 遍 的 人 类 需 求 设 计 的 第 一 步 就 是 抽 象 第 七 章 虚 拟 机 平 台 硬 件,OS 和 网 络 是 三 个 平 台, 网 络 提 倡 并 发 和 分 布 计 算, 必 须 把 握 软 工 界 的 一 些 新 潮 流, 现 在 的 开 发 都 建 交 在 虚 拟 机 等 高 级 开 发 平 台 上, 而 不 再 是 CPU+OS 上, 而 且 提 倡 脚 本 开 发 45.WEB 编 程 越 来 越 流 行 了, 这 就 是 网 络 上 面 的 一 层 抽 象 (internet 是 internet,web 是 web), 编 译 原 理 其 实 有 很 多 方 面 跟 汇 编 有 关, 这 就 是 跟 机 器 编 程 有 关,, 平 台 就 是 OS,,OS 就 是 一 个 编 程 层, 就 像 脚 本 机 一 样,,,, 我 们 native 编 程 是 对 本 地 编 程, 这 里 的 本 地 就 是 指 OS,, 而 虚 拟 机 是 可 以 不 需 要 操 作 系 统 就 能 运 行 程 序 代 码 的 层,, 这 是 另 外 一 个 软 件 运 行 环 境 总 结 起 来,,, 这 机 器, 平 台 与 网 络 讲 解 了 很 多 软 件 运 行 环 境, 特 别 是 我 在 编 译 原 理 讲 解 中 涉 及 到 的 机 器 部 分, 是 最 底 层 的 软 件 运 行 环 境, 对 设 计 虚 拟 机 也 是 必 须 要 用 到 的 知 识,, 对 解 释 OS 的 实 现 又 是 必 须 用 到 的 知 识, 这 三 个 环 境 是 天 然 不 可 分 割 的,, 站 在 现 今 天 的 软 件 开 发 的 角 度 来 看 第 八 章 过 程 抽 象 等 这 一 章 重 点 介 绍 了 Python 中 的 泛 过 程, 闭 包, 欠 套 函 数, 等,C++ 中 的 重 载,inline 第 九 章 代 码 与 数 据 抽 象 这 一 章 重 点 介 绍 了 C++,Python 中 的 类 45 现 在 的 开 发 是 基 于 框 架 的 开 发, 现 在 的 web 编 程, 提 出 了 一 系 列 概 念,uml,xp, 重 构, 分 发,setup,make,debug, 版 本 控 制, 测 试, 当 然 这 些 都 基 本 上 是 构 建 在 OO 之 上 的, 参 见 < 代 码 阅 读 方 法 与 实 践 > Page 26 of 455

的 ) ( 注 意, 这 里 只 重 点 讲 到 类 而 不 是 OO,OO 作 为 设 计, 是 应 该 出 现 在 第 四 部 分 第 十 章 设 计 时 代 真 的 不 同 了!! 以 前 是 手 工 作 坊 时 代, 现 在 是 软 工 时 代! 在 这 个 时 代, 人 ( 更 确 切 地 说 是 一 群 人 ) 作 为 编 程 的 主 体 作 用 深 克 被 反 映 到 编 程 的 方 方 面 面, 形 成 了 大 量 加 入 了 设 计 因 素 的 编 程 方 式 而 设 计 的 第 一 步, 首 先 是 进 行 某 种 抽 象 ( 对 系 统 编 程 时 代 的 执 行 系 统, 语 言 系 统, 设 计 系 统 各 个 层 面 的 大 颠 覆 ) 在 这 一 章 中, 我 会 写 跟 软 工 密 切 相 关 的 思 想 和 学 习 IT 知 识, 以 及 任 何 一 切 知 识 通 用 的 思 想,, 比 如 抽 象 啊, 维 度 啊, 范 式 啊, 这 对 解 释 以 后 OO, 都 是 必 须 的 基 础, 软 件 工 程 的 相 关 概 念, 是 编 程 入 门 的 关 键, 对 他 们 的 理 解 是 必 须 的, 才 能 走 出 为 程 序 而 程 序 的 狭 小 境 界,, 在 一 个 更 广 阔 的 思 维 空 间 里 进 行 考 虑 问 题 和 编 程 如 果 说 系 统 是 单 独 讲 解 软 件 环 境, 语 言 是 讲 解 语 言, 那 么 这 一 章 这 就 是 讲 解 软 件, 语 言, 应 用, 与 人 的 关 系 了, 一 言 以 概 之, 这 就 是 软 工, 在 这 个 大 活 动 中, 涉 及 到 如 何 对 多 人 合 作 的 真 正 工 程 级 的 大 系 统 大 问 题 的 解 法, 需 要 考 虑 软 件 作 为 产 品 的 可 扩 展 性 的 时 候,, 就 需 要 提 出 设 计 和 代 码 结 构 这 二 个 字 眼 和 关 于 它 们 的 一 系 列 的 知 识, 这 根 本 上 是 基 于 软 工 是 为 了 让 软 件 产 品 适 合 应 用 这 个 需 求 而 来 的, 软 件 写 出 来 的 作 为 产 品 的 特 质 ( 即 基 于 设 计 上 的 那 些 考 虑, 界 面 与 逻 辑 分 开 啊, 数 据 分 开 啊 什 么 的 ),, 这 就 是 说 构 架 不 是 功 能 的 要 求, 但 却 是 工 程 的 要 求 ( 这 里 的 构 架 是 指 代 码 抽 象, 注 意 这 几 个 字 ) 而 这 是 很 多 书 本 都 忽 略 的 由 于 方 法 论 是 属 于 设 计 的, 所 以 放 这 里 讨 论 敏 捷 开 发 的 一 些 东 西 ( 设 计 首 先 是 一 种 对 人 类 活 动 的 设 计 ) 手 工 作 坊 的 写 软 件 时 代,, 就 是 编 程 = 数 据 加 算 法 ( 这 句 话 过 时 了, 因 为 过 程 时 代, 只 有 Core C 的 那 些 代 码 逻 辑, 而 现 在 代 码 逻 辑 增 多 了, 这 句 话 应 改 成 编 程 = 数 据 加 算 法 + 代 码 逻 辑 46 ), 现 在 软 工 时 代, 编 程 = 数 据 加 算 法 加 架 构, 其 实 算 法 是 比 架 构 更 广 的 概 念, 它 侧 重 于 指 " 功 能, 解 决 问 题 ", 而 架 构 侧 重 指 " 扩 展 功 能, 扩 展 源 程 序 ", 但 这 二 者 都 是 设 计 考 虑 的 范 围,, 说 明 白 点 设 计 就 是 编 码 前 加 编 码 后 的 总 称, 设 计 即 源 程 序, 源 程 序 是 最 终 体 现,,, 这 也 是 一 切 高 级 语 言 在 机 器 端 的 实 现 形 式, 一 种 语 言 要 最 终 被 体 现 成 数 据 加 语 句 的 形 式, 那 么 创 造 这 种 形 式 的 语 言 本 身 也 要 提 供 这 二 重 机 制,, 这 二 重 机 制 就 是 数 据 加 操 作 数 据 的 方 式, 数 据 由 原 来 的 数 学, 字 母, 这 些 计 算 机 硬 件 能 直 接 处 理 的 东 西, 变 成 了 OO 的 对 象, 而 处 理 数 据 的 方 法, 则 变 成 了 架 构 加 算 法 第 四 部 分 设 计 篇 第 九 章 设 计 模 式 46 但 这 并 不 以 降 低 数 据 结 构, 算 法 在 编 程 中 的 地 位 以 前 提, 实 际 上, 作 为 基 础 的 数 据 结 构 和 算 法, 在 它 们 上 面 发 展 了 新 的 代 码 逻 辑, 这 反 而 表 明, 数 据 结 构 和 算 法 更 重 要 了 Page 27 of 455

有 人 说 根 本 不 需 要 设 计 模 式, 有 人 说 设 计 模 式 是 C++ 程 序 的 补 丁,, 这 话 说 错 也 可 以, 说 没 错 也 可 以,, 这 是 因 为 狭 隘 设 计 模 式 之 说 就 是 为 C++,JAVA 这 样 的 静 态 语 言 作 补 丁 ( 重 构 时 可 以 很 好 地 改 变 当 初 的 设 计, 静 态 语 言 不 比 Python,Ruby 这 样 的 动 态 语 言 更 好 地 表 现 设 计 模 式, 所 以 它 是 从 OO 一 步 一 步 发 展 而 来 的, 比 如 C++ 就 用 接 口 ),, 而 广 泛 的 设 计, 包 括 设 计 模 式 所 提 出 的 那 些 东 西, 广 泛 的 设 计 是 一 种 意 识 内 你 要 明 白 它 是 广 义 设 计,, 并 主 动 引 用 设 计 模 式 来 进 行 设 计 的 动 作 所 以 并 不 是 一 种 补 丁 而 且, 其 实 C++ 和 J2EE 作 为 编 译 语 言, 是 静 态 系 统 语 言, 因 此 它 们 往 往 用 接 口 机 制 去 表 达 设 计 模 式 的 出 台,,, 而 动 态 语 言 在 表 达 设 计 模 式 方 面 显 得 更 灵 活, 因 为 它 是 运 行 期 语 言, 类 作 为 数 据 结 构 的 定 义 在 运 行 期 可 以 被 动 态 改 变,, 根 本 就 没 有 类 型 声 明 这 种 东 西, 所 以 不 能 接 口 继 承, 只 能 实 现 继 承, 所 以 在 实 现 设 计 模 式 方 面 跟 静 态 语 言 有 别. 动 态 语 言 往 往 更 高 阶, 不 需 要 程 序 员 作 编 译 期 cast 等 c++,java 这 样 的 类 型 语 言 的 事, 甚 至 直 接 谈 化 了 整 个 类 型, 而 我 们 知 道, 编 译 型 语 言 C++ 只 能 提 供 编 译 期 动 态 以 实 作 出 设 计 模 式, 类 型 抽 象, 比 如 接 口, 本 身 就 是 一 门 编 译 语 言 强 大 的 设 计 手 段 之 一, 是 冯 氏 语 言 以 类 型 设 计 作 为 设 计 的 思 想 的 体 现, 而 动 态 语 言 由 于 它 的 性 质 不 要 做 这 样 的 事 情, 它 提 倡 只 利 用 值 类 型, 去 设 计 应 用, 象 ) ( 这 一 部 分 正 是 复 盖 了 用 Python 胜 任 编 程 工 作 所 需 能 力 的 对 问 题 领 域 方 面 的 抽 以 上 我 说 的 都 是 要 懂 得 的 部 分, 一 个 程 序 员 只 有 懂 得 这 些, 才 算 是 理 解 了 软 件 和 软 工 的 常 识, 否 则 一 味 钻 细 节, 什 么 都 不 知 道, 处 于 一 种 很 可 怜 的 未 开 化 状 态,, 更 要 命 的 是, 不 知 道 何 为 设 计, 甚 至 对 这 些 没 有 意 识, 也 就 不 可 能 主 动 领 会 别 人 代 码 或 库 中 的 设 计 之 巧,, 仅 满 足 于 了 解 代 码 本 身 技 巧 性 和 语 言 细 节 的 人 是 不 行 的, 这 样 的 人, 由 于 一 开 始 不 考 虑 软 件 作 为 产 品 的 特 性,, 最 后 写 出 来 的 东 西 生 命 力 就 不 怎 么 样, 而 且 对 应 用, 对 设 计 的 理 解, 也 是 你 理 解 其 它 编 程 知 识 的 前 提, 也 是 编 程 实 现 的 目 标 ( 出 发 点 和 终 点 ). 身 处 编 程 界, 理 清 概 念 和 事 物 之 间 的 联 系 很 重 要, 一 个 程 序 员 有 他 自 己 的 知 识 网 络 是 很 重 要 的 47, 当 你 在 学 习 的 时 候, 要 主 动 意 识 概 念 和 其 它 概 念 之 间 的 联 络, 然 后 去 构 建 这 种 关 系 之 间 的 系 统, 这 样 你 才 能 有 效 地 继 续 学 习,, 否 则 迷 茫 于 庞 大 的 细 节,, 巨 细 不 分, 也 就 不 能 界 定 概 念 之 间 是 什 么 关 系,,, 这 是 十 分 造 孽 的 比 如 系 统 这 一 章, 为 什 么 要 出 现 编 程 语 言,, 我 们 看 到 的 编 程 语 言 到 底 是 什 么 东 西 它 们 下 面 是 基 于 什 么 离 散 数 学 构 建 的 抽 象 我 把 一 切 功 能 的 达 成 的 中 间 层,, 无 论 是 软 件, 还 是 硬 件, 都 看 成 抽 象,( 正 如 本 书 反 复 强 调 和 提 到 的, 只 要 在 学 习 中 把 握 抽 象 这 条 主 线, 我 们 就 抓 住 了 对 学 习 编 程 最 为 有 利 的 根 本 ) 我 们 今 天 能 看 到 编 程 语 言 为 什 么 要 求 我 们 用 语 法,, 而 不 是 直 接 在 语 法 树 上 写 程 序 为 什 么 Lisp 语 言 就 能 直 接 在 抽 象 语 法 树 上 写 程 序, 而 不 需 要 一 个 语 法,,, 为 什 么 Yacc 是 一 个 没 有 语 法 的 词 法 编 辑 器 解 释 47 这 样, 一 个 程 序 员 才 能 更 好 地 学 习 新 知 识 Page 28 of 455