与那些无关紧要的困难告别
Goodbye to the Hard Parts That Never Mattered

原始链接: https://jakegoldsborough.com/blog/2026/goodbye-to-the-hard-parts-that-never-mattered/

作者挑战了软件工程正在消亡的观点,认为它实际上正在经历一场重生。虽然人工智能编程代理能够处理编写样板代码或调试语法等枯燥、低价值的任务,但该职业的核心依然完好。 工作并没有消失,只是从手动实现转向了方向把控、判断和架构责任。通过消除“偶然复杂性”带来的负担,这些工具使工程师能够专注于更高层次的问题解决、探索新领域,并实现那些以往因耗时过长而无法进行原型的创意。 尽管作者承认关于就业保障、初级工程师培养以及盲目自动化风险的合理担忧,但他们认为这些属于组织和纪律层面的挑战,而非对该行业本质的生存威胁。归根结底,软件工程的核心不在于敲代码,而在于理解系统并做出明智的权衡。软件工程远未到“葬礼”之时,它正在演变成一个更具创造力、更广阔且更具影响力的领域,使我们能够以以往无法想象的规模去解决复杂问题。

这篇 Hacker News 帖子展示了关于人工智能对软件开发影响的激烈辩论。 支持者认为,人工智能是“技能倍增器”,使开发人员能够承担以前因耗时太长而无法尝试的宏大、复杂的项目。他们认为编程的目标是解决问题,而不仅仅是敲代码;人工智能让创作者能够专注于架构和成果,而非手动实现。 相反,怀疑论者对“感觉编程”(vibe coding)现象表示担忧——即开发人员在不完全理解底层机制或“幕后隐患”的情况下,依赖人工智能生成代码。批评者认为,这种依赖会造成效率陷阱,导致代码过度设计或出现故障,并可能削弱未来一代人的基础技能,使他们永远无法真正理解系统是如何运作的。 讨论还强调了人们对人工智能生成的文章日益增长的疲劳感,许多用户感到沮丧,认为如果作者未能亲身参与内容创作,现代科技文章那种“简洁有力”的风格就会显得空洞。归根结底,这场辩论反映了人们的分歧:一方将人工智能视为赋能创作的工具,另一方则对编程匠心精神的丧失感到惋惜。
相关文章

原文

I read Dave Kiss's eulogy for the software engineer and kept coming back to one question.

What exactly are we saying goodbye to?

Shitty regex? Writing another one-off parser for terrible data? Memorizing some weird syntax for no obvious reason? Losing an afternoon to the particular incantation a build system expects before it will do the thing you already understand?

If that is what died, I am not sure it needs a funeral.

Dave's argument is more hopeful than the title suggests. By the end, he opens the casket back up. The skills are still ours. The engineer is still responsible for what ships. Maybe, he writes, we put the wrong name on the headstone.

I agree with most of that. I just do not think we need the headstone at all.

This does not feel like the death of the software engineer to me. It feels like a rebirth.

The toll was never the destination

Software engineering has always contained a lot of work that is only loosely related to the problem being solved.

You need to move a small pile of ugly data from one system to another, so you spend half a day learning the edge cases of a CSV parser. You know exactly what a service should do, but first you have to remember the syntax for a framework you have not touched in six months. You understand the bug, but the fix is buried behind an unfamiliar repository layout, three layers of indirection, and a test command nobody wrote down.

We got good at this work because we had to. Some of it was even fun. There is a real satisfaction in finally landing the regex or finding the one line that made the whole system behave strangely.

But difficulty is not the same thing as value.

Most of this was a toll we paid between understanding a problem and changing the system. It was never the destination. If an agent can take care of more of that translation, I have not become less of an engineer. I have more time for the part that required an engineer in the first place.

The work moved

I use coding agents every day. They can move through a codebase faster than I can, generate a parser in seconds, and usually remember the library call I would have looked up anyway.

They also make bad assumptions, misunderstand local conventions, confidently use an API that does not exist, and declare victory before testing the thing they changed.

The typing got easier. The engineering did not disappear.

I still have to understand the system well enough to know where to look. I have to recognize when a plausible answer is wrong. I have to decide whether a change belongs in the application, a plugin, an operations repository, or nowhere at all. I have to reproduce the failure, choose the tradeoff, test the result, and stand behind what reaches production.

An agent can write the parser. Someone still has to explain the terrible data, notice when a row silently disappears, and decide what should happen when reality violates the format.

That is software engineering.

This is the same shift I wrote about in I Don't Type Every Word You Read. The work did not vanish. It moved. Less of it lives in producing every character by hand. More of it lives in direction, judgment, verification, and responsibility.

I am learning more, not less

One fear I understand is that removing the hard way also removes the learning. If the machine writes the code, how does anyone develop the instincts needed to know whether it is right?

That risk is real. You can accept whatever appears in the diff, run nothing, learn nothing, and ship garbage at a speed that used to be impossible.

You can also use the same tools to walk into parts of computing that were previously too expensive to explore.

I have used agents to rewrite a TypeScript program in Rust, trace production infrastructure across repositories, understand unfamiliar database behavior, build terminal tools, and test ideas that would never have justified a free weekend. I did not emerge from those projects knowing less Rust, less Linux, or less about the systems involved. The agent handled enough of the syntax and scaffolding that I could keep pulling on the interesting thread.

The learning loop got tighter. Ask a question. Inspect the answer. Run the code. Break it. Read the implementation. Correct the assumption. Try again.

That is not a replacement for understanding. It is an extremely fast way to find the edge of your understanding.

The burden is on us to keep crossing that edge. If we use agents only to avoid knowing things, we will become worse engineers. If we use them to reach the next question faster, we can become much better ones.

The canvas got bigger

The part I find most exciting is not that the same ticket takes fewer hours. It is that entirely different projects now fit inside a human life.

Software has always had an unusually high cost between an idea and its first working form. Even a small idea could demand a new language, a framework, an authentication system, deployment, tests, and a pile of glue before you got to find out whether the idea was any good.

That cost killed a lot of ideas before they became code.

Now I can follow more of the strange little "what if" thoughts that make programming fun. What if forum software were a game engine? What if a terminal audiobook player worked exactly like my music player? What if I rebuilt a tool in another language just to understand how it worked?

These are not hypothetical examples. I built them. They taught me about real-time state, media containers, terminal interfaces, systems programming, and the boundaries of the tools helping me.

I do not see a shrinking profession in that. I see a creative medium becoming available at a scale it has never had before.

There are still reasons to worry

None of this means every consequence will be good.

Companies will use the productivity story as cover to cut people. Generated code will create failures at a scale we are not prepared for. The traditional path from junior engineer to experienced engineer is going to change, and I do not think anyone honestly knows what replaces it yet. Access also matters. A profession cannot call itself newly open if the best tools require hundreds of dollars every month.

Those are serious problems. They deserve more than a slogan about AI being a tool or a prediction that everyone will become ten times more productive.

But they are questions about who benefits from the technology, how we teach, and how we organize the work. They are not evidence that software engineering has ceased to exist.

If anything, faster generation makes engineering discipline more important. When producing code was slow, bad decisions accumulated slowly too. Now a bad assumption can become three thousand lines before lunch. Clear requirements, tests, review, observability, and taste do not matter less in that world. They are the only things keeping the increased output useful.

No funeral

I understand the grief in Dave's piece. A way of working that many of us built our identities around is changing very quickly. There are parts of it I will miss too. Solving something the hard way can feel incredible, especially when the hard way was how you learned that you were capable of solving it at all.

But I do not want to confuse the obstacles with the craft.

The craft was never remembering every method signature. It was never manually typing every line or personally wrestling every malformed document into submission. Those were the mechanics available to us at the time.

The craft is understanding a problem deeply enough to change it. It is making tradeoffs with incomplete information. It is noticing the wrong note in a system that technically works. It is taking responsibility for the result.

We still need all of that. Now we get to apply it to more problems, in more domains, with a much larger set of tools.

So I am not ready to bury the software engineer.

We are learning a new way to work. We are building a new layer of technology while learning how to use it, govern it, and teach it. We are shedding some accidental complexity and discovering new kinds underneath. We can attempt things that were impractical a year ago, and we are only beginning to understand what that means.

This is not a eulogy.

The software engineer is just getting started.

联系我们 contact @ memedata.com