English++ 计算机专业英语教材
来源:波兰雅盖隆大学(Jagiellonian University)语言中心 项目负责人:Monika Stawicka 性质:免费非商业英语教材,收录13篇计算机科学领域英文文章,配词汇表、练习题和波兰语摘要 价值定位:不是英语学习笔记,而是通过英语教材形式保存的一批经典技术文章精选
全书概览
结构
| 章节 | 内容 | 页码 |
|---|---|---|
| 1. Reading Chapter | 13篇技术文章(阅读材料) | 13 |
| 2. Listening Chapter | 听力材料(配CD,本书不含音频) | 141 |
| 3. Presentation Chapter | 演讲技巧 | 177 |
| 4. Appendixes | 数学术语、公式、希腊字母表 | 191 |
| 5. Glossary | 全书词汇表 | 201 |
知识价值评估
- 高价值文章:Martin Fowler 两篇(软件模式、演化式数据库设计)、Linux 内核解剖、软件开发流程
- 中等价值:计算机历史、网络战、Quake 引擎、视频流
- 英语学习属性强、技术密度一般:其余科普类文章
- 听力和演讲章节因缺少音频/偏重语言学习,技术价值有限
核心文章精读
1. Writing Software Patterns(Martin Fowler)
核心观点:模式本质上是一种**知识分块(chunking)**的方式,而不仅仅是”某个上下文下问题的解决方案”。
模式的关键属性
- 命名解决方案(Named Solution):模式必须给解决方案一个具体的名字,让这个名字进入行业词汇。当你说”Decorator”或”Identity Map”,专业人士应该立刻明白你的意思。
- 可复用性(Recurrence):解决方案必须能在很多不同场景下应用。一次性的解决方案不值得命名。
- 解决方案的内核(Core of the Solution):两个表面上完全不同的解决方案,可能共享同一个深层的核心。发现这个核心是模式工作最大的智力挑战。
- 例子:两个项目——一个用 Java 类生成 HTML,一个用 XSLT 转换 XML→HTML——表面不同,但核心都是”将转换分为两步:逻辑页面 + 物理页面”,即 Two Step View 模式。
模式 vs 食谱(Recipes)
| 维度 | 模式(Patterns) | 食谱(Recipes) |
|---|---|---|
| 关注点 | 解决方案 | 问题 |
| 通用性 | 更通用的概念 | 绑定特定语言/平台 |
| 目标 | 建立行业词汇 | 解决具体问题 |
关键洞察:模式最大的价值不在于给专家提供新知识——专家通常早就知道这些”普通的解决方案”。模式的价值在于组织和命名这些普通方案,让人们更容易传递和使用。正如 PLoPD 1 所说:“项目失败往往不是因为缺乏最新技术,而是因为缺乏普通的解决方案。“
模式的局限
- 模式不是万能的,它只是一种沟通媒介
- 有时叙事性文本比模式列表更有效
- Fowler 自己的书里也是模式和叙述混合使用
- 实践和熟悉度能帮你判断何时适用
2. Evolutionary Database Design(Martin Fowler & Pramod Sadalage, 2003)
这是一篇里程碑式的文章,首次系统阐述了如何在敏捷开发中让数据库设计随应用一起演化。ThoughtWorks 在一个 100 人、200+ 表、50 万行代码的大型项目(Atlas)中验证了这些方法。
核心思想
传统观念认为数据库设计必须预先规划——后期改 schema 会导致大面积破坏,部署后改 schema 更是痛苦的数据迁移。Fowler 和 Sadalage 证明:通过一套实践,数据库也可以像代码一样演化。
关键实践
-
DBA 与开发者紧密协作
- 不是通过正式会议和文档沟通,而是日常随时交流
- DBA 要平易近人、坐在开发者附近
- 开发者做任何可能影响 schema 的任务都要找 DBA 商量
- DBA 有全局数据视图,开发者知道功能需求
-
每人一个独立数据库实例
- 像代码沙箱一样,数据库也需要沙箱
- 开发者可以自由实验,不影响他人
- 很多 DBA 认为多实例难以管理,但实践中管理上百个实例很容易
- 关键是要有像操作文件一样操作数据库的工具
-
频繁集成到共享主库
- 每个开发者每天至少集成一次
- 流程:从 master 复制 → 本地修改实验 → 找 DBA 评审 → 应用到 master
- 简单变更(如加列)开发者自己决定,复杂变更找 DBA 讨论
-
数据库重构(Database Refactoring)
- 像代码重构一样,对数据库 schema 进行小步、行为保持的变更
- 每一次 schema 变更都作为一个独立的、可自动化的 refactoring
-
自动化构建与测试
- 数据库变更必须纳入持续集成
- 有了自动化测试才能放心改 schema
-
数据字典(Data Dictionary)
- 记录数据库中所有表和列的信息
- 帮助开发者检查某列是否已存在,避免重复
局限(文章坦诚指出)
- 针对的是单应用数据库,不是多系统集成数据库
- 不要求生产数据库 7×24 小时可用
- 但这些局限并非本质上不可解决
关联:重构-改善既有代码的设计(代码层面的重构)→ 数据库层面的重构是同样的思想延伸
3. Anatomy of the Linux Kernel(Tim Jones, 2007, IBM developerWorks)
Linux 内核超过 600 万行代码,是一个庞大但组织良好的系统。本文从 3 万英尺高度俯瞰其架构。
历史脉络
1950s: GMOS (IBM 701), FMS (IBM 709) — 最早的操作系统
1960s: Multics (MIT + GE + AT&T) — 实验性分时系统
1970: Unics (AT&T Bell Labs) → Unix,C 语言同步诞生
1980s: MINIX (Andrew Tanenbaum) — 教学用微内核 Unix
1991: Linux (Linus Torvalds) — 受 MINIX 启发
└─ 关键决策:采用 GNU GPL,保护内核免受商业剥削
内核主要子系统
- 进程管理(Process Management) — 进程创建、调度、销毁
- 内存管理(Memory Management) — 虚拟内存、物理内存管理、页面置换
- 文件系统 / VFS — 虚拟文件系统抽象层,统一不同文件系统接口
- 网络栈(Network Stack) — TCP/IP 协议栈实现
- 设备驱动层(Drivers) — 各类硬件驱动(内核代码量最大的部分)
- 系统调用接口(System Call Interface) — 用户空间与内核的接口
关键概念
- VFS(Virtual File System):在具体文件系统之上的抽象层,让 Linux 支持几十种不同文件系统
- Buffer Cache:缓存磁盘数据,减少 I/O 操作
- GPL 许可:Linux 成功的关键因素之一——防止商业闭源,确保社区贡献回流
4. Software Development Process(Wikipedia)
过程模型与标准
| 模型/标准 | 描述 |
|---|---|
| CMM / CMMI | 能力成熟度模型,评估组织遵循流程的程度(不评估软件质量) |
| ISO 12207 | 软件生命周期选择、实施、监控的国际标准 |
| ISO 9000 | 流程文档化的质量管理标准 |
| ISO 15504 (SPICE) | 软件过程评估框架,类似 CMM 但更清晰 |
| Six Sigma | 六西格玛,制造业导向,在软件领域适用性存疑(目标:百万机会 3.4 缺陷) |
软件开发主要步骤
-
领域分析(Domain Analysis):了解业务领域,学会用领域语言和专家对话。是需求收集的前奏。
经典引用:“我知道你相信你听懂了你认为我说的话,但我不确定你是否意识到,你听到的并不是我的本意。”
-
软件要素分析 / 需求提取:最重要也最难的步骤。客户知道自己想要什么,但不知道软件该做什么。需求常常不完整、模糊、矛盾。演示可运行代码是降低需求错误风险的有效方法。
-
规格说明(Specification):精确描述软件。实践中大多是为已开发的软件写的(理解和微调)。安全关键系统会先写规格。外部接口的规格说明最重要,因为接口必须稳定。
-
软件架构(Software Architecture):系统的高层抽象表示。不仅要满足当前需求,还要考虑未来需求。包括系统间接口、与硬件/OS 的接口。
-
实现(编码):最显眼但不一定是工作量最大的部分。
-
测试:尤其是不同工程师写的代码之间的集成测试。
-
文档:常被忽视但对未来维护至关重要。内部设计文档 + 外部接口文档(后者更重要)。
5. 其他文章速读
History of Computers(Roderick Hames, 1998)
- 从 Pascal 加法机、Babbage 分析机、Hollerith 制表机,到 Mark I、ENIAC
- ENIAC:第一台全电子计算机,18000 个电子管,重 30 吨
- 二进制存储的核心优势:用电路的开/关表示 0/1,简单可靠
- 冯·诺依曼架构:存储程序思想
IloveYou Worm(2000 年维基百科条目)
- 2000 年 5 月爆发的经典蠕虫病毒,通过邮件传播
- 伪装成”情书”(LOVE-LETTER-FOR-YOU.TXT.vbs),利用 Windows 默认隐藏扩展名
- 造成估计 55-87 亿美元损失
- 启示:社会工程学是最大的安全漏洞
Cyber Warfare: Reality or Box Office Hit?(Randy Nash, 2007)
- 讨论网络战是真实威胁还是炒作
- 关键基础设施(电力、交通、金融)的网络化带来新的攻击面
- 攻击溯源困难是网络战的核心挑战之一
Quake - Game Engine(维基百科)
- id Software 的 Quake 引擎是 3D 游戏引擎的里程碑
- 首次实现真正的 3D 环境(而非 Doom 的 2.5D)
- 引入了真 3D 多边形渲染、动态光照、多人游戏模式
- 可扩展性强,催生了大量 MOD 文化
读后思考
这本书的独特价值
这本教材最有意思的地方不是英语学习本身,而是它无意中成为了一个 2007-2008 年前后技术文章的时间胶囊:
- Martin Fowler 的软件模式思想和演化式数据库设计在当时还是相当新的概念
- Linux 内核 2.6 时代的解剖(600 万行,今天已超过 3000 万行)
- 2007 年讨论网络战——那时还没有 Stuxnet、Log4j、SolarWinds
- Wikipedia 条目反映了那个时间点的技术认知
最值得反复读的三篇
- Evolutionary Database Design — 至今仍是数据库 DevOps 的奠基性文章,思想完全不过时
- Writing Software Patterns — Fowler 对模式本质的思考,比具体模式本身更有价值
- Anatomy of the Linux Kernel — 入门 Linux 内核架构的最佳文章之一,架构大图景至今适用
关联笔记
- 重构-改善既有代码的设计 — 代码重构 → 数据库重构的思想同源
- The Joy of Cryptography 密码学的乐趣 — 网络安全相关
- 程序员修炼之道 — 软件开发方法论相关
- ThoughtWorks 文集精选 — 同属 ThoughtWorks 技术思想体系