大家好,我是程序员鱼皮,一个对烂代码 “恨之入骨” 的程序员。
以前在鹅厂工作的时候,每当我被别人写的烂代码折磨时,虽然明面上不说,但会在心里默默问候;不过当自己也写出烂代码时,却又挠挠头一笑了之。
现在我带领团队开发项目,看到团队的同学们偶尔也会吐槽同事写的烂代码。为了提高团队研发效率,我觉得我应该做点什么了。。。
没错,我要彻底整治鱼厂的代码!
拯救鱼厂代码规范
“咳咳”
我清了清嗓子,看着同事们说:“为了提高咱们的开发效率,也是让项目更好维护,咱们必须要
定一套代码规范
。接下来我就说几点最重要的,大家认真听!常量要全大写、包名要全小写、要写方法注释。。。”
结果说了一大堆,我发现大家根本记不住。
于是,我利用 AI 写了一篇《鱼厂代码规范文档》,以后大家每次写代码前,先把规范文档读一遍。
结果,很快我就发现,这招根本行不通,
很多人根本不看文档!
而且即使看过,写代码的时候也完全没有意识要去遵守规范。
没事,咱还有招!作为一名程序员,本能地想到要利用工具来解决问题。
于是,我搞了一套 Code Style 代码规范的配置,大家只要在 IDE 开发工具中导入配置文件,写出来的代码风格就是一样的啦!
同事们:“好耶!不用看文档啦!”
可惜,好景不长,很快我又发现了新的问题。之前自定义 Code Style 的方式更多的只是控制代码格式,比如缩进是 2 格还是 4 格;但无法保证大家写代码的风格和习惯一致,也无法发现代码中不规范的地方,比如 Java 开发中应该使用日志库代替 System.out 输出、应该使用自定义异常代替过于通用的异常。
要解决这个问题,也很简单,可以在 IDE 中安装 SonarLint 插件,这玩意能帮我们自动发现代码中的问题和不规范的地方,只要看到警告,按照它说的改就行了。
同事们:“好耶!我们都是程序员大佬了~”
然而,很快我又发现了新的问题。。。
插件虽好,但都是别人定义好的规则。如果想补充我们鱼厂自己的代码规范或开发建议,就比较麻烦了。
比如:
-
-
-
引导开发者使用团队内已经开发好的方法,而不是重复开发
-
团队内部使用相同的异常处理逻辑,比如抛出自定义异常
这些场景往往和企业自身的项目与团队强相关,可能涉及很多自定义的业务信息。那怎么才能在开发时,结合团队自己的要求和业务给出开发建议呢?
我陷入了沉思。。。
不知过了多久,我想到了:现在 AI 不是很流行么?同事们也都在利用 AI 生成代码、提高开发效率。那如果我把业务知识提前告诉 AI,AI 是不是也能指导我们写出更规范的代码么?
上网一搜,发现
腾讯云 AI 代码助手
已经支持了这个功能!
腾讯云 AI 代码助手是一款免费产品,提供生成代码、解释代码、代码纠错、生成文档、技术问答等功能:
接下来我们试试看如何使用它来帮助我们写出质量更高的代码。
利用 AI 提升代码质量
首先进入官网:https://copilot.tencent.com
点击 “企业免费开通”,会创建一个团队,我们可以通过微信或飞书快速邀请成员加入:
然后通过点击左侧列表进入到了
知识库
功能。所谓的知识库,就是给 AI 提供各种文档资料,之后 AI 在回答时会先从知识库中找到相关的内容,再结合自己已有的知识去总结。这里官方已经内置了一些常用的技术知识库:
但我的目标是让 AI 根据团队的情况自定义代码规范和建议,因此需要新建知识库,名称为
codestyle
:
创建完知识库后,我们首先要给知识库添加数据,可以是文档、代码或压缩包,支持批量上传。
这里我参考网上的规范,并结合鱼厂团队的情况编辑了一份《鱼厂 Java 开发规范》,上传到了知识库中。
比如下图中红圈内的规范,就是我主动添加的,防止缺少经验的同事不小心暴露敏感数据:
上传文档后,腾讯云 AI 代码助手首先对上传的数据进行一些预处理,比如将文档内容分段、或者给代码添加注释总结提示来提高代码检索的准确度;然后是切分内容并以向量的形式存储在数据库中。之后,系统就能够根据用户的问题在知识库中找到与之相匹配的内容,从而提高回答的准确性。
这背后其实是大模型 RAG(Retrieval-augmented Generation)技术。针对代码场景,腾讯云 AI 团队也对 RAG 做了优化。比如切分代码的时候,尝试使用 AST 的代码结构树来提取不同语言的代码块,以 function 为最小提取粒度,更合理化地切分整个代码文件等等。
最后,点击启用知识库,接下来就可以测试一下啦~
首先在 IDE 里搜索
腾讯云 AI 代码助手
,安装插件:
然后在 IDE 右侧打开代码助手,有任何问题都可以问它,腾讯云 AI 代码助手内置了很多技术文档、专门对技术问题做了优化,效果还是不错的:
接下来试试看代码助手能否利用知识库发现代码的问题。先选中一段团队内的烂代码,然后在 AI 对话框中输入
/fix
表示想要修复代码问题,会自动关联
@workspace
项目上下文,再输入
#codestyle
来关联之前已经创建的知识库:
AI 很快就给出了结果。可以看到,代码助手引用了规范文档中设定的代码风格对代码进行了修复:
修复后的代码如下:
显然代码比之前规范了很多,但是好像有个问题,规范文档中不是写了 “不建议输出 API 密钥” 么?为什么修复后的代码还是输出了密钥?
回到腾讯云 AI 代码助手的知识库,点击设置:
哦哦哦哦哦哦!原来可以自主设置 AI 从知识库中筛选的片段数量(Top K 参数),默认为 3,所以只参考了前几条规范。可以将 Top K 的值调大,根据自己的需要设置即可:
再次向 AI 代码助手输入
@workspace /fix #codestyle
,看到这次引用了 5 项资料作为参考:
修复后的代码也按照规范文档移除了敏感信息:
接下来,我只需要不断完善文档并持续 “喂” 给 AI 知识库,AI 就能成为优秀的代码规范大师。开发者们在写完代码后,检测一下就可以啦。
还可以选中代码片段后按快捷键,更快地选择操作来执行:
拥抱 AI
到这里,我们已经成功完成了本次 “拯救鱼厂代码规范” 的任务。可能你也发现了,无论是对于个人开发者还是团队,AI 都是提效利器,也是程序员必须要掌握的技能。
如今国产 AI 也在蓬勃发展、百花齐放,鱼皮也在一直关注各家 AI 的产品动态。但不论是哪种产品,关键还是先用起来,像前面用到的腾讯云 AI 代码助手目前是
完全免费
的,推荐给大家。
对于企业来说,AI 不仅可以用来指导团队开发者、提升研发效能,我们也在尝试通过
研效看板
分析整个团队的代码生成质量和采纳率,帮助评估知识库的质量:
对于个人开发者,就是要多利用 AI 来生成代码,学会如何驾驭 AI 来生成自己需要的代码。像我个人现在的开发理念是
“尽量只让 AI 来写代码,人只负责指挥”
,听起来可能会有些荒谬,但这一定是未来流行的开发模式。