"Code was never the hard part" is an insult to all programmers

“Code was never the hard part” is an insult to all programmers

“代码从来都不是难点”是对所有程序员的侮辱

The software development profession is in the midst of upheaval. Nobody knows how the AI revolution will play out in the end, but it is clear many aspects of work and life will be transformed—including programming. One of the comments I hear often lately boils down to “LLMs may be good at coding, but software was never the hard part” and “coding is easy, it’s figuring out what to code that’s hard”. I believe that’s a gross insult to all programmers everywhere. 软件开发行业正处于剧变之中。没人知道人工智能革命最终会如何演变,但显而易见,工作和生活的许多方面都将被重塑——包括编程。最近我经常听到的一种评论归结为:“大语言模型(LLM)可能擅长写代码,但软件开发从来都不是难点”以及“写代码很容易,难的是搞清楚该写什么”。我认为这对所有程序员来说都是一种严重的侮辱。

If coding is easy… If coding is easy, how come programmers were in high demand, and have demanded large salaries for years (even before ZIRP)? Why was there so much stress, overwork and burnout even before AI started churning out 5000-line PRs? Why did companies seek 10x ninja rockstar coders and subject them to leetcode interviews—surely, a junior fresh out of college could churn out something if it’s so easy? If coding is easy, why do we have doorstoppers like Clean Code and The Pragmatic Programmer? Is The Art of Computer Programming a light summer read? Is SICP a coffee-table book? Why do we have bootcamps or even whole college degrees dedicated to it? If coding is easy, was Carmack just at the right place at the right time? Why do we consider Fabrice Bellard a genius? If coding is easy, why are people angry at AI (or anyone else) copying their code? Why do they act like they’ve poured their sweat, soul, and copious amounts of time into something so trivial? If coding is easy, why do many now feel like their identity and professional purpose are being stripped away from them? If coding is easy, why is software so damn buggy? 如果写代码很容易……如果写代码很容易,为什么程序员多年来一直需求旺盛,并要求高薪(甚至在零利率政策之前也是如此)?为什么在人工智能开始批量生成 5000 行代码的合并请求(PR)之前,行业内就存在如此多的压力、过度劳累和职业倦怠?为什么公司要寻找“10倍速忍者明星程序员”,并让他们参加 LeetCode 面试——如果写代码真的那么容易,一个刚毕业的初级程序员难道不应该能轻松搞定吗?如果写代码很容易,为什么我们会有《代码整洁之道》和《程序员修炼之道》这样的大部头著作?《计算机程序设计艺术》难道是夏日消遣读物吗?《计算机程序的构造和解释》(SICP)是茶几上的装饰书吗?为什么我们要有训练营,甚至专门的大学学位来教授它?如果写代码很容易,卡马克(Carmack)难道只是因为运气好才出现在那个时间点吗?为什么我们认为法布里斯·贝拉德(Fabrice Bellard)是天才?如果写代码很容易,为什么人们会对人工智能(或其他任何人)复制他们的代码感到愤怒?为什么他们的表现就像是在如此琐碎的事情上倾注了汗水、灵魂和大量时间?如果写代码很容易,为什么许多人现在觉得他们的身份和职业目标正在被剥夺?如果写代码很容易,为什么软件还是这么容易出 Bug?

If figuring out what to build is the hard part… If deciding what to build is the hard part, why do so many product managers seem clueless? Why aren’t there rigorous 10-step interviews for them? Why aren’t they getting paid more than the developers? If deciding what to build is the hard part, why aren’t market researchers, usability experts and—hell, customer success—considered rockstars in a software company? If “understanding the customer” is harder, why are business analysts looked down on as pencil pushers? If implementation is easy and finding demand is harder, why are programmers upset when the salespeople promise a new feature to a customer to close the sale? They’ve found a genuine demand, something people will pay for! If coding is easy, why doesn’t everyone just build ten variations of a thing and see which pans out? 如果搞清楚该构建什么才是难点……如果决定构建什么才是难点,为什么那么多产品经理看起来毫无头绪?为什么没有针对他们的严格的 10 步面试流程?为什么他们的薪水没有比开发人员高?如果决定构建什么才是难点,为什么市场研究人员、可用性专家,甚至客户成功团队,在软件公司里不被视为“明星”?如果“理解客户”更难,为什么业务分析师会被看作是只会写写画画的文员?如果实现很容易而发现需求更难,为什么当销售人员为了达成交易而向客户承诺新功能时,程序员会感到不满?他们可是发现了真正的需求,那是人们愿意付费的东西!如果写代码很容易,为什么大家不直接构建十个变体,看看哪个能成功呢?

There’s no median programmer. Another cliché comment is “most work in software development is talking to stakeholders, understanding the customer’s needs, and having clarity on the priorities”. I have met many programmers throughout my career, and very few of them want to talk to stakeholders, much less customers (exceptions are freelancers and founders, especially of software development shops). And, “having clarity on the priorities” boils down to “just tell me what to do and don’t switch it up every two days”. Some software developers do say “I don’t write code, I solve customer’s problems”. But then they turn around and start to opine on monads, memory safety, and DRY principles, while their understanding of the customer is a made-up “user persona”, and they think “affordance” is the money your parents used to give you on weekends so you could go out and have a good time. Yet others will say “Software development is theory building”. Programs are actually proofs (as in, mathematical proofs). Every commit should tell a story. And solving a customer’s problem by FTPing a PHP file is a cardinal sin. I don’t mean to imply there are no developers that simultaneously care deeply about the craft of software development and really empathize with the customer. I do believe they might want to see a professional about a split personality disorder, tho. 没有所谓的“中位数程序员”。另一个陈词滥调是:“软件开发的大部分工作是与利益相关者沟通、理解客户需求并明确优先级”。在我的职业生涯中,我见过许多程序员,很少有人愿意与利益相关者交谈,更不用说客户了(自由职业者和创始人,尤其是软件开发公司的创始人除外)。而且,“明确优先级”归根结底就是“告诉我该做什么,别每两天就变一次”。有些软件开发人员确实会说“我不写代码,我是在解决客户的问题”。但转过头来,他们又开始高谈阔论单子(monads)、内存安全和 DRY 原则,而他们对客户的理解仅仅是一个虚构的“用户画像”,他们甚至以为“示能”(affordance)是父母周末给你的零花钱。还有人会说“软件开发是理论构建”。程序实际上是证明(数学意义上的证明)。每一次提交都应该讲述一个故事。而通过 FTP 上传 PHP 文件来解决客户问题简直是弥天大罪。我并不是说没有既深耕软件开发工艺又真正同情客户的开发人员。但我确实认为,他们可能需要去看心理医生治疗一下人格分裂。

What is important? I do believe that talking to users, understanding their experience, empathizing with them, solving customers’ problems and having all the stakeholders on the same page is critical to the success of a software project. I also believe that creating good code is a craft that requires skill, patience, attention to detail, experience and wisdom, and that it will continue to be relevant in the times ahead. 什么才是重要的?我确实认为,与用户交谈、理解他们的体验、与他们共情、解决客户的问题并让所有利益相关者达成共识,对于软件项目的成功至关重要。我也相信,编写优秀的代码是一门需要技能、耐心、对细节的关注、经验和智慧的工艺,并且在未来它依然具有重要意义。

¿Por qué no los dos? To the extent that we can pull it off, I think we should aim for both. A deep understanding of the system we’re building, together with a deep understanding of why we’re building it. Loudly proclaiming that “code is easy” or, at the opposite end, “code is art, a creative human expression that cannot be automated”, is just burying our heads in the sand. It’s cope. And you don’t want cope, you want to thrive. 为什么不能两者兼得?只要我们能做到,我认为我们应该追求两者兼顾。既要深入理解我们正在构建的系统,也要深入理解我们为什么要构建它。大声宣称“代码很容易”,或者在另一个极端宣称“代码是艺术,是无法被自动化的创造性人类表达”,都只是掩耳盗铃。这是一种逃避。你不需要逃避,你需要的是蓬勃发展。

By this, I don’t mean “jump on the LLM bandwagon.” I don’t mean “become a manager of fleets of AI agents.” I also don’t mean “AI-generated code is stolen slop garbage, fight it with tooth and nail, the bubble will pop soon enough anyways.” But do recognize we’re in the middle of an industry-wide tectonic change. We need to figure out how to adapt. We need to understand what is likely to change and what never changes. What doesn’t change? Software will be getting more complex. Software will always need maintenance: bit-rot is a fact of life. So is entropy. Technology (hardware and software) will move forward, for better or worse. The tower (skyscraper?) of abstractions grows ever higher. Users will always want more and be prepared to spend less. They still won’t know how to relay their needs and wants. Worse, they still won’t know exactly what they want. The disconnect between the customers (who actually pay for the software) and users (who use it) will still be here, as will the tension between the needs of the business and the needs of its customers. 我指的不是“盲目跟风 LLM”,也不是“成为 AI 代理集群的管理者”。我也不认为“AI 生成的代码是剽窃的垃圾,要拼死抵制,反正泡沫很快就会破灭”。但请务必认识到,我们正处于整个行业地壳变动之中。我们需要找到适应的方法。我们需要理解什么是可能会改变的,什么是永远不会改变的。什么不会改变?软件会变得越来越复杂。软件永远需要维护:比特腐烂(bit-rot)是生活的一部分,熵增也是。技术(硬件和软件)会向前发展,无论好坏。抽象的塔(摩天大楼?)会越建越高。用户永远想要更多,却准备支付更少。他们依然不知道如何传达他们的需求和愿望。更糟糕的是,他们依然不知道自己到底想要什么。客户(实际付费的人)与用户(实际使用的人)之间的脱节依然会存在,企业需求与客户需求之间的张力也依然会存在。