在AI技术飞速发展的今天,软件开发的门槛正在被逐步降低。本文作者作为一名非计算机专业的产品经理,通过亲身体验,利用AI编程工具(如Deepseek和Trae)尝试开发一款简易的APS排程软件,记录了从需求提出到软件完成的全过程。
———— / BEGIN / ————
作为一个非计算机专业的产品经理,虽然我没有任何代码基础,不懂编程,但是常年在产研团队中工作,对编程和开发工作极度渴望,是程序员升职记、while true:learn等游戏的忠实玩家,有时遇到自己感兴趣的产品想法会有动手开发的冲动,但是碍于不会编程,不得不放弃。自从去年夏天cursor爆火之后,我开始跟着网上的大佬尝试应用AI编程工具。
写这篇文章记录最近的一次AI编程尝试,利用AI编程工具开发一款简易的APS排程软件,验证一下目前的AI编程工具能否实现“动嘴”开发。同时在这次尝试的过程中,对产研团队的工作方式,产品经理的职业发展有了新的认知。
“动嘴”开发的过程
软件的基本逻辑如下:
-
基本的资料包括产品、工艺、订单,通过这些数据,可以得出生产所需要的各生产工序以及工作量(包括工序之间必要的约束关系)
-
规划资源包括员工和设备,员工具有不同的技能属性,支持匹配的工序任务,设备同理
-
规划求解机制,程序能够使用一定的算法在符合所有约束条件的情况下,规划工序任务、分配规划资源,得出一个近似最优(时间、人力、设备等等)的排产方案
这次开发的过程被分为了准备、编码、测试、打包几个阶段,主要使用了在线的deepseek R1以及Trae,因为Trae最新的Claude-3.7-Sonnet模型每次请求都需要排很久的队所以这次只使用了Claude-3.5-Sonnet和Deepseek-Reasoner(R1),预测使用Claude3.7模型开发效果会更好。
准备
因为在考虑开发这个软件之前就已经对软件的大致框架、功能逻辑有了基本的设计,所以这次尝试跳过了设计阶段直接开始准备开发。
准备阶段我主要使用的是deepseek R1,在提供了基本的业务背景、业务目标、功能逻辑以及我当前的开发环境等信息后,deepseek R1根据我的情况提供了技术选型方案、大致的开发步骤以及避坑指南。
这里要非常感谢Deepseek的建议,因为在它的建议下使用了git,开发过程中代码可以回滚,避免了几次重大问题。
核心语言我选择了python、GUI框架选择了Tkinter,文件处理选择了json。
接着,我在Trae的Builder模式下输入大致的业务背景以及刚才生成技术选型的结果,提交之后,Builder开始帮我检查本地是否正确安装了开发所需的依赖环境,在运行了几个指令之后,确认了当前我本地的开发环境,并帮我安装了几个必要的库。
接下来,就可以开始编码了(如果使用cursor的内容以及提前确定的设计、开发规范都可以通过rules提供给AI)。
编码、测试、打包
目前一次性让Claude-3.5-Sonnet完成整个相对复杂的程序开发是不现实的,并且在看不懂代码的情况下我需要即时验证程序是否符合预期;所以,我把整个开发过程拆分成了界面搭建、数据维护功能搭建和规划求解功能搭建三个步骤,增量式地完成软件开发。
第一步,界面搭建
我们根据功能需要描述出软件的界面框架和模块结构,很快它就完成了主界面、主菜单、功能模块的搭建。
第二步,数据维护部分
需要描述每个模块数据的基本属性和增、删、改、查的规则,我们分不同的模块描述了基本的数据结构的大致规则,程序都按照要求编写出了对应的数据维护功能,调试运行,功能正常。
前几个模块描述得足够详细,后面几个模块在描述得时候就可以放飞了,简单介绍下大致内容它就会根据类似的规则编写出我们想要的标准功能。
到这里,让它统计一下,我们花了大约1个小时已经写出了2850行代码,我们先在git上提交了这部分代码。
编码最后一步,规划求解,相比前面的步骤会稍复杂一些,首先尝试了直接描述模块的功能和大致规则。
结果正如预测,程序运行失败,出现了大量的报错,我们试着将这些报错发给builder让它进行修复。
但是,经过几轮修复后仍然没有解决问题;于是,我们改变策略,回退代码,再次把内容拆分。
我们把排程的过程拆分为了:生成排程任务、任务分配、冲突检查三个部分,分步实现每个功能,这次虽然部分情况下仍然出现报错,但是基本让它排查一次都能修复,经过十几轮对话后,基本功能搭建好了。
但是此时生成的结果是表格形式的,所以,又花了几轮对话,把排程结果改为了甘特图的样式,至此具有完整功能的第一版软件开发好了。
再此版本之上,我还尝试了让Build更换算法策略,改为使用之前Deepseek推荐的进化算法,这种情况下需要强调更改过程只改算法规则,保持页面和交互不做改动,改动后的程序能顺利运行。
在完成每个模块的功能开发后,我让builder创建一个单元测试用例,并进行测试来验证、确保基本功能的可用。
所有模块功能都验证没有问题,我们描述打包需求,让builder帮我们选择、安装打包工具并执行打包命令,打包过程比较顺利,至此,我们完成了软件的开发过程。