ChatGPT强悍的编程能力,让我吓出一身冷汗!

news2024/12/24 21:06:09

最近有好几个人给我安利ChatGPT,说老刘快你去看看吧,这货实在太强了,搞不好我们程序员都失业了。

刚开始我都是微微一笑,怎么可能?我之前的观点一直都是在我的有生之年,AI绝对不可能干掉程序员。

但是安利的人实在是太多了,我忍不住要去注册个账号去看一下。

没想到这货竟然没对中国开放,网上有些攻略,我嫌麻烦,赶紧呼叫在国外的好兄弟,请他帮忙注册一个账号。 

尝试开始,我决定跳过那些简单的问答,例如:

如何反转一个字符串?

如何发起一个HTTP调用?

因为这种东西对于阅码无数的AI来说太小儿科了,根本测试不出来它的本事有多大。

程序员的一个核心能力就是拿到需求,能作出优雅的设计,咱们就拿这一点考考它。

先问一个简单的问题:

55134327d1532ce19ec0532cee8710be.png

(点击看大图)

不出所料,它“背诵”得非常好!

它说的最后一个原则是:尽量使用合成/聚合的方式,而不是继承来达到复用目的。 这确实是面向对象一个重要的设计原则。

ChatGPT能运用这样的原则吗?

先问问它会不会做设计:

7cf1188a4bc16066070f6a254407f688.png

说得真不错,咱们开始放大招,我手头正好有一个经典案例:薪水支付,这是从经典书《敏捷软件开发:原则,模式和实践》中提取出来的。 

这个案例的需求是这样的:

该系统由一个公司数据库以及和员工相关的数据组成,系统需要准时地按照规则给员工支付薪水

员工有三种类型

1.钟点工,每个小时有固定报酬,他们每天提交工作时间卡,其中记录了日期以及工作小时数,如果每天工作超过8小时,按1.5倍进行支付。每周五对他们进行支付。

2.月薪员工,工资固定,每个月的最后一个工作日对他们进行支付

3.销售人员,有固定工资,但会根据他们的销售情况,支付给他们一定数量的佣金,他们会提交销售凭条,其中记录了销售的日期和数量。每隔一周的周五对他们进行支付。

员工可以选择支付方式,可以把支票邮寄到他们指定的邮政地址,也可以保存在财务那里随时支取,或者要求直接存入他们指定的银行账户。

看了这个需求以后,一般的设计是这样的:

53c49cc9b49e1556b9148e9dc0bca638.png

Employee 作为基类,不同类型的雇员类来继承。

但是这个需求会有变更,客户要求员工类型可以变更,例如从钟点工变成月薪雇员,这样上面的设计就不行了。

这个时候应该做个抽象,,用一个类PaymentClassification来表达支付分类,然后让Employee类持有这个实例,简单说就是用组合代替继承。

5983df8c88103429c8b448973d93cc6c.png

这相当于是个陷阱了,我们程序员能识别,抽象,这个ChatGPT可以吗? 我还真有点好奇。

先问最初的需求,ChatGPT的回答是这样的:

ab9243c63b7e243d671f1087fcfe64ed.png

(点击看大图)

你别说,还真是不错,它“理解”了需求,从中抽取出了名词进行类的设计,并且设计好了类的继承关系。

已经达到了面向对象设计的初级水平。

接下来是重点,给他挖坑:

9c986c3f37179102f8b39bd17773ffe0.png

b97dab564a4e59bebb3af6b72fd36478.png

0de670b2e9c14105e3f6bc95b606a40f.png

非常惊艳,这货竟然学会了抽象!

虽然它抽象出的类型叫EmployeeType,不如PaymentClassification那么精确,但是大方向是一致的:用EmployeeType来管理支付规则,员工类型发生变化时,Employee类不需要变化。

说实话,我看到它给出这个结果,内心是很吃惊的,可以说,能超越相当多的程序员了。

接下来我又问它关于支付周期怎么处理:

58162b06bad93ade2f5eed3f9b153caf.png

这一次它的抽象更加厉害,直接给出了精确的名称:PaymentSchedule,还有相关的伪代码!

e9a35c68a277e48567ad3673a50c8e1c.png

它还特别提到了,当需要修改支付周期时,只需要更改PaymentSchedule即可,不用修改原有的员工类,组合优于继承,再次体现出来。

这和书中的例子几乎一样了:

6b6b06f919ddc5d5c9089619886c267d.png

继续问支付方法的处理方式:

41eb5697b54c3bb571d63118cae54540.png

不出所料,它的设计依然很棒:

40f50fb87fc57df3e1f8a152f0b63530.png

实际上,ChatGPT的设计,已经非常接近书中的最终方案了:

f96a5008b05f59865ffadb2e24273e8a.png

尝试到这里,心里有一丝失落和不甘,这个ChatGPT实在是太强悍了,展示出来很强的设计能力,并且对话过程非常流畅。

人工智能真的能理解需求,学会了抽象,能设计出漂亮的类结构了吗?程序员的核心能力被替代,程序员的危机真的来了?

我又问了它一个问题,让它把类图画一下:

bd6e5e1ec2f6b629d5146cea350fd6b4.png

037290394c33d2869c0d045ccc2725d0.png

bf16e089771ad5e7b20cc215ed3e630b.png

等等,这里的类名怎么和之前的不一样了,怎么出现了一个新的概念:工会成员? 我在这次对话中,可是从来没有告诉过它这个概念啊!它从哪里知道的?

最大的可能是,这货并没有理解我告诉它的需求,它之前应该学过这个案例,依然是在“背诵”它学习的东西,自作主张把工会成员也给我弄出来了,从而露出了马脚。 

我关掉了ChatGPT网站,再次登录,重新用同样的内容和它交互,这次的结果彻底地把它暴露了。

7af8318a3666534ae3ea95c0cea74dcc.png

566f262a97d9b5860f9dfc902826611f.png

看到没有,这次它根本没有抽象出PaymentClassification/EmployeeType,它竟然推荐了面向过程的思路,添加一个type的属性,用switch来解决问题。这比之前的方案要差太多了。

最后聊一下感受吧!ChatGPT确实很厉害,应该是学习了海量的数据,肚子里货很多,但是它依然没有真正的理解需求,它告诉我们的答案就是在现有知识中做提炼和整合。

如果抛给它一个完全全新的领域问题,估计它会懵的,大家可以拿实际业务问题来玩一下。

所以,ChatGPT是一个好帮手,但是你要想完全依赖它,可要掂量掂量了,它告诉你的可能是优雅的代码,也可能是垃圾代码。

(完)

点击下方图片,查看更多精彩

bad4687662f586cb2b2fefe5b1efe889.png

44dea097fc520dfa22e3714906a0a3a5.png

f3b1a9c67a3efcf1bd08ae3ccd3e8f35.png

9062f2f18bc07f4e6cb318a104e1930c.png

c8064a82200b6f02167866151791357e.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇文章让你懂 io流

文件:就是保存数据的地方。文件流:文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径。输入流:数据从文件(磁盘)到Java程…

Spring-Cloud-Admin-06

前言 admin是用来监控各个服务的状况的,通过前台页面,可以查看我们各个服务的一个状态,是否在线,服务状况的一个框架。 服务端项目使用 admin有服务端和客户端,我们不需要每个服务都导入admin的客户端依赖,…

以太网 网络高可用性(链路聚合、LACP模式、静态手动模式)

2.9.0 以太网 网络高可用性(链路聚合、LACP模式、静态手动模式) 网络高可用性2.9.0 以太网 网络高可用性(链路聚合、LACP模式、静态手动模式)一、简介:1、单板可靠性:1.1、实现机柜式的可靠性提升&#xff…

Java#35(多线程扩展)

目录 一.定时器 定时器是一种控制任务延时调用, 或者周期调用的技术 1.Timer定时器(不推荐) 2.ScheduledExecutorService定时器(推荐) 二.并发与并行 三.线程状态 一.定时器 定时器是一种控制任务延时调用, 或者周期调用的技术 1.Timer定时器(不推荐) 代码示范: import …

Microsoft Store无法打开的解决办法【成功解决】

Microsoft Store无法打开解决办法我自己的解决办法其他Bug导致Microsoft Store无法打开的解决办法vpn代理问题使用TLS 1.2其他BUG解决方案成功解决之前我就有安装wsl的想法,但是他要求打开Microsoft Store,我尝试了各种办法,都不行。今天终于…

SpringCloud-全面详解(学习总结---从入门到深化)

​​​​​​​ 微服务架构进化论 单体应用阶段 (夫妻摊位) 在互联网发展的初期,用户数量少,一般网站的流量也很少,但硬 件成本较高。因此,一般的企业会将所有的功能都集成在一起开发 一个单体应用,然后将该单体应用…

Python代码加速100倍,针对Excel自动化处理的加速实战!

并发 vs 并行 说到并发编程,我们先来澄清一下并发 (Concurrency) 和 并行 ( Parallelism)这两个概念,因为这个两个概念的含义是不同的。 并行(Parallelism)指的就是在同一时刻,有两个或两个以上的任务的代码在处理器…

Spring Cloud Ribbon(负载均衡器)介绍及使用

目前主流的负载方案分为以下两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。客户端自己做负载均衡&#x…

[附源码]Python计算机毕业设计SSM基于框架的秧苗以及农产品交易网站(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

命令设计模式

一、命令模式 1、定义 命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作,请求方发出请求要求执行一个操作,接收方收到请求并执行操作。属于行为型设计模式。 命令模式通过在请求与实现之间引入一个抽…

Spring注解开发

1、Spring注解开发 1 注解开发定义Bean对象【重点】 目的:xml配置Bean对象有些繁琐,使用注解简化Bean对象的定义 问题导入 问题1:使用什么标签进行Spring注解包扫描? 问题2:Component注解和Controller、Service、Re…

【指纹识别】指纹识别【含GUI Matlab源码 029期】

⛄一、指纹识别简介 指纹识别技术主要分三个步骤:指纹预处理、特征提取、指纹分类与匹配。 无论是指纹分类还是指纹匹配,都需要提取指纹的有效特征,而特征提取的性能很大程度上要依赖于指纹图像的质量。在实际应用中,由于采集条件和采集设备的因素,采集到的指纹图像…

IBRNet:基于IBR的NeRF

IBRNet: Learning Multi-View Image-Based Rendering 针对问题:使NeRF具有泛化能力 如何做:主要还是针对颜色和密度的预测进行改进(三维重建部分),和NeRF一样,使用的是volume rendering(渲染部…

Vulkan下多线程渲染设计

1 Vulkan 视角下的多线程渲染 首先我们需要从vulkan api的顶层框架上来看一下,它在哪些地方可以让我们并行。 Vulkan API的基本框架 Vulkan不同于Gles只有一个(不被API暴露出来的)单一链条的cmdbuffer处理,它最大的特点是允许多…

阿里巴巴内部:2022年全技术栈PPT分享(架构篇+算法篇+大数据)

我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心…

Linux中裸机串口通信的基本方法

大家好, 今天主要和大家聊一聊,如何使用串口进行通信的方法。 目录 第一:串口的基本简介 第二:UART的特点 ​第三:UART的配置步骤 第一:串口的基本简介 串口又叫做串行接口,通常叫做COM接…

农业灌区量测水流量在线监测系统解决方案-灌区信息化管理系统-灌区水网智慧化

平升电子农业灌区量测水流量在线监测系统解决方案/灌区信息化管理系统/灌区水网智慧化,对灌区的渠道水位、流量、水雨情、土壤墒情、气象等信息进行监测,同时对泵站、闸门进行远程控制,对重点区域进行视频监控,实现了信息的采集、…

Docker系统性入门(五)

文章目录Podman安装&基操pod多架构CI/CD容器安全监控Podman Podman 是 Red Hat 在2018年推出的,源代码开放是一个基于 Linux 系统的 daemon-less 的容器引擎;可以运行在root或者非root用户模式最近总听到这个要代替docker什么的,可以参考…

甲骨文蟾蜍 Toad for Oracle 16.2 注册版

使您的 Oracle 数据库操作现代化以实现业务敏捷性。 Toad for Oracle 是唯一一款可帮助您简化工作流程、减少代码缺陷并提高代码质量和性能同时支持团队协作的开发人员工具。自动化管理任务并主动管理您的数据库,同时实现性能优化和风险缓解。快速轻松地定义、搜索…

硬核干货,带你一文掌握 MySQL 的binlog 、redo log、undo log

​hello,大家好。 在MySQL 中我们经常会接触到三个核心日志,它们分别是:binlog 、redo log、undo log。 好多同学对于它们可能并不陌生,但是具体区分起来各自的功能用途以及实现原理,那可能认知就会比较模糊了&#x…