共鸣时代的软件工艺案例

他们告诉我,软件开发人员很快就会被自主代理取代。然而,我每天都会遇到糟糕的软件。当通用人工智能(AGI)出现时,它的第一个任务难道会是开发一个像样的日历应用吗?

我在这里并非为了抱怨糟糕的软件,至少在这篇文章里不是。我在这里是为了在这个代码生产限制大幅放宽的时代,为高质量软件辩护。

当限制消失时,质量更重要 如果你愿意,你可以在 Zed 中以流畅的 120fps运行代码,并且全天候生成代码。但在这个资源丰富的世界里,对质量的要求应该更高。

作为软件工程师,我们不应该用生成的代码行数来衡量我们的贡献,而应该用可靠、设计良好、易于更改且使用愉快的系统来衡量。

网上有很多关于 10 倍(甚至 100 倍!)工程师的讨论。大多数人都在谈论人工智能如何帮助我们更快地开发软件,并帮助我们开发更多软件。作为工匠,我们应该审视人工智能并问自己:“它如何帮助我构建更好的软件?”

系统设计更重要 如果你曾经在解决实际问题的代码库上花费过时间,我相信你一定能体会到这种感受:“我希望它变得更好,但我没时间去修复它。” 这个系统存在一些缺陷,阻碍了我们的生产力和想象力,但我们需要交付。我们总是有动力通过调整现有系统而不是修改它来实现目标,即使这样做会让系统“不太完美,但足够好了”。

在 Zed,我们秉持“交付与工艺”的价值观,两者并存是有原因的。我们应该有紧迫感,但不应以此为借口偷工减料。短期收益不值得为了公司发展而牺牲不理想的速度。如今,粗糙的代码库不仅阻碍了我们自身的工作能力,也影响了 AI 工具的高效运行,因此这一点尤为重要。

认识到这种动态并不能让问题更容易解决。由于我们只是在构建系统的过程中学习它,我们甚至可能直到系统开发到相当长一段时间才知道什么是“正确的设计”。我们的每一个决定在当时可能都是合理的,但随着时间的推移,它们会逐渐积累,不知不觉中,我们就会发现自己工作在一个感觉像是遗留的代码库里——尽管我们一直在努力避免这种结果。

所有这些都使得评估贡献变得比以往任何时候都更加重要,不是根据你接触了多少行代码,而是根据你对最终系统的可靠性、可理解性和可变性的影响。

承担责任并提高标准 那么,我们如何构建优秀的软件呢?方法可能有很多,但我只告诉你我的方法。它需要我们真正地重视用户体验。

作为代码编辑器的用户,我希望获得快速的体验。如果复杂的 3D 游戏能够以每秒 120 帧的速度运行,那么我的编辑器没有理由不能以同样快的速度渲染 2D 文本和矩形。这是我最初为 Zed 设定的目标,尽管当时我并不知道该如何实现。根据我过去创建名为 Atom (及其衍生产品 Electron )的代码编辑器的经验,我确信的一件事是,我必须放眼于 Web 技术之外。否则,我永远无法获得比 Web 浏览器更好的体验。

所以我重新开始。但重新开始意味着要承担更大的挑战,学习一门编译器极其强大的系统编程语言,还要学习编写着色器。所有这些都给项目增加了风险,但如果没有这些风险,Zed 就不可能发展到今天这个样子。幸运的是,得益于法学硕士 (LLM) 的强大力量,这种学习和从头开始的软件开发变得非常容易。即使当时我处于幻觉状态,在刚开始学习 Rust 的时候,我也愿意付出一切,只为了能有一个语言模型帮我解决 Rust 借用检查器的错误。

完全掌控用户体验不再像过去那样危险。如果我们雄心勃勃地追求卓越的体验,但只具备实现这一目标所需的部分技能,人工智能可以帮助我们弥补知识方面的不足。它不会取代实际的专业知识,我们仍然会犯错,但它能让我们比过去更快地进行实验、学习和迭代。

志存高远!打造真正卓越体验的门槛从未如此低。

让我们一起解决这个问题 人工智能代理出现的时间并不长。我们已经学到了很多关于如何最好地利用它们的知识,但仍有许多东西需要学习。此外,这些工具本身也在不断改进,这在我们追求理解的过程中创造了不断变化的目标。

评论