AI编程实战手记:从通讯软件重构到猜色游戏的协作探索

2025/6/11439 字

这篇文章是根据我和朋友的聊天记录由ai整理而成,内容基本符合愿意,不过文章中出现的代码是ai自己举的例子。感觉写的挺好的一篇感悟文,就发了。确实也是我自己想感悟的东西。

AI编程实战手记:从通讯软件重构到猜色游戏的协作探索

本文记录了我与AI协作开发的两次技术实践——重构局域网通讯系统与设计色彩解谜游戏,探讨AI在编程中真正擅长的边界与高效的协作模式。

Part 1:Rust服务端重构与前端困境

项目背景

我曾用Java实现过局域网通讯软件,后来决定用Rust重写服务端。服务端核心流程如下:

rust
// TCP数据包结构
struct Header {
    flag: u8,   // 标志位,默认0
    length: u32 // 消息体长度
}

// 客户端请求格式
enum Command { Sign, Log, Send }
struct Request {
    command: Command,
    data: HashMap<String, Value> // 支持注册/登录/消息发送
}

// 服务端响应格式
enum Code { Ok, Err, Msg } // Msg表示主动推送
struct Response<T> {
    code: Code,
    msg: String,      // 用户提示信息
    data: Option<T>   // 携带数据(如用户ID/消息内容)
}

为了快速验证新版服务端,我尝试用Cursor(免费版)生成网页客户端。AI仅凭一次需求描述便输出了完整前端代码——包括注册登录、消息收发等核心功能。

意外困境:消息延迟刷新

实际运行发现严重问题:客户端无法实时刷新消息。当用户A发送消息后,用户B必须发送新消息才能看到上一条消息。这种"消息触发式刷新"机制违背即时通讯的基本原则。

我尝试解决这个问题:

  • 检查了数据序列化/反序列化逻辑 ✅ 正常
  • 验证了WebSocket长连接状态 ✅ 保持
  • 测试服务器主动推送能力 ✅ 服务端能成功发出Code::Msg响应

最终定位是前端渲染机制缺陷:AI生成的代码没有设计消息监听队列。由于免费版Cursor功能受限,这个问题暂时搁置,但它揭示了一个关键结论——AI直接生成完整项目仍存在风险边界。

Part 2:AI编程的三阶协作模式

通过这个项目,我摸索出了与AI协作的高效方式:

1.注释驱动开发(Comment-Driven Development)

rust
// AI辅助编码示例
fn process_message(socket: &mut TcpStream) -> Result<()> {
    // 目标:解析消息头并验证数据完整性
    // 步骤:
    // 1. 读取8字节头数据(1字节flag+4字节长度)
    // 2. 若长度超过MAX_SIZE返回错误
    // 3. 根据长度读取完整消息体
    // 4. 返回解析后的Header结构体
    #[AI_GENERATED_CODE_START]
    let mut header_buf = [0u8; 5];
    socket.read_exact(&mut header_buf)?;
    // ... AI生成的详细实现
    #[AI_GENERATED_CODE_END]
}

实践发现:当在函数中预置功能说明、参数约束、边界条件和逻辑伪代码后,AI生成的实现代码一次通过率超90%。

2.TDD反模式警示

尝试让AI直接为模块写单元测试时,效果很差:

javascript
// AI生成的失败测试案例
test('message should be delivered', () => {
  sendMessage('test');
  expect(receivedMessages).toContain('test'); // 忽略了异步机制
})

核心问题在于测试需要深刻理解业务场景——当前AI缺乏这种上下文感知能力。

3.架构设计的不可替代性

这引出关键认知:需求分析→架构设计→详细设计的决策链必须由人类主导。当前AI最适合定位在:

  • 伪代码转正式代码
  • 模板代码生成
  • 语法适配转换

Part 3:验证猜想:猜色游戏设计实验

为验证这个理论,我发起新挑战——用纯文字描述让AI实现色彩解谜游戏:

(真人注释:其实是因为下午刷到了一个这样的玩具,突然就有了要用什么项目练习 ai 和vue的灵感)

markdown
# 设计文档
## 数据结构
- 总颜色池:彩虹七色+黑白灰(0=白色占位符)
- 关键变量: 
  numColor(可用颜色数) | numRightColor(正确颜色数)
- 核心状态:
  colors(有效颜色ID数组)
  rightColors(正确答案ID数组)
  guessHistory(历史猜测记录)
  currentGuess(当前猜测数组,初始全0)

## UI规范
1. 顶部配置区:
   - 数字输入框:numColor / numRightColor
   - [生成]按钮
2. 游戏区:
   - 历史记录行:显示方块+三色状态提示(绿/橙/灰)
   - 当前行:可下拉选择颜色的方块 
3. 悬浮底部按钮:[Check!] 

令人惊讶的结果发生了——AI仅凭这次描述,一次生成完全可运行的Vue组件!

启示录:人机协作的甜蜜点

两个项目的对比揭示出清晰边界:

能力层级 AI当前水平 人类优势
需求理解 ⚠️ 碎片化 ✅ 系统性
架构设计 ⚠️ 局部优化 ✅ 全局最优
伪代码转换 ✅ 高度可靠 ⚠️ 重复劳动
边界条件处理 ⚠️ 随机波动 ✅ 精确把控
实时状态管理 ⚠️ 常现漏洞 ✅ 因果把控

这种范式催生新的开发流:

graph TD A[人类需求分析] --> B[系统架构设计] B --> C[模块接口定义] C --> D[伪代码+边界注释] D --> E[AI生成实现] E --> F[人类CodeReview]

如我在调试消息功能时感慨的:“当AI甚至学会需求提出+分析时,也许就是程序员转身的时刻。但在那之前,学会让AI在伪代码和实现间精准填坑,是这个时代最高效的作弊码。”

💬 评论区

写评论

暂无评论,来发表第一条吧。

© 2026 Corn 的自留地