AI编程助手那些事儿

news/2025/3/14 9:49:10/文章来源:https://www.cnblogs.com/mangod/p/18344408

最近跟身边的程序员老杆子讨论需求时,惊奇的发现,他居然没使用AI编程助手。一时间有2个想法从大脑闪过,然后心里还带了一丝轻蔑:

  1. AI编程助手这么好的东西,你居然不用。
  2. 作为老程序员,你居然不跟上时代步伐,在想啥呢。

不过确实有一些老杆子是用过AI编程助手,又选择了放弃,具体啥原因,我们来聊聊。首先说说市面上常用的几款AI编程助手。

1、几款AI编程助手

GitHub Copilot

GitHub Copilot是由GitHub和OpenAI联合推出的AI编程助手,是我最早使用的一款编程助手。刚推出时我立马尝鲜,真香!当时立马感觉解放了许多生产力。对于中文的理解以及生成的代码质量我还是满意的。

但是,因为价格的原因(一年需要1000多元),我一直使用的学生版和代理版。但是半年前发现GitHub对于代理版和学生版查的比较严,Copilot经常掉线,在加上服务器本来就在国外,有时候生成代码的响应速度确实有些慢,渐渐地放弃了。

文心快码

文心快码(Comate),是百度推出的AI编程助手。放弃了GitHub Copilot之后,在国内寻找,当时发现可用的基本就是文心快码了。试用了一段时间后,觉得生成代码的速度还行,但是代码的准确率或者被采用率,有点堪忧。

不过当时想着免费嘛,就随便用用吧,不合适的代码一个ESC键也就过了,合适的代码一个TAB键就采纳了,多少也能节省些工作量吧。

毕竟当时我 对于 不熟悉的领域 或者 大片段的代码,都是让ChatGPT生成的,我使用文心快码的主要场景是辅助生成一些简单或重复的代码。

通义灵码

通义灵码是阿里巴巴推出的AI编程助手,基于强大的Qianwen2大模型。通义灵码是我最近正在使用的AI编程助手。

一次偶然的机会,我被邀参加阿里的一个AI沙龙会,当时有一个小专题是讲通义灵码的。本来用文心快码时觉得效果一般,心里想着,通义灵码估计也就那样吧。

后来看那位宣讲通义灵码的哥们,激情满满,特别自豪,好像这款产品是他造出来的。这倒引起了我的好奇心。当时,他自豪地说他们的大模型怎么好怎么牛,通义灵码做了多少多少的微调,做了多少多少的优化,他们对安全是怎么怎么重视。

虽说,他的话我不全信,但真的是被他当时的激情所感染(也许是出于一个产品人的同理心吧)。

当晚,我就试用了通义灵码。安不安全的我不知道,但是,生成代码的速度挺快。随后,我又写了1个小时的代码测试,发现生成的代码正确率和被采用率还不错,后来就一直在用了。

通过这次选择,更加说明一个道理自助者天助之。一个产品人一定要对自己的产品充满自行。即使是一名程序员,在AI时代,也要将自己看做一个产品人。

ChatGPT

ChatGPT真的是永远的No1。要说生成代码的准确率和自然语言的理解力,即使是中文场景,ChatGPT也是最好的。

下面是一个ChatGPT与通义灵码针对同一需求实现代码的小示例,朋友们可以自行感受下。

需求

我有一个Html文件,想批量替换里面的font-size的数值,放大两倍。还要替换line-height的数值,也是放大两倍。请你用java写出代码

ChatGPT实现

import java.io.*;
import java.nio.file.*;
import java.util.regex.*;public class HtmlFontSizeLineHeightMultiplier {public static void main(String[] args) {String filePath = "htmlFile.html";try {String content = new String(Files.readAllBytes(Paths.get(filePath)));String updatedContent = updateFontSizeAndLineHeight(content);Files.write(Paths.get("updatedHtmlFile.html"), updatedContent.getBytes());System.out.println("File updated successfully.");} catch (IOException e) {e.printStackTrace();}}private static String updateFontSizeAndLineHeight(String content) {// Pattern to match font-size and line-height in CSSPattern fontSizePattern = Pattern.compile("font-size\\s*:\\s*(\\d+(\\.\\d+)?)(px|em|rem|%)", Pattern.CASE_INSENSITIVE);Pattern lineHeightPattern = Pattern.compile("line-height\\s*:\\s*(\\d+(\\.\\d+)?)(px|em|rem|%)", Pattern.CASE_INSENSITIVE);// Replace font-size valuesMatcher fontSizeMatcher = fontSizePattern.matcher(content);StringBuffer updatedContent = new StringBuffer();while (fontSizeMatcher.find()) {String originalValue = fontSizeMatcher.group(1);String unit = fontSizeMatcher.group(3);double newValue = Double.parseDouble(originalValue) * 2;fontSizeMatcher.appendReplacement(updatedContent, "font-size: " + newValue + unit);}fontSizeMatcher.appendTail(updatedContent);// Replace line-height valuesMatcher lineHeightMatcher = lineHeightPattern.matcher(updatedContent.toString());updatedContent = new StringBuffer();while (lineHeightMatcher.find()) {String originalValue = lineHeightMatcher.group(1);String unit = lineHeightMatcher.group(3);double newValue = Double.parseDouble(originalValue) * 2;lineHeightMatcher.appendReplacement(updatedContent, "line-height: " + newValue + unit);}lineHeightMatcher.appendTail(updatedContent);return updatedContent.toString();}
}

通义灵码实现

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class HtmlFontSizeModifier {public static void main(String[] args) {String inputFilePath = "path/to/input.html"; // 输入文件路径String outputFilePath = "path/to/output.html"; // 输出文件路径try {modifyFontSizesAndLineHeights(inputFilePath, outputFilePath);} catch (IOException e) {System.err.println("Error processing file: " + e.getMessage());}}/*** 修改HTML文件中的font-size和line-height值为原来的两倍。** @param inputPath  输入文件路径* @param outputPath 输出文件路径* @throws IOException 如果文件处理过程中出现错误*/public static void modifyFontSizesAndLineHeights(String inputPath, String outputPath) throws IOException {try (BufferedReader reader = new BufferedReader(new FileReader(inputPath));BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath))) {String line;Pattern fontSizePattern = Pattern.compile("(font-size:\\s*([0-9]+)(px|em|rem))");Pattern lineHeightPattern = Pattern.compile("(line-height:\\s*([0-9]+)(px|em|rem))");while ((line = reader.readLine()) != null) {Matcher fontSizeMatcher = fontSizePattern.matcher(line);Matcher lineHeightMatcher = lineHeightPattern.matcher(line);if (fontSizeMatcher.find()) {String fontSize = fontSizeMatcher.group(2);String unit = fontSizeMatcher.group(3);double newSize = Double.parseDouble(fontSize) * 2;line = line.replaceFirst(fontSizeMatcher.group(), "font-size: " + newSize + unit);}if (lineHeightMatcher.find()) {String lineHeight = lineHeightMatcher.group(2);String unit = lineHeightMatcher.group(3);double newLineHeight = Double.parseDouble(lineHeight) * 2;line = line.replaceFirst(lineHeightMatcher.group(), "line-height: " + newLineHeight + unit);}writer.write(line);writer.newLine();}}}
}

可以看到,在对于需求的理解上ChatGPT更好,在实现正则匹配的逻辑方面ChatGPT也更完善。

我推荐的用法

对于AI编程助手的选择,我的建议是双管齐下:ChatGPT + 国内某个大厂的AI编程助手

核心原因有3个:

  • ChatGPT的自然语言理解能力是最强的,生成代码的准确率也是最强的,可以用来生成小块需求代码。
  • 国内某个大厂的AI编程助手虽说在 自然语言理解能力 和 代码的准确率 方面可能弱一些,但是用来生成简单重复代码 和 完成简单需求 这些方面是OK的。而且国内的编程助手,生成代码的速度都比较快。
  • 国内大模型的发展速度我们亲眼所见,虽说跟国外的大模型还有些差距,但也在不停的追赶。我们要对国内大模型的发展有信心。

2、AI编程助手的工作原理

AI编程助手的背后是大语言模型和强大的算力。在大模型的基础上,进行了编程领域的代码和文档的微调训练,使其更加使用编程场景。

具体在编程时,AI助手会根据你的代码注释、函数名、代码文件等上下文信息,结合之前已经喂给它的开源代码库,生成与当前需求有相关性的代码片段。

3、AI编程助手的优缺点

目前,仍有许多开发者由于种种原因对AI编程助手持排斥态度,我们确实也要承认AI编程助手有缺点,但是也有许多优点。

优点

  1. **提升效率节省时间:**AI编程助手可以快速生成代码,减少手动编写的工作量。尤其是在重复性高 和 常规逻辑的编程任务中,它能够显著提升效率,让开发者有更多时间专注于核心逻辑和创新。
  2. 代码质量的提升:有时候能感觉到,AI生成代码质量比我自己写的好。
  3. **加速获取知识:**通过AI编程助手,开发者可以快速获取各种编程知识和技术方案,明显缩短学习曲线。在写代码时,它也能够提供即时的建议,避免开发者长时间的搜索和查阅资料。这一点,我感受非常深刻,记得两年前学Flink和Golang时,当时扫过文档之后,对应如何实践项目还是无从下手,幸好有AI编程助手,让我快速学会了未知领域的知识,并且能快速做出项目。
  4. 向AI学习:开发者在与AI的交互过程中,也会不断地接触到新的代码模式和最佳实践,从而提升自己的编程能力和技术水平。

缺点

  1. 对复杂逻辑的处理能力有限:虽然编程助手在处理简单和常见的代码片段上的表现挺好,但是对于复杂逻辑的处理能力较弱。在涉及到复杂算法或者业务逻辑的情况下,基本上给不出合适的代码。所以,大部分时候,AI编程助手生成的代码仍然需要自己过一遍。
  2. 存在安全隐患:在使用AI编程助手时,需要将代码丢给AI编程助手,然后它去猜测相关代码。至于它拿到代码,会不会做点什么,我们无从得知。
  3. 容易存在依赖性:对于长期使用AI编程助手的开发者,很容易形成依赖性。大部分场景会养成等待AI生成的习惯,一旦离开了AI编程助手,确实有些不习惯。不过这一点算是仁者见仁智者见智吧,AI的发展是大势,就像当年的互联网一样,所有的不习惯未来都会变得像空气一样无处不在。
  4. 容易养成不思考的习惯:长期使用AI编程助手的开发者,除了思考业务逻辑之外,大部分的代码实现都懒得自己思考了。为了避免自己变得懒惰,每次AI助手生成代码之后,我都会翻阅一遍,再与自己的思路做个对比。不过这也不一定算缺点吧,AI的出现不就是为了解放我们的思想和生产力嘛,不就是为了让我们从一个简单的执行者,变成一个操盘者嘛。

4、为什么有的开发者不使用AI编程助手

之前看过一个数据,中国约有1000万程序员,预计有200多万在使用AI编程助手,而且数字一直在飙升。我也从一些渠道了解到有些开发者不愿意使用AI编程助手,原因如下:

  • 自动提示的灾难:在使用AI编程助手时,几乎每次敲击都会生成提示代码,这让许多开发者觉得AI会打断自己的思路,或者有时强迫症,非要去看一眼AI提示代码是否正确。这个痛点各大厂商都在极力解决,最近我已经明显感觉到触发提示的地方变少了,相信会越来越智能的。
  • 安全隐患:部分个人和企业比较担心使用AI助手会泄露自己的核心代码,所以一直不敢用。虽然各大厂商都在极力宣传自己的安全策略,极力强调自己不会存储和使用代码,但是好像没人信。
  • 不愿意跟进时代:有些开发者确实比较保守,故步自封,不愿意尝试新事物。我倒是觉得,不管一个新事物好坏,起码先尝试下。
  • 低估AI的能力:有些开发者觉得AI的能力不行,写的代码不好。我倒是觉得AI的能力一直在增强,而且某些方面比人强多了,没必要那么自信,多尝试几次,你会发现AI在写重复代码和简单逻辑方面还是很强的。把杂事儿丢给AI,自己多留点精力想想复杂业务问题,不是更香嘛。

对于部分开发者和企业担心的安全问题,我有几点想说:

  1. 大厂没必要拿你的代码做二次训练,因为大厂如果想AI助手变得更好,他需要更多优质的代码。你的代码质量未必有多好,他只会拿优质的开源代码做训练。
  2. 如果你的主营业务是卖代码,估计你会担心自己的核心资产泄露。大可不必担心。因为AI只会小片段的生成代码,AI无法生成一个项目的完整代码。
  3. 如果你担心大厂拿你的代码去做业务,那也不可能。以大厂的能力,要想做某块业务,肯定会与自己的也有业务相结合,不可能直接用你的代码。而且,要是真想做某块业务,最好的办法是收购你,不会拿你的代码去用。讲实在话,代码有时候是负债,真正值钱的是你的业务。

5、未来的超级个体时代

AI的定位一直都是助手,而且AI会越来越强大。AI未来一定会淘汰码农,但是AI一定会与优秀的开发者共生。开发者应该抓住这个时代的机会,努力让自己成为一个超级个体。

在未来的超级个体时代,知识的掌握已经不再是唯一的重要因素。随着AI技术的发展,更多的创意、资源整合能力和产品能力将成为核心竞争力。

AI编程助手能够处理大量的重复性工作,释放开发者的创造力。开发者可以将更多的时间和精力投入到创新和创意上,开发出更好的产品。

经过了这一轮的经济的洗礼,有点企业倒闭了,有的企业活下来了。即使是活下来的企业,相信也学会了更灵活的用工方式。未来,有了AI的加持,个体的能力一定会被放大。届时,企业一定更倾向于找独立的个体合作。

6、总结

本篇主要聊了几款AI编程助手、它的工作原理、它的优缺点、超级个体等等。我鼓励开发者积极拥抱AI,让自己成为一个全栈开发者和超级个体,让AI帮助自己释放更多的生产力和创意,让自己充满无限可能。

本篇完结!欢迎 关注、加微信(yclxiao)交流、全网可搜(程序员半支烟)!!!

原文链接:https://mp.weixin.qq.com/s/NwDlNIjqeRu4OuC1jVhEkA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778556.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【靓小虫】2024抖音采集软件,支持关键词搜索、主页作品、评论采集等一键批量爬取!

马哥原创: 用python开发的抖音采集软件工具,支持:爬取搜索关键词结果、爬取主页作品并下载无水印MP4视频、爬取评论内容。目录一、背景洞察1.1 爬取目标1.2 结果演示1.2.1 关键词搜索结果1.2.2 采集:指定博主主页作品1.2.3 采集:指定作品的评论1.3 演示视频二、功能介绍2.0…

读零信任网络:在不可信网络中构建安全系统10认证身份

认证身份1. 用户所知道的信息 1.1. 只有用户本人知道的信息 1.2. 密码1.2.1. 密码是常用的认证机制1.2.2. 密码验证就是确认用户“所知”性的较好途径1.2.3. 用户可以利用密码管理器来便捷地管理多个高强度密码,从而有效降低数据泄露风险1.2.4. 长度足够长1.2.4.1. 最近的NIST…

代码随想录算法训练营day04|24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07.链表相交,142.环形链表II

24.两两交换链表中的节点 题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 我的代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNod…

For SALE: State-Action Representation Learning for Deep Reinforcement Learning

发表时间:2023(NeurIPS 2023) 文章要点:这篇文章提出,在强化学习里,对于特征向量表示的任务(low-level states),而不是图像表示的任务(image-based tasks),做表征学习也是有必要的。作者认为一个任务的困难在于底层的dynamic,而不是状态空间的大小,对state-action做…

活动回顾 | 2024 搜索客社区 Meetup 首期线上直播活动圆满结束,附 PPT 下载

2024 年 7 月 31 日,由搜索客社区和极限科技(INFINI Labs)联合举办的首期线上 Meetup 技术交流直播活动圆满结束。本次直播活动吸引了超过 300 人次的技术爱好者参与,共同探讨了 Easysearch、大模型、RAG 等前沿技术和实践应用,为广大搜索技术爱好者提供了一个宝贵的学习和…

HTML概述1

HTML概述 HTML中文是超文本标记语言,它是 HyperText Markup Language首字母简称,是一种用来结构化web网页及其内容的标记语言。网页的内容是由段落、列表、图片和文字等组成。 HTML组成 HTML由一系列元素组成。元素和标签不是一个概念,典型的元素就是由开始标签。文本和结束…

VS远程调试NatApp

目录远程调试用户机器程序1. 调试工具1.1 VS远程调试服务1.2 服务路径1.3 拷贝与启动服务1.4 配置选项2. 外网穿透隧道工具2.1 工具:natapp.exe2.2 官网2.3 购买隧道:2.4 配置隧道:2.5 修改配置:3. 启动调试3.1 附加进程3.2 配置进程 远程调试用户机器程序 1. 调试工具 1.1…

R语言入门笔记:第一节,快速了解R语言——文件与基础操作

上一期 R 语言入门笔记里面我简单介绍了 R 语言的安装和使用方法,以及各项避免踩坑的注意事项。我想把这个系列的笔记持续写下去。这份笔记主要是针对 R 语言学习过程中各个容易掉进去的坑进行规避,以及根据我自身的经验提供一些学习思路。目录关于 R 语言的简单介绍到什么地…

基于强化学习的路径规划matlab仿真,对比QLearning和SARSA

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 2.算法涉及理论知识概要强化学习(Reinforcement Learning, RL)是一种机器学习方法,它使代理(agent)通过与环境互动,学习采取何种行动以最大化累积奖励。在路径规划问题中,强化学习被用于自动探索环境,找…