ChatGPT 正在杀死编程里的乐趣

换句话说,ChatGPT 正在缓慢地“杀死”编程里的乐趣。在解释这个观点之前,让我先带你简单回顾一下:ChatGPT 到底帮我写了个什么程序。

用 ChatGPT 编写程序

先简单介绍一下 ChatGPT[1]。ChatGPT 是人工智能公司 OpenAI 在 2022 年 11 月份推出的基于 GPT 自然语言生成模型[2]的聊天机器人。它功能强大,能轻松完成许多在人类眼中非常复杂的任务,比方说:根据你描述的需求写一个可运行的程序。

前天晚上十一点左右,我正坐在床上刷手机,突然想起一个给路由器用的工具脚本,已经拖延了几个月都没动工。既然自己不愿写,不如这次试试让 ChatGPT 来帮我完成。

这个工具的需求简述如下:

接收一个 URL 地址作为参数,将该 URL 里的域名,以及该 URL 所返回的页面里的所有域名,一并转换成 dnsmasq 服务的配置条目,写入到  文件中(需要考虑重复写入)。

为了让 ChatGPT 写代码,我需要用自然语言清楚描述程序的用途和大概的执行流程,这个过程花了我 5 分钟左右。

需求描述如下:

Write a Python program, it accepts an URL address  from command line input, the program extract the domain name from  and stores it in a variable called , then it starts to request the given URL address and parse the response as HTML, it should find out all valid domain names in the response and stores them in a set called . Now print the  and  to inform user.

Let’s start to update dnsmasq’s config file, combile  and  into a big set called . Iterate over …(之后的内容省略)

将它发给 ChatGPT 后,我瞬间就收到了回复:一长串 Python 代码。

一阵排查后,我发现代码中至少存在 3 个 Bug:

1.bytes 和 str 类型兼容性问题2.用 ‘a’ 模式(追加)打开了文件,无法读取内容3.在循环内调用了  方法读取文件,但文件游标不会重置,因此只有第一次才读到了完整内容

这些 bug 在 Python 中很常见,因此改起来并不麻烦。将它们通通搞定后,程序终于可以正常运行了。经过简单的测试和验证,我发现它完美实现了我要的功能。

之后我算了一笔时间账。从开始描述需求到调通整个程序,我一共花了 10 分钟左右。也就是说,在不到半个番茄钟的时间内,我成功借助 ChatGPT 把脑海中的想法变成了 88 行可运行的 Python 代码。

不夸张地说,当晚我失眠了。半夜四点,我从床上坐起来,脑海中一直重复着一些问题:“我以后应该如何编程计算机描述需求,由计算机完成,还是自己打开 IDE 直接上手许多年以后,人们还需要编程吗们现在到底是为何在编程

从这些问题开始一路发散,我突然想到:“乐趣”一直是驱动我们编程的一个重要推动力。具体来说,编程带给我们的乐趣可被大致分为两类,而目前的情况是:ChatGPT 正迅速吞噬其中很重要的那一类。

编程里的两类乐趣

“创造使人快乐”——这个特点可能数万年前就刻在了人类基因里。编程就是一种创造性工作。人们通过编写代码,一步一个脚印实现自己想要的东西,这个过程让人心情愉悦。这种愉悦和“建造一所房子”、“制作一件工具”所产生的愉悦类似,都是在人类创造事物时自然产生。

而藏在编程这件事里的乐趣,大致可分为两类,它们分别来自于编程中的两大环节,一个是“规划与设计”,另一个是“解决小谜题”。

1. “规划与设计”

在开发软件项目时,当我们从用户那接到一个需求后,第一件要做的事情就是“规划与设计”。在这个环节,我们需要先理解用户需求,随后在头脑中完成一些“大”的决策,比如:

何利用项目中的业务模型与术语,翻译这个用户需求。析该需求将给项目中的每一层带来哪些改动。实现时,哪些部分需要考虑扩展性,哪些部分不需要。何处理与之相关的旧代码,合并、改写还是扩展……

一言以蔽之,在“规划与设计”环节,我们考虑的核心问题是:”如何在满足用户需求的同时,让项目质量在长期维度上保持健康。“ 个中要诀,在于将软件的整体复杂度维持在一个合理范围内,不要过度增长。

2. “解决小谜题”

完成“规划与设计”后,下个环节是“解决小谜题”。该环节的目标,是将“规划与设计”里的每个“大决策”,分解为一个又一个的“小谜题”,随后逐个击破。

举个例子,“给用户注册接口增加密码强度校验”这个需求,可能会被拆解为以下这些小谜题:

何从请求中读取用户输入的密码如何校验密码必须包含至少 1 个特殊符 、1 个大写字母如何获取用户之前的旧密码,并判断是否和新密码相等……

一旦所有谜题被明确后,下一步就是编写代码解决它们。有许多技巧和工具能帮你能更流畅、更快速的解决每个谜题,比如说:实践 TDD(测试驱动开发)、查文档或求助于搜索引擎,等等。但它们之中没有一个能和 ChatGPT 相提并论。

ChatGPT 带来的变化

自人类发明计算机的第一天起,程序员就在完全依靠自己的头脑完成以上两个环节的工作。

但有了 ChatGPT 后,你会发现,一旦“规划与设计”部分已经被搞定,那么剩下的工作:解决一个又一个的小谜题,其实已不再需要人们亲自编写代码了——只要将需求丢给 ChatGPT 就行。

因为纵使某个需求复杂无比,一旦它被拆解为许多独立的小谜题后,每个谜题所涉及的抽象概念与逻辑关系都会大幅减少。这就意味着,你根本不需要花费多少工夫,就能将它清晰地描述给 ChatGPT,由它完成代码的编写。

第一眼看上去,你是不是觉得这对程序员有好处为这么做能极大提升我们的工作效率呀!但在认真思考过这件事后,我发现它在提升效率的同时,也可能会带来另一个严重的问题:当每个人不再需要亲自动手解决那些小谜题后,编程的乐趣会消失一大半。

为什么这么说我用一个我很喜欢的电子游戏 Hades 来做个类比。

Hades 来类比编程

Hades 是由 Supergiant Games 开发的一款以希腊神话为背景的动作游戏。在游戏中,你操作冥界王子扎格列欧斯逃离冥界。

图:选择下一道门

游戏中的奖励五花八门,它们包括:增加生命值上限、增加大量金币以及最重要的一种角色能力增强——来自不同奥林匹斯神灵的“祝福”。这些“祝福”,有的会增强角色攻击力,有的会给普通攻击增加反弹效果,有的会提升你的冲刺距离,还有的则会直接升级你的武器,给其增加新的酷炫动作。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年11月9日
下一篇 2022年11月9日

相关推荐