Software Engineering fundamentals matter more

Software Engineering fundamentals matter more

软件工程基础更为重要

The manifestation of my imposter syndrome, for me and today, is what does it mean to be a software engineer. There’s a lot more noise than signal on the Internet about agentic engineering, what can be accomplished, and its implications for the future. The title I chose rather gives it away; it’s about choosing — carefully — all the things you need to choose when you’re solving the puzzles of software and systems development.

对我而言,当下的“冒名顶替综合症”表现为:究竟什么是软件工程师?互联网上关于智能体工程(agentic engineering)、能实现什么以及对未来的影响,充斥着大量噪音,而非有效信息。我选的标题已经揭示了核心:这关乎选择——在解决软件和系统开发的难题时,你需要谨慎地做出所有选择。

Beyond the hype and junkie-like marketing fervor of “major model providers”, I found a really interesting power tool with the combination of harness and models. I’ve been following how friends have been using these tools, and learning a ton. As usual, the folks doing some of the most amazing things aren’t the ones crowing about it, or posting narrative blurbs in social media about the end of this profession. They found a “big damn stick”, they’re exploring the fulcrum points, and they’re representing good ole Archimedes to lean into that lever, moving the world.

抛开“主流模型提供商”的炒作和瘾君子般的营销狂热,我发现“智能体框架(harness)+模型”的组合是一个非常有趣的强力工具。我一直在关注朋友们如何使用这些工具,并学到了很多。像往常一样,那些做出最惊人成就的人,往往不是在社交媒体上大肆吹嘘或发布“职业终结”论调的人。他们找到了“大木棍”,正在探索支点,并像阿基米德那样利用杠杆撬动世界。

In the past year, agent harnesses crossed the “can it be done” rubicon. (yep, jumping forward to Roman references). I would not have wished for the world’s knowledge to taken without permission and regard, or the lunatics to delve into economic self-dealing that’s peanut buttering over the otherwise tanking US economy. The economic models for the large models aren’t viable from any report that I’ve seen, but the capability isn’t going away. Instead it’s shrinking (fast!). Open weight models are making (beefy) personal computers quite capable of doing the same. They’re not quite as effective, but the delta in time and capability isn’t large.

过去一年,智能体框架跨越了“能否实现”的卢比孔河(是的,又引用了罗马典故)。我并不希望看到人类知识在未经许可和尊重的情况下被攫取,也不希望看到疯子们沉迷于经济上的自利行为,试图掩盖美国经济的衰退。据我所见,所有报告都显示大型模型的经济模式并不可行,但这种能力不会消失。相反,它正在(迅速地!)小型化。开源权重模型正让(高性能)个人电脑具备同样的能力。虽然效果稍逊,但时间与能力的差距并不大。

“Can it be done” is only the start, not even close to the majority a software or system engineer’s profession. It’s like when I learned to weld in my 20’s – I quickly created things that I couldn’t lift or even get out the door of the shop. (thank goodness for acetylene torches). What I learned then is I think the same lesson, different medium: How something goes together is what makes all the difference. If you use agentic harnesses to develop with a bit of foresight, you can get not only “it works”, but also “it’s testable” (I heavily lean into the prompt “develop with red/green TDD”). But it’s not very solid much above that.

“能否实现”仅仅是个开始,远非软件或系统工程师职业生涯的全部。这就像我20多岁学焊接时一样——我很快造出了自己搬不动、甚至搬不出车间门的东西(幸好有乙炔焊枪)。我当时学到的教训,换个媒介依然适用:事物如何组装才是关键所在。如果你在使用智能体框架开发时具备一点远见,你不仅能得到“它能运行”的结果,还能得到“它可测试”的代码(我非常推崇“红/绿测试驱动开发”的提示词)。但除此之外,它并不稳固。

The seams — how your code works, it’s “API”, and how it fits with other software — are as much art as science. It is made up of subjective measures that rely on your viewpoint (and experience, as well as your guesses) for both what you’re solving now, and how to live with that software over a long period of time. Making software debuggable, maintainable, layered, and composable – that’s still quite a trick. Quite a lot of that work requires extensive, thoughtful reasoning. And that’s where the LLM’s today, even the leading edge of the “capability” from frontier models, fall short.

接缝——即代码如何运作、它的“API”以及它如何与其他软件适配——既是科学也是艺术。它由主观衡量标准构成,依赖于你的观点(以及经验和猜测),既关乎你当前解决的问题,也关乎如何让软件在长期运行中存续。让软件具备可调试性、可维护性、分层和可组合性,依然是一项高超的技巧。这其中大部分工作需要深入、缜密的推理。而这正是当今大语言模型(LLM)的短板,即便是前沿模型中最顶尖的“能力”也无法企及。

It helps to know that LLMs don’t “reason”. They predict, and the models themselves are effectively written human knowledge compressed. So if it’s in human knowledge that was encoded, it can echo out the human reasoning. For agents focused on software development, those reasoning traces are the precious data for the models. There’s a very approachable research paper on just how bad LLMS are at reasoning called The Illusion of Thinking. There is some research I’m following that includes prediction of results of actions, but that’s not what we have today with coding agents. It’s a pretty different – and fascinating – area of research. If you want to explore, go digging on how “JEPA models” work, LeWorld Model, and recent talks by Yann LeCun.

了解这一点很有帮助:LLM并不会“推理”。它们是在预测,模型本身实际上是压缩后的人类书面知识。因此,如果人类知识中包含相关内容,它们就能复述出人类的推理过程。对于专注于软件开发的智能体来说,这些推理轨迹是模型的宝贵数据。有一篇非常易懂的研究论文叫《思维的幻觉》(The Illusion of Thinking),揭示了LLM在推理方面有多糟糕。我正在关注一些包含“行动结果预测”的研究,但这并非目前编程智能体所具备的能力。这是一个非常不同且引人入胜的研究领域。如果你想深入了解,可以去研究一下“JEPA模型”、LeWorld模型以及Yann LeCun近期的演讲。

While you’re working with LLMs though, there’s still a ton of ways to make them more effective. I think there’s a lot of advances that we haven’t even really begun to eek out. Most of the wins I’m seeing today involve providing it good, concise data to work from, at the right time, and providing deterministic validation tooling with natural language feedback that the LLM can use to correct itself. The amazing thing to me isn’t that it can predict what to write, but that it is effective at tool calling and following instructions.

不过,在使用LLM时,仍有大量方法能提升其效能。我认为还有许多进展我们尚未真正挖掘出来。我目前看到的成功案例,大多涉及在正确的时间提供简洁、优质的数据,并提供确定性的验证工具,通过自然语言反馈让LLM进行自我修正。令我惊叹的不是它能预测写什么,而是它在调用工具和遵循指令方面的有效性。

Another downside of this instruction following is what Simon Willison coined as the lethal trifecta. Basically – LLM models can’t distinguish between good advice and bad. They’re foundationally incapable of always and consistently preventing prompt injection attacks. “Alignment work”, safety harnesses, and sandboxes all help to add barriers against the worst, but there are fundamental gaps. And frankly, something that tirelessly follows instructions without having good reasoning is nightmare fuel to me.

这种指令遵循的另一个负面影响是Simon Willison所说的“致命三要素”。简单来说,LLM模型无法区分好建议和坏建议。它们从根本上无法始终如一地防止提示词注入攻击。“对齐工作”、安全框架和沙箱都有助于设置屏障以抵御最坏的情况,但仍存在根本性的漏洞。坦率地说,一个不知疲倦地执行指令却缺乏良好推理能力的系统,对我来说简直是噩梦。

I hope there will be near-term advances in how models are trained to include the equivalent of reasoning traces for post-training (RLHF). In my ideal future, these include more of what it means to build software with clean interfaces, that’s debuggable, and that’s maintainable as a key part of the reinforced evaluations. Carefully reviewing, planning, and fixing the seams of software (and systems) is one of the critical skills we both can, and need to, employ when developing software – with or without agentic assistants.

我希望在短期内,模型训练方式能有所进步,将推理轨迹的等效内容纳入训练后阶段(RLHF)。在我理想的未来,这些评估将包含更多关于如何构建具有清晰接口、可调试且可维护的软件的内容,并将其作为强化评估的关键部分。仔细审查、规划并修复软件(和系统)的接缝,是我们开发软件时既能也必须运用的关键技能——无论是否有智能体助手辅助。

And as I see the wave of “Oh, that’s easy to implement…” and people reaching for clankers to get it done, I think it’s more important than ever. It’s a great time to be following folks who write, talk, and share about the craft of software, and how we can be better artisans. Hopefully it’s obvious, but there’s never a single answer — a panacea. It’s always about tradeoffs, choosing what makes sense for the problem at hand. With the help of a lot of great minds sharing their thoughts — both now and going back decades — we have a great tool chest for this work. It’s about picking, or reworking to move to a better choice, the right abstractions. It’s core is managing the cognitive load, learning which pieces we need to be stable, and where we want our work to flex and bend (and how).

当我看到“哦,这很容易实现……”的浪潮,看到人们急于用笨拙的工具去完成任务时,我认为这种基础技能比以往任何时候都更重要。现在是关注那些撰写、讨论和分享软件工艺,以及探讨如何成为更好工匠的人们的绝佳时机。希望这一点显而易见:从来没有唯一的答案,也没有万灵药。一切都是权衡,是为手头的问题选择最合理的方案。在许多伟大思想的帮助下——无论是当下的还是几十年前的——我们拥有了一个强大的工具箱。关键在于选择正确的抽象,或者通过重构来转向更好的选择。其核心在于管理认知负荷,学习哪些部分需要保持稳定,以及我们希望工作在何处(以及如何)保持灵活性。