| Enduring Understanding | Learning Objective | Essential Knowledge |
|---|---|---|
CRD-1 | CRD-1.A |
|
CRD-1.B |
| |
CRD-1.C |
|
创造性开发
AP 计算机科学原理 · 第 1 主题
1.1
协作
大纲
来源:美国大学理事会 AP 课程与考试说明
计算是一个协作(collaborative)活动。在一个团队里工作带来更多视角、捕捉更多错误,并产生比单独工作更好的程序。好的协作使用共识建立(consensus building)、清晰的沟通和每个成员的长处。结对编程(pair programming)——两个人在一台计算机前,一个打字一个审查——是一个常见的做法。在考试上,你应当能够解释协作如何改进了一个程序(更多想法、更少 bug、更广的测试)。
| 英文 | 中文 | 拼音 |
|---|---|---|
| collaborative | 协作 | xié zuò |
| Pair programming | 结对编程 | jié duì biān chéng |
1.2
程序的功能与目的
大纲
| Enduring Understanding | Learning Objective | Essential Knowledge |
|---|---|---|
CRD-2 | CRD-2.A |
|
CRD-2.B |
| |
CRD-2.C |
| |
CRD-2.D |
|
来源:美国大学理事会 AP 课程与考试说明
每个程序都为一个目的(purpose)而写——它解决一个问题或追求一个兴趣。一个程序接受输入(input)、处理它,并产生输出(output)。输入能来自一个用户、一个设备、一个文件,或另一个程序;输出能是视觉的、听觉的、文本的,或给一个设备的一个信号。能够陈述一个程序的目的,并清晰地描述它的输入和输出,是一项核心技能(以及创建性能任务的一部分)。


Explore the input → processing → output model
Step through the IPO model. Every program takes some input, performs processing on it by following its instructions, then produces output — trace one weather-app example along the pipeline.
| 英文 | 中文 | 拼音 |
|---|---|---|
| input | 输入 | shū rù |
| output | 输出 | shū chū |
1.3
程序设计与开发
大纲
| Enduring Understanding | Learning Objective | Essential Knowledge |
|---|---|---|
CRD-2 | CRD-2.E |
|
CRD-2.F |
| |
CRD-2.G |
| |
CRD-2.H |
|
来源:美国大学理事会 AP 课程与考试说明
程序通过一个迭代(iterative)过程构建,不是一条直线:调查问题和用户、设计(常常带一个图(diagram)或书面计划)、以代码实现,并测试——然后重复。一个大问题被分解成更小的片段(分解(decomposition))。注释(comments)和清晰的命名记录设计,以便其他人(以及你未来的自己)能理解它。开发是增量(incremental)的——构建并测试一个小片段,然后添加下一个。


Loop through the iterative development process
Development is iterative — you repeat the stages, improving the program a little on each pass. Step around the loop and notice it returns to the start rather than ending after one run.
| 英文 | 中文 | 拼音 |
|---|---|---|
| iterative | 迭代 | dié dài |
| decomposition | 分解 | fēn jiě |
| Comments | 注释 | zhù shì |
1.4
识别与纠正错误
大纲
| Enduring Understanding | Learning Objective | Essential Knowledge |
|---|---|---|
CRD-2 | CRD-2.I |
|
CRD-2.J |
|
来源:美国大学理事会 AP 课程与考试说明
一个 bug 是一个程序里的错误;调试(debugging)是找到并修复它。三种:

- 一个语法错误(syntax error)破坏语言的规则,所以程序不会运行;
- 一个运行时错误(runtime error)在它运行时使程序崩溃(例如除以零);
- 一个逻辑错误(logic error)让它运行但给出错误的结果。
通过用不同的输入(包括边界情况)测试、添加打印语句(print statements)以看值,以及手工跟踪代码来找 bug。一次修复一个 bug 并重新测试是可靠的方法。
考试技能: 能够命名一个错误的类型并描述一个会捕捉它的测试策略——一个反复出现的选择题和创建任务主题。

Worked example. 一个本应打印两个数平均值的程序却运行了 avg = a + b / 2。追踪运算顺序,/ 在 + 之前运行,所以它计算 $a+\tfrac{b}{2}$ 而不是平均值。加括号来修复:avg = (a + b) / 2。用已知输入 $a=4,\ b=6$ 测试确认修复——有错误的行给 $4+3=7$,修正后的行给 $\tfrac{10}{2}=5$。用已知输入测试正是你找到并确认一个逻辑错误的方法。
Trace the guessing-game logic and spot a logic error
Drag the guess and watch which branch runs. A logic error would send the same guess down the wrong branch — the program still runs, but gives the wrong message. The secret number here is 50.
| 英文 | 中文 | 拼音 |
|---|---|---|
| debugging | 调试 | tiáo shì |
| syntax error | 语法错误 | yǔ fǎ cuò wù |
| runtime error | 运行时错误 | yùn xíng shí cuò wù |
| logic error | 逻辑错误 | luó jí cuò wù |
1.4
考试技巧
- CSP 的很多部分通过创建(Create)和书面性能任务评估——清晰地解释你的推理,不只是你的结果。
- 知道协作的好处以及多样的视角如何减少一个程序里的偏见。
- 当你描述一个设计过程时使用精确的词汇(迭代开发、程序需求)。
- 建设性地给出和接受反馈;为协作者和来源署名。
- 把一个大问题分解成一个团队能并行构建的更小的模块。
本主题的互动课程
逐步学习,并即时检测练习。