区块链 区块链技术 比特币公众号手机端

代码不是困难部分?这是对所有程序员的侮辱

liumuhui 4小时前 阅读数 1 #区块链

软件开发行业正处于剧变之中。没有人知道 AI 革命最终会如何收场,但很明显,工作和生活的许多方面都将被改变——包括编程。

最近我经常听到的一种说法,归结起来就是“LLMs 可能擅长编程,但软件从来都不是困难的部分”和“编程很容易,难的是弄清楚要编什么”。

我认为这是对全世界所有程序员的一种严重侮辱。

如果编程很容易……

如果编程很容易,为什么程序员多年来一直供不应求,并且一直要求高薪(甚至在 ZIRP 之前)?为什么在 AI 开始批量生成 5000 行 PR 之前,就已经有如此多的压力、过度工作和倦怠?为什么公司会寻找 10x 忍者摇滚明星式程序员,并让他们接受 leetcode 面试——如果编程真的那么容易,一个刚毕业的初级程序员肯定也能随手写出点什么吧?

如果编程很容易,为什么我们会有像《Clean Code》和《The Pragmatic Programmer》这样的大部头?《The Art of Computer Programming》是轻松的夏日读物吗?SICP 是摆在咖啡桌上当摆设的那种书吗?为什么会有专门的训练营,甚至整个大学学位都专门学它?

如果编程很容易,Carmack 难道只是恰好在对的时间出现在了对的地方?为什么我们认为 Fabrice Bellard 是天才?

如果编程很容易,为什么人们会对 AI(或其他任何人)复制他们的代码感到愤怒?为什么他们表现得好像把汗水、灵魂和大把时间都倾注在如此琐碎的事情上?

如果编程很容易,为什么现在许多人觉得他们的身份认同和职业意义正在被剥夺?

如果编程很容易,为什么软件会充满那么多该死的 bug?

如果搞清楚要构建什么才是困难的部分……

如果决定要构建什么才是困难的部分,为什么这么多产品经理似乎毫无头绪?为什么没有严格的 10 轮面试来考核他们?为什么他们的薪水反而不如开发者?

如果决定要构建什么才是困难的部分,为什么市场研究员、可用性专家——甚至客户成功团队——不被视为软件公司的摇滚明星?如果“理解客户”更难,为什么业务分析师会被人当作文书工作者而看不起?

如果实现很容易,而找到需求更难,那为什么当销售人员为了成交而向客户承诺一个新功能时,程序员会感到不满?他们找到的可是真正的需求——一个人们愿意为之付费的东西!

如果编程很容易,为什么大家不直接把一个东西做出十个变体,然后看看哪个能成?

没有所谓的普通程序员

另一个老生常谈的说法是“软件开发中的大部分工作是与利益相关者交谈、理解客户需求、明确优先事项”。

在我的职业生涯中,我遇到过许多程序员,他们中很少有人愿意与利益相关者交谈,更不用说客户了(例外的是自由职业者和创始人,尤其是那些自己做软件开发生意的人)。而且,所谓的“明确优先事项”,说白了就是“直接告诉我该干什么,别每两天就变一次”。

有些软件开发者确实会说“我不写代码,我解决客户的问题”。但转过头来,他们又会开始对 monad、内存安全和 DRY 原则发表一通意见,而他们所谓的“理解客户”,不过是一个虚构的“用户画像”;他们还以为“affordance(可供性)”是父母周末给你的零花钱,好让你能出去玩得开心。

还有人会说“软件开发是理论构建”。程序实际上就是证明(数学意义上的那种证明)。每一次 commit 都应该讲述一个故事。而用 FTP 传一个 PHP 文件去解决客户问题,那就是犯了大忌。

我并不是说,就没有既深切关心软件开发这门手艺、又真正对客户抱有同理心的开发者。不过,我确实觉得他们或许该去找专业人士看看,是不是有分裂型人格障碍。

什么才是重要的?

我确实相信,与用户交谈、理解他们的体验、与他们共情、解决客户的问题、让所有利益相关者达成共识,这些对软件项目的成功至关重要。

我也相信,写出好代码是一门手艺,需要技巧、耐心、对细节的关注、经验和智慧,并且在未来依然重要。

为什么不能两者兼得?

只要我们能实现,我认为就应该两者兼得:既要深刻理解我们正在构建的系统,也要深刻理解我们为什么要构建它。

大声宣称“代码很容易”,或者站在另一个极端宣称“代码是艺术,是一种无法被自动化的人类创造性表达”,都只不过是在把头埋进沙子里。

这是一种自我安慰。但你不需要自我安慰,你需要的是茁壮成长。

我不是说“盲目跟风 LLM”。不是说“成为 AI Agent 舰队的管理者”。也不是说“AI 生成的代码是偷来的垃圾,要拼尽全力对抗它,反正泡沫很快就会破裂”。

但也要认识到:我们正处于整个行业的地壳变动之中。我们需要弄清楚如何适应,需要理解什么可能会改变,什么永远不会改变。

什么不会改变?

软件将变得越来越复杂。软件永远需要维护:比特腐烂(bit-rot)是生活中无法回避的事实,熵也一样。技术(硬件和软件)将向前发展,无论好坏。抽象之塔(摩天大楼?)越建越高。

用户总是想要更多,也总是准备好花更少的钱。他们仍然不知道如何传达自己的需求和愿望。更糟糕的是,他们仍然不知道自己到底想要什么。客户(实际为软件付钱的人)和用户(实际使用软件的人)之间的脱节将依然存在,业务需求与客户需求之间的张力也同样如此。

另外:江湖郎中永远都不会缺。当红技术来了又走(我还在等待新的 VR 复兴!)

什么会改变?

程序员从一开始就一直在做着颠覆自己这个行业的事。没有人再用打孔卡了。很少有人需要用汇编或 COBOL 编程。那些在 C 或 C++ 中与内存 bug 搏斗的几十年,连同那些足以作证的伤疤,在 Rust、Go、Python 和 JavaScript 的时代已经毫无价值。

我已经老到能欣赏 valgrind,或者记得 PHP4 时代的 mysql_real_escape_string()——这些东西我这辈子再也不需要了。而且那并不是很久以前的事!我与 dBase、Clipper、HyperCard 和 Access 的时代擦肩而过,但我仍然能在商店、咖啡馆里发现这些技术还在运行,或者看到一台布满灰尘、曾经米色、如今已成金褐色的中塔机箱,依然在愉快地跑着某个定制业务解决方案(备份?什么备份?)

我们如何茁壮成长?

接受变化会发生。对新事物保持同等的好奇心和批判性。

要明白炒作从来不少,并试着分辨哪些是空话、哪些真的有效(以及有效的程度)。同时也要留意不断移动的球门柱:退后一步,看看过去一年或者五年,评估变化的速度(技术的、经济的、社会的)。

你的角色和职责将会改变。要愿意投入时间和精力,去更好地理解与你相邻的领域或角色。

如果你是高级开发者,不要只靠深化专业知识来寻求慰藉。去了解用户体验、客户访谈,或者你所在领域的公司的商业策略。这会让你更好地理解,把软件交到用户手中需要做多少事——无论你是否真的需要亲自去做那些其他环节。

如果你刚刚起步,或者还处于初级职位:那就投资自己,加深对软件工作原理的理解。即使你是 JavaScript 开发者,理解指针、递归或内存层次结构也会对你有帮助。即使你在开发 WordPress 插件,理解网络协议和 HTTP 的工作原理也同样有用。刷 leetcode,学算法和数据结构,即使你现在用不上。不要害怕问为什么,也不要害怕追问到底是如何运转的

如果想找点灵感,这里有一些可能有帮助的书籍和其他资源:

  • Structure and Interpretation of Computer Programs (PDF)
  • Cracking the Coding Interview
  • The Mythical Man-Month
  • Working Backwards
  • Team Topologies
  • 7 Powers
  • The Soul of a New Machine
  • Obviously Awesome
  • The Design of Everyday Things
  • Don't Make Me Think
  • Continuous Discovery Habits
  • The Mom Test

还有一件事

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

  • 原文链接: blog.senko.net/code-was-...
  • 鸿途知科网 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
版权声明

本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门