找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

445

积分

0

好友

59

主题
发表于 昨天 04:03 | 查看: 5| 回复: 0

我长达30年的编程生涯,正逐渐成为一件历史文物。目前从事的AI相关工作让我确信,只需短短几年,当人类回顾过往时,会觉得“人类曾需要亲手为机器编程”这件事显得颇为可笑。

我曾坚信编程离不开人类

我从8岁就开始编程,当时抱着一本Commodore 64用户手册,照着杂志背面的代码敲打。自那以后,学习从未停止。编程并非学几年就能完全掌握的技能。在过去的40年里,我始终身处全行业持续不断的技术演进洪流中。

图片

招聘程序员时,我们看重的核心品质是适应性、自主学习和批判性思维能力。要想站在技术前沿,必须付出持续不断的努力。

编程从根本上需要一种对机械的共鸣。你需要理解机器如何运作——存储、内存、处理、接口。在此之上,你学习语言和工具集的语义,掌握哪些字符组合能被系统执行。再往上,是大型程序的抽象、程序系统,乃至整个计算机系统。程序员的大部分工作在于管理复杂性,因此学习和开发应对复杂性的技术至关重要。

经验丰富的开发者会拥抱各种抽象:数据结构和算法、配置与状态、封装、函数式与对象组合、实体与数据、事件与快照、顺序与递归,这是一个永无止境的过程。与此同时,新产品持续发布,每周都在重构你的工具箱。

还有那些权衡取舍!所有编程(正如所有工程)都关乎权衡。你可以用处理能力换取内存,用时间换取完整性,用可靠性换取成本,用可维护性换取速度;调整上百个变量以打造出符合需求的程序。

程序并非存在于真空中。它们旨在解决真实人群的真实问题,并以可转化为实际产品和服务的方式呈现。程序员必须懂得如何定义问题,识别用户需求,并以可理解、令人满意的方式满足它们,确保构建的系统可行且能创造可行的业务。程序员编写与用户交互的程序,因此我们始终处于心理学、社会学及其与技术相互影响的前沿。

一个程序员在几十年里学会的,是思考本身如何运作。如果你试图将问题空间中的推理分解为一系列步骤,或将其拆分以便协同工作,或想弄清楚哪些事物会随时间演变,那么房间里确实应该有一位程序员。

这就是为什么编程作为一门学科,在过去半个世纪里已渗透到几乎每一个科学领域。程序员是设计者、架构师和建造者,他们在所有领域都为解决问题注入了强大动力。

等等……编程真的需要人类吗?

三年前,我结束了数位高级工程师职位的候选人面试。在流程中,发现一些人——无论出于何种原因——未能掌握编程工作所需的基本技能,这种情况并不少见。根据具体情况,如果他们拥有强大的批判性思维或解决问题的能力,我们或许会放宽要求,但发现这种情况仍令人震惊。

在一连串候选人表现不佳后,我倒在办公椅上感叹:“为什么这些候选人在用编程解决这个基础问题时都这么吃力?”

我的同事觉得好笑,问道:“是什么问题?”我描述了问题。“好吧,”他说,“……那么一个令人满意的解决方案应该是什么形式?”我转过身,意识到他并非真要帮我提高面试技巧——他正在我们刚获得早期访问权限的OpenAI GPT-3 Davinci playground中输入这个问题。敲了几下键盘后,他提交问题,一个完美无缺的Python答案便跳了出来。我看了一下,它正确且高效。

我惊呆了。

于是,我让他用另一种编程语言解决。它做到了。然后让他用不同的编程范式解决。它也做到了。接着,它不等我们要求更多变体,便开始自动打印出一系列其他语言的解决方案。

从那天起,我们在微软的小团队便开始研究由LLM驱动的系统。起初我相信,正如业界在接下来两年里逐渐意识到的那样,单凭这项技术就足以在计算机技术触及的几乎每个领域提高生产力。但我也认为,要让这些系统解决不仅仅是玩具问题,还需要很长时间。程序员日常使用的技能,对于一个文本补全神经网络来说,期望值实在太高了。

我们一个接一个地解决问题。首先,它们的记忆窗口很短,于是我们开发了应对技术。然后,我们将系统连接到其他工具,赋予它们写文本之外的能力。接着,我们让这些系统能处理更长的连续操作链。下一步,我们研究如何将更大的任务分解成更小的任务,并且仍能取得进展。然后,我们研究技术让它们的结果更可衡量、更可靠。最终,我们致力于让它们更具自省能力,能够根据实时表现自我调整。

在我们的研究过程中,模型能力越来越强,生态系统也在不断发展。一步步地,我们的系统从程序员手中接走了越来越多的工作

今年春天,Anthropic发布了Claude Code,它包含了一些关键要素,真正让我们的系统进入了超速运转状态。

首先,它可以直接通过命令行与你的计算机交互,而非像ChatGPT或API那样被困在网页应用中。其次,他们优雅地整合了一些已知模式——任务分解、任务委派和工具调用(如网络获取和文件搜索)——这使得系统能够以可靠的方式编排一系列任务。

今年我们一直在使用Claude Code这类工具,并不断提升AI系统的能力,以承担更大型的任务,具有更高的可靠性,运行更长时间。而所有这些,都没有让我觉得编程本身会变成历史文物。

我们一直在将各种技术和实验打包整合到Claude Code之上,将其作为一个快速实验平台。我们能够将许多来之不易的发现快速集成进去。我们在 https://github.com/microsoft/amplifier 发布了一个早期原型,并将在接下来一两周内发布一个较新的模型无关版本(不运行在Claude Code上)。

这还不是那个能完全取代我作为程序员的东西,但它让我确信,时间线是以月而非年为单位。它已经完成了困难的部分。

有了Amplifier,你现在可以描述你想要什么,它就会为你构建出来,从设计到后端,再到前端,包括测试,并且遵循你自己的编程理念。

但这还不是重点。重点是你用得越多,它就变得越好。随着时间的推移,你会创建可重用的工具,它能捕捉有用的技术。它会从你的使用中学习,建议改进自身的方法。这是一种指数级的生产力提升。

在过去的一周里,我使用Amplifier检查了两个独立的代码库,提取了我在其中一个中开发的功能集,提出了三种可能将相同想法集成到另一个代码库的方式,并行实现了每一种,然后为我提供了一份关于哪些可行、哪些不可行的总结。我还用它处理了一组大量的bash脚本,将它们转换成了一个Web服务API、一个Golang命令行界面和一个完整的Web应用前端。当然,设置提示词需要时间和程序员知识,但上述每一项任务都只需向Amplifier发出大约三个提示。在每种情况下,Amplifier都会运行30到120分钟,然后带着可工作的软件回来,包括文档

与此同时,我们扩展团队中的其他人用它构建了十几样东西,包括新版本的Amplifier、一个广泛的评估框架,以及两个不同的图形化实验桌面。

最让我印象深刻的是一位设计师,他编程背景有限,设想了一种全新的方法,从期望的设计美学出发,直达完整的设计框架,他借鉴了Figma和Storybook等其他工具组合中的想法和工作流,创建了一个全新的助手驱动设计应用程序,我估计这能让他的生产力提升十倍

上周,我们让Amplifier处理一个用于管理大型互连任务列表的有趣项目,然后它把这个功能集成到了自身之中,允许我的同事整夜持续运行它,自主完成几十项任务,甚至为他准备了一份“晨间报告”,其中包含了各种组件的多种实现方式,以获取他关于下一步该做什么的反馈。

这还不是最终产品,我们(以及整个行业)还有很多工作要做。硬件和软件制造商将需要发布产品上下文供AI使用。我们将需要继续发展并发布新的系统集成标准。但这是我第一次感觉到,困难的部分已经完成。从这里开始,机器直接按你的要求做事,而无需程序员从中协调,已是清晰可见的前景

可预见的未来会是什么样子?

我上面提到的那个项目,把bash脚本变成Web应用程序?实际上,整个开发过程都是在一个树莓派微型电脑上运行的。我只需要在上面安装Amplifier,挂载旧的代码库,然后告诉它去创建所有其他项目。我从未碰过代码,它已经比我花好几周时间自己做出来的要好了

我计划发布这个项目供他人使用,但你可以想象,使用相同的过程来构建定制的、个性化的软件,甚至无需分发它。我们不再需要下载和安装软件,我们将能够直接告诉机器我们想要什么,它就会创造出来。想修改一些东西?添加新功能?做一个全新的应用程序?只需开口要求。

我上面描述的所有编程技能,我花了一辈子时间掌握的技能,现在都可以通过像Amplifier这样的工具,加上恰当的提示词来完成。最后一步就是将所有这些专业知识打包起来,交给AI,然后任何没有编程经验的人,都将能够根据需要让AI构建他们所需的任何软件。

那么现在该怎么办?

我不介意把这描述为一次个人的存在主义危机。我的身份认同中,确实有很大一部分是与“成为一名程序员”紧密相连的。我曾认为找到正确的咒语让机器做出神奇的事情是一种魔法,一种职业超能力。

那么,当每个人都能施展魔法时,这意味着什么?我的超能力现在变成了日常生活?我还能在决策桌上拥有一席之地吗?这对我所追求的价值传承又意味着什么?我们都希望一生所做的事情能超越自身而持续。但现在很清楚,我的职业生涯遗产将会是一种奇特的遗存……就像铁匠、抄写员或宫廷弄臣。

但也许这比之前技术驱动的淘汰更奇怪。在以前的所有案例中,变得冗余的人能够将他们领域知识和解决问题的技能提升,应用到新事物上。铁匠建造了铸造厂,抄写员变成了印刷商,弄臣变成了喜剧演员。他们继续解决同样的问题,通常规模更大,使用新工具。

但是,当解决问题本身变得过时时,我们该做什么?就在刚才,我停下来去读了我的同事Brian Krabach关于他对此存在主义危机的文章。他六个月前就到了这个阶段,但我当时还不相信他。当然,机器会取代一部分编程工作,但在可预见的未来,我们仍然需要程序员来让机器做到这一点。Amplifier每天都在明确地证明,我在时间线上错了。

在他的文章中,他描述了如何在意识到取代程序员能让他解脱出来,去做他作为程序员一直热爱的事情——更快地解决更大的问题——中找到慰藉。但我不太确定。识别问题和提出解决方案对我来说似乎一直是比较容易的部分。我在各种创新实验室的经历告诉我,这些事情,也仅仅是可被自动化的流程而已。

但是机器无法获取关于需要解决什么问题的数据!它们不知道我们面临什么问题!” 当然——直到我们让它们编写软件来做这件事。

所以,是的。想到真正的问题——尤其是当前最急需的社会层面问题——即将得到解决,确实有相当的慰藉。我无疑会参与到其中许多问题中去。我只是需要努力接受一个事实:我的贡献将不再主要依靠我辛苦获得的编程技能。这些技能很快将触手可及,只要能够购买一些计算资源的人都能拥有。




上一篇:Snowflake与Leaf-Segment时钟回拨处理实战:高并发系统ID生成选型指南
下一篇:GESP C++五级前缀和算法实战:洛谷P1387最大正方形题解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-6 23:54 , Processed in 0.097464 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表