ChatGPT-时代人类编写代码教程的终结--还是不会-

ChatGPT 时代人类编写代码教程的终结……还是不会?

原文:towardsdatascience.com/the-death-of-human-written-code-tutorials-in-the-chatgpt-era-or-not-9a437a58a0b2/

亲爱的 AI,请生成一张高级 AI 聊天机器人撰写编程教程文章供人们阅读的图片。

亲爱的 AI,请生成一张高级 AI 聊天机器人撰写编程教程文章供人们阅读的图片。

在 ChatGPT 称霸的世界里,人们可能会预期人类编写的代码教程会变得毫无吸引力。

最后,谁会去读一篇关于详细软件流程的人类编写的教程,当他们可以直接向 ChatGPT 询问他们想要的精确输出呢?再加上高级 LLM 订阅和几个高级提示工程技巧,任何人都可以就任何主题生成详细的解释。为什么还要浪费时间精力去研究、头脑风暴和撰写这样的文章?

让我们从一个问题开始,这个问题的答案将支撑我的整个论点:ChatGPT 究竟是什么?

好吧,ChatGPT,或者更确切地说,任何大型语言模型(LLM),是通过机器学习算法来操作的,该算法根据训练数据预测输入后应跟什么词语。将 LLM 与早期语言模型版本区分开来的是其训练数据的大小。例如,ChatGPT 的训练包括了 Common Crawl 数据集——这是一个包含数十亿网页的巨型数据集

这一点至关重要。无论这些生成的回复看起来多么令人难以置信和无缝,它们本质上只是基于先前数据的概率预测。它们是基于模型之前所见的最可能输出。它们不是新颖的

相比之下,人类的创造力往往源于新的见解——通常被称为“灵光一闪”的时刻。是的,拥有先前的知识有帮助——但本质上,这些新想法的美丽之处在于它们确实是:新的。当一个科学家、作家或艺术家有如此罕见的时刻时,他们就是中了大奖。

让我们将这个话题重新引回到手头的主题:人类编写的编程教程。人们通常在什么情况下撰写文章或出版关于编程主题的书籍?通常有以下两个原因:

  1. 为了对一个现有想法提供新的视角。许多教程教授相同的一般主题,但在风格、方法或方法上有所不同。

  2. 为了传达全新的想法或主题。

由 LLM 生成的回复无法做到这两点。

让我们考虑一个例子。在 2023 年初,我为 Towards Data Science 撰写了“作为 Python 初学者必须学习的 4 个基本技巧”一文,这篇文章普遍受到好评。下面,我插入了两段摘录:

  1. 我实际撰写的关于 lambda 函数的部分。

  2. ChatGPT-4o 在我提供必要细节并请求相关内容后撰写的关于 lambda 函数的部分。


示例 1:由人类撰写的 Lambda 教程

假设你正在 Jupyter 笔记本中处理一些数据,只是做一些快速探索和分析。你仍然处于数据清洗和处理的早期阶段,远未达到任何生产就绪的模型、可视化或应用。但你有一个截止日期要遵守,所以你快速而高效地探索,充分利用你的卓越 Python 技能。

在你的冒险过程中,你发现数据中的一个列需要转换。你只需要将该列中的数字平方。这并不疯狂,但遗憾的是,这也是那些简单到足以快速完成,但复杂到没有内置函数的奇怪需求之一。

因此,你决定使用 pandas 的apply函数通过你自己的自定义函数转换数据列。为此,你需要编写一个平方数字的函数,而你正是这样做的:

def square(num):
    return num * num

这完成了任务,但有点令人烦恼和杂乱,尤其是在 Jupyter 笔记本中。它与大多数 pandas 操作的单一行结构不太融合,因此当你的同事审查你的笔记本时,看起来可能不太美观。

但不要绝望,我的朋友,因为 lambda 函数就在这里来救你。Lambda 函数——或者更普遍地说,匿名函数——为在 Python 中定义函数提供了一种替代方法。最好的部分是,你可以一行写出它们!这最容易通过示例来展示:

square = lambda num: num * num

上述代码与我们的早期函数定义完全相同。以下是一些你应该知道的事情:

  • lambda关键字与def关键字类似,让 Python 知道我们想要定义一个函数。

  • lambda 函数的参数位于冒号的左侧,返回语句位于冒号的右侧(实际上并不使用return关键字)。

  • 我们不必给函数命名,但如果我们愿意,我们可以通过变量赋值来实现。

最后一点是关键。使用 lambda 函数让我们能够定义一个函数,而无需给它命名,就可以调用它或将它作为参数传递给另一个函数。让我们通过回到我们之前的示例并使其具体化来展示这一点。

让我们假设我们有一个名为my_df的 DataFrame,其中包含三个人的薪水:

Name  Salary
0   John   45000
1   Mary   60000
2  Julie  100000

在这个荒谬的理想主义世界中,雇主刚刚宣布每个人的薪水都将被平方。我们可以通过使用 lambda 函数在一行内更新我们的 DataFrame:

>>> my_df['Salary'] = my_df['Salary'].apply(lambda num: num * num)
>>> my_df
    Name       Salary
0   John   2025000000
1   Mary   3600000000
2  Julie  10000000000

哇哦——无尽的财富!或许有点夸张,但希望你现在能记住 lambda 函数是什么以及如何使用它们。如果你想更详细地了解它们的细微差别,我建议查看我的两篇详细讨论 lambda 函数的文章系列


示例 2:大型语言模型编写的 Lambda 教程

提示:我正在为 Medium 上的 Towards Data Science 出版物撰写一篇名为 "4 Essential Techniques You Must Learn as a Python Beginner" 的文章。我将涵盖的 4 个主题是 1) lambda 函数,2) 列推导式,3) continue 和 break 语句,以及 4) 用户输入。你能为我生成关于 lambda 函数的部分吗?它应该大约 300 字,包含一个示例,并且要有亲切的语气,但不要过于随意。

Lambda 函数:解锁 Python 的匿名英雄

Lambda 函数,也称为匿名函数,是 Python 最灵活的工具之一。虽然一开始可能听起来有些令人生畏,但它们的目的是简单的:创建小型、单次使用的函数,无需使用常规的 def 关键字或函数名。把它们想象成你的 Python 工具箱中的快速、一次性工具。

让我们分解一下。使用关键字 lambda 定义一个 lambda 函数,后面跟着参数,一个冒号,以及要评估的表达式。以下是语法:

lambda 参数: 表达式

为什么使用它们?Lambda 函数在需要短期使用简单函数的情况下表现出色,例如当与内置函数 map()filter()sorted() 一起工作时。

这里有一个示例来展示:

# Sort a list of tuples by the second element using lambda
data = [(1, 'apple'), (3, 'banana'), (2, 'cherry')]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)

输出结果: [(1, 'apple'), (3, 'banana'), (2, 'cherry')]

在这个片段中,lambda 函数 lambda x: x[1] 提取每个元组的第二个元素,使 sorted() 能够按字母顺序排列数据。

虽然 lambda 函数非常方便,但它们也有一个缺点:可读性。过度使用它们或在 lambda 函数中塞入复杂的逻辑会使你的代码更难以理解。当你的逻辑变得更加复杂时,坚持使用具有描述性名称的常规函数会更好。

从本质上讲,lambda 函数是编写简短、一次性代码的快捷方式。作为一个初学者,掌握它们不仅会使你的代码更整洁,而且有助于你更好地理解 Python 如何拥抱简洁和强大。


让我们分析这两段之间的一些重要差异。在下面的每个要点中,我描述了差异,然后解释为什么它很重要。

  • 人类版本以一个激励性问题开头,而 AI 版本则直接进入定义。人们喜欢例子。 它们使难以理解的概念更容易理解,并使写作更具吸引力。值得指出的是,你可以要求AI 从一个例子开始,但这忽略了基本点:与高质量的人类作家不同,AI 默认不知道如何有效地编辑和调整写作以适应不同的受众群体。这个特定的摘录没有以激励性的开头开始,只是这个更广泛现实的一个例子。

  • AI 生成的版本未能解决 lambda 函数可以被分配给变量以供重用的事实,并且将它们限制在单次使用中,句子说,“本质上,lambda 函数是编写简短、一次性代码的快捷方式。” 这两个缺陷——前者是重要信息的遗漏,后者是一个不必要的绝对陈述——有可能误导那些通常是代码教程目标受众的新手程序员。 读者应该意识到有一种方法可以防止 lambda 函数立即消失,他们也应该理解虽然 lambda 函数有时可以用作一次性函数,但在某些编程环境中(如函数式编程中)它们也可以是一个有用的工具。或者,即使这些细节对初学者来说可能不必要描述,教程绝对不应该明确指出 lambda 函数本质上总是一次性函数。

  • 在 AI 版本中的写作感觉有些不对劲,但一开始很难确切指出是什么地方。如果你仔细阅读并分析这两段摘录——就像在写作/修辞课程中可能会做的那样——你会意识到人类版本的表达更流畅,更容易理解。 这是因为人类版本围绕一个单一的线索展开——与数据集一起工作,并使用 lambda 函数更有效地实现特定目标——这一线索贯穿整个摘录。其他所有内容,包括关于 lambda 的核心内容,都是围绕这一点构建的。相比之下,AI 版本是一系列松散相连的事实和例子。这里重要的是,尽管普通读者不太可能以这种方式分解文本;但他们会在潜意识中注意到如果有什么地方感觉不对劲,这将对他们的学习和记忆产生负面影响。

还有一些其他的不同之处,比如 GPT 版本中缺少一个实际数据集的例子。这些差异并不那么严重——它们可以通过一些提示调整来纠正——但仍然值得注意,作为 AI 在回应中经常难以处理细微差别和微妙之处的例子。

这让我回到了我的主要观点。人们一次又一次地声明,人类的创造力是无法被机器取代的。在这里,我同样提出这个观点,但是在本文的具体背景下。为什么我们需要人类的创造力来编写编程教程?

因为人类会像你一样引导你通过这个过程——一个活生生的、思考的、试图学习一个令人困惑的新概念的个体——而机器至多只能给你它所拥有的,事实和没有情感或激情。

虽然表面上看起来并不明显,但这些事情很重要。“情感”和“激情”这两个词可能看起来与代码相去甚远,但上面提到的我的 lambda 示例中的每一个例子都落在这两个词的范畴之下。我们只是没有总是注意到。机器可能会用加权的词汇和一系列形容词来假装情感和激情,但最终,它们的写作根本不会一样。

有时候,这很正常。我首先承认这一点。如果你只需要一些基本的 Python 代码来完成一个任务——那么没问题,使用 ChatGPT。但这本质上与去 Stack Overflow 复制粘贴代码是一样的——我们多年来一直在做,但我们并没有假装这样的资源使编程教程变得过时。为什么?因为这些教程填补了这些资源没有给我们填补的空白。长篇大论的详细说明,不仅仅是 GPT 给出的常见错误,而且经常是你在编码时遇到的精确错误。有意义的问题,不仅仅是 Claude 生成的示例数据,而是人类正在解决的真实、基本问题。以及充满激情的写作,不仅仅是 Gemini 提供的枯燥和基于事实的指导,而是对当前任务的同样情感投入,就像你自己一样。一个由人类编写的教程会给你这些。

AI 不会。

这不是限制,而是一个机会。对于像《数据科学向导》这样的出版物,如果我们花点时间认识到我们最初所重视的东西,那么这确实是一个值得追求的目标。

我认为,这确实是一项值得追求的事业。

参考文献

[1] www.edureka.co/blog/how-chatgpt-works-training-model-of-chatgpt/ [2] en.wikipedia.org/wiki/Functional_programming

posted @ 2026-03-27 09:50  绝不原创的飞龙  阅读(2)  评论(0)    收藏  举报