当前位置: 首页 > news >正文

我花了三天才搞定的“智能狗”编程题,AI也翻车了

前言

前几天我在做一道状态机模拟的编程题:一只智能狗在一条直线上前后移动,会发热、耗电,遇到障碍物会停下,温度太高会自动冷却,电量太低会自动充电。听起来不复杂,但我整整花了三天才把它跑通。

这三天里,我和一个AI助教反复拉扯了几十个回合,期间推倒重来了三次,写了十几个测试文件。最后代码跑通的那一刻,我最大的感受不是“我终于会了”,而是“原来编程是这样学的”。

这篇文章不贴完整代码,只分享我在这个过程中学到的东西。

第一阶段:我以为我会了

一开始我很自信。类?我会。方法?我会。循环?我会。于是我刷刷刷写完了moving_forwardcool_downcharge三个方法,觉得差不多了。

然后AI助教问我:“移动过程中温度超标怎么办?”

我说:“那就调用cool_down啊。”

AI又问:“那cool_down是谁来调用的?是移动方法自己调,还是主循环调?”

我愣住了。这个问题我从来没想过。

第二阶段:单一职责原则

AI给我讲了单一职责原则:一个方法只做一件事。

  • 移动方法只负责移动,不负责冷却

  • 冷却方法只负责冷却,不负责充电

  • 主循环负责协调所有事情

我一开始不理解:“可是移动过程中温度超标了,难道不是应该立刻冷却吗?如果移动方法不调用冷却,那谁调?”

AI说:“移动方法应该做的是:检测到温度超标 → 停止移动 → 返回一个中断信号给主循环 → 主循环根据中断原因调用冷却方法。”

我问:“这不绕了一圈吗?直接调用不是更快?”

AI说:“直接调用是更快,但耦合度更高。如果以后你想改变冷却的逻辑(比如先记录日志再冷却),你得改移动方法的代码。而通过主循环协调,你只需要改主循环,移动方法完全不用动。”

这个道理我听懂了,但说实话,直到我自己动手写主循环的时候,才真正体会到这样设计的好处。

第三阶段:主循环——最难的部分

独立方法都写好了,测试也都通过了。但当我开始写run_simulation主循环时,我发现自己根本不知道从哪里下手。

我有这些零件:

  • 一个可以移动的狗

  • 一个可以冷却的狗

  • 一个可以充电的狗

  • 一堆按时间排序的指令

  • 一堆按时间采集的传感器数据

但我不知道怎么把它们串起来。

AI给我画了一个流程图:

  1. 按时间排序指令

  2. 遍历每条指令

  3. 如果当前时间还没到指令时间,把时间跳到指令时间

  4. 根据指令类型执行对应的动作

  5. 动作结束后,更新时间戳

  6. 查询最近的传感器记录,更新环境参数

  7. 检查是否触发报警

  8. 记录位置和状态变化

  9. 处理下一条指令

我对着这个流程图写了一遍,跑不通。再写一遍,还是跑不通。第三遍,终于跑通了。

那一刻我突然明白:流程图和代码之间的距离,就是经验和练习的距离。

第四阶段:AI也翻车了

写到后面,我发现自己的代码总是有重复的报警记录。我让AI帮我查,AI说:“你这里缺一个continue。”

我加上continue,还是有重复。AI又说:“你check_alarm里用extend加字典,应该用append。”

我改成append,还是有重复。AI沉默了一会儿,说:“你把冷却方法里的check_alarm调用去掉试试。”

我去掉了,果然好了。

这时候我才意识到:AI不是万能的。它可以帮你找到问题的方向,但最终定位问题、解决问题的,还是你自己。

更让我惊讶的是,后来我又找了另一个AI来审查代码,两个AI给出的修改建议居然不一样。一个说“碰撞检测要实时监测”,另一个说“碰撞检测只在动作结束时更新”。我不得不自己去看题目描述,自己判断哪个更合理。

AI可以帮你生成代码,但不能替你理解需求。

第五阶段:支撑轮理论

整个过程中,我最喜欢AI讲的一个比喻——支撑轮理论

学骑车的时候,支撑轮的作用不是让你永远依赖它,而是让你在摔倒之前有时间感受平衡。我的代码也是这样:

  • 第一次写:扶着支撑轮,每一步都问AI“这样对不对”

  • 第二次写:支撑轮松了,能自己骑一段,但拐弯时还要扶一下

  • 第三次写:支撑轮拆了,虽然骑得摇摇晃晃,但终究是自己骑下来的

我现在还处在“支撑轮刚拆”的阶段。骑得不稳,但我知道自己会越来越稳。

几个具体的教训

  1. 先画流程图,再写代码。​ 我第三次重写时,先在纸上画了主循环的流程图,写代码的速度比前两次快了一倍。

  2. 每个方法只做一件事。​ 移动方法不要调用冷却方法,冷却方法不要记录报警。让主循环来做协调。

  3. 先测零件,再总装。​ 我写了一个test.py,专门用来单独测试moving_forward方法。零件没问题了,再组装整车。

  4. AI是好工具,但不是万能钥匙。​ 它可以帮助你拓宽思路,但最终的决定权在你手上。你才是最了解题目需求的人。

  5. 重复是最好的老师。​ 我推倒重来了三次,每一次都比上一次理解得更深。不要怕重写,重写是学习的捷径。

结语

三天前,我连if __name__ == '__main__'为什么要这样写都说不清楚。三天后,我能独立写出一个完整的状态机模拟程序。

这三天里,我最大的收获不是这段能跑的代码,而是我知道了怎么去学一个我不会的东西

  1. 拆解问题

  2. 逐个击破

  3. 组装测试

  4. 推倒重来

  5. 直到熟练

这个过程很痛苦,但很值得。


这篇文章发布后,我希望它能帮到那些和我一样,正在从“照着写”迈向“自己写”的初学者。编程不是背答案,而是学会解决问题的方法。

http://www.jsqmd.com/news/1337506/

相关文章:

  • 国内AI模型大比拼:谁实力最强?
  • C语言小结---2048游戏实现
  • 撤三风险从来不是一纸通知:权大师如何帮助企业建立“一标一档”证据管理机制
  • Java设计模式实战:从单例到策略,代码实现与避坑指南
  • FreeMocap开源动捕指南:用普通摄像头实现低成本3D动作捕捉
  • Unity序列化核心机制:Serializable、SerializeField与SerializeReference深度解析
  • 乌鲁木齐市达坂城区外墙漏水维修_2026新疆中部风谷地区漏水维修流程教程与价格表 - 雨婺虹修缮
  • 2026年8月广东整厂打包回收/广东厂房拆除回收厂家深度推荐_深圳市钰东再生资源回收有限公司 - 品牌宣传支持者
  • 算法面试——哈希表:两数之和、三数之和、最长连续序列
  • 采购河北外墙钢板网厂家如何把控质量与交货周期 - 品牌优推
  • MATLAB偏微分方程求解进阶:从一维非线性到二维有限元实战
  • 终极指南:如何在ESP32上打造情感丰富的AI聊天机器人表情系统
  • 鸣潮工具箱WaveTools完整指南:三步解锁120帧画质优化终极方案
  • 基于8086微处理器的电子时钟系统设计与实现
  • 2026 年新消息:克孜勒苏柯尔克孜自治州专业的tpo防水卷材p型供应厂家推荐,贴在屋顶用十年不漏水的这玩意儿,居然不是靠沥青? - 企业推荐官【认证】
  • 2026随州活动拍摄公司优选榜** | 会议拍摄 | 活动跟拍 | 视频直播 | 照片直播 | 年会拍摄服务商评测对比 - 政企影像扫地僧
  • MySQL存储引擎与高可用架构实战解析
  • 系统卡顿排查指南:从死锁到线程池问题的实战诊断
  • Windows 11透明任务栏:原理、优化与高阶玩法全解析
  • JavaSE初学(2)
  • STM32 GPIO API深度解析:从标准库函数到高效配置与避坑指南
  • 单总线CPU硬布线控制器设计:现代时序与状态机实现详解
  • 5分钟快速上手:ReportGenerator代码覆盖率报告转换完整指南
  • Digital M7478-AA 单板计算机
  • 大模型推理能力提升实战:思维链与由少至多提示技术详解
  • 戴森球计划工厂蓝图库:3000+设计方案让星际建造更简单
  • Deno运行时:安全默认设置带来出色开发体验,多方式安装轻松上手!
  • 链式前向星:从邻接矩阵到高效存图,详解原理与C++/Python实现
  • Funplay Unity MCP execute_code:AI驱动Unity开发的代码沙盒与执行引擎
  • Mysql:主键