对于我来说,编程一直以来都像是一个深奥而丰富的领域。现在我发现自己想为它写一篇悼词。
作者:詹姆斯·萨默斯
2023 年 11 月 13 日
FacebookX电子邮件打印保存故事播放/暂停按钮暂停人工智能在编程方面仍然无法击败人类。但这只是时间问题。插图:戴夫·瓦拉达雷斯保存此故事保存此故事保存此故事保存此故事我一直认为,就像我的父母确保我能读写一样,我也会确保我的孩子会用电脑编程。它是较新的艺术形式之一,但也是最重要的艺术形式之一,而且随着时间的推移变得更加重要,它涵盖了从电影制作到物理学的方方面面。熟练的编码能力可以完善我孩子的读写能力——并让他们有工作能力。但就在我写这篇文章的时候,我的妻子怀上了我们的第一个孩子,预计将在三周后出生。我是一名专业的编码人员,但到那个孩子会打字的时候,编码作为一项有价值的技能可能已经从世界上消失了。
我第一次相信这一点是在去年夏天的一个星期五早上,当时我正在做一个小型的业余项目。几个月前,我和我的朋友本决定完全通过电脑创建一个《纽约时报》风格的填字游戏。2018 年,我们借助软件制作了一个星期六的谜题,我们惊讶地发现我们贡献甚少——只是在这里那里运用我们的品味。现在我们要尝试构建一个不需要人工干预的填字游戏制作程序。
当我们在过去承担类似这样的项目时,它们既有硬件组件,也有软件组件,而本的长处在于前者。我们曾经制作了一个霓虹灯标志,当地铁接近我们公寓附近的站点时,它会发光。本弯曲了玻璃并接通了变压器的电路板。我编写了代码来处理交通数据。本自己也有一些专业的编码经验,但这只是短暂的、肤浅的,而且现在已经过时了大约二十年;认真的编码工作留给了我。然而,对于新的填字游戏项目,本引入了一个第三方。他注册了 ChatGPT Plus 订阅,并使用 GPT-4 作为编码助手。
一些奇怪的事情开始发生。我和本会讨论我们想要用于该项目的软件。然后,在惊人短的时间后,本会亲自交付它。有一次,我们想要一个命令,可以从字典文件中打印一百行随机行。我想了一会儿这个问题,当思考失败时,我尝试了谷歌搜索。我使用我能收集到的东西做了一些错误的尝试,而当我做我的事情——编程——时,本告诉 GPT-4 他想要什么,并获得了完美运行的代码。
好的:众所周知,这些命令非常麻烦,而且每个人都会查找它们。这不是真正的编程。几天后,本谈到了拥有一个 iPhone 应用程序来对字典中的单词进行评分会多么好。但他不知道制作一个 iPhone 应用程序是多么痛苦。我试过几次,但从未超出半成品。我发现苹果的编程环境令人望而生畏。你不仅要学习一门新语言,还要学习一个用于编辑和运行代码的新程序;你必须学习一堆“用户界面组件”以及将它们组合在一起的所有复杂方法;最后,你必须弄清楚如何打包应用程序。学习所有这些新事物的动力似乎永远都不值得。第二天早上,我醒来时发现收件箱里有一个应用程序,它完全符合本所说的他想要的东西。它运行完美,甚至有一个可爱的设计。本说他花了几 个小时就做好了。GPT-4 做了大部分繁重的工作。
到目前为止,大多数人都经历过人工智能。并非每个人都印象深刻。本最近说,“直到我开始让它为我编写代码,我才开始真正尊重它。”我怀疑那些天生持怀疑态度且看到 ChatGPT 产生生硬的散文或虚假事实的非程序员仍然低估了正在发生的事情。
传统上需要花费毕生时间才能掌握的知识和技能正在被一口吞下。对我来说,编程一直以来都像是一个深奥而丰富的领域。现在我发现自己想为它写一篇悼词。我一直在想李世乭。李世乭是世界上最优秀的围棋棋手之一,也是韩国的民族英雄,但现在他最出名的是在 2016 年输给了一个名为 AlphaGo 的电脑程序。李世乭怀着轻松击败人工智能的信念走进了比赛。在为期数天的比赛结束时,他为赢得一场比赛而感到自豪。当他意识到自己即将输掉比赛时,李世乭在新闻发布会上说,“我想为如此无能而道歉。”三年后,他退役了。李世乭似乎被一个开始变得熟悉和紧迫的问题压垮了:我毕生奉献给这件事,它将变成什么?
我第一次对电脑着迷是在我大约六岁的时候,那是九十年代初在蒙特利尔,我和我哥哥玩《真人快打》。他告诉我一些“必杀技”——残忍而机智的杀死对手的方法。我们俩都不知道如何施展它们。他拨打了一个 FTP 服务器(文件存储的地方)的电话号码,并在 MS-DOS 终端中键入晦涩的命令。很快,他打印出了一页代码——游戏中每个必杀技的说明。我们回到地下室,互相爆头。
我认为我哥哥是一个黑客。像许多程序员一样,我梦想闯入并控制远程系统。其目的不是制造混乱——而是找到隐藏的地方并学习隐藏的事物。“我的罪行是好奇,”洛伊德·布兰肯希普在 1986 年写道,“黑客宣言”。我最喜欢的场景来自 1995 年的电影《黑客帝国》,戴德·墨菲是一个新人,他在一个地下俱乐部证明了自己。有人开始从背包里拿出各种各样的电脑书籍,戴德认出了封面上的每一本:一本关于国际 Unix 环境的绿色书;一本关于美国国家安全局信任网络的红色书;一本关于 IBM 电脑的粉红色衬衫家伙的那本。戴德通过打开学校的喷水灭火系统并帮助调整油轮的压载物来发挥他的专业知识——所有这些都是通过在键盘上轻敲来完成的。教训是知识就是力量。
但你实际上如何学习黑客技术?当我上五年级的时候,我的家人已经定居在新泽西州,当我上高中时,我去了肖特山购物中心的边境书店,买了一本伊沃尔·霍顿写的《开始学习 Visual C++》。它长达一千二百页——我的第一本魔法书。像许多教程一样,它一开始很容易,然后突然变得困难起来。中世纪的学生称休闲学习者失败的那一刻为 pons asinorum,或“驴桥”。这个术语的灵感来自欧几里得《几何原本》第一卷的命题 5,这是书中第一个真正困难的概念。那些跨过这座桥的人将继续掌握几何学;那些没有跨过这座桥的人将继续成为业余爱好者。《开始学习 Visual C++》第 4.3 节“动态内存分配”是我的驴桥。我没有跨过去。
但我并没有放弃这个科目。我记得事情开始转变的那一刻。我正在进行一次长途飞行,我带了一台四四方方的黑色笔记本电脑和一个装有 Borland C++ 编译器的 CD-ROM。编译器将你编写的代码翻译成机器可以运行的代码;我一直在努力了几天,才让这个编译器工作。按照惯例,每个编码员的第一个程序除了生成“Hello, world”这个词之外什么也不做。当我尝试运行我的版本时,我只收到了错误的错误消息。每当我解决一个问题时,另一个问题就会出现。我读过《哈利·波特》的书,感觉自己拥有了一把扫帚,但还没有学会让它飞行的咒语。知道如果我做到了可能发生什么,我就一心一意地坚持下去。我学到的是,编程并不是关于知识或技能,而只是关于耐心,或者可能是痴迷。程序员是能够忍受无尽的乏味障碍的人。想象一下,用一种你几乎不会说的语言,通过电话向一个不懂事的人解释如何组装家具,而且没有图片。同样地,想象一下,你得到的唯一回应是,你提出了一件荒谬的事情,整件事都出错了。因此,当你设法组装好一些东西时,一切都会变得更加美好。我清楚地记得躺在飞机过道上,然后最后一次按回车键。我坐了起来。这台电脑破天荒地做了我告诉它做的事情。“Hello, world”这个词出现在我的光标上方,现在用电脑自己的声音说出来。这感觉就像一个智能苏醒了,并向我介绍了自己。
我们大多数人从未成为《黑客帝国》中描绘的那种黑客。在程序员的行话中,“黑客”只是为了摆弄——通过代码表达独创性。我从未正式学习过编程;我只是不断地摆弄,让电脑做一些有益或令人愉悦的小事情。在我大学一年级的时候,我知道在老虎伍兹在球场上移动的时候,我将在 2006 年大师赛的第三轮比赛中上路,我想知道实时发生的事情。所以我做了一个程序,它抓取了 pgatour.com 上的排行榜,并在每次他抓鸟或柏忌时向我发送短信。后来,在英语课上读完《尤利西斯》之后,我写了一个程序,从书中提取随机句子,计算它们的音节,并组装成俳句——比你现在从聊天机器人那里得到的语言更原始的倒退,但我认为,它仍然具有真正的诗意:
我会让他活剥
不确定地他等待着
沉重的过去
我开始认真对待编码。我主动为朋友的初创公司做编程。我了解到,计算的世界是巨大的,但组织起来几乎像地质一样,好像沉积在层层叠叠的层中。从网络浏览器到晶体管,每个子区域或系统都建立在另一个更旧的子区域或系统之上,这些层很密集,但可以理解。人们挖掘得越多,他们就越能发展出赛车手杰基·斯图尔特所说的“机械同情心”,即对机器的优势和局限性以及人们可以利用它做什么的认识。
在我的朋友的公司,我感到我的机械同情心正在发展。在我大二的时候,我和一个朋友一起看《危险边缘!》,他建议我制作一个可玩的游戏版本。我考虑了几个小时,然后带着极大的失望决定,这超出了我的能力范围。但当这个想法在我大三的时候再次出现时,我可以看到它的出路。我现在对机器能做什么有了更好的了解。我花了接下来的十四个小时来构建游戏。几周之内,玩“吉姆伯危险边缘!”成为我朋友之间的一项常规活动。这种经历是深刻的。我明白为什么人们会为手艺倾注毕生精力:没有什么比看着别人享受你制作的东西更好的了。
在这场混乱之中,我已经完全“模仿纸牌屋”,开始忽视我的成绩。我贪婪地工作,只是没有完成我的课程作业。一天晚上,我接管了地下室计算机实验室里的十几台机器来并行运行一个程序。我把印有数字的打印件铺在地板上,思考着寻路算法。代价是,我真正经历了那种反复出现的噩梦,你出现在期末考试中,却对材料一无所知。(我的是在数学系的实分析中。)2009 年,在几十年来最严重的金融危机期间,我以 2.9 的平均绩点毕业。
然而,我很容易得到了我的第一份全职工作。我有作为程序员的工作经验;没人问我成绩如何。对于年轻的编码员来说,这是一个繁荣时期。公司正在竞相竞标顶级程序员。对经验丰富的程序员的招揽如此激进,以至于他们抱怨“招聘垃圾邮件”。大学计算机科学专业课程的受欢迎程度开始飙升。(我的学位是经济学。)编码“训练营”应运而生,它们可以合理地声称在不到一年的时间内将初学者转变为高薪程序员。在我早期的一次工作面试中,在我二十出头的时候,首席执行官问我认为我应该得到多少报酬。我大胆地说了一个让我自己感到有点尴尬的数字。他当场拟定了一份合同,提供了百分之十的溢价。“软件工程师”的技能被吹捧。在我工作的一家公司,有人因为使用 HipChat(Slack 的前身)向我的一个同事询问一个问题而惹上了麻烦。“永远不要直接向工程师发送 HipChat,”有人告诉他。我们太重要了,不能那样做。
这是一个近乎零利率和非凡科技行业增长时期。建立了某些规范。像谷歌这样的公司让业界了解到,编码员可以免费享用浓缩咖啡和餐饮热食、世界一流的医疗保健和育儿假、现场健身房和自行车室、休闲装束以及“百分之二十的时间”,这意味着他们可以每周花一天时间做任何他们想做的事情。他们的技能被认为是如此关键和微妙,以至于围绕这项工作产生了一种迷信。例如,估计一项编码任务可能需要多长时间被认为是愚蠢的,因为程序员可能随时翻开一块石头,发现一团错误。截止日期是绝对禁止的。如果交付的压力变得太大,编码员只需要说出“倦怠”这个词就可以买到几个月的时间。
从一开始,我就觉得这一切都有点不对劲。我们所做的真的那么珍贵吗?繁荣能持续多久?在我十几岁的时候,我做过一点网页设计,当时这项工作很受欢迎,而且备受推崇。你可以赚到数千美元来完成一个需要一个周末的项目。但随着像 Squarespace 这样的工具的出现,披萨店老板和自由艺术家可以通过点击鼠标自己制作网站。对于专业编码员来说,一大批高薪、相对轻松的工作消失了。
“我本该知道他绝对没有道德——我见过他是如何装洗碗机的。”
程序员社区对这些发展的回应只是,是的,你必须不断提高你的技能。学习困难的、晦涩的东西。作为物种的软件工程师热爱自动化。不可避免的是,他们中的佼佼者会构建出使其他类型的工作过时
的工具。正是这种本能解释了我们为什么得到如此好的照顾:代码具有巨大的杠杆作用。一个软件可以影响数百万人。当然,这有时会取代程序员自己。我们应该把这些进步看作是涌入的潮汐,在我们的赤脚上轻拍。只要我们继续学习,我们就会保持干燥。听起来很中肯——直到海啸来临。
当我们第一次被允许在工作中使用人工智能聊天机器人进行编程帮助时,我刻意地避开了它们。我希望我的同事也会这样。但很快我开始看到人工智能聊天会话的标志性颜色——呼叫和响应的斑马图案——出现在程序员的屏幕上,当我走到我的办公桌时。一种普遍的说法是,这些工具可以提高你的工作效率;在某些情况下,它们可以帮助你快十倍地解决问题。
我不确定我想要那样。我喜欢编程,我喜欢感觉有用。我熟悉的工具,比如我用来格式化和浏览代码的文本编辑器,同时服务于这两个目的。它们增强了我的工艺实践——而且,虽然它们允许我更快地交付工作,但我仍然认为我应该得到荣誉。但人工智能,正如它被描述的那样,似乎是不同的。它提供了很多帮助。我担心它会剥夺我解决难题的乐趣和成为解决难题的人的满足感。我可以无限地提高工作效率,而我所能展示的只有产品本身。
大多数程序员的实际工作成果很少令人兴奋。事实上,它往往滑稽得令人发笑。几个月前,我下班回家,告诉妻子我度过了美好的一天,解决了一个特别有趣的问题。我正在开发一个生成表格的程序,有人想添加一个跨越多列的标题——这是我们编写的自定义布局引擎不支持的操作。这项工作很紧急:这些表格被用于重要文件中,重要人物需要它们。所以我把自己关在一个房间里,花了一下午的大部分时间。有很多可爱的小问题:我应该如何允许布局引擎的用户传达他们想要跨列标题?他们的代码应该是什么样子的?还有一些琐碎的细节,如果忽略了,会导致错误。例如,如果跨列标题应该跨越的列之一由于没有数据而被删除,该怎么办?我知道这是美好的一天,因为我必须拿出纸笔——我正在描绘可能的情况,反复检查我的逻辑。
但从宏观上看那天发生了什么?一个表格得到了一个新的标题。很难想象还有比这更平凡的事情了。对我来说,乐趣完全在于过程,而不是产品。如果这个过程只需要三分钟的 ChatGPT 会话,那会怎样?是的,我们作为程序员的工作除了编写代码之外还涉及很多事情,例如指导初级雇员和在高水平上设计系统。但编码一直是它的根源。在我的整个职业生涯中,我之所以被面试和选中,正是因为我有能力解决棘手的编程难题。突然之间,这种能力就不那么重要了。
我已经从本那里收集到了很多信息,他一直告诉我他在使用 GPT-4 时取得的惊人成功。事实证明,它不仅擅长处理棘手的事情,而且还具有高级工程师的素质:从丰富的知识中,它可以提出解决问题的方法。对于一个项目,本将一个小扬声器和一个红色 L.E.D. 灯泡连接到国王查理画像的框架中,灯泡充当他王冠上的宝石;这个想法是,当你在一张配套的网站上输入消息时,扬声器会播放一首曲子,灯泡会用摩斯密码闪烁消息。(这是送给一位古怪的英国侨民的礼物。)对设备进行编程以获取新消息难住了本;它似乎不仅需要他对所使用的微控制器有专门的知识,还需要对 Firebase 有专门的知识,Firebase 是存储消息的后端服务器技术。本向我寻求建议,我含糊其辞地说了一些可能性;说实话,我不确定他想要的东西是否可能。然后他问了 GPT-4。它告诉本,Firebase 有一种功能可以使这个项目变得更简单。就在这里——这里有一些要使用的代码,这些代码与微控制器兼容。
由于害怕自己使用 GPT-4——并且对每月支付 OpenAI 二十美元来使用它感到有些不安——我仍然开始通过本调查它的能力。我们会坐下来研究我们的填字游戏项目,然后我会说,“你为什么不尝试这样提示它?”他会把键盘递给我。“不,你开车,”我会说。我们共同发展了对人工智能可以做什么的认识。本比我更有经验,似乎能够一次从中获得更多。正如他后来所说,他自己的神经网络已经开始与 GPT-4 的神经网络保持一致。我会说他已经实现了机械同情心。有一次,在一项我发现特别惊人的壮举中,他让人工智能为他制作了一个贪吃蛇游戏,就像旧诺基亚手机上的游戏一样。但随后,经过与 GPT-4 的简短交流,他让它修改了游戏,这样当你输掉游戏时,它会告诉你你偏离最有效路线有多远。机器人花了大约十秒钟来实现这一点。坦率地说,这是一项我不确定自己是否能做到的任务。
在国际象棋领域,几十年来一直由人工智能主导,棋手唯一的希望就是与机器人配对。这种半人半人工智能的团队被称为半人马,可能仍然能够击败最优秀的人类和最优秀的人工智能引擎独自工作。编程还没有走上国际象棋的道路。但半人马已经来了。就目前而言,GPT-4 本身是一个比我更差的程序员。本差得多了。但本加上 GPT-4 是危险的。
不久我就屈服了。我正在工作中制作一个小搜索工具,并希望突出显示用户查询中与结果匹配的部分。但我正在以一种使事情变得更加复杂的方式将查询按单词分开。我发现自己耐心不足。我开始考虑 GPT-4。也许与其花一个下午编程,不如花一些时间“提示”,或者与人工智能进行对话。
在 1978 年发表的一篇题为“关于‘自然语言编程’的愚蠢性”的文章中,计算机科学家艾兹格·W·迪杰斯特拉认为,如果你不是用 C++ 或 Python 等专门语言而是用你的母语来指导计算机,你就会拒绝使计算机变得有用的那种精确性。他写道,正式的编程语言是“一种消除我们使用母语时几乎不可能避免的各种废话的惊人有效工具”。迪杰斯特拉的论点在编程界成为一条至理名言。当这篇文章在 2014 年在 Reddit 上流传时,一位顶级评论者写道,“我不确定以下哪一项更可怕。这个想法是多么微不足道,或者事实上许多人仍然不知道它。”
当我第一次使用 GPT-4 时,我明白迪杰斯特拉在说什么。你不能只是对人工智能说,“解决我的问题。”那一天可能到来,但现在它更像是一种你必须学会演奏的乐器。你必须仔细地指定你想要什么,就像对初学者说话一样。在搜索突出显示问题中,我发现自己要求 GPT-4 一次做太多事情,看着它失败,然后重新开始。每次,我的提示变得不那么雄心勃勃。在谈话结束时,我并没有谈论搜索或突出显示;我已经将问题分解为具体、抽象、明确的子问题,这些子问题加在一起可以给我我想要的东西。
在找到人工智能的水平后,我几乎立即感到我的工作生活发生了改变。无论我走到哪里,我都能看到 GPT-4 大小的洞;我终于明白,为什么办公室周围的屏幕总是充满了聊天会话——以及本是如何变得如此高效的。我让自己更频繁地尝试它。
我回到了填字游戏项目。我们的谜题生成器以一种丑陋的文本格式打印其输出,其中包含“s”“c”“a”“r”“”“k”“u”“n”“i”“s”“” “a”“r”“e”“a”这样的行。我想将这种输出变成一个漂亮的网页,允许我浏览网格中的单词,并一目了然地显示评分信息。但我知道这项任务很棘手:必须用它所属的单词来标记每个字母,包括横向和纵向。这是一个详细的问题,很容易消耗掉一个晚上的大部分时间。由于婴儿即将出生,我晚上没有空闲时间。所以我开始与 GPT-4 交谈。需要一些来回的交流;有一次,我不得不自己阅读几行代码来理解它在做什么。但我很少做那种我曾经认为构成编码的那种思考。我没有考虑数字、模式或循环;我没有用我的大脑来模拟计算机的活动。正如另一位编码员杰弗里·利特在类似经历后写道,“我从未使用过我详细的程序员大脑。”那么我做了什么?
也许促使李世乭从围棋比赛中退役的是一种感觉,即这场比赛已经永远变得廉价了。当我开始编程时,那是因为电脑感觉像一种魔法。机器给了你力量,但要求你研究它的奥秘——学习一种咒语语言。这需要一种特殊的心态。我觉得自己被选中了。我致力于繁琐、仔细思考和积累晦涩的知识。然后有一天,成为可能的是在没有思考和没有知识的情况下实现许多相同目的。从某种角度来看,这可能会让一个人的工作生活看起来像是在浪费时间。
但每当我想到李世乭时,我就会想到国际象棋。在大约三十年前机器征服了这场比赛之后,人们担心不再有理由玩它了。然而,国际象棋从未如此受欢迎——人工智能让比赛变得更加生动。我的一位朋友最近开始玩它。在任何时候,他都可以访问一个人工智能教练,该教练可以向他提供恰好超出他能力范围的国际象棋问题,并且可以在他输掉比赛后准确地告诉他哪里出了问题。与此同时,在最高级别,国际象棋大师研究计算机提出的走法,就像阅读来自神灵的石碑一样。学习国际象棋从未如此容易;研究其最深的秘密从未如此令人兴奋。
计算还没有被克服。GPT-4 令我印象深刻,但一个外行无法像程序员那样使用它。我仍然对我的职业感到安全。事实上,我感觉比以前更安全了。随着软件变得更容易制作,它将激增;程序员将负责其设计、配置和维护。虽然我一直认为编程中最琐碎的部分最让人安心,也是最重要的,但我不太擅长这些部分。我在大型科技公司经常遇到的许多经典编码面试测试中都失败了。我相对擅长的事情是知道什么值得构建,用户喜欢什么,如何在技术上和人性化地进行沟通。我的一位朋友将这个人工智能时刻称为“平庸程序员的复仇”。随着编码本身开始变得不那么重要,也许更软的技能会变得更加突出。
这仍然让我想到了我应该教我未出生的孩子什么。我怀疑,随着我孩子的成长,我们将以我们现在回顾“电脑”的方式看待“程序员”,当时这个词指的是一个用手计算的人。用 C++ 或 Python 自己编程最终可能看起来像是在穿孔卡上用二进制发出指令一样可笑。迪杰斯特拉会感到震惊,但让电脑准确地做你想做的事情可能会变成礼貌地询问的问题。
所以也许要教的东西不是一种技能,而是一种精神。我有时会想,如果我出生在不同的时代,我会做什么。农业时代的编码员可能摆弄水轮和农作物品种;在牛顿时代,他们可能痴迷于玻璃、染料和计时。我最近正在阅读关于神经网络的口述历史,我惊讶地发现,许多接受采访的人——出生于二十世纪三四十年代的人——小时候都玩过收音机。也许下一批人会在他们父母曾经认为是黑匣子的人工智能的内部度过他们的深夜。我不应该担心编码时代即将结束。黑客永存。 ?
原文地址[A Coder Considers the Waning Days of the Craft](A Coder Considers the Waning Days of the Craft | The New Yorker)