English++ 计算机专业英语教材

来源:波兰雅盖隆大学(Jagiellonian University)语言中心 项目负责人:Monika Stawicka 性质:免费非商业英语教材,收录13篇计算机科学领域英文文章,配词汇表、练习题和波兰语摘要 价值定位:不是英语学习笔记,而是通过英语教材形式保存的一批经典技术文章精选


全书概览

结构

章节内容页码
1. Reading Chapter13篇技术文章(阅读材料)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)**的方式,而不仅仅是”某个上下文下问题的解决方案”。

模式的关键属性

  1. 命名解决方案(Named Solution):模式必须给解决方案一个具体的名字,让这个名字进入行业词汇。当你说”Decorator”或”Identity Map”,专业人士应该立刻明白你的意思。
  2. 可复用性(Recurrence):解决方案必须能在很多不同场景下应用。一次性的解决方案不值得命名。
  3. 解决方案的内核(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 证明:通过一套实践,数据库也可以像代码一样演化。

关键实践

  1. DBA 与开发者紧密协作

    • 不是通过正式会议和文档沟通,而是日常随时交流
    • DBA 要平易近人、坐在开发者附近
    • 开发者做任何可能影响 schema 的任务都要找 DBA 商量
    • DBA 有全局数据视图,开发者知道功能需求
  2. 每人一个独立数据库实例

    • 像代码沙箱一样,数据库也需要沙箱
    • 开发者可以自由实验,不影响他人
    • 很多 DBA 认为多实例难以管理,但实践中管理上百个实例很容易
    • 关键是要有像操作文件一样操作数据库的工具
  3. 频繁集成到共享主库

    • 每个开发者每天至少集成一次
    • 流程:从 master 复制 → 本地修改实验 → 找 DBA 评审 → 应用到 master
    • 简单变更(如加列)开发者自己决定,复杂变更找 DBA 讨论
  4. 数据库重构(Database Refactoring)

    • 像代码重构一样,对数据库 schema 进行小步、行为保持的变更
    • 每一次 schema 变更都作为一个独立的、可自动化的 refactoring
  5. 自动化构建与测试

    • 数据库变更必须纳入持续集成
    • 有了自动化测试才能放心改 schema
  6. 数据字典(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,保护内核免受商业剥削

内核主要子系统

  1. 进程管理(Process Management) — 进程创建、调度、销毁
  2. 内存管理(Memory Management) — 虚拟内存、物理内存管理、页面置换
  3. 文件系统 / VFS — 虚拟文件系统抽象层,统一不同文件系统接口
  4. 网络栈(Network Stack) — TCP/IP 协议栈实现
  5. 设备驱动层(Drivers) — 各类硬件驱动(内核代码量最大的部分)
  6. 系统调用接口(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 缺陷)

软件开发主要步骤

  1. 领域分析(Domain Analysis):了解业务领域,学会用领域语言和专家对话。是需求收集的前奏。

    经典引用:“我知道你相信你听懂了你认为我说的话,但我不确定你是否意识到,你听到的并不是我的本意。”

  2. 软件要素分析 / 需求提取:最重要也最难的步骤。客户知道自己想要什么,但不知道软件该做什么。需求常常不完整、模糊、矛盾。演示可运行代码是降低需求错误风险的有效方法。

  3. 规格说明(Specification):精确描述软件。实践中大多是为已开发的软件写的(理解和微调)。安全关键系统会先写规格。外部接口的规格说明最重要,因为接口必须稳定。

  4. 软件架构(Software Architecture):系统的高层抽象表示。不仅要满足当前需求,还要考虑未来需求。包括系统间接口、与硬件/OS 的接口。

  5. 实现(编码):最显眼但不一定是工作量最大的部分。

  6. 测试:尤其是不同工程师写的代码之间的集成测试。

  7. 文档:常被忽视但对未来维护至关重要。内部设计文档 + 外部接口文档(后者更重要)。


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 条目反映了那个时间点的技术认知

最值得反复读的三篇

  1. Evolutionary Database Design — 至今仍是数据库 DevOps 的奠基性文章,思想完全不过时
  2. Writing Software Patterns — Fowler 对模式本质的思考,比具体模式本身更有价值
  3. Anatomy of the Linux Kernel — 入门 Linux 内核架构的最佳文章之一,架构大图景至今适用

关联笔记