cc-pseudocode-programming 是一个面向代码开发流程的技能,主题是「先设计伪代码,再编写例程」。其基本主张是:迭代意图比迭代代码更便宜,并在早期用四个问题捕捉代价高昂的错误。
用途与核心思路
该技能用于指导例程的设计过程。它强调在真正写代码之前,先用伪代码来完成例程设计。资料给出的理由包括:
- 命名困难往往意味着设计不清晰,应先厘清目的。
- 在代码之前先写伪代码:细化伪代码比细化代码更便宜。
- 是否理解它为何能工作:无法解释的「能跑」代码很可能并不真正正确。
- 是否考虑过替代方案:第一版设计很少是最好的。
如果用户要求跳过伪代码,技能要求顺从该要求,或仅提示一次代价(该例程很可能在调试上花费更多)——不要拒绝。
技能中引用了共享的 CC 词汇与阈值(内聚度、参数、例程长度),指向路径:Read(${CLAUDE_PLUGIN_ROOT}/references/cc-foundations.md)。
何时可以豁免该流程
仅在满足以下条件之一时,才跳过该流程:
- 简单访问器——getValue()/setName(),没有校验、转换或副作用。
- 纯透传——委托调用,没有参数转换或错误包装。
- 平凡单行——同时满足:单条语句、零决策点、零循环、仅凭签名即可看出实现。
- 已经完成设计——设计文档已明确指定算法、错误处理与边界情况。
资料特别提示:一个你正在争论「是否足够平凡」的例程并不平凡——应当对它进行设计。
模式
APPLIER(应用者)
用伪代码编程流程(Pseudocode Programming Process)引导例程设计,产出伪代码设计、头部注释与实现计划。步骤包括:
- 确认该例程在整体设计中的位置是清晰的。
- 定义问题:输入、输出、前置条件、后置条件,以及它隐藏了什么。
- 为例程命名——若命名困难,说明设计不清晰,需迭代。
- 在写代码之前先计划如何测试它。
- 在构建之前检查库中是否已有现成功能。
- 规划错误处理——思考失败模式。
- 如有需要,研究相关算法。
- 用自然语言把伪代码写成头部注释(与语言无关,表达意图而非语法)。
- 迭代,直到从每一行生成代码几乎自动化——可以不假思索地写出每一行;如果停下来想「这部分怎么实现」,说明伪代码还需要更多细节。
- 尝试替代方案,保留最好的。
- 依据伪代码编写代码,伪代码随之成为注释。
- 在最高警告级别下干净地编译通过。
「确信它正确」意味着能够在脑中追踪每一条路径——正常、错误、边界——并解释为何每条路径都产生正确输出。「看起来对」不算确信。
好伪代码与坏伪代码
好的伪代码位于意图层面,不含目标语言语法。资料给出的示例(保留原文):
If another resource is available Allocate a dialog box structure If a dialog box structure could be allocated Note that one more resource is in use Initialize the resource Store the resource number at the location provided by the caller Return success Endif Endif Return failure
资料说明:这段文字读起来像英文,能成为优秀的注释,且精确到足以据此生成代码。反模式则是写 *hRsrcPtr、malloc()、return 1 这类目标语言细节,聚焦于「怎么做」、暴露实现、并且作为注释很糟糕。
CHECKER(校验者)
校验产出的伪代码与最终例程。检查清单见:Read(${CLAUDE_SKILL_DIR}/checklists.md)。评估要点包括:
- 伪代码是否处于意图层面(英文,而非目标语言语法)?
- 是否足够详细,以至于据此生成代码几乎自动化?
- 是否至少权衡过一种替代方案?
- 能否通过追踪所有路径来解释例程的正确性?
- 是否消除了所有编译器警告?
证据
资料列出的依据包括:
- 程序员偏好伪代码,因为其构建更容易、并能发现细节不足 [Ramsey, Atwood, Van Doren 1983]。现代 IDE 能更快发现语法错误,这使得设计错误(即本流程所预防的问题)成为主要问题。
- 约 95% 的错误是程序员错误,而非硬件/编译器/操作系统错误 [Ostrand and Weyuker 1984]。
- 应在价值最低的阶段捕捉错误;迭代伪代码比迭代代码更便宜 [McConnell pp.220, 225]。
与其他技能的衔接
资料给出如下链条关系:
- 伪代码完成后,下一步:Skill(code-foundations:cc-routine-and-class-design)。
- 实现完成后,下一步:Skill(code-foundations:cc-defensive-programming)。