ChatGPT开始威胁程序员的核心能力了!

ChatGPT是程序员的好帮手?还是要干掉程序员?

我觉得不仅要看它生成代码的能力,更关键的是要看它是否具备强大的设计能力。

设计能力有两个层面,一个是高层的,例如架构设计,系统设计。

一个是相对低层的设计能力,主要设计具体的类和接口。

今天我们看看它在这两个方面分别表现如何。

由于ChatGPT的回答特别啰嗦,我会删除一些细节,只保留重要部分。

出于公司保密的原因,没法用真实项目,只能用书籍中公开的案例来考考它。

01

架构设计

这里我使用的案例是客服工单系统,是从一本书《从程序员到架构师》中提取出来的,这本书有很多实战案例,顺便向大家推荐一下。

客服工单系统的大概需求是这样:

有个客服系统,用的MySQL数据库,每年产生的工单有3000多万条,每个工单会有5~6次操作,这些操作也要记录下来,这样每年就会有超过1.5亿条操作记录。

现在客服打开系统查看工单的时候,速度非常慢,10秒才能打开, 现在对SQL语句,索引等已经优化到了极致,无法再继续提升。

现在系统性能已经严重影响了客服的处理效率,客户要求一周之内解决这个问题,时间很短。

经过分析业务流程发现,工单如果处理完成,就会增加一个状态“关闭”,这样的工单,一年都打开不了几次。

团队没有用过数据库分区,一周内没有任何把握搞定,就放弃了数据库分区的方案。

对于这个问题,书中的解决方案是“冷热分离”,日常操作“热数据库”,把“关闭”的工单移入新的“冷数据库”,但是在数据冷热分离过程中,需要处理数据一致性问题。

把这个需求抛给GPT-4,看它如何回答。

GPT-4:在这种情况下,我建议采用以下两种方法来解决性能问题:

  1. 数据库归档:由于大部分已关闭的工单基本上不再需要访问,可以将这些工单数据从主数据库中移动到一个归档数据库中。这样,主数据库的大小将大大减小,从而提高查询速度。归档数据库可以定期(如每月或每季度)更新,将已关闭的工单移动到归档数据库中......

具体操作步骤如下:

a. 创建一个新的MySQL数据库,用于存储归档数据。

b. 编写一个脚本,定期将已关闭的工单及其相关操作记录从主数据    库移动到归档数据库,并确保数据一致性。

c. 修改客服系统,使其默认仅查询主数据库中的未归档数据。

d. 提供一个单独的界面或工具,供客服人员在需要时查询归档数据    库中的数据。

  1. 缓存:...略...

不错,它一下子就抓住了重点,给出了数据库归档的方案,还有具体的操作步骤。

不过,需求中有一定的提示,这个方案也容易想到。

刘欣:在你的操作步骤中,如何保证数据一致性,这里需要操作两个数据库啊

GPT-4 :确保数据一致性是非常重要的。在操作两个数据库时,可以采用以下方法来保证数据一致性:

  1. 使用事务:事务可以确保一组操作要么全部成功,要么全部失败。.....略....

刘欣:你在使用事务的时候,怎么能开启一个跨越两个数据库的事务?

GPT-4: 抱歉,我在之前的回答中确实犯了一个错误。在MySQL中,我们无法直接在两个不同的数据库之间使用单个事务。在这种情况下,可以考虑使用其他策略来确保数据一致性。一个可行的方法是使用“两阶段提交协议”(Two-Phase Commit, 2PC)。....略....

刘欣:两阶段提交协议很脆弱,有别的安全的办法来实现数据从主数据库移动到归档数据库吗?

GPT-4:  抱歉之前的方案没有完全满足您的需求。这里我提供一个新的方案,使用消息队列(例如RabbitMQ、Kafka或Amazon SQS)来确保数据迁移过程的一致性。这种方法可以将数据迁移过程分为两个独立的步骤,确保在出错时可以方便地回滚。.....略.....

刘欣:如果不使用MQ,完全自己写代码实现,如何保证数据迁移过程中的一致性?

GPT-4: 如果您不想使用消息队列,您可以使用以下方法自行编写代码来确保数据迁移过程中的一致性:

  1. 使用锁和标记字段:

a. 为工单表和操作记录表分别添加一个名为“is_migrated”的布尔字段,用于标记记录是否已迁移。

b. 编写一个脚本或程序,从主数据库中查询满足迁移条件(例如,已关闭的工单且“is_migrated”为false)的记录。

......略......

嗯,到此为之,它终于找到了一个方案,和书中有点类似,就是用一个字段来标记“是否已迁移”。

但是,无论我怎么提示,它也不会提出如何做幂等性的方案,我就放弃了。

刘欣:归档数据库数据量很大,查询非常慢,但查询基本上都是"根据客户ID查出工单,然后根据工单ID查出该工单所有的处理记录",这有什么办法来解决?

GPT-4 :针对这种查询模式,可以采取以下策略来优化归档数据库的查询性能:

  1. 为客户ID和工单ID创建索引:......略......

  2. 数据库表分区:......略......

  3. 数据库视图:......略......

  4. 结果缓存:......略......

  5. 拆分读写负载:......略......

  6. 优化硬件和配置:......略......

这些方案都无法有效解决不了问题,正确的方案是用HBase这样的NoSQL数据库,它是想不到了。

02

详细设计

我使用的案例依然是薪水支付,这是从经典书《敏捷软件开发:原则,模式和实践》中提取出来的。 

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

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

员工有三种类型

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

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

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

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

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

e733b1bab418bc2b0e7a8ea7272f5a80.png

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

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

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

a4cd8676e0657423ea2eb949c7a737b9.png

这是一个陷阱,也是给ChatGPT挖的一个坑,看看它是如何处理的。

正式开始,我把需求告诉它,让它设计。

没想到,它一上来就给我写Python代码,这太多细节了,我马上让它停止输出。

刘欣:不用展示代码,把类描述出来就可以。

GPT-4 : 好的,根据您的需求,我们可以设计以下类和相关的属性和方法:

  1. 基类 Employee: ......略......

  1. HourlyEmployee 类,继承自 Employee 类:......略......

  2. SalariedEmployee 类,继承自 Employee 类:......略......

  3. SalesEmployee 类,继承自 SalariedEmployee 类:......略......

  4. PaymentMethod 类:略

还真是不错,它“理解”了需求,从中抽取出了名词进行类的设计,它设计出来的Employee,HourlyEmployee,SalariedEmployee,SalesEmployee和第一个UML图几乎是一样的。

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

接下来开始挖坑:

刘欣:上面的类设计得很好,但是如果一个人刚开始是钟点工,后来变成了月薪员工,上面的设计就无法支持这种变更了,这该怎么办呢?

GPT-4 :为了解决您提到的问题,我们可以将员工的薪水计算策略从 Employee 类中分离出来,使用策略模式进行设计。这样,我们可以在不修改 Employee 类的情况下,为其动态更改薪水计算策略。

在这种设计下,我们需要对原来的类结构进行一些调整:

  1. 保留基类 Employee:

    • 新增方法:set_salary_strategy,用于设置员工的薪水计算策略

  1. 移除原来的子类 HourlyEmployee、SalariedEmployee 和 SalesEmployee,因为我们将薪水计算策略从 Employee 类中分离出来。

  2. 新增抽象类 SalaryStrategy,作为薪水计算策略的基类

  3. 新增具体策略类:

    • HourlySalary 类,继承自 SalaryStrategy 类

    • SalariedSalary 类,继承自 SalaryStrategy 类

    • SalesSalary 类,继承自 SalaryStrategy 类

通过以上调整,现在可以在不修改 Employee 类的情况下为其动态更改薪水计算策略。当员工从钟点工变为月薪员工时,只需为其设置新的薪水计算策略即可。

不得不说,GPT-4非常厉害!

它用上了策略模式,把薪水计算策略SalaryStrategy给抽象了出来。

和第二个UML图相比,除了名称不同,基本上一样了。

可以说,能做到这一步,就可以超越很多程序员了。

我注意到,它一直没有处理支付周期的问题。我开始继续发问:

刘欣:原来的需求中还有支付的时间,例如钟点工每周五支付,这个该怎么设计?

GPT-4: 为了处理不同类型员工的支付时间,我们可以在 SalaryStrategy 基类中引入一个抽象方法 should_pay_today,该方法根据当前日期判断是否应该支付薪水。接着,在具体的策略类中实现这个方法。

......略......

这里它犯了一个错误,把支付周期放到了薪水计算策略中,还美名其曰“易于维护和扩展”。

刘欣:支付时间和薪水计算策略是两个概念,放在一起不太好,怎么才能达到最大的灵活性呢?

GPT-4 :您是对的,支付时间和薪水计算策略是两个不同的概念。为了使设计更具灵活性,我们可以将支付时间从薪水计算策略中分离出来,创建一个新的抽象类 PaymentSchedule,用于处理支付时间的逻辑。这样,我们可以为每个员工分别设置薪水计算策略和支付时间策略。

以下是调整后的类结构:

  1. 保留基类 Employee:

    • 属性:姓名、ID、地址

    • 方法:set_payment_method,用于设置员工的支付方式

    • 方法:set_salary_strategy,用于设置员工的薪水计算策略

    • 新增方法:set_payment_schedule,用于设置员工的支付时间策略

  1. 保留抽象类 SalaryStrategy 及其具体策略类,不做改动。

  2. 新增抽象类 PaymentSchedule,作为支付时间策略的基类:...略...

  3. 新增具体支付时间策略类,继承PaymentSchedule:

    • WeeklyPayment 类 ...略...

    • MonthlyPayment 类 ...略...

    • BiweeklyPayment 类 ...略...

  1. 保留 PaymentMethod 类及其子类,不做改动。

非常惊艳! 它似乎知道我脑海中所想,PaymentSchedule 和 SalaryStrategy 给分开了!

到目前为止,它已经实现了书中最终的,也可能是最好的设计:

252dc986959af9b70b8fc5be0b33660d.png

03

小结

在详细设计层面上,GPT-4的表现远远强于架构设计。

码农翻身的老读者知道,我在去年用薪水支付案例测试过GPT-3.5, 当时它就是在背诵答案,甚至会给出超出需求之外的设计。

但是GPT-4不同了,它的设计能力更进了一步,在程序员的提示下,他已经学会了分离关注点。

在架构设计上,感觉GPT-4掌握了很多知识,但是无法有效地应用到复杂问题上,出的解决方案很混乱,离我们想要的还比较远。

更关键的问题是如何识别它的回答是正确的,我现在手头有标准答案,可以对它做考核。而在实际项目中,面对的都是未知数,如果没有经验,如何知道GPT-4给出的设计是有效的?是能解决问题的?

(完)

3月30日 13:30 - 18:30 亚马逊云科技创新大会线上线下(北京)同步开启,主题是全面拥抱Serverless时代,30+热点技术话题,涵盖了Serverless应用战略、架构进化、数据与分析、开发工具,可谓是一场Serverless盛宴,不容错过。

0a491dd7a2d4b0483faf1c3ef08966d0.jpeg

在北京的同学强烈推荐到现场看看,面对面交流,没法到现场的可以关注线上直播。

扫描下方二维码,立刻报名

6cdee374f0477aeab6ce0892addc7a85.png

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

636a2c02c2faa3daed6d2a84bef2f245.png

ee7c117abe4380e96d17c8a16197ebf1.png

e709c56b46170cc4dcd8bf3906a7da33.png

f14c0384107f8f1035c3cb78a24dc06b.png

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

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

相关文章

Google 拉起「红色警戒线」,应对 ChatGPT 的巨大威胁!

在 ChatGPT 尚未全面开放使用之际,它散发的巨大威力,似乎已经让行业内的竞争对手感到了威胁。 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 距离 ChatGPT 上线不足一个月的时间,其已经成为各行各业智囊团中的“网…

ChatGPT将引发大量而普遍的网络安全隐患

ChatGPT是一个基于人工智能的语言生成模型,它可以在任何给定的时间,使用自然语言生成技术,生成文本、对话和文章。它不仅可以被用来编写文本,还可以用来编写语言、生成图像和视频。目前, ChatGPT已广泛应用于语言翻译、…

LeCun指出:ChatGPT缺乏创新,没什么革命性!网友:早点离开Meta做出点突破吧......

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>CV微信技术交流群 转载自:机器之心 | 编辑:张倩 在外界看来,ChatGPT 是一项巨大突破,但图灵奖得主、Meta 首席人工智能科学家 …

ChatGpt能做什么,为什么说Gpt是人类历史上的第四次革命

ChatGpt是一款基于人工智能的聊天机器人。它可以模仿人类的语言风格,理解人类的语言,并且能够回答人类的问题。在这个数字化时代,ChatGpt成为了人们沟通的新方式。但是,为什么说ChatGpt是人类历史上的第四次革命呢? 首…

【Bard】来自谷歌的“吟游诗人”

个人主页:【😊个人主页】 文章目录 前言Bard与相关产品的对比Bard VS 弱智吧 来自对手的评论ChatGPT 文心一言总结: 前言 相比较ChatGPT的话题不断,谷歌的“Bard”显然低调了许多,在“画大饼”失败一个多月后&#x…

有没有那么一瞬间,你也曾有过“失业焦虑”?

hello,大家好,我是张张,「架构精进之路」公号作者。 每一次新技术潮流到来,都有人宣传它们会让“程序员”失业,比如云服务、低代码等等 云原生、DevOps,催生了“运维该集体下岗”的看法 生成式 AI 正在颠覆…

一款能“干掉” ChatGPT 的应用「GitHub 热点速览」

作者:HelloGitHub-小鱼干 据说有了它,ChatGPT 就可以靠边站了。因为 Auto-GPT 能更加主动地完成你给他的指定任务,不用做更多的人为干涉,它的推理能力比 ChatGPT 更强,有人用它解放双手做了个 React 网站。当然除了升级…

Visa宣布柯如龙升任为亚太区董事长;奢华品牌洲至奢选首次进入大中华区 | 美通企业日报...

美通社要闻摘要: Visa宣布两项亚太区高层人事任命。马石油在华首个合资公司成立十周年。国轩高科与欧洲电池公司InoBat达成合作意向。微云全息打造全息数字人ChatGPT。融创文旅与正定县政府、深国际达成战略合作。爱达邮轮与开心麻花达成合作。洲际酒店集团旗下奢华…

技术动态 | 利用知识图谱克服人工智能幻觉

转载公众号 | 知识管理就在夏博 自从ChatGPT成功推出以来,像大型语言模型LLM这样的人工智能系统引起了全球的关注,尽管LLM存在的时间要长得多。这些系统现在支持从聊天机器人、内容生成到头脑风暴和脚本代码的很多场景。然而,随着这些模型变得…

太酷啦!苹果憋了7年的AR眼镜终于发布

Datawhale干货 最新:苹果 Vision Pr,来源:头部科技 下一部iPhone何必拿在手里,可以戴在头上。‍‍‍ 7年了,苹果当时画的饼终于兑现:AR 眼镜 Vision Pro 露面,人和机器的交互方式被颠覆。 如果…

对话四代女程序员:技术浪潮之下的“取与舍”|开谈

整理 | 王启隆 袁滚滚 责编 | 何苗 出品 | CSDN(ID:CSDNnews) 近日组织的《四代女性技术人共话:我们的技术未来》访谈,CSDN 有幸邀到了从 60 后至 90 后四个年代的科技女精英,与我们共同探讨技术新浪潮下…

【综述阅读】A Comprehensive Survey on Pretrained Foundation Models: A History from BERT to ChatGPT

论文链接:https://arxiv.org/abs/2302.09419 该综述系统性的回顾了预训练基础模型(PFMs)在文本、图像、图和其他数据模态领域的近期前沿研究,以及当前、未来所面临的挑战与机遇。具体来说,作者首先回顾了自然语言处理…

大型语言模型的推理演算

作者|kipply 翻译|杨婷、徐佳渝、贾川‍‍ 本文详细阐述了大型语言模型推理性能的几个基本原理,不含任何实验数据或复杂的数学公式,旨在加深读者对相关原理的理解。此外,作者还提出了一种极其简单的推理时延模型&#…

chatgpt赋能python:Python中颜色的使用及其SEO影响

Python中颜色的使用及其SEO影响 在Python编程中,使用颜色是一种常见而又实用的技巧。通过给代码添加颜色,可以让代码更加的清晰易懂,从而提高编写代码的效率和质量。但是,对于SEO优化来说,我们也需要关注颜色的使用是…

CV多模态和AIGC的原理解析:从CLIP、BLIP到Stable Diffusion、Midjourney

前言 终于开写本CV多模态系列的核心主题:stable diffusion相关的了,为何执着于想写这个stable diffusion呢,源于三点 去年stable diffusion和midjourney很火的时候,就想写,因为经常被刷屏,但那会时间错不…

chatgpt赋能Python-python_print彩色

Python print彩色:让你的输出更加生动活泼! Python print是我们在学习和使用Python语言的过程中经常使用的一个功能。它可以帮助我们在程序运行时输出信息,方便我们了解程序的执行情况。但是,有时候我们需要更好的视觉提示&#…

详谈大模型训练和推理优化技术

详谈大模型训练和推理优化技术 作者:王嘉宁,转载请注明出处:https://wjn1996.blog.csdn.net/article/details/130764843 ChatGPT于2022年12月初发布,震惊轰动了全世界,发布后的这段时间里,一系列国内外的…

ChatGPT插件全宇宙爆炸级开放!无需排队,本周可用,GPT-4突然「紫」了

OpenAI 和谷歌,已经打得急红了眼,ChatGPT Plus 用户,本周就可以体验联网和插件功能,无需再排队。鲨疯了,真的鲨疯了! ChatGPT,本周开始联网,并开放插件功能! OpenAI Ch…

用GPT写的CSDN付费专栏被订阅——感谢ChatGPT带来的第一桶金

从大一就开始写CSDN,但是一直没有开付费专栏,直到两天前把用GPTchat写的一篇文章发到CSDN付费专栏,第三天就被订阅了。 这下得注意点文章质量了。。。 一个用户也是用户哈哈~~~ 这哥们既然放心订阅我高低得给你更新出来讲明白了! …

为什么我选择订阅ChatGPT Plus计划?

自从ChatGPT诞生以来,它的强大功能和表现一直备受好评。作为一个长期使用者,我一直对其性能和智能感到惊叹。最近,我决定升级我的用户体验,订阅了ChatGPT Plus计划。在这篇博客中,我将向您详细介绍ChatGPT Plus的优势和…