软件开发将如何永远改变,以及你需要如何随之改变
抱歉,你可能会觉得这篇文章很长。从标题来看,你可能会觉得我要么是要宣扬人工智能的无限荣耀,要么是要宣扬它将如何逐渐毁灭世界并抢走你的工作。
但我保证事实并非如此。事实上,既然你在 Dev.to 上读到这篇文章,我保证会告诉你,为什么在后人工智能时代,你更有可能取得成功。
自从编程诞生以来,有一件事始终不变:它始终与编写代码有关。尽管几十年来计算技术发生了翻天覆地的变化,但有一件事始终未变:我们编写代码,机器按照我们的指令运行。
如今,Copilot、Cursor 和 ChatGPT 等工具正在彻底颠覆这一流程。人工智能不仅执行指令,还能帮助创建指令。你描述需求,它就会生成代码,帮助你实现目标,有时甚至更进一步。
感觉难以置信。
但这引发了一些令人不安的问题。如果人工智能编写代码的能力越来越强,开发人员还能做什么?这究竟是几十年历史的职业的终结,还是更伟大事业的开始?
我认识的优秀程序员都不会被 ChatGPT 和 Claude 那些充满幻觉的输出所吓倒。但计算机发展史表明,这些程序员不应该如此自信,以至于世界不会要求他们去适应。
计算领域的下一个重大抽象
软件开发方式的每一次演变都伴随着抽象化。构建应用程序所需的数据量不仅没有减少,反而越来越大。但我们用来描述这些数据的词语却变得更具表现力、更简洁。
-
汇编语言:不再需要穿孔卡片系统,也不再需要费力地手工编写机器码。有了汇编语言,开发人员可以使用更易于理解的语法编写指令,从而摆脱硬件二进制的复杂性。这意味着他们可以将精力从管理单个字节转移到设计和构建更复杂的系统——操作系统、基本的用户界面以及早期的软件应用程序。这是迈向我们今天所知的编程的一大步:使人类能够与机器进行交流,而无需像机器一样说话
。 -
编译型语言:可移植的高级代码彻底改变了编程方式。开发人员无需编写特定于机器硬件的指令,而是可以使用 FORTRAN 或 C 等高级语言编写代码,编译器会将这些代码转换为优化的机器码。这种抽象使开发人员能够专注于解决复杂问题,而无需担心硬件相关的细节。结果如何?可移植、可扩展的应用程序兴起——从企业系统到驱动我们日常生活的软件。这不仅简化了编程,还为更大、更雄心勃勃、能够改变行业的项目打开了大门
。 -
解释型语言: Python 和 JavaScript 等语言将抽象化进一步提升,优先考虑易用性、灵活性和平台独立性。使用解释型语言,开发者无需将代码编译成机器指令,他们可以动态地编写和运行程序,并且通常能够获得即时反馈。这让编程变得大众化,即使没有传统技术背景的人也能轻松上手。尽管这些语言以怪异和低效著称,但它们推动了 Web 和应用革命,赋能了整个创新生态系统。如今,无数社区围绕着构建微型 SaaS 应用、游戏和实验性项目蓬勃发展,如果没有这些易于使用的工具,这些都不可能实现。
如果历史教会了我们什么,那就是新工具并不会消除工作岗位,而是会创造工作岗位。
1957 年的一个人:“编译器永远不可能胜过我手工制作的机器代码。”
编程最初意味着管理每一个细节——手动分配内存、编写针对特定硬件的底层代码,以及理解机器的每一个复杂之处。这套技能曾经非常小众,难以掌握。如今的学生可以在任何能够运行浏览器的环境中轻松完成他们的 React 杰作,而无需担心繁琐的细节。每一次抽象上的飞跃不仅使复杂系统的编程变得更容易,也开启了无数新的机会,以更少的努力拓展了可能性。
我认为人工智能辅助编码与这个持续进行的抽象化发展历程完美契合。编程演进的每一次变革都围绕着一个核心主题:代码可以表示为数据。每一次范式转变都是为了抽象我们如何描述和操作这些数据。大型语言模型将这种抽象化更进一步:它们使我们能够以自然语言的形式表示代码(以及生成式人工智能能够生成的任何其他内容)。
- 自然语言:生成式法学硕士 (LLM) 解锁了一种此前仅局限于小众手工编程语言的软件开发形式:使用纯英语构建应用程序的能力。好吧,差不多了。虽然这些模型可以“自动完成”以展现其技术精湛,但要获得可靠且精确的输出仍然需要大量的技术专业知识。然而,它们不断提升的能力让我们预见到,在未来,自然语言编程将成为软件生产的实际方式。
对开发人员来说有哪些变化?
与以往计算领域的许多范式转变不同,人工智能不仅仅是抽象代码……它更是抽象工作本身。优秀的开发人员可以详细描述他们的需求,而人工智能几乎可以处理剩下的工作。“代理”工具正逐渐具备一定程度的自主头脑风暴和规划能力——至少,它们看起来是这样的。这些程序编写的代码不一定能通过顶级程序员的嗅探测试(事实上,这些代码甚至可能无法运行),但我们距离获得一致可靠的输出似乎并不遥远。
人工智能并非像编译器那样是工具箱里的确定性工具。它本身就具有一定程度的混乱和不可预测性,而当它对许多事物的近似知识与它相结合时,就能成为一个相当优秀的协作者。即使你不直接使用它编写的代码,你也可能会发现它就像一只神奇的橡皮鸭,能够来回传递想法,并愿意对你的任何奇思妙想进行迭代。它快速解析大量文档的能力在研究如何构建系统时非常有用。这意味着开发人员的角色将以全新的方式演变。
未来,最有保障的开发者未必是对语言特性、API 和库最熟悉的人。人工智能——即使在目前令人印象深刻但原始的状态下——已经能够以惊人的精度近似地理解其中的大部分信息。
相反,获益最多的开发者将是那些擅长人工智能(希望如此)长期难以攻克的领域的开发者。至少就目前而言,人工智能还无法记忆完整的商业环境。它不了解领域。它不了解客户、路线图、预算、政治、文化、定位、战略——或者团队过去的失败和胜利。它并不存在于这个世界中,也不与那些驾驶着它所驾驶的这艘船的人建立关系。尽管它拥有强大的生成能力,但它对自己所处的行业却缺乏有意义的认知。
ChatGPT 的弱点在于它没有对产品总监 Jeff 的酷皮夹克进行评论以建立融洽的关系。
那些试图利用人工智能构建和理解复杂关系这一固有弱点的开发者将会改变他们的优先事项。编写代码将不再值得花费如此多的精力,因为大型语言模型最终将充分抽象出通过自然语言生成可靠代码的方式。从编程的角度来看,开发者只要在其技术领域足够精通,足以确保机器不会犯任何关键的技术错误就足够了。
更重要的是,适应能力强的开发者将充分利用他们对商业领域的深刻理解——至少目前而言,人工智能在这个领域根本无法与之匹敌。真正对最终用户、业务以及从业人员抱有浓厚兴趣和同理心的开发者,将能够利用人工智能构建最有效的解决方案,而投入的努力仅仅是那些固守传统程序员的十分之一——在企业眼中,那些程序员会只顾着追求亲手解决难题带来的多巴胺快感,而只见树木不见森林。
蓬勃发展的开发人员将是那些学会如何与人工智能合作并利用其所有优势和劣势的人。
开发人员需要哪些技能?
如果人工智能将编程的本质从“编写代码”转变为“阐明解决方案”,那么当今开发人员所重视的技能将会发展到普遍涵盖那些在人工智能之前的企业界积累了软件工程经验的人所磨练的软技能。
最初,最安全的群体将是那些已经因创造可衡量的业务影响而备受赞誉的高级工程师和经理。他们将从这一转变中获益,距离突然扩大的价值鸿沟仅一步之遥,而这条鸿沟将他们与那些没有机会积累技术经验或领域知识的新晋初级开发人员隔开。这些新人非常不幸,他们试图跨越一座突然在他们脚下崩塌的桥梁。
但即使是高级工程师也并非永远安全。对于高级和初级工程师来说,关键的一步是要充分发挥他们在人工智能领域的独特优势,并卸下其他所有工作。
清晰地表达问题并将其分解为可操作的逻辑步骤的能力将是一项关键的差异化技能。人工智能可以生成代码,但无法理解模棱两可或表达不清的需求。开发人员必须能够高效地将业务需求转化为人工智能能够有效执行的提示。他们必须提供适量的技术背景,以免人工智能因设计不足或过度设计而导致糟糕的实现方案失控。
虽然人工智能可以编写系统的各个组件,但它还无法设计如何将这些部分组合在一起,至少目前还无法很好地设计。以我的个人经验来看,它很快就会忽略全局,在评估重要决策时优柔寡断,难以抉择。开发人员需要专注于架构和集成,确保人工智能生成的组件能够融入更广泛的系统,并与组织目标保持一致。
我们需要重构这里的矩形,否则我们都会立即死亡。
开发人员需要严格评估和完善人工智能输出,确保其高效、安全且符合业务目标。这需要结合技术专业知识和通过生产系统经验磨练出的直觉。
那些能够与利益相关者建立信任、理解用户痛点并倡导符合公司价值观的解决方案的开发人员将拥有明显的优势。这些技能目前还不是人工智能能够复制的,而这些技能将使最优秀的开发人员脱颖而出。(而且可以说,人工智能已经做到了。)
衡量开发者成功的标准从来都不是你能写出多少行代码,将来也不会是,而是你能带来多大的影响。在这个新的格局中,赢家将是那些:
- 提供真正解决用户问题的解决方案。
- 构建可根据业务需求扩展的弹性系统。
- 将人工智能用作倍增器,而不是拐杖。
这是从工匠心态到战略家心态的转变。最优秀的开发人员将减少手动重构和测试的时间,而将更多时间用于解决有意义的问题。传统的代码编写技能将变得越来越没有内在价值,除非在技术性能达到巅峰对业务或产品战略至关重要的情况下。
人工智能将取代不适应的开发人员
事实是:开发人员的角色不会消失,但开发人员的日常工作将发生巨大变化。那些重复、耗时且易于描述的任务将被自动化。这不是威胁,而是机遇。
拥抱这一变革的开发者将有更多时间专注于真正重要的事情。打造无缝体验,探索创新解决方案,解决现实世界的问题。
但那些抵制的人——那些加倍依赖手动流程或否定这些工具潜力的人——可能会被抛在后面。人工智能不会等待任何人迎头赶上。如果你发现自己正在嘲笑如今人工智能生成的不完美代码,请记住:曾经有一位伟大的程序员,他相信自己编写的汇编代码总是比编译器更好。我们知道这个故事的结局。
这种转变的美妙之处在于它降低了门槛,为任何愿意学习的人打开了大门。生成式人工智能是一种工具,而非替代品。如同之前的每一次范式转变一样,拥抱它的人将增强其解决问题的能力。无论您是初出茅庐的初级开发人员,还是经验丰富的架构师,人工智能都能让您更快地完成更多工作,并更加专注于真正重要的事情。
但在这个新时代取得成功需要适应。你不能仅仅将人工智能视为自动化的另一种工具。它是一位协作者。学习如何有效地引导它——如何构建问题、验证输出并迭代解决方案。将你的注意力从编码机制转移到更广阔的视野:理解用户、设计系统并与战略保持一致。
人工智能正在将工作本身抽象化,让开发者能够将精力投入到真正重要的事情上:推动真正的变革。如果你能掌握这一转变,你不仅能跟上时代,还能改变世界。
人工智能将增强建筑工人的能力,但会取代体力劳动
最优秀的开发人员不仅会编写代码,他们还会运用人工智能重新定义企业的运营方式。通过结合自身技术技能与人工智能,他们将能够自动定义和转化业务和用户需求,分析非结构化数据以发现机会,并找出流程中的低效环节。这些开发人员不仅能实现工作流程的自动化,还能有效地实现组织本身的自动化。
想象一下,萨姆·奥特曼 (Sam Altman)预测的独角兽将在未来十年内成为现实,这并不牵强。
对于非技术岗位的开发者来说,这应该是一个警钟。使用人工智能的开发者不会仅仅局限于传统领域——他们将拓展到其他领域,从市场营销、运营到设计,甚至产品领导。这并非出于恶意,也并非有意取代人类,而是因为人工智能将为他们(或雇佣他们的公司)提供工具,彻底改变曾经无法触及的手动流程。
如果我不是开发人员怎么办?
解决方案很简单:学习构建。不一定非要像软件工程师那样编写代码,而是要设计和构建能够解决问题的系统。现在就开始,在差距扩大之前。
人工智能正在改变工作的本质。任何能够实现自动化并带来盈利的流程,都可能最终实现自动化。这并非猜测,而是技术进步的轨迹。那些了解如何利用这些工具创造、构建和解决问题的人将领先一步,实现任务自动化,提高生产力,并释放全新的机遇。
如果你从事非技术工作,你可能会想:“我不需要学习编程。人工智能会帮我搞定。” 这话部分没错——人工智能工具正在降低门槛,让入门变得更容易。但在这个时代蓬勃发展的人,将是那些理解并熟练掌握从零开始构建解决方案基本原理的人。
人工智能并非魔法。它并不理解您的业务、客户或目标。它仍然依赖于人工输入——依赖能够构建问题、验证输出并集成解决方案的人。开发人员已经知道如何做到这一点,并且他们正在与人工智能合作,突破界限。您也可以做到——只需要练习并愿意适应。
感谢您阅读我在 Dev.to 上的第一篇文章。我真诚地相信,所有拥抱人工智能的专业人士都将拥有光明的未来——他们不仅将人工智能视为工具,更将其视为解决重大问题的伙伴。
这种范式转变并非程序员的终结,而很可能开启一个全新的编程时代。职业发展将日新月异。唯一不变的就是变化。在这个世界上蓬勃发展的关键在于适应能力。
去创造一些东西吧。无论你是经验丰富的开发者,还是从未写过一行代码的新手,都没关系。花一个小时探索各种可能性。用人工智能解决问题,自动化繁琐的任务,或者只是为了好玩而创造一些东西。
那些今天进行实验、学习和建设的人——无论他们是否具有技术经验——都是明天蓬勃发展的人。
成为他们中的一员。
文章来源:https://dev.to/jdbar/how-software-development-is-changing-forever-and-how-youll-need-to-change-with-it-1jih