原文链接:https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft
未经许可,禁止转载!
就像父母教我读写一样,作为程序员,我也要确保孩子能够学会编程。编程不仅是一项不断发展的技能,更是一项日益主要的技能。学会编程可以提升孩子们的综合能力,在就业中具有上风。但现在,我的妻子怀着我们的第一个孩子,距预产期还有三周。虽然我是程序员,但我担心等孩子终年夜学会打字时,编程可能已不再那么主要。
这种担忧始于我参与的一个业余项目。几个月前,我和朋友本决定考试测验用电脑制作一个《纽约时报》风格的填字游戏。我们曾用软件制作过一个星期六的谜题,只是加入了一些个人想法。现在,我们想开拓一个自动天生填字游戏的程序,无需人工干预。
在以往的项目中,我们的角色分明:Ben 善于硬件,我卖力软件。比如,我们曾做过一个霓虹灯招牌,靠近我们公寓的地铁站时会亮起。本卖力硬件部分,我处理交通数据的编程。只管本的编程履历有限,繁芜任务常日由我来完成。但在填字游戏项目中,本引入了新帮手:注册了 ChatGPT Plus 做事,并利用 GPT-4 作为编程助手。
结果出人意料。在项目谈论中,我们确定软件需求,本应能迅速独立完成这些功能。例如,我们须要一个命令从字典中随机选取一百行。我思考良久,改了很多次代码,但均未能达到预期的效果。与此同时,Ben 仅通过见告 GPT-4 需求,它就迅速写出了可以完美运行的代码。其余 Ben 想开拓一个评估词典单词的苹果运用,但不懂其繁芜性。我考试测验过开拓苹果运用,但从未完成。苹果的编程环境难以节制:需学习新措辞、节制不同的代码编辑和运行工具、理解用户界面组件及其搭配办法,以及节制运用打经办法。积累这些新知识令人望而生畏。然而第二天,我收到邮件,附有完备知足本需求的运用。它流畅、界面设计吸引,本仅花几小时就完成了。GPT-4 承担了大部分事情。
大多数人已经利用过人工智能,但并非都印象深刻。Ben 近期表示:“直到我用它编程,我深受震荡。”我疑惑,一些非程序员群体在看到 ChatGPT 天生的生硬文章或缺点信息后,可能仍低估了其技能代价。
传统上需多年学习才能节制的技能,现在彷佛瞬间可得。对我而言,编程是深邃、丰富的领域。但现在,我仿佛要为这门艺术写悼文。我想到了围棋选手李世石,他曾是顶尖高手、韩国英雄。但他因 2016 年输给人工智能 AlphaGo 而有名。李世碑本以为能轻松胜出,但终极只赢一局。发布会上,他对无力感到抱歉。三年后,他退役。李世石的经历反响了一个问题:我投入大量韶光和精力的奇迹将变成什么?
我的对电脑的热爱始于 90 年代初,在蒙特利尔,我六岁时就与哥哥一起玩《真人快打》。他向我展示了游戏中的分外技能,被称为“闭幕技”。只管我们都不会利用这些技巧,但他通过连接到 FTP 做事器并在 MS-DOS 终端中输入命令,找到了这些技巧的指令,并打印出来。我们回到地下室,轮流用这些技巧在游戏中击败对方。
我小时候一贯以为哥哥是黑客。像许多程序员一样,我梦想着入侵和掌握远程系统,不是为了制造混乱,而是出于对未知天下的好奇。1986 年《黑客宣言》中,洛伊德·布兰肯希普表达了一种积极的不雅观点:“我的罪过是好奇心”,强调了探索和创造的代价。我最喜好的是 1995 年电影《黑客》中的一个场景,新成员戴德·墨菲展示了他能够识别出从背包中取出的每本打算机书本的能力。戴德通过敲击键盘实现了在学校启动喷水系统和调度油轮压载的壮举,展示了知识便是力量。
我在五年级时家搬到了新泽西。高中时,我在 Borders 书店买了 Ivor Horton 的《开始学习 Visual C++》,一本 1200 页的书,我视其为我的第一本“邪术书”。像许多教程一样,这本书开始时读起来大略,但很快变得繁芜。中世纪学生们将学习中的挫折时候称为“驴子桥”,源于欧几里得《几何原来》中的第一个难点。对我而言,《开始学习 Visual C++》中的“动态内存分配”便是我的“驴子桥”,但我没能超越。
我并没有因此而放弃。我光鲜记得那个关键时候:在一次长途翱翔中,我带着一台方形的玄色条记本电脑和一张 Borland C++ 编译器的 CD-ROM。这个编译器可以把我写的代码转换成电脑能实行的程序。我花了好几天韶光才让编译器事情。大多数程序员的第一个程序都是大略地显示“Hello, world”,但当我考试测验运行我的程序时,却遭遇了一系列的缺点提示。办理一个问题后,又会涌现新的寻衅。我那时就像是有了一把邪术扫帚的《哈利·波特》,却不知道如何让它飞起来。但我知道,只要坚持,就会有所造诣。我意识到编程不仅仅是关于知识和技巧,更多的是耐心和对编程的热爱。程序员便是那些能忍受无尽呆板寻衅的人。想象一下,你得用险些不懂的措辞,通过电话向生手阐明组装家具的方法,没有任何图示可参考。你得到的唯一反馈可能是你的建议荒谬,全体过程乱糟糟的。以是,当你终极成功时,那份造诣感是极其宝贵的。我清晰地记得,在飞机走廊上躺着,末了一次按下回车键的那一刻。我坐起来,看到电脑屏幕上显示的“Hello, world”,仿佛电脑自己在说话。它就像一个刚清醒的智能体,向我展示了它的存在。
大多数程序员和《黑客》电影中描述的完备不同。在程序员眼中,“黑客”更多指编程的考试测验和创新。我虽未系统学习编程,但喜好用它来完成有趣或实用的小任务。例如,大一时,我知道会错过 2006 年大师赛,那时泰格·伍兹正处于状态上升期。我想实时理解比赛,于是开拓了一个程序,能从 pgatour.com 网站获取领先榜数据,并在伍兹每次得分时发短信给我。后来,在阅读《尤利西斯》的英语课上,我写了个程序,随机选句子,打算音节数,组成俳句。这虽好比今的谈天机器人原始,但我以为它特殊有诗意:
I’ll flay him alive
Uncertainly he waited
Heavy of the past
这引发了我对编程的兴趣。我开始为朋友的初创公司编码,逐渐创造打算机天下构造宽广有序,像地层叠加。每个子领域或系统都建立在更古老的根本上,层次繁芜但易理解。深入挖掘,就能体会赛车手杰基·斯图尔特所说的“机器同情心”——对机器性能和限定的深刻感知。
在朋友公司的事情中,我的“机器同情心”得到了发展。大二时,我和朋友看《危险边缘》,他建议我制作电视节目游戏版。我沉思几小时后,遗憾地认为这超出了我的能力。但到了大三,我找到理解决方案。我对机器的理解加深了。接下来的十四小时,我完成了游戏制作。“玩吉姆博危险边缘”成为我和朋友的常规活动。这让我明白,人们为何全情投入他们的工艺:看到别人享受你创造的东西,觉得无与伦比。
我那时全身心投入编程,以至于忽略了学业。我沉迷于编程,对课程激情亲切不敷。记得一天晚上,我在实验室占用多台电脑,运行并行处理程序,地板上铺满了算法思路的打印纸。这种专注导致我常梦见期末考试不堪一击——尤其是数学系的实剖析课。2009年,正值金融危急,我以 2.9 的绩点毕业。
我的第一份全职事情作为程序员意外地轻松得手。那时开拓职员很好找事情,成绩好坏影响不大。打算机科学成为热门专业,编程“培训班”迅速兴起,短期内就能将初学者培养成高薪程序员。我大学主修经济学,但在一次口试中,首席实行官对我提出的期望薪水给予了高 10% 的报价。
那是科技行业快速增长、低利率的期间。事情文化规范逐渐确立,谷歌等公司推广的文化影响行业。程序员享有优胜报酬,如免费餐饮、顶级医疗保健、健身举动步伐,以及“20%自由韶光”规则。他们的技能被视为关键且独特,但也形成了一些迷信,如编程任务韶光难以预估,截止日期常被忽略。
我意识到这统统中有些不对劲。我曾在十几岁时做网页设计,需求兴旺,收入可不雅观。但随着工具如 Squarespace的涌现,非专业人士也能轻松建站,导致高薪、低难度的编程事情逐渐减少。
“通过不雅观察别人在日常生活中的小事,就可以看出这个人是否有道德标准”— Hartley Lin 的漫画
面对行业变革,程序员社区的普遍意见是,不断提升技能。通过持续学习温柔应,我们努力保持安全——这是一个明智的策略,直到真正的危急涌现。当我们被许可利用 AI 谈天机器人赞助编程时,我最初对其有些排斥,估量同事们也会这样。但我很快创造,办公桌屏幕上涌现了范例的 AI 谈天交互颜色——斑马图案。这些工具被认为能提高事情效率,有时乃至能使问题办理速率提高十倍。
我对这种效率的必要性表示疑惑。我喜好编程过程,享受办理问题带来的造诣感。我常用的工具,如文本编辑器,既知足了这两个需求,又提高了我对编程技能的节制。只管这些工具使我事情更高效,但我仍感到自己的努力得到认可。然而,AI显得不同。它供应巨大帮助,但我担心它会削弱我办理难题时的乐趣和知足感。虽然我可能变得极其高效,但展示的只是终极产品。
程序员的日常事情成果常日不太引人瞩目,乃至常常出人意料地普通。对我来说,乐趣紧张在于办理问题的过程,而不是终极产品。如果这个过程只须要几分钟的 ChatGPT 会话完成,情形将会若何?我们程序员的事情不仅仅是编写代码,还包括辅导低级员工和进行高层次的系统设计,但编码始终是核心部分。在我的职业生涯中,办理繁芜编程问题的能力是我被口试和任命的关键。然而,现在这种能力彷佛变得不那么主要了。
在一篇文章中,Ben 向我展示了他利用 GPT-4 取得的造诣。GPT-4 不仅善于处理繁芜任务,还表现出高等工程师的本色,能从弘大的知识库中提出办理问题的方案。在一个项目中,Ben 将一个小喇叭和赤色 LED 灯泡安装在查尔斯国王画像的框架里,灯泡代表王冠上的宝石。当在配套网站上输入信息时,喇叭播放旋律,灯泡以摩尔斯电码闪烁信息。但他碰着了难题,无法让这个装置吸收新信息。要实现这一功能,彷佛须要对他正在利用的微掌握器有深入理解,并熟习后端做事器技能,如 Firebase。我给出了一些建议,但并不愿定其可行性。后来,Ben 向GPT-4 寻求建议,GPT-4 见告他 Firebase 有一个可以简化项目的功能,并供应了与微掌握器兼容的代码。
虽然最初我对利用 GPT-4 和支付其做事费有所犹豫,但通过与 Ben 的互助,我开始探索它的能力。在处理填字游戏项目时,我会建议 Ben 如何向 GPT-4 提问,但让他操作。我们一起逐步理解了这个人工智能的能力。Ben彷佛能更有效地利用 GPT-4,他的“神经网络”开始与 GPT-4 对齐,达到了一种“机器共鸣”。特殊令我惊异的是,他利用 GPT-4 构建了一个类似老款诺基亚手机上的饕餮蛇游戏,并让它修正游戏,显示输掉游戏时与最有效路径的差距,这个过程仅用了大约十秒钟。我不愿定我自己是否能完成这样的任务。
在长期由人工智能主导的国际象棋领域,与机器人互助是玩家的唯一希望。这种半人类、半 AI 的团队,被称为“半人马”,可能仍能击败最精良的人类和单独事情的最佳AI引擎。只管编程还没有变成像国际象棋那样的游戏,但“半人马”模式已经涌现。目前,单独的 GPT-4 还不如我编程,Ben 的编程能力更弱,但将 Ben 和 GPT-4 结合起来,形成了一个强大的组合。
不久后,我也开始考试测验利用 GPT-4。我在事情中制作了一个小型搜索工具,希望能突出显示用户查询与搜索结果的匹配部分。但我试图通过将查询分解成单词的办法处理,无意中使问题变得繁芜化。我变得不耐烦,开始考虑利用 GPT-4。大概我不须要花全体下午编程,而是可以通过“提示”或与 AI 进行对话来办理问题。
Edsger W. Dijkstra 在 1978 年的论文《关于“自然措辞编程”的屈曲》中指出,利用母语而非专业编程措辞(如C++ 或 Python)来辅导打算机,会放弃打算机的精确性上风。他认为,正式的编程措辞能有效打消利用母语时不可避免的模糊性。这一不雅观点在编程界广泛接管。2014 年,这篇论文在 Reddit 上流传时,一位顶级评论者指出,这个想法显而易见,但许多人仍旧不知道它。
我在首次利用 GPT-4 时,能理解 Dijkstra 的不雅观点。你不能仅仅对 AI 说,“办理我的问题。”只管这样的日子可能会来临,但目前它更像是你须要学会演奏的乐器。你必须小心地指定想要的结果,像跟初学者交谈一样。在办理搜索高亮问题时,我创造自己对 GPT-4 的哀求过多,看着它失落败后不断调度。终极,我将问题分解成详细、抽象、明确的子问题,这些子问题加在一起,将得到我想要的结果。
找到与 AI 互助的精确办法后,我开始创造到处都有利用 GPT-4 的机会;我终于明白了办公室里到处都是谈天会话屏幕的缘故原由——也明白了 Ben 为何如此高效。我开始更频繁地考试测验利用它。
我重新投入到填字游戏项目中。谜题天生器的输出格式相对简陋,我希望将其转换成一个俊秀的网页形式,以便轻松浏览网格中的单词,并一览无余地看到评分信息。但这个任务非常繁芜:每个字母都须要标记其属于的单词,无论是横向还是纵向。这是一个细致的问题,可能会耗费全体晚上的韶光。随着孩子的到来,我短缺了可以自由支配的夜晚。因此,我开始与 GPT-4 进行互换。这个过程须要一些来回对话;有时候,我不得不亲自阅读一些代码行来理解它在做什么。但我险些没有进行我之前认为是编程实质的思考,比如数字、模式或循环;我没有用大脑仿照打算机的活动。正如另一位程序员 Geoffrey Litt 在类似经历后所写,“我从未动用过我的详细程序员大脑。”那么,我究竟做了什么呢?
大概正是这种觉得匆匆使围棋高手李世石退役——由于游戏已经被永久地改变了。我之以是开始编程,是由于打算机给我一种邪术的觉得。机器授予了我力量,但哀求我研究它的神秘窍门——学习一种邪术措辞。这须要一种分外的心态。我觉得自己当选中了。我专注于乏味的、细致的思考和积累晦涩的知识。然后,有一天,很多相同的目标可以在没有思考和知识的情形下实现。从某种角度看,这彷佛使得我很大一部分事情生活变得像是在摧残浪费蹂躏韶光。
但每当我想到李世石,我就会想到国际象棋。大约三十年前,机器征服了这个游戏,当时的担忧是人们再也没有情由去玩它了。然而,国际象棋从未像现在这样受欢迎——人工智能使这个游戏变得更加生动。我的一个朋友最近开始学习它。他可以随时向人工智能教练乞助,这个教练能够供应刚好在他能力边缘的国际象棋问题,并且在他输掉比赛后见告他哪里出了问题。同时,在最高水平上,国际象棋大师们研究打算机提出的走法,就像是在解读神灵的启迪。学习国际象棋从未如此大略;探索它最深奥的秘密从未如此令人愉快。
打算机科学尚未被完备节制。虽然 GPT-4 令人印象深刻,但它并非所有人都能像专业程序员那样利用。因此,作为一名程序员,我对自己的专业领域感到更加安全。实际上,随着软件制作的简化,软件数量将增加,程序员可能会更多地转向设计、配置和掩护等方面事情。我过去总认为编程中繁琐的部分至关主要,但我并不善于这些。我曾多次在大型科技公司的传统编程口试中失落败,而我更善于理解哪些项目值得构建、用户喜好什么,以及如何在技能和人性之间沟通。一个朋友将这个人工智能时期称为“普通程序员的复仇”,编程本身开始变得不那么主要,更优柔的技能可能更为主要。
这让我思考,我该当教给未出生的孩子什么。随着韶光的推移,“程序员”这个词可能会像我们现在看待“打算机”一词一样——它曾指手工进行打算的人。亲自利用 C++ 或 Python 编程可能会变得像利用打孔卡输入二进制指令一样过期。虽然 Dijkstra 可能会感到震荡,但让打算机精确实行你想要的任务可能变成了一种礼貌提问的艺术。
因此,我该当教授的可能不是某一详细技能,而是一种思维办法。如果我生活在不同的时期,我会做什么?农业时期的编程者可能会研究水车和作物品种;在牛顿时代,他们可能对玻璃、染料和计时器感兴趣。我最近读到 20 世纪 30 年代出生的人在小时候玩无线电,这让我深受冲动。下一代人可能会在深夜探索他们的父母曾视为黑箱的人工智能。我不应担心编程时期的结束,由于探索和创新的精神永存。
你是否有过利用AI技能来办理编程问题的履历?文章中提到AI对编程职业的影响,你是否赞许作者的意见?你认为这种变革对程序员的未来意味着什么?