原文:https://zed.dev/blog/software-craftsmanship-in-the-era-of-vibes
有人告诉我,软件开发者很快将被自主代理取代。然而,我每天都在使用糟糕的软件。当通用人工智能(AGI)到来时,能否让它的第一个任务是开发一款像样的日历应用?
我这篇文章的目的不是抱怨软件的糟糕,至少这篇不是。我想讨论的是,在代码生产限制大幅放宽的时代,高质量软件的重要性。
当限制消失,质量应更重要
你可以在Zed中以流畅的120帧每秒“氛围”编码,如果你愿意,甚至可以24小时不停地生成代码。但在一个代码生产不再受限的世界里,我们对质量的要求应该更高。
作为软件工程师,我们的贡献不应该以生成的代码行数来衡量,而应以是否构建了可靠、设计良好、易于修改且使用愉悦的系统来评价。
网上有很多关于10倍(甚至100倍!)工程师的讨论。大多数人都在谈论人工智能如何帮助我们更快地开发软件,生产更多软件。但作为工艺人,我们应该反问:“人工智能如何帮助我构建更好的软件?”
系统设计更重要
如果你在一个解决实际问题的代码库中工作过,你一定能体会这种感受:“我想让它更好,但没时间修复。”系统在某些方面存在缺陷,阻碍了我们的生产力和想象力,但我们得赶紧交付。总是有种激励,让我们在现有系统上“弯曲”解决问题,而不是彻底修正,即使这让系统“不太对,但还凑合”。
我们在Zed的价值观“交付与工艺”成对存在是有原因的。我们应该感到紧迫,但不该用紧迫感作为偷工减料的借口。短期收益不值得以公司长期的次优速度为代价。现在这点尤为重要,因为一个混乱的代码库不仅会阻碍我们自己的工作效率,还会影响人工智能工具在其中的表现。
认识到这种动态并不意味着问题容易解决。因为我们是在构建系统的过程中逐渐了解它,可能直到开发后期才知道“正确设计”是什么。我们在每个时刻的决定可能当时看似合理,但久而久之,这些决定累积起来,我们发现自己在一个感觉像是“遗留代码库”的系统中工作——尽管我们一直试图避免这种结果。
因此,比以往任何时候都更需要以系统的可靠性、可理解性和可修改性来评估贡献,而不是以触碰了多少行代码来衡量。
承担责任,提升标准
那么,如何构建好的软件?方法可能有很多,但我想分享我的方式:对用户体验承担全部责任。
作为一名代码编辑器的用户,我想要快速的体验。如果复杂的3D游戏能以120帧每秒运行,我的编辑器没有理由不能以同样速度渲染2D文本和矩形。这是我对Zed的最初目标,尽管当时我不知道如何实现。基于我之前创建代码编辑器Atom(及其衍生品Electron)的经验,我知道必须超越Web技术,否则无法提供比浏览器更好的体验。
于是我从头开始。但从头开始意味着承担更大的范围,学习一门带有“虐心”编译器的系统编程语言,还要学会编写着色器。这一切都增加了项目的风险,但没有这些,Zed不可能成为今天的样子。幸运的是,这种学习和从头开发软件的过程如今因大型语言模型(LLM)的出现变得简单多了。即使模型会产生“幻觉”,当年我学习Rust时,如果能有个语言模型帮我解释借用检查器的错误,我愿意付出几乎任何代价。
对用户体验的完全负责不再像过去那么冒险。如果我们有追求卓越体验的雄心,但缺乏某些必要技能,人工智能可以帮助我们跨越知识障碍。它不会完全替代专业知识,我们仍会在过程中犯错,但它让我们能更快实验、学习和迭代。
瞄准高目标!打造真正卓越体验的门槛从未如此之低。
一起探索
人工智能代理出现时间不长。我们已经学会了很多如何最好地使用它们,但还有很多需要学习。而且,工具本身还在不断改进,这让我们在追求理解的道路上面临不断移动的终点线。
在这种快速变化的环境中,如何判断哪些技能和技巧与哪些工具最匹配?答案和过去一样:通过彼此分享知识!
因此,今天我们推出“代理工程”——结合人类工艺与人工智能工具,构建更好的软件。
每隔一周,我们将邀请专家与我们一起探讨。阵容非常激动人心。加入我们的探索之旅,一起找到答案。
在下方注册,获取直播活动邀请和电子邮件摘要。
在继续完善我最爱的工具时,我期待找到用人工智能推动边界的方法,帮助世界不仅编写更多软件,而是编写更好的软件。