ChatGPT时代,我们可能站到了自然语言编程的大门口
ChatGPT大火,我现在有种感觉:我们可能站到了自然语言编程的门口,一脚下去,也许能把门踹开。
当然,也可能会踢到一块铁板。
回顾我们的编程之路,基本上就是一个编程门槛不断降低的历史。
最早的一批前辈们通过手工插拔电路的方式把程序输入计算机,每次编程都得好几个小时,甚至好几天。

冯诺依曼架构出现后,程序可以存储在内存中,随意变化,一下子方便了很多,但是编程依然是非常低级的汇编,上古的大神们用汇编写Unix等操作系统、编译器,这时候程序员是珍稀动物,编程门槛太高了。

Fortran/COBOL/BASIC/C/C++/Pascal等高级语言的出现让编程难度降了一个等级,再加上80年代PC行业的爆发,编程行业开始繁荣。
到了90年代,Java、Python、Ruby、JavaScript等编程语言,让程序员更加远离硬件,远离内存管理,可以把目标聚焦到业务逻辑上。
进入21世纪,企业为了应对快速的市场变化,对信息化的需求越来越高,迫切需要快速地实现业务,推向市场,于是low code ,no code 又形成一个巨大的浪潮,在界面上,通过拖拽的方式就可以编程了。
再往下走一步,大家都非常明白,那就是自然语言编程。
在之前自然语言编程大家都觉得是挺不可思议的事情,因为这需要AI理解自然语言,并且能准确地输出代码,这是一件非常难的事情。
但是ChatGPT、通义千问等大模型出现以后,我们突然发现,自然语言编程出现了重大突破,我们可以告诉AI需求,让AI来生成代码了!
我们可以告诉AI:
我需要实现一个Product的RESTful的接口,用SpringBoot来实现,Product的属性包括id,name,description, imageUrl。
在几秒内,AI就可以迅速生成从最上层到最底层的代码,更让人震撼的是,它还支持微调的能力。
我们可以说:“数据库访问用MyBatis实现。”AI可以迅速把数据库访问代码改成MyBatis。
当我们说:“把imageUrl改为image_url”,AI 马上可以找到所有相关代码,把imageURL改过来。
这种微调的能力,远远超过了之前常见的代码生成器,AI似乎准确地理解了你的要求,对代码做了精确的修改。
当然,对于某些极端的情况,AI会有些考虑不周,还依赖程序员的洞察力。所以我经常说AI能生成95%的可运行代码,剩下的5%需要则依赖程序员的功力。
这还只是生成代码,程序员还需要把代码从聊天窗口复制到IDE中去运行调试。说实话,这个过程也挺烦人的。
钉钉刚刚发布的AI生成应用场景突然又让我看到了新的方式,在通义千问这个大模型的支持下,它不仅仅是用自然语言生成代码,而是直接生成应用,一键部署,然后直接在钉钉群聊里运行起来!
它甚至通过拍照的方式就可以生成一个应用,让输入的方式不再只有文字:

GPT-4在之前的演示中,也展示了根据图片生成代码和网页的能力(这个能力现在没有正式发布,让大家使用),但是钉钉已经可以直接生成可以运行的低代码应用,比如常见的工单管理系统、门店巡检系统、客户信息管理系统都可以交给AI去帮我们开发出来,这实在是太棒了。
如果自动生成的应用程序不满足要求,也可以通过继续对话让AI帮你修改应用,添加选项、删除字段。

拍照生成应用这个微软也可以做到,但我发现钉钉还剧透了一个很棒的能力,就是智能推荐选项字段,帮你补全。这个能力虽然看起来简单,但是技术上实现起来难度应该很大,需要给大模型输入大量的行业know how。
钉钉把自家宜搭低代码的应用模板给大模型学习,就等于是把各行各业(制造、医疗、建筑等)及各类高频业务场景(人事行政、财务报销、生产制造等)都喂给了AI,构建了丰富的领域业务数据。
有了领域业务知识,大模型在生成应用时,对业务人员提出的需求理解就会更加准确,生成的应用也更加精准。
这种能力对于不懂代码的业务人员是非常便利、非常友好的,他们不需要再依赖程序员去实现类似的需求,自己分分钟就可以把应用开发出来。
这类拍照或者自然语言生成的应用,结合我去年给大家介绍过的钉钉酷应用能力,还可以实现一键把应用部署在群聊里。通过动态卡片的方式,让业务人员在一个群里就能完成人机交互,聊着天就把事儿给办了。
看到这里,你肯定会有这个疑问:AI都支持自然语言编程了,这么强大了,它能完全替代程序员吗?
对于初级程序员来说,如果只会做CRUD,AI的威胁非常大,因为明确的、有规则的需求对于AI来说是小菜一碟,分分钟搞定。
对于高级程序员来说,在编程中也少不了增删改查,这时候AI就是一个非常好的帮手,因为对于繁琐的、重复的代码工作,都可以交给AI来完成。在这个过程中,高级程序员只要去“指导”它,“引领”它就可以了,减少了无效的时间浪费。
高级程序员可以把自己的精力放在更需要创造力的工作上来,对于现在的AI来说,让它直接生成巨型的复杂系统,它还是力不从心的。
比如我们告诉AI:
我要创建一个电子商务系统,包括用户管理,商品管理,订单管理,仓储管理等常见的功能,需要支持秒杀活动,优惠券,积分系统等功能,帮我把代码都写出来。
AI是绝对不可能给你实现的,因为这样的需求太模糊,如果用流程图,界面图,Use Case等把这些大系统的需求描述出来,没有几百页是不可能的。即使你把这几百页文档都灌给AI,它也不可能给你完整地实现了。
高级程序员需要出马,把大型系统进行分解,形成各个模块,然后让AI介入生成代码,生成应用。
可以看出,自然语言编程已经发展到了一个非常高的层面,可以成为程序员提升效率的巨大助力。
在未来,没有纯粹的码农,每个人都需要深入理解自己所面临的挑战,并通过智能化的生产力工具去快速解决问题。
钉钉发布会的几个场景演示,虽然只是工作智能化的一小步,却展示出了远超“通过聊天生成代码的能力”,可以直接创建、部署,在群里运行应用,真是非常方便。
工具的价值就在于能否更好地服务于人,用机器提升人的生产力。
我们可以畅想,随之智能化的进一步发展,开发应用的能力会不会就像用Word一样,变成一种普遍的能力呢?这是一件特别有想象力的事情,谁都难以预料,只能交给时间来证明了。
相关文章:
ChatGPT时代,我们可能站到了自然语言编程的大门口
ChatGPT大火,我现在有种感觉:我们可能站到了自然语言编程的门口,一脚下去,也许能把门踹开。 当然,也可能会踢到一块铁板。 回顾我们的编程之路,基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…...
深入理解AMQP协议
一.AMQP 是什么 AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)是一个提供统一消息服务的 应用层标准高级 消息队列协议,是 应用层协议的一个 开放标准,为面向消息的中间件设计,是一个进程间传递 异步消息…...
大型体检管理系统源码:适用于大中型医院或独立体检中心
一套专业的体检管理系统源码,是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理,使体检过程更为流畅、更有条理,更加便于管理,从而实现体检业务管理的自动化、信…...
ACM 1000 | 简单的a+b
文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 参考文献 0x07 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及…...
系统分析师选择题笔记
目录 1、知识产权与标准化 1.1 保护范围与对象(★★★★) 1.2 保护期限(★) 1.3 知识产权人确定(★★★) 1.4 侵权判断(★★★) 1.5 标准的分类(★) 1.6 标准代号的识别(★) 2、系统配置与性能评价 2.1 系统性能概述 2.2 系统性能(性能指标)(★…...
MySQL隐式类型转换
当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。有些转换是隐式发生的。例如,MySQL会根据需要自动将字符串转换为数字,反之亦然。 转换规则 如果一个或两个参数都为NULL,则比较结果为NULL 。但是相等比较…...
IT知识百科:什么是SSID?
一、什么是SSID SSID(Service Set Identifier)是无线网络中的一个重要概念,它是一个用于标识无线局域网(WLAN)的名称。SSID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称。在无线…...
OpenAI-ChatGPT最新官方接口《从0到1生产最佳实例》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(十一)(附源码)
Production Best Practices 生产最佳实例 前言Introduction 导言Setting up your organization 设置您的组织Managing billing limits 管理计费限额API keys API密钥Staging accounts 演示账户 Building your prototype 构建您的原型Additional tips 其它技巧 Techniques for i…...
2023 IT市场权威榜单|美创数据库防火墙斩获“新一代信息技术创新产品”
4月20日,由赛迪顾问主办的“2023 IT市场权威榜单”评选结果正式发布,美创数据库防火墙斩获新一代信息技术创新产品! 美创数据库防火墙是一款抵御并消除由于应用程序业务逻辑漏洞或者缺陷所导致的数据库安全问题的专业级数据库安全产品&#x…...
30个超级有用的JavaScript单行代码
在这篇文章中,我列出了一个系列的 30 个 JavaScript 单行代码,它们在使用 vanilla js(≥ ES6)进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类࿱…...
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
前言 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对…...
诊断CAPL自动化(1)—— CANoe自带的诊断工程分析
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 📘前言 🍅 学习CANoe,官方的实例工程就是最好的学习模板,对于初学者,…...
【dp】最长递增子序列
文章目录 方法一:动态规划方法二:贪心 二分查找构造最长递增子序列 方法一:动态规划 dp[i]:末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1,若遍历到的元素小于当前值arr[i],表示当前值arr[i]可以和…...
docker容器:Docker-Compose
目录 一、Docker-Compose 1、Docker-Compose使用场景 2、Docker-Compose简介 3、Docker-Compose安装部署 4、YML文件编写注意事项 5、Compose配置常用字段 6、 Docker Compose 常用命令 7、Docker Compose 文件结构 8、docker Compose撰写nginx 镜像 9、docker Compos…...
如何使用DNS实现融合CDN功能
将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统(DNS)是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统,它将各种信息与分配给每个参与实体的域名相关联,它基…...
有关实现深拷贝的四种方法
深拷贝与浅拷贝: 在开始之前我们需要先了解一下什么是浅拷贝和深拷贝,其实深拷贝和浅拷贝都是针对的引用类型,JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对…...
Mysql 高可用部署实践
mysql主从是如何备份的? 在MySQL主从复制架构下,备份通常需要在主库和从库上分别进行。 主库备份: 在主库上进行备份时,可以使用mysqldump等命令生成SQL文件,并将其保存到本地或者远程服务器上。备份过程中需要注意以下几点&a…...
IEEE-TMI:张孝勇团队开发小鼠精细脑结构自动分割的深度学习算法
近日,复旦大学类脑智能科学与技术研究院青年研究员张孝勇课题组联合德国亥姆霍兹慕尼黑研究中心,在医学图像处理领域顶尖期刊《IEEE医学影像汇刊》(IEEE Transactions on Medical Imaging,TMI) 发表了题为《MouseGAN:用于小鼠大脑…...
八股文之面向对象和面向过程的区别
面向对象(Object-Oriented)和面向过程(Procedural)是两种不同的编程思想。 面向过程是以任务为中心,将程序分解成一系列步骤,在每个步骤中定义一个函数来完成特定的任务。它主要关注程序执行的过程和如何组…...
SpringBoot使用Redis实现分布式缓存
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
