用 ChatGPT 写 “Hello, world!”,首席资深工程师要写 40+ 行代码?

3e482aabaf98dd9926f2dd4623049018.gif

让 ChatGPT、Gemini 等大模型辅助代码编写已是多数程序员的日常,但本文作者提出一个观点:LLMs 和缺乏经验的开发人员一样,面对复杂代码往往只会再度增加复杂性。

原文链接:https://hachyderm.io/@vnglst/112135583244850791

作者 | Koen van Gilst 

责编 | 张红月

出品 | 程序人生(ID:coder_life)

尽管 Github CoPilot、ChatGPT 等许多大型语言模型(LLM)大大提高了我作为开发人员的效率,但我也亲身体验到了它们的局限性。为此,我想出了下面这个实验。

就像人类的许多活动一样,当小组开始工作时,本应轻松简单的任务往往会变得困难复杂。如果不积极抵制,你就会发现自己所处的系统和组织几乎不可能完成任何事情。

通过下面的实验,我想要探索 LLMs 的兴起是加剧还是缓解了这种复杂性。

2c5ebddb262d63ac00c1621a1b5eac1c.jpeg

6fc1f3ef427fe5260fa89cb782eb670f.png

“Hello, world!”

我们从一个简单的任务开始:让计算机显示“Hello, world!”。

我问 ChatGPT:作为一名初级开发人员,我要怎么用 TypeScript 输出“Hello, world!”?ChatGPT 给出的答案简短且正确:

2ec3855b329b1ea6d6426c4186c4f3b2.png

初级开发人员往往不了解编写代码的复杂性,所以我又问 ChatGPT 能否像中级开发人员那样重构代码:

d19f93700ad6913996e44bcdde938f7e.png

为了增加复杂性,我又问 ChatGPT 能否从高级开发人员的角度重构代码,于是生成了如下代码:

e7a178b2d54782112f43778570465f9f.png

接下来是资深工程师:

c33ac219fa7d14ecfd43d6ba1c0aaefd.png

然后是首席资深工程师:

7344e88750101c9f97817f8cc9fea1b8.png

经过以上几次迭代,我逐步提升了开发人员的资历水平,从初级工程师到高级工程师,最后到一家大型公司的首席资深工程师:

367439e1d72a0d9fa7604534e5777201.png

进行到这一步,仅用来显然“Hello, world!”的代码已经过于复杂了,但对于在大公司工作过的人来说并非不切实际。

c8f1980f91682602b4ab9e8cf9f9832f.png

学会“退一步”

在开发生涯中,我认识到了退一步的重要性,即首先了解程序、函数或类的目标,然后设想如何从头开始构建它。当一个程序看起来过于复杂时,这种策略尤其有用。如果发现问题比最初想象的还要复杂(可能是由于缺乏经验),这种方法也有助于理解复杂性背后的原因。

在我早期的工作中,我曾一丝不苟地遵循现有代码,认为别人对当前问题有更深刻的理解,只是我还没有掌握全局。但后来我了解到,简单地“顺其自然”,试图让复杂的程序发挥作用,并不是增强软件的最佳方式,往往还会导致代码进一步复杂化。

LLMs 似乎缺乏这种本能,它们倾向于维持现状,尽可能保持现有代码不变,却导致复杂的程序变得更加错综复杂。

为此,作为本次实验的最后一项,我要求 ChatGPT“退一步”,评估代码的目标,提出更好的解决方案。这一尝试起初并不成功,因为 ChatGPT 一直在调整现有程序并保留“现有架构”,只有当我提示它从头开始设想时,它才提出了一个新的解决方案,如下所示:

c6a922e26f633a3b7f6cd8723c396d78.png

7ac1b9e0973f6c3714b5f986ea3bdb76.png

结论

从我使用 LLMs 的经历中,我发现它们倾向于在已经很复杂的程序上再叠加几层复杂性,而不是退一步考虑创新的解决方案——这表明,LLMs 解决问题的方法和创造力存在局限性。因此在我看来,LLMs 和缺乏经验的开发人员一样,往往会通过增加复杂性来“拥抱”复杂代码。

当然,以上内容均来自于我对于 ChatGPT 的使用经验,可能会以偏概全,没有全面了解 LLMs 的功能。另外,我还在 Claude 和 Gemini 上进行了类似实验,它们也更倾向于生成复杂的代码,并将其进行扩展,而不建议使用更简单的版本。

推荐阅读:

▶63 岁苹果老将,被曝每周工作 80 小时:内部称他为“迷你版”乔布斯

▶拥有 17 年经验的硕士码农,到了 43 岁连面试机会都没有……

▶做开源 4 年,Volar 作者被“钱”拖垮:无奈发起收费计划,竟遭恶意抨击

45e2a742a9701a2fa3e3842f58dad969.gif

4 月 25 - 26 日,由 CSDN 和高端 IT 咨询和教育平台 Boolan 联合主办的「全球机器学习技术大会」将在上海环球港凯悦酒店举行,特邀近 50 位技术领袖和行业应用专家,与 1000+ 来自电商、金融、汽车、智能制造、通信、工业互联网、医疗、教育等众多行业的精英参会听众,共同探讨人工智能领域的前沿发展和行业最佳实践。

26800131fb191596802bfde4d89e7b5d.png

  • 49
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 抱歉,我的中文答案有点晚,以下是用LISP编的“Hello World!”代码: ``` (print "Hello World!") ``` 请注意,LISP的print函数将消息输出到控制台。 ### 回答2: 在LISP语言中,可以使用函数 `(print)` 来输出字符串。下面是使用LISP语言编的一个简单的"Hello, World!"程序: ```lisp (print "Hello, World!") ``` 当运这段代码时,会在屏幕上打印出 "Hello, World!"。在LISP中,字符串需要用双引号包围起来。函数 `(print)` 用于将括号内的内容打印到标准输出。 通过执这个简单的程序,我们可以在终端或控制台上看到 "Hello, World!" 这个输出。这个程序展示了LISP语言中的基本语法和函数的使用,以及如何输出一条简单的问候语。 ### 回答3: 以下是用LISP语言的一段“Hello, World!”代码: ```lisp (defun hello-world () (format t "Hello, World!")) (hello-world) ``` 这段代码定义了一个名为“hello-world”的函数,函数体里使用了`format`函数和`t`来实现输出。`format`函数用于格式化字符串,而`t`作为一个特别的输出流表示标准输出。最后,我们调用`hello-world`函数来执输出操作。 执这段代码后,控制台会打印出“Hello, World!”这个字符串。整个代码中,`defun`用来定义函数,`format`用来格式化字符串,`t`用来表示标准输出流。这段代码简短、简洁,却能实现字符串的输出功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值