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

千强姑娘_4384

千强姑娘_4384

2023-04-12

1685人浏览

转载

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

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

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

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

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

如何反转一个字符串?

如何发起一个HTTP调用?

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

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

先问一个简单的问题:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

图片

(点击看大图)

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

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

ChatGPT能运用这样的原则吗?

先问问它会不会做设计:

图片

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

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

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

员工有三种类型

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

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

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

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

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

图片

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

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

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

图片

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

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

图片

(点击看大图)

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

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

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

图片

图片

图片

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

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

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

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

图片

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

图片

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

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

图片

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

图片

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

图片

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

图片

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

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

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

图片

图片

图片

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

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

Ask Gemini/ChatGPT
Ask Gemini/ChatGPT

用于在用户想通过浏览器自动化与 Google Gemini 或 ChatGPT 交互时。触发短语包括“ask Gemini”“ask ChatGPT”“ask GPT”“让...”。

下载

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

图片

图片

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

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

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

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

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

chatgpt

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

2023.09.21

1071

6

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

2024.03.13

1437

13

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

2025.09.05

7115

14

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.27

362

13

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

2026.04.09

364

30

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

2026.04.17

243

15

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1838

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2924

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

6224

49

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ChatGPT入门手册
ChatGPT入门手册

共0课时 | 0人学习

ChatGPT使用教学
ChatGPT使用教学

共2课时 | 238人学习