我自己编写程序的过程就是一部被动学习"软件工程"的血泪史。
我至少经历了如下阶段。
把AI当做了超级智能
过于信任AI,根本不看代码,导致前端页面做得看上去还行,实际结构混乱,到处是矛盾、冗余代码,性能差、bug横行,徒有其表无法稳定运行。
我记得刚开始我做的前端设计,甚至没有在页面上划分section,随便一动页面元素就开始布朗运动。更不用说组件这种东西,我以为一个button无非就是点击还是不点击,哪知道还有什么状态管理、数据路由、逻辑抽象。
在一次未先Git就进行重构导致整个页面崩坏的事故之后,我只是觉得没有尽可能结构化描述清楚需求,导致AI执行困难。于是我重新梳理了PRD,试图让AI一次性理解我的意图。结果一开始很好,我用了两天就实现了之前1周的开发效果,但很快这种治标不治本的方式就走到了尽头,代码重新走向了混乱,表象就是增删功能的时候AI开始晕头转向,效率越来越差。
我必须停下来看看发生了什么问题。
指导AI首先自己要know how
在这两次失败之后,我终于开始重视编码规则,我在YouTube和B站上找了几个视频开始学习如何编写全局规则和项目规则来约束AI的行为。但由于缺乏编程知识,我只是学到了皮毛:大概知道了要给前后端指定技术选型,比如nextjs还是nodejs;知道了要让AI遵循选择丰富的开源资源、控制性能、标准注释、规范代码风格。然后还不知深浅地规定了死了文件结构和架构原则——因为AI告诉我这就是最佳实践。
在这个过程中,我实际不知道nextjs的特点是什么、MVC架构并不适合所有项目、每个编程语言都有自己的代码风格···我更不知道的是,当时(2025年05月)AI编程工具的规则设置还只是徒有其表,memory、上下文机制、MCP工具还极其不完善,智能路由、任务编排等能力几乎为零,所以最终结果肯定也好不了。
但这一次相比于第二次,我已经有了长足的进步:我知道一个项目必须在约束下进行、vibe coding必须要与幻觉共处。这个过程中我也体验了很多工具,比如lovable、bolt、youware等等,他们表面的精美已经迷惑不到我,我深知做一个完整的项目远不止一次性出一个漂亮的UI这么简单。
给自己建立知识图谱
而后的一个月,我没有编程。我阅读了一些书籍,关于平面设计、用户体验要素、从0到1构建产品和商业、计算机网络等等,我还读了一些名人轶事,比如张小龙做微信的历程。
在这个过程中,我对于自己眼前这台电脑有了更解构化的认识:它是如何通过路由器连接到公网、公网之间如何进行寻址和信息交换、高级语言如何变成机器语言被执行、终端工具和可视化的客户端的联系、浏览器和搜索引擎的关系、本地软件和服务器软件的区别,乃至于为什么微软/Google/AWS为何都不约而同走上了云的道路,这些我从没注意到的问题都有了答案。
更重要的是,在这个过程中我终于对“架构”有了一些体会:原来做B端产品的时候,大概会区分一下功能层、数据层、策略层要实现的内容,但不会想:我希望用户在这个模块/这个页面要看到哪些信息、完成哪一组操作,完成之后达到什么效果;哪几个button的样式、交互逻辑、数据服务是一致的,应该做抽象而不是定制;哪几个功能可以拆开,这样维护起来更便利···实践+阅读,自然而然,我体会到了什么叫做面向对象编程,体会到了抽象和泛化。
还有一些其他收获,关于产品设计理念。我读了张小龙的故事,重新看了他塑造微信的资料,我深刻地体会到了“极简”的理念:围绕用户体验,对用户需求抽象再抽象。做产品不是追逐风口,也不用怕同质化的竞争,唯一重要的事情就是,你如何理解和实现用户需求。基于对即时通讯和社交网络的理解,张小龙可以一连串推出附近的人、漂流瓶、摇一摇、朋友圈等功能,他不会惧怕别人抄他的功能设计,因为理念才是核心。
这些知识给我了很多安全感,我知道自己不会再陷入与AI的纠缠,我知道我具备了驾驭AI的能力。
重新出发
完成知识图谱的建设之后,我重新回到了项目上。我要重新梳理重新出发:
重新制定全局和项目的编程控制规则,选用核心MCP工具,同时在编程的过程中主动调用规则压缩上下文、更新memory、启动标准化流程;
从用户的角度重新做信息架构和功能设计,抓紧时间跑通流程实现MVP。