一般

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

8
分类佳文共赏
作者Senko Rašić
来源跳转
发表时间

内容

软件开发这个职业正经历着剧烈动荡。没有人知道 AI 革命最终会走向何方,但可以肯定的是,工作和生活的许多方面都将被重塑——包括编程。

我最近经常听到的一种说法,大意是“ LLM 可能擅长写代码,但软件从来就不是难点 ”,以及“ 写代码很容易,难的是想清楚该写什么 ”。

我认为,这简直是对全世界所有程序员的极大冒犯。

如果写代码很容易……

如果写代码很容易,那为什么程序员多年来一直供不应求,而且薪资水平居高不下(甚至在 ZIRP 时代之前也是如此)?为什么在 AI 开始批量生成 5000 行 PR 之前,行业里就已经充满了压力、过劳和倦怠?为什么公司会去找所谓的十倍顶尖大神级程序员,还要对他们进行 leetcode 面试——如果写代码真那么容易,刚毕业的应届生难道不能随便敲点什么出来吗?

如果写代码很容易,那为什么我们会有像 Clean CodeThe Pragmatic Programmer 这样厚得像门挡的书?The Art of Computer Programming 是轻松的夏日读物吗?SICP 是茶几摆设书吗?为什么会有训练营,甚至整整一个大学学位都专门教这个?

如果写代码很容易,Carmack 难道只是运气好、站对了地方、赶对了时间吗?为什么我们会把 Fabrice Bellard 视为天才?

如果写代码很容易,为什么人们会对 AI(或者任何人)抄自己的代码感到愤怒?为什么他们表现得好像自己为某件如此琐碎的事倾注了汗水、灵魂和大量时间?

如果写代码很容易,为什么如今很多人会觉得自己的身份认同和职业使命感正在被剥夺?

如果写代码很容易,为什么软件还是他妈这么多 bug?

如果决定做什么才是难点……

如果决定做什么才是难点,那为什么那么多产品经理看起来都一知半解?为什么他们没有严格的 10 步面试?为什么他们的薪酬不比开发者更高?

如果决定做什么才是难点,为什么市场研究员、可用性专家,甚至——说真的,客户成功——在软件公司里都不被视为明星?如果“理解客户”更难,那为什么业务分析师会被看成只会敲算盘的笔杆子?

如果实现很容易,而发现需求更难,那为什么程序员会对销售为了成单而向客户承诺新功能感到恼火?他们已经找到了真实需求,那是人们愿意掏钱买的东西!

如果写代码很容易,那为什么不干脆给同一个东西做十个变体,看看哪个能成?

根本没有“中位数程序员”

另一个老生常谈是:“ 软件开发的大部分工作都是与利益相关者沟通、理解客户需求,以及明确优先级 ”。

我职业生涯中见过很多程序员,但几乎没人真心喜欢和利益相关者打交道,更别说客户了(例外是自由职业者和创始人,尤其是做软件外包/开发工作室的创始人)。而所谓“明确优先级”,说白了就是“直接告诉我要做什么,别隔两天就改来改去”。

有些软件开发者会说“我不是在写代码,我是在解决客户问题”。但转头他们又开始高谈阔论函数式编程概念、内存安全和 DRY 原则;而他们对客户的理解,不过是凭空捏造的“用户画像”;他们还以为“可供性”是你父母周末给你的零花钱,好让你出去玩得开心。

也有人会说“软件开发是理论构建”。程序其实就是证明(就像数学证明)。每次提交都应该讲述一个故事。用 FTP 上传一个 PHP 文件来解决客户问题,简直是十恶不赦。

我并不是说不存在这样一些开发者:他们既深切在意软件开发这门手艺,又真的能够共情客户。只是我确实认为,他们可能需要去看一下专业人士,检查一下是否有分裂性人格障碍。不过嘛。(后记:这句话说得太过了;我的本意是半开玩笑地说“能同时做到这两点的人非常少”,而且我在下一节里其实确实主张往那个方向努力。我承认错误)

什么才重要?

我确实认为,与用户交流、理解他们的体验、对他们产生共情、解决客户问题,以及让所有利益相关方在同一页上,对软件项目的成功至关重要。

我也认为,产出高质量代码是一门手艺,它需要技能、耐心、对细节的关注、经验和智慧,而且在未来很长一段时间里仍会具有重要意义。

为什么不能两者兼得呢?

在我们力所能及的范围内,我认为应该两者兼顾。既要深刻理解我们正在构建的系统,也要深刻理解我们为什么要构建它。

大声宣称“代码很简单”,或者反过来宣称“代码是艺术,是无法被自动化的人类创造表达”,都只是在掩耳盗铃。

这只是自我麻痹。你不需要自我麻痹,你需要的是蓬勃发展。

这并不是说“赶紧上 LLM 的顺风车”。也不是说“成为一群 AI 智能体的管理者”。同样也不是说“AI 生成的代码就是偷来的垃圾,拿牙和爪子跟它狠狠干,反正泡沫迟早会破”。

但你确实要意识到,我们正处在一场席卷整个行业的构造性巨变之中。我们需要弄清楚该如何适应。我们需要理解哪些东西可能会改变,哪些东西永远不会变。

什么不会变?

软件只会越来越复杂。软件永远都需要维护:代码腐化是生活的常态。熵也是。技术(硬件和软件)会继续向前发展,无论好坏。抽象层的大厦只会越建越高。

用户永远想要更多,却愿意付更少。他们仍然不会知道该如何准确表达自己的需求和想法。更糟的是,他们仍然不知道自己究竟想要什么。客户(真正为软件付费的人)和用户(实际使用软件的人)之间的脱节依然会存在,企业的需求与其客户需求之间的张力也依然会存在。

此外:永远不会缺少卖假药的人。流行技术来来去去(我还在等下一波 VR 复兴呢!)

什么会变?

自诞生以来,程序员一直都在颠覆自己所在的行业。现在已经没人再用打孔卡了。几乎没有人还需要用汇编或 COBOL 写代码。那些为了 C 或 C++ 的内存 bug 奋斗了几十年、身上还带着伤疤的人,在 Rust、Go、Python 和 JavaScript 时代几乎已经没什么用武之地。

我年纪已经大到能欣赏 valgrind,或者还记得 PHP4 时代的 mysql_real_escape_string()——这些东西我这辈子大概都不会再用到了。那也并没有过去太久!我只是勉强错过了 dBase、Clipper、HyperCard 和 Access 的时代;这些技术我如今还能在一些店铺、咖啡馆里识别出来,或者在一台落了灰、原本是米白色如今已经泛成金棕色的中塔机箱里,看到它还在愉快地运行某个定制化的业务解决方案(备份?什么备份?)

我们该如何蓬勃发展?

接受变化正在发生。对新事物既要保持好奇,也要保持批判。

要明白炒作很多,并努力区分哪些只是空话,哪些是真正有效的东西(以及在多大程度上有效)。也要注意目标线条一直在移动:把眼光拉回过去一年,或者五年,评估变化的速度(技术、经济、社会层面)。

你的角色和职责 一定会 发生变化。要愿意投入时间和精力,更好地理解与你所在领域相邻的方向或岗位。

如果你是资深开发者,不要只满足于把自己的专业技能越磨越深。去了解用户体验、用户访谈,或者你所在行业公司的商业策略。这样能帮助你更全面地理解:为了把一款软件真正交到用户手里,背后到底做了多少工作;不管你最后是否真的要亲自去做其中任何一部分。

如果你刚入行,或者还处在初级阶段:要投资于加深对软件运行机制的理解。即使你是 JavaScript 开发者,理解指针、递归或内存层级也会对你有帮助。即使你在做 WordPress 插件,理解网络协议和 HTTP 的工作方式也会很有用。即使你不一定非要用,也要去刷 leetcode、学习算法和数据结构。不要害怕去问 为什么,以及 到底是怎么回事

作为灵感,这里列出几本可能有帮助的书和其他资源:

还有一点

无论你是谁,都不要把你的理解、判断、共情和品味外包给 AI。不要放弃自己的责任。不要做一个肉体代理

评论

(0)
未配置登录方式
暂无评论