<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>工程能力 on Lingming 灵明</title><link>https://lingming.blog/tags/%E5%B7%A5%E7%A8%8B%E8%83%BD%E5%8A%9B/</link><description>Recent content in 工程能力 on Lingming 灵明</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 21 Jul 2026 23:04:10 -0400</lastBuildDate><atom:link href="https://lingming.blog/tags/%E5%B7%A5%E7%A8%8B%E8%83%BD%E5%8A%9B/index.xml" rel="self" type="application/rss+xml"/><item><title>黑箱转向（六）：从编码者到约束设计者？</title><link>https://lingming.blog/posts/2026/the-new-engineer-from-coder-to-constraint-designer/</link><pubDate>Sat, 07 Mar 2026 17:33:26 -0500</pubDate><author>Lingming</author><guid>https://lingming.blog/posts/2026/the-new-engineer-from-coder-to-constraint-designer/</guid><description>AI 正在改变工程师的任务组合，但现有证据不足以宣布代码作者已经消失。本文把“约束设计者”限定为一种能力重心：定义问题、配置上下文与权限、审查小批变化、建立保证证据并从运行反馈中修正规范，同时说明阅读、调试和实现能力为何仍然重要。</description><content:encoded>&lt;p>“以后工程师不用写代码，只要写规范”是一句很诱人的预测。它把职业变化压缩成从低层劳动到高层设计的升级，也避开了一个麻烦事实：如果不会阅读、运行和调试实现，人凭什么判断模型是否满足规范？&lt;/p>
&lt;p>&lt;a href="https://lingming.blog/posts/2026/architecture-as-risk-geometry/">上一篇&lt;/a>把架构解释为对故障半径、权限和时间的设计。本篇讨论承担这些工作的人。结论带一个问号：工程师确实会把更多时间放在约束和验证上，但“约束设计者”更适合作为能力重心，而不是已经取代程序员的新职业。&lt;/p>
&lt;h2 id="先区分任务变化与职业消失">先区分任务变化与职业消失&lt;/h2>
&lt;p>一份工作由许多任务组成。代码补全可能大幅自动化样板实现，却不必然自动化需求协商、遗留系统判断、安全取舍、生产事故和组织责任。即使模型能够独立完成越来越长的编码任务，企业也要决定它可以访问什么、怎样验证输出，以及失败时谁行动。&lt;/p>
&lt;p>现有数据不支持所有团队已经进入同一种未来。2025 年 Stack Overflow 调查中，AI 工具使用广泛，但代理尚未成为主流，多数受访者也不把 vibe coding 视为专业工作方式。METR 对资深开源开发者的早期实验观察到特定场景下的减速，2026 年后续则认为新工具可能已经带来加速，却无法消除选择偏差。DORA 的组织研究强调，AI 会放大现有平台和流程的优劣。&lt;/p>
&lt;p>因此，更可靠的问题不是“程序员何时消失”，而是：&lt;/p>
&lt;blockquote>
&lt;p>哪些任务的边际成本正在下降，哪些能力因而成为新的瓶颈？&lt;/p>&lt;/blockquote>
&lt;h2 id="实现变便宜后六类工作更加显眼">实现变便宜后，六类工作更加显眼&lt;/h2>
&lt;h3 id="定义问题">定义问题&lt;/h3>
&lt;p>模型需要目标，但真实需求常包含冲突：更快与更安全、更灵活与更可审计、用户便利与隐私保护。工程师要把模糊愿望变成可以讨论的成功条件、禁止行为和风险预算。&lt;/p>
&lt;p>这不是简单把产品经理的话改写成 prompt。约束之间可能矛盾，利益相关者可能漏掉边界，工程师必须利用领域和技术知识指出不可能三角。&lt;/p>
&lt;h3 id="配置上下文">配置上下文&lt;/h3>
&lt;p>生成质量取决于模型能看到哪些代码、文档、工具结果和历史决定。上下文不是越多越好：无关信息会增加噪声，敏感信息会带来泄漏风险，过时文档会稳定地产生错误方向。&lt;/p>
&lt;p>工程师需要选择可信来源、标明优先级与有效期，并保证生成器不会把示例误当成规范。&lt;/p>
&lt;h3 id="划定权限">划定权限&lt;/h3>
&lt;p>一个只能提出 diff 的助手，与一个能修改云资源、运行迁移和向用户发消息的代理，风险完全不同。约束设计包括工具白名单、沙箱、资源预算、审批点和不可逆操作边界。&lt;/p>
&lt;p>权限设计比提示词更接近真正的控制，因为它能在模型判断错误时仍然阻止某些后果。&lt;/p>
&lt;h3 id="审查与整合">审查与整合&lt;/h3>
&lt;p>生成代码仍然要进入既有系统。工程师需要检查接口、数据、性能、安全、可运维性和历史兼容约束。审查不是阅读模型的“思维过程”，而是判断制品和证据能否支持合并主张。&lt;/p>
&lt;p>当变更太大而无法认真审查，正确反应通常是拆小，不是降低理解标准。&lt;/p>
&lt;h3 id="建立保证证据">建立保证证据&lt;/h3>
&lt;p>契约、性质测试、静态分析、依赖验证、威胁模型和渐进发布把自然语言意图变成不同强度的证据。工程师必须知道每种方法能发现什么、遗漏什么，而不是让模型同时生成实现与一套只会支持自己的测试。&lt;/p>
&lt;h3 id="运行并学习">运行并学习&lt;/h3>
&lt;p>生产系统会遇到训练数据和测试环境没有覆盖的条件。指标、事件、用户反馈和事故复盘应当反向修正规范、测试与架构。约束设计不是一次性写完文档，而是一个持续校准过程。&lt;/p>
&lt;h2 id="一条完整的生成式工程闭环">一条完整的生成式工程闭环&lt;/h2>
&lt;p>可以把上述能力组织成六步：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>定义。&lt;/strong> 写出目标、非目标、禁止行为和风险等级。&lt;/li>
&lt;li>&lt;strong>限制。&lt;/strong> 选择上下文、工具、数据与权限边界。&lt;/li>
&lt;li>&lt;strong>生成。&lt;/strong> 让模型产生足够小、可以独立审查的候选变化。&lt;/li>
&lt;li>&lt;strong>检验。&lt;/strong> 由人和独立工具检查实现、性质、依赖与失败模式。&lt;/li>
&lt;li>&lt;strong>发布。&lt;/strong> 通过灰度、限流和恢复计划控制真实影响。&lt;/li>
&lt;li>&lt;strong>校准。&lt;/strong> 根据运行证据更新规范、测试和工具策略。&lt;/li>
&lt;/ol>
&lt;p>这个闭环没有把“编码”彻底删掉。模型可能承担第三步的大部分文本生产，人仍可能在任何一步直接修改实现，尤其是调试模型难以处理的边界、性能和底层系统问题。&lt;/p>
&lt;h2 id="为什么编码能力仍然重要">为什么编码能力仍然重要&lt;/h2>
&lt;p>约束不是凭空出现的。要定义合理接口，必须理解实现成本；要写有区分力的不变量，必须理解状态怎样变化；要判断性能风险，必须理解算法、内存、网络和数据库；要处理事故，必须从观测信号回到具体执行路径。&lt;/p>
&lt;p>如果工程师完全失去这些能力，会出现三种反向依赖：&lt;/p>
&lt;ul>
&lt;li>无法识别模型给出的不可能保证；&lt;/li>
&lt;li>无法在工具失效时缩小与定位问题；&lt;/li>
&lt;li>只能用更多自然语言修补一个尚未理解的实现。&lt;/li>
&lt;/ul>
&lt;p>因此，阅读、调试和编写代码不只是旧时代手艺，也是约束设计的经验基础。任务比例可能变化，基础能力不会因为抽象层提高而自动失效，就像架构师仍需理解软件与系统边界。&lt;/p>
&lt;h2 id="prompt-工程为什么不够">“Prompt 工程”为什么不够&lt;/h2>
&lt;p>提示词是生成接口的一部分，通常缺少稳定版本、机器可检查语义和独立执行约束。措辞变化、上下文顺序和模型版本都可能影响结果。&lt;/p>
&lt;p>成熟的规范体系还包括：&lt;/p>
&lt;ul>
&lt;li>版本化需求与架构决定；&lt;/li>
&lt;li>类型、模式和接口契约；&lt;/li>
&lt;li>权限与资源政策；&lt;/li>
&lt;li>可执行测试和不变量；&lt;/li>
&lt;li>质量门槛与发布规则；&lt;/li>
&lt;li>运行服务目标和事故流程。&lt;/li>
&lt;/ul>
&lt;p>Prompt 可以引用这些资产，却不应成为唯一事实来源。“把提示写得更聪明”无法替代组织对边界和后果的明确决定。&lt;/p>
&lt;h2 id="约束设计者也可能设计错约束">约束设计者也可能设计错约束&lt;/h2>
&lt;p>把职业叙事从“代码作者”升级为“系统裁决者”，容易制造新的自信幻觉。规范会遗漏，指标会被优化，测试会与真实用户脱节，架构边界也会转移风险而非消灭风险。&lt;/p>
&lt;p>所以约束本身需要审查：&lt;/p>
&lt;ul>
&lt;li>谁参与定义，谁的利益没有进入？&lt;/li>
&lt;li>哪些性质可执行，哪些只存在于文档？&lt;/li>
&lt;li>一个指标改善时，是否牺牲了未测量目标？&lt;/li>
&lt;li>模型、测试和审查是否共享同一错误假设？&lt;/li>
&lt;li>谁有权放宽边界，谁负责观察结果？&lt;/li>
&lt;/ul>
&lt;p>约束设计不是站在代码之上的绝对控制，而是把假设变成可见、可挑战和可更新的工程对象。&lt;/p>
&lt;h2 id="结语角色在扩展不是在脱离实现">结语：角色在扩展，不是在脱离实现&lt;/h2>
&lt;p>AI 编程最可能发生的变化，是让高水平工程从“亲自产生全部文本”进一步转向“组织问题、候选实现和保证证据”。这确实强化了约束设计能力。&lt;/p>
&lt;p>但真正可靠的新工程师不是不懂代码的指令发起者，而是能够在不同层级往返的人：他能定义边界，也能进入实现；能使用生成器，也能拒绝其答案；能看自动测试，也能判断测试遗漏；能提高吞吐，也能为生产后果负责。&lt;/p>
&lt;p>“约束设计者”如果要成为有用概念，代表的不是摆脱编码，而是对整个生成—验证—运行闭环承担更完整的工程责任。&lt;/p>
&lt;h2 id="延伸阅读与参考资料">延伸阅读与参考资料&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://dora.dev/research/2025/dora-report/">DORA：State of AI-assisted Software Development 2025&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://survey.stackoverflow.co/2025/ai/">Stack Overflow：2025 Developer Survey — AI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">METR：Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://csrc.nist.gov/pubs/sp/800/218/final">NIST：Secure Software Development Framework&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>上一篇：&lt;a href="https://lingming.blog/posts/2026/architecture-as-risk-geometry/">《黑箱转向（五）：架构即风险几何》&lt;/a>；下一篇：&lt;a href="https://lingming.blog/posts/2026/the-ethics-of-the-black-box/">《黑箱转向（七）：AI 生成代码出错，谁负责》&lt;/a>。&lt;/em>&lt;/p></content:encoded></item></channel></rss>