跳到正文
原文
Hacker News· Michelangelo11·· 1 天前精选AI 评分40

Carson Gross:AI 时代仍值得学编程,初级程序员必须亲手写代码

Yes, and

AI 导读

Carson Gross 在博文中指出,AI 时代计算机编程仍是值得追求的职业,但初级程序员必须自己写代码,不能让 AI 代行,否则无法建立读懂与控制代码的能力;把 AI 当作答疑型助教、用来解决环境配置等偶然复杂度,反而能加速成长。

推荐理由

作者作为 htmx 作者和高校教师,分别给初级与资深程序员提出了使用 LLM 的具体建议和现实求职路径。

正文 · AI 翻译

Carson Gross 2026 年 2 月 27 日

我在 蒙大拿州立大学教授计算机科学。我是三个儿子的父亲,他们都知道我是一名计算机程序员,其中至少一个对这一领域表现出兴趣。我热爱计算机编程,并努力把这份热爱传递给儿子们、我课堂上的学生,以及任何愿意倾听的人。

我越来越多地从亲友和学生那里听到这样一个问题:

考虑到 AI 的发展,我是否还应该考虑成为计算机程序员?

我的回答是:'是的,并且……'

"是的"

从根本上讲,计算机编程关乎两件事:

  • 使用计算机解决问题
  • 在解决这些问题的过程中学会控制复杂性

我很难想象未来能够用计算机解决问题并掌控其复杂性的能力会比今天更不有价值,所以即便 AI 工具已经问世,我认为这仍会是一种可行的职业。

"你必须自己写代码"

尽管如此,我认为 AI 对初级程序员而言非常危险,因为 AI 确实能够有效地为许多问题生成代码。如果一名初级程序员不学会自己写代码,仅仅依赖生成,就会剥夺自己在实战中获得对代码深刻理解的机会。

因此,我告诫我的学生:

"是的,AI 可以为这次作业生成代码。但不要让它替你写。你必须亲自写代码。"

我向他们解释,如果不亲手写代码,就无法有效地阅读代码。在 AI 编码的时代,阅读代码的能力必定会很有价值,甚至可能更加有价值。

如果你读不懂代码,就会陷入 魔法师学徒陷阱,打造出 你无法理解、也无法掌控 的系统。

从编程到提示词,是否像从汇编语言到高级语言?

有些人说,从高级语言迈向 AI 生成代码,就像从汇编语言迈向 高级编程语言。

我不同意这个比喻。

编译器在很大程度上是确定性的,而目前的 AI 工具则不是。给定一个高级语言结构,例如 for 循环或 if 语句,你可以相当确定地说出在某一种计算机架构下生成的汇编代码大致是什么样(至少在优化之前如此)。

而对于基于 LLM 的提示词解决方案,则不能这样说。

高级编程语言是一种非常好的方式,可以用最少的文字在计算机上创建高度精确的问题解决方案,这是汇编语言做不到的。它们消除了大量的 意外复杂性,(假设代码写得足够合理)剩下的主要是必然复杂性。

而 LLM 生成的代码往往无法消除意外复杂性,事实上还会由于选择不当的方案、走捷径等而增加大量意外复杂性。

如果你读不懂代码,又怎能察觉这些问题呢?

而要想读懂代码,你必须自己写代码。

AI 是一位出色的助教

我告诉学生的另一件事是,AI 使用得当的话就是一个极其出色的助教。如果你不是把它当作代码生成器,而是当作帮助你理解概念和技术的伙伴,它能够极大地促进你的智力发展。

学习计算机编程最困难的事情之一就是"卡壳"。你就是看不出诀窍所在,或者甚至不知道从何下手才能取得进展。

更糟糕的是,你因为偶发性的复杂性而卡住:你不知道如何使用某个特定的工具链,甚至不知道工具链是什么。

这不是你的问题,而是你的环境的问题。无谓地卡住会剥夺你真正用于学习的时间,常常把人挤出计算机科学领域。

(我在伯克利自学 Unix 时也曾卡壳,这也是我退出那里计算机科学项目的原因之一。)

AI 可以帮助你越过这些障碍,如果使用得当,它能成为一个出色的助教。我发布了一个 AGENTS.md 文件,提供给我的学生用来配置编码代理,使它们表现得像一位出色的助教,而不是代码生成器,我鼓励他们以这种角色来使用 AI。

只要使用得当,AI 不一定会成为你成长为一名程序员道路上的阻碍。

,以及……

我确实认为 AI 将改变计算机编程。不会像一些人想象的那么剧烈,但会在某些根本的方面发生改变。

原始编码可能变得不那么重要

编码这个行为本身可能会失去其相对价值。

我认为这很可惜:我通常很喜欢编码这个行为,亲手(比喻意义上地)让某物执行某事是件有趣的事。写出好代码有一种艺术感和满足感,并且在其中有许多审美决策要做。

然而,看起来原始代码编写的能力在未来可能会变得不那么重要。

随着这一点变得相对不那么重要,在我看来,其他技能将会变得更加重要。

沟通技能

例如,无论是与 LLM 还是与人类,清晰地写作、思考和沟通的能力在未来可能会变得更加重要。许多计算机程序员本来就有文学倾向,而这是一项可能随时间增值的技能,值得下功夫培养。

读书和撰写随笔/博文似乎是可能在这方面有所帮助的活动。

理解业务

另一件你可以努力去做的事情,是把一部分精力转向更好地理解一个业务(或政府机构角色等)。

计算机编程是用计算机解决问题,而企业在"问题"和"计算机"这两方面都不缺。

一些业务人士看着 AI 说"太好了,我们不需要程序员了!",但在我看来,同样合理的是程序员也可能会说"太好了,我们不需要业务人员了!"

我认为这两种观点都是短视的,但我确实认为 AI 能够让程序员继续从根本上作为程序员工作,同时也投入更多时间去理解他们所解决的现实世界的问题(无论是业务上的还是其他方面的)。

这与提升沟通技能相得益彰。

"架构"系统

像许多计算机程序员一样,我对"软件架构师"这个术语的态度是矛盾的。我见过架构师宇航员给世界带来很多痛苦。

暂时没有更合适的措辞,不过我认为软件架构会随着时间推移变成一项更重要的技能:有效组织大型软件系统的能力,以及至关重要的——控制这些系统复杂性的能力。

对初级开发者而言,这件事困难的地方在于,传统上,能把更大的方案架构做好的能力,来自于构建系统较小部分的经验——一开始很糟糕,随着时间推移,才越来越有效。

我见过的大多数糟糕的架构师,要么是糟糕的程序员,要么基本上没有什么编程经验。

如果你让 AI 接管那些"简单"的代码生成工作,你又怎能培养出成为一名高效架构师所必需的直觉呢?

这就是为什么我再次强调:你必须自己写代码。

高效使用 LLM

另一项(显然)似乎会越来越有价值的技能,是懂得如何高效使用 LLM。我认为目前我们仍处于摸索其真正含义的过程中。

我也认为,其含义因经验水平而异。

资深开发者

那些在 AI 时代之前就已积累了大量经验的资深程序员,处于有利的位置来有效使用 LLM:他们知道什么是"好"代码,他们有构建大型系统的经验,并且知道什么重要、什么不重要。资深程序员面临的风险是,他们彻底停止编程,并开始出现大脑退化。

特别危险的是,发完提示之后在等待时被无尽滚动吸进去。

我为什么会知道呢?问我就知道了。

我通常尝试按以下方式使用 LLM:

  • 分析现有代码,以便更好地理解它并发现其中的问题与不一致
  • 帮助整理我在想要承担的较大项目中的思路
  • 为我正在开发的系统生成相对较小的代码片段
  • 生成那些我并不喜欢编写的代码(例如正则表达式 & CSS)
  • 生成我愿意扔掉或不打算深入维护的演示/探索性代码
  • 针对我正在开发的某个功能,建议相应的测试

我尽量不使用 LLM 来生成那些我后续需要维护的完整方案。在搭建方案的过程中,我有时会与手动编码并行使用 LLM,以帮助我理解 API 和编码时的各种选项。

我从不让 LLM 来设计我所构建系统的 API。

初级开发者

初级开发者的处境更为艰难。我再说一遍:你必须自己写代码。

一路"氛围编程"地解决问题的诱惑非常、非常大,但你必须抵抗住这种诱惑。

同行会靠"氛围编程"搞定各种事情,这会让人感到烦躁:你将需要比他们更加努力地工作,并且你可能会因为"慢"而受到批评。这里的工作动态需要理解清楚:如果你的公司看重速度胜过理解(目前许多公司都是这样),你需要接受这一点,并且不要被开除。

不过,我认为这只是暂时的状况,很快公司就会意识到,那种快速推进的"氛围编程"会引发比经过深思熟虑且稳妥的编码更严重的复杂性爆炸问题。

到那时,我预计更慢、更审慎的 AI 辅助编码方式,会被理解为利用这项新技术的最佳方式。

在 AI 能够帮助初学者的地方,是通过消除那些常常绊倒初学者的意外复杂度,来加速通往高级开发者的道路。正如我上面所说,把 AI 看作一个有用但有时过于热心的帮手,而不是一个仆人,对于理解代码库的形态、针对特定问题有哪些可用的 API 和技术、某个构建系统或编程语言是如何工作的等等,都是非常有效的。

但你必须亲自写代码。

而公司方面:你必须让初级开发者写代码。

如今的求职

我围绕 AI 和编程所收到的问题,本质上都围绕着找到一份体面的工作。

程序员就业市场目前很糟,这已不是什么秘密,我看到优秀的计算机科学学生都在为找到编程岗位而挣扎。

虽然我并没有水晶球,但我相信这是一个暂时性的,而非永久性的状况。计算机程序员的就业市场往往呈现繁荣与萧条的周期性,我相信我们会在某个时刻从当前的萧条中恢复过来。

然而,对于一个现在正在找工作的人来说,这只是冰冷的安慰。所以我想提供一些我给学生们的具体求职建议。

家人、朋友、朋友的朋友

我认为在线招聘网站基本上没什么意义,对初级开发者来说尤其如此。它们就像买彩票,通过它们找到好工作的几率很低。由于它们是免费的,所以可能仍然值得使用,但不值得在上面投入太多时间。

更好的方法是“4 个 F”:家人、朋友以及朋友的朋友。利用你的人脉去那些你在其中因为认识公司内部人员而具有竞争优势的公司寻找职位。家人是最强的可能性。朋友通常也不错。朋友的朋友稍弱一些,但也值得问一问。如果你认识或仅与某家公司的某人有几度之隔,你在该公司获得工作的机会就会大得多。

我向许多学生强调,这并不意味着你的家人一定要在 Google 或其他什么大型科技公司工作。

任何有相当规模的公司的某些问题,都需要用计算机来解决。几乎每一家超过 100 人的公司都有某种形式的开发团队,即便他们并不这样称呼。

举个例子,我曾有一个学生为找工作而苦恼。我问他们的父母是做什么的,他们说他们在 Costco 的总部工作。

我告诉他们,他们其实是极其幸运的,这正是他们进入一家好公司的敲门砖。

也许他们一开始并不是那里的“计算机程序员”,也许他们从分析师或某个其他角色做起。但在此基础上叠加编程能力将会非常有价值,并可能为职业生涯奠定良好基础。

结论

所以我仍然认为,把计算机编程作为一种职业来追求是个好主意。当前的就业市场确实不好,毫无疑问,但我认为这是暂时的。

我确实认为计算机编程的实施方式正在发生变化,程序员们应该考虑在“纯粹”的代码编写之外培养更多技能。这始终都是一个好的建议。

我并不认为编程正在像某些人声称的那样剧烈变化。我认为编程的基本功——尤其是写好代码和控制复杂度——将永远重要。

我希望这篇文章对回答这个问题有所帮助,尤其是对于初级程序员而言,并能帮助人们更有信心地进入一个我发现非常有价值、并且预计会长期从事的职业。

还有企业方:请让初级程序员至少编写一部分代码。这符合你们的利益。

</>

来源:Hacker News · htmx.org