程序员的身份危机

图0:程序员的身份危机

我是一名程序员。一名编码者。一名键盘牛仔。一名黑客。我的日常就是敲击键盘;催化代码。这很有趣;这就是我的身份。Vim编辑器是我的工坊,我的圣殿1。在此我磨砺技艺,精进工具,借好奇心拓展能力,偶尔沉入恍惚的创作之境。全屏终端窗口里,唯有插入模式隔绝思绪与现实。在Bram2的祭坛前,我凭空捻出现实的丝线,化作穿梭硅片的数字流。这完全虚构的无形世界,却在现实中激荡涟漪。于此我寻得技艺与创造的慰藉。时间在解谜中消逝。连接碎片比完成图景更重要。技艺从指尖跃入缓冲区。我编程时逐渐融入创作的流动状态。

1950年代末的麻省理工学院,正孕育着一种激动人心的新文化——亲手实践、勇于实验、反叛体制。我常幻想置身其中,坐在板岩蓝的L形控制台前。在Flexowriter3上飞速敲击,它吐出的穿孔纸带程序被送往附近的金属立柱墙——那里缠绕着电线,装载着早期晶体管; 那台名为“Tixo”4的计算机。屏息凝神等待着,当机器运行程序时发出令人着迷的哔哔声:它会成功吗?我仿佛看见周围那些后来被称为“黑客”的人们,指着代码互相指点如何实现“正确之事”5:编写完美无瑕、纯粹优雅且简洁的程序。当他们热情践行《黑客伦理》时,原始编程文化仿佛从他们身上倾泻而出,更将自己手写程序的片段分享给我,指引我的探索之路。

元素周期表

编程的技艺正是在那里——26号楼的计算熔炉中——铸就的。近七十年前,科技模型铁路俱乐部的成员们沉浸于机器语言,追求数字魔法的精通。操纵形式化语言解决日益棘手的隐秘难题,并——作为文化核心——与其他软件巫术的暗黑艺术学徒分享发现,这般崇高的魔力。

昔日黑客的幽魂仍在机器间游荡,更通过他们缔造的文化在我们心中徘徊。他们锻造技艺的遗产依然流传——这份深邃而充满动能的技艺,已被我们拓展为充满激情的产业。我们仍怀揣着与他们相同的惊奇、成就感与解谜优雅,始终秉持“正确之事”的信念。这些构成程序员身份的根本理念,如今正面临日益严峻的威胁。危在旦夕。编程的未来,曾经如此光明而清晰,如今却笼罩在令人不安的黑暗、欺诈和不确定性之中。


事实上,如果我们相信价值数十亿美元的人工智能产业、Hacker News的居民(及其统治者)以及领英上那些大型语言模型狂热分子的观点,软件开发的未来将与编程毫无相似之处。氛围编程——一年前还像个梗——正成为主流。

当下(尽管这不断变化),氛围狂热者的法庭要求我们用Markdown而非代码编写规范。那些我们曾驾轻就熟的深度投入与精湛技艺已然消逝:在代码库角落耗费时光、破解难题、发掘深藏秘密的日子一去不返。取而代之的是拥抱碎片化认知,在代我们思考的智能体群落间频繁切换上下文。创造性解谜工作交给机器,我们沦为与技艺割裂的操作员。


令人意外的是,竟有不少人欣然接受这种转变,欣然拥抱“规格工程”的新身份。他们兴奋地扮演操作员,模仿史蒂夫·乔布斯“指挥乐团”。面对这般对编码的漠然,不禁令人疑惑:他们当初为何选择成为程序员?莫非将沃兹尼亚克与乔布斯混为一谈?

我无法想象(或许我缺乏想象力)所谓提示、上下文或规格“工程学”6能为程序员开创光明前景。这充斥着对技艺、技能与劳动价值的贬损。这种新身份体系中,我们独特的抽象思维能力已不再被真正需要,反而将我们推入产品经理和设计师早已占据的领域。

随着这种新身份的推行,企业内部的权力格局正在发生变化。在错误地追求生产力提升的疯狂冲刺中7,开发者被迫以越来越具体的方式使用大型语言模型。要么顺从,要么被淘汰。要么使用宣告我们过时的工具,要么辞职。管理层从未如此具体地干预我们的工具选择——这些如同厨师刀具或木匠凿子般的工具,本是我们精心打磨的骄傲:编辑器的精细配置、点文件的反复调试、开发环境的深度优化。作为手艺的一部分,我们始终致力于将工具集个性化以契合思维模式。由管理层强制规定这些细节令人感到侵犯——他们与日常工作几乎毫无关联,本应关注成果、流程及创造力培育。数十年来,程序员在企业中备受宠爱。这些论调为管理层提供了重新掌控局势的新途径。


有人兴高采烈地将大型语言模型及其影响比作从低级语言向高级语言的过渡——从汇编语言到Fortran。我认为这种类比存在双重谬误:首先,Fortran的飞跃根植于编程本身,它并非试图消解编程技艺,而是在此基础上进行创新。Fortran并未削弱程序化形式的精确性与表达力,反而实现了扩展。其次,Fortran始终能根据输入准确产出预期结果。而这些特质在LLM领域皆不复存在。我几乎能听见信徒们高呼“是你用错了方法”,同时不断调整目标以迎合变幻莫测的叙事。但我们不能指望AI工具能像编程语言那样精准。它们的设计遵循着截然不同的规则与参数体系。

英语里再多的脏话也难以形容计算机和编程带来的挫败感,但至少我们始终能依靠它们的精确性:通过编程指令实现完全预期的运行效果。或许正因我们对计算机精确性的依赖与信任,才如此轻易相信聊天机器人——当它们通过精神操控让我们误以为自己完成了指令时8

大型语言模型及其应用天生缺乏精确性。这种特性既源于模型本身的属性,也根植于我们赋予它们的指令方式——易被误解的自然语言。有趣的是,我们程序员群体对非确定性如此反感,却偏偏选择了这种计算方式。我们追求可预测性、组合性、幂等性,以及稳定可靠的集成测试。而大型语言模型的代码恰恰代表着相反的特质:矛盾的混沌。

迪杰斯特拉在《论“自然语言编程”的愚蠢》中写道,颇具深意:“我们必须质疑自然语言能简化工作的假设。” 他还指出:“形式化文本的优势在于,其合法操作只需遵循少数简单规则;细想之下,这实为排除各种无稽之谈的绝佳工具——而当我们使用母语时,这类无稽之谈几乎难以避免。”


当前存在一股思潮,试图通过强化严谨性与官僚化流程,将人工智能辅助开发(代理人主导模式)与氛围编码区分开来,但这种做法忽视了技术的本质属性。我发现自己阅读大型语言模型生成的代码时,远不如亲手编写或审查PR时那般专注。LLM编码似乎天生具有某种令我视线模糊的特质。我草草浏览,既被淹没又感到厌倦。只要持续集成通过且程序能编译,我就盲目接受其中埋藏的陷阱——不检查测试是否设置运行,不确认它是否引入了不存在的库,甚至不核实它是否自行实现了整个库。当然,代价终将付出——当我深陷自设陷阱,才惊觉数小时心血竟建在崩塌的地基上。又或者,直到有人在PR中指正、收到错误报告,或是被紧急事件呼叫时,我才恍然察觉。

书籍的评论或梗概永远无法替代亲自阅读的体验:当你逐句细品,在数百页篇幅中沉浸数小时思索理念。同样地,草草浏览已完成的人工智能任务摘要,会剥夺我们对领域、问题及潜在解决方案的深度理解;它让我们与代码库的联结荡然无存。投身于无知的深渊,去揭示、学习并理解某个主题及其深层含义,既令人满足,又是打造优质软件的关键。自主权、行动力以及深刻而充实的工作,已被分散在智能体标签页间的注意力所取代。

美国散文大师琼·迪迪恩曾写道:“我写作纯粹是为了厘清自己的思绪、观察的对象、所见的事物及其意义。” 彼得·瑙尔在其著作《编程即理论构建》中探讨了相同理念。 瑙尔的“理论”体现了对代码库的理解——其运作机制、形式化表达及对现实世界的映射。这种认知唯有通过深度沉浸方能获得。瑙尔将“理论”定义为编程的核心成果,即真正的产出物,而非最终生成的软件。唯有建立完善的“理论”,才能有效地对代码库进行扩展和修复。若仅凭灵感迸发的片段性代码浏览,构建此类理论实属困难。我确信瑙尔会认为这是不可能的。

优秀的设计源于深度沉浸。源于反复淬炼。源于在文本缓冲区中来回推敲,更常源于远离键盘的思考。我们不可能将整个代码库铭记于心。必须潜入模块、类和函数中,才能磨砺模糊的思维模型。通过阅读与编写代码拓展认知,重拾对问题领域的熟悉感与理解力。

当上下文轮廓初现,历经无数拙劣尝试后,解决方案终将浮现。糟糕的设计必然引发认知不协调:唯有编写出令人厌恶的重复代码时,我们才意识到存在更优雅、更简洁、更具组合性与复用性的实现方式。这迫使我们停下脚步,退后一步深度思考问题,重新开始。循环往复。反观AI代理的工作毫无摩擦——我们回避替代方案,无从知晓接受的方案究竟是完美、平庸、糟糕,抑或有害。质量源于迭代打磨——若不曾探索过糟糕的设计,我们又如何构想出优秀方案?


基于大型语言模型的编码所产生的认知债务,远不止于使我们疏离编程技艺。我们都听过这类故事:那些被炒作炒热、兴致勃勃的粗制滥造者,其注意力持续时间甚至短于2010年代初频繁跳槽的JavaScript开发者,他们将粗劣代码和设计文档塞进拉取请求,阻碍协作并扰乱团队。代码审查的同事们正迅速崩溃——当他们意识到自己已成为质量控制的第一道防线而非最后一道屏障时,这种残酷现实令人窒息。被要求审查;被迫挑刺。指出那些永远不会被调用的新增函数、凭空想象的库添加,以及显而易见的运行时或编译错误。而作者——显然只是粗略浏览了“自己的”代码——却毫无责任感,轻描淡写道:“哎呀,是克劳德写的。傻乎乎的AI,哈哈。”

爱插手的经理和抠门的执行官正(希望是无意地)推动团队减少人际互动。被孤立且失去联结的我们,如今被赋予权力并鼓励在工作体验中筑起高墙。当我们需要结对编程、方案碰撞、原型设计、架构构思或解答代码库深奥部分的专业问题时,我们转向大型语言模型而非人类。我们不再需要入职伙伴、导师或同行;取而代之的是与机器对话。借助大型语言模型,规避人际接触变得如此轻松,以至于可能成为常态。未来确实 一片光明……


我们对AI炒作叙事的盲目认同令人不安,我们主动参与着对自身技艺的蓄意抹杀9,如此甘愿交出思考的根基。我们本是幸运儿,得以靠爱好谋生。即便制定严谨刻板的流程来抵御粗制滥造——某些支持者提出的方案竟与昔日的瀑布模型惊人相似——我们仍将工作的乐趣外包,换来导演式的枯燥差事。下一步该轮到TPS报告了吗?

大型语言模型似乎是解决软件复杂性问题的核弹级方案。与其解决实际问题,我们反而转向了更为复杂且模糊的手段来治标不治本。我并不介意用Claude替代sed命令,也不介意向它咨询某个库或框架的细节——毕竟在文档里翻找数小时后,我仍需厘清这些问题10。但我坚决不愿沦为单纯的操作员或代码审查者:甘居有趣工作的幕后。我要掌控方向盘,沉浸于技艺之中,在乐团里演奏,破解复杂谜题。我要始终保持程序员的身份,做一名匠人。

我更希望工具能协助处理重复性任务(编程中此类任务比比皆是)、理解代码库、编写正确程序。那些企图替我思考的产品令我反感——它们剥夺了我对所产软件的自主理解能力,切断了与同事的协作纽带。即便大型语言模型真如宣传般强大,我们终将失去这一切以及我们的手艺。人类远比机器及其背后的企业重要——这些企业正从我们追逐其兜售的“新美国梦”中牟利。作为代价,我们献出了批判性思维、生活乐趣、手艺精髓、隐私权,甚至可能包括整个星球。

  1. Vim是 首选的编辑器。每个人都有自己的选择。Sublime、Visual Studio Code、JetBrains等工具皆可,甚至Emacs亦然。它们都是孕育魔法与创造力的沃土。
  2. Bram MoolenaarVim 的创建者与终身负责人。安息吧。
  3. Flexowriter曾与多台计算机配合使用,将程序编码至穿孔纸带上,其原理类似于穿孔卡片
  4. TX-0——昵称“Tixo”——是麻省理工学院林肯实验室设计的早期全晶体管计算机。它在先驱程序员的早期计算探索中发挥了关键作用。
  5. 麻省理工学院早期黑客文化(该群体自创术语)、“黑客伦理”及“正确之事”理念,在史蒂文·列维1984年出版的经典著作《黑客:计算机革命的英雄》中得到了精彩阐述。
  6. 将此称为工程甚至工艺似乎牵强附会。它绝不可能取代编程工艺的深度。
  7. 程序员生产力是高管们的执念。鉴于我们的成本,这种关注无可厚非。遗憾的是,他们将“产量指标”思维套用到知识工作中。在他们圈子里,人工智能被当作神奇的生产力工具兜售——这些工具首先承诺提升生产效率,其次则要消除软件公司最昂贵的环节:软件工程师。也就是我们。这对“拼命奋斗”的科技公司而言可谓双赢。
  8. 我很想读到关于人们为何如此轻易相信并信任AI聊天机器人的研究。是源于我们习得的对计算机精确性的依赖?是那些伪装的人类行为特征?还是完全不同的原因?当ELIZA——堪称首个“AI聊天机器人”——于1967年问世时,它极快地赢得了用户信任;人们几乎立刻就向它倾诉了内心最深处的秘密。其影响力之大,以致其创造者约瑟夫·维森鲍姆撰写了《计算机权力与人类理性》一书,主张计算机缺乏人类道德指南针,不应用于关键决策。
  9. 这并非阴谋论:人工智能公司正积极预测编程将走向消亡。我们实际上是在为程序员的计划性淘汰提供资金。
  10. 它在处理模板代码方面也相当出色,但模板代码的需求本身不才是真正的问题吗?

本文文字及图片出自 The Programmer Identity Crisis

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号