LLM的IDE使用一段时间后的体会
从零开始使用Windsurf完成了一个web的小东西,总体来说很爽,从零开始一行代码也没写过,全部是在聊天,但是这聊天也不是像产品经理和开发工程师聊天一样,而是更像一个结对编程的导航员的感觉。
最初使用LLM的IDE开发代码那就是行云流水。LLM的IDE我是从Cursor转换到Windsurf的,原因其实特别简单看了些别人写的介绍Windsurf的帖子后被其中“最重要”的一点,可以不那么麻烦的薅羊毛吸引力。刚好有一个web的小工程需要做,我就全部使用了Windsurf完成了开发。
在开发前我准备好了需要的Web样式,然后通过@样式文档后输入,“使用flask帮我按照这个样式生成一个显示表格的页面,显示sqlite数据库的数据,对应的表格定义{ddl},数据库信息{sqlite_config},帮我对数据库的操作进行封装,为后面其他对数据库增伤改查提供统一的操作类。”
其中:
- ddl是对应表格的create的SQL
- sqlite_config是数据库的位置信息。
大模型生成了一个flask的启动页面,里面有一个Get请求的主页,页面在templates目录下,还有一个SQLitehelper.py的数据库操作的类。
后面针对表格的增删改查大模型完成的一如既往地好,并且代码设计也很优。
遇见需求变更后发现还有一些小技巧。在工具开发过程中,需求发生了一些变化这也是开发中很容易遇见的情况,这就导致要在原有的代码上做一些改变,最开始就如同前面用法一样直接说有些需求做了修改,例如:数据表格的主键发生了变化,表格的增删改查都需要修改。我发现在这个修改过程中,大模型也一样会完成功能,但是代码就会改的不那么好,很多时候他会放弃旧的方法重新设计一个,那么旧的方法也有时候大模型自己不会删除,也不会不会被其他代码调用了,这样就有了很多的没有用的方法,在review的时候就自己注释掉。往往在多次修改后代码就变得非常复杂,同时很容易一次修改不成功,还有BUG的情况。但是就算是出现BUG只要把报错信息输入给大模型,告诉他帮着修复一下BUG就好了。
在使用了一段时候我发现再添加新功能或者修改一些需求的时候,你要告诉LLM新功能会涉及到那几个代码文件以及那个代码部分,那么往往大模型修改代码成功的概率以及功能完好的概率越大。
就这样我通过自然语言让LLM完成了一个Web小东西的开发,全部过程我一行代码也没有写(除去一些环境配置等必须自己写的内容)。在完成后,首先感叹了大模型的能力,真的是“多快好省”,至少一些简单的小功能的开发可以大大提升交付速度。其次,我从头到尾review一下代码,发现需求变更越多,代码写的越不好,越不是一个好设计,这就是一个战术性编程(这个名字来自茹老师的新书《软件设计的哲学》的典范,也可以说LLM的辅助编程就是战术龙卷风,但是这对于一个工程来说并不是好事,战略性编程才是更长治久安的选择,但是如果这些永远都是LLM主导维护呢?这个我那天我也不知道怎么回答。最后,再利用LLM辅助编程的时候,最大的感觉并不是像一个产品经理,更上一下结对编程的导航员,你要能时刻告诉LLM做什么,怎么做,你输出的越详细,规范性约束越合适,LLM写的代码越优秀,所以想要用好LLM,就把自己成长成一个优秀的导航员。