← 返回 关于

“是的,而且……”

2026-10-11 · 原文链接

Carson Gross

2026 年 2 月 27 日

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

最近,我越来越常从亲戚、朋友和学生那里听到这样一个问题:

有了 AI,我还该考虑成为一名程序员吗?

我的回答是:“是的,而且……”

“是的”

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

我很难想象,在未来,懂得如何用计算机解决问题、如何控制这些解决方案的复杂性,会比今天更不重要。因此,即使 AI 工具已经出现,我仍认为这会是一条可行的职业道路。

“你得自己写代码”

话虽如此,我认为 AI 对初级程序员非常危险,因为它确实能为许多问题有效地产生代码。如果初级程序员不学习写代码,只是一味生成代码,他们就剥夺了自己在一线实战中培养对代码直觉性理解的机会。

所以我会警告学生:

“没错,AI 能为这份作业生成代码。别让它这么做。你必须自己写代码。”

我会解释:如果他们不写代码,就无法有效地阅读代码。在以 AI 为基础的编程未来里,读懂代码的能力当然很有价值,甚至可能更有价值。

如果你读不懂代码,就会落入《魔法师的学徒》陷阱:造出自己既不理解、也无法控制的系统。

编程 → 提示,像汇编 → 高级语言吗?

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

我不同意这个类比。

编译器大体上是确定性的,而当前的 AI 工具并非如此。面对诸如 for 循环或 if 语句这样的高级语言结构,对于某种给定的计算机架构,你可以相当有把握地说出它会生成怎样的汇编(至少在优化之前)。

但对一个提示词对应的、由 LLM 给出的方案,就不能这么说。

高级编程语言非常擅长用尽量少的文本,为计算机问题创建高度明确的解决方案;这是汇编做不到的。它们消除了大量偶然复杂性,使留下的主要是必要复杂性(前提是代码写得还算合理)。

另一方面,LLM 生成的代码往往无法消除偶然复杂性,事实上还可能因为选择了不合适的方案、走了捷径等,增加大量偶然复杂性。

如果你读不懂代码,又怎么判断呢?

而若想读懂代码,你就必须写代码。

AI 是很棒的助教

我还会告诉学生:只要用得恰当,AI 是极其有效的助教。不要把它当成代码生成器,而是把它当作帮助你理解概念与技术的伙伴,它就能极大促进你的智力发展。

学习编程时,最困难的事情之一是“卡住”。你就是看不出窍门,甚至不知道该从哪里开始才能取得进展。

更糟的是,你有时是因为偶然复杂性而卡住:你不知道怎么使用某个工具链,甚至不知道工具链是什么。

这不是你的问题,而是环境的问题。毫无意义地受阻,会夺走你真正学习的时间,也常常让人离开计算机科学。

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

AI 能帮你越过这些路障;只要用得正确,它就能成为很棒的助教。我发布了一个提供给学生的 AGENTS.md,用来把 coding agent 配置成优秀的助教,而不是代码生成器;我鼓励他们在这个角色上使用 AI。

只要用得恰当,AI 并不必妨碍你成长为程序员。

“而且……”

我确实认为 AI 会改变计算机编程。不会像某些人设想得那样剧烈,但会在一些根本层面发生变化。

纯粹写代码可能没那么重要了

写代码这个行为的相对价值,可能会下降。

我觉得这很可惜:我通常喜欢写代码本身。用自己(比喻意义上的)双手让东西做事很有趣。把代码写好有一种技艺感和满足感,过程中也有许多审美判断要做。

不过,看起来单纯的代码编写能力在未来可能没那么重要。

随着它相对变得不那么重要,在我看来,其他技能会变得更重要。

沟通能力

例如,清晰地写作、思考和沟通的能力——无论面对 LLM 还是人类——未来都很可能更重要。许多程序员本来就有文学倾向;这项技能的价值很可能会随时间增加,值得投入精力。

读书、写文章或博客,看起来都会对此有所帮助。

理解业务

你还可以把一部分心力投入到更好地理解某项业务(或政府职能等等)上。

计算机编程就是用计算机解决问题,而企业这两样东西都不缺。

有些做业务的人看到 AI,会说:“太好了,我们不需要程序员了!”但在我看来,同样可能有程序员说:“太好了,我们不需要做业务的人了!”

我认为这两种看法都很短视。不过 AI 的确能让程序员在根本上仍做程序员工作的同时,投入更多时间理解自己正在解决的真实世界问题(无论是业务问题还是其他问题)。

这也和提升沟通能力相当契合。

“架构”系统

和许多程序员一样,我对“软件架构师”这个词爱恨交织。我见过架构宇航员给世界造成许多痛苦。

但找不到更好的词,所以我认为软件架构会随时间成为更重要的能力:有效组织大型软件系统,并且至关重要地控制这些系统的复杂性。

对初级开发者而言,难点在于:过去,良好架构大型方案的能力,通常来自先构建系统较小部分的经验——起初做得不好,然后随着时间推移做得更有效。

我见过的大多数糟糕架构师,要么代码写得差,要么压根没什么编程经验。

如果你让 AI 接管那些“简单”部分的代码生成,又该如何培养成为有效架构师所需的直觉?

所以,还是那句话,你必须写代码。

有效使用 LLM

另一个显然很可能越来越有价值的技能,是懂得如何有效使用 LLM。我认为目前我们仍在摸索这究竟意味着什么。

我还认为,它对不同经验水平的人意味着不同的事。

资深开发者

在 AI 出现前已经积累丰富经验的资深程序员,处在很适合有效使用 LLM 的位置:他们知道什么是“好”代码,有构建大型系统的经验,也知道什么重要、什么不重要。资深程序员的危险,是完全不再编程,开始遭受大脑腐化。

尤其危险的是:发出提示后,在等待时又被无尽滚动吸进去。

别问我是怎么知道的。

我通常会以下列方式使用 LLM:

我尽量不让 LLM 生成我将需要长期维护的完整方案。有时我会一边手写代码、一边用 LLM 帮忙理解 API 和可选方案。

我绝不让 LLM 为正在构建的系统设计 API。

初级开发者

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

靠 vibe 的方式一路糊弄过问题的诱惑极高,但你必须抵制。

同伴会用 vibe 的方式把事情做过去,这会很烦人:你得比他们更努力,而你也可能因“慢”受到批评。这里的工作动态很重要:如果你的公司(如同现在很多公司一样)把速度置于理解之上,你需要接受这一点,也别因此丢了工作。

不过我认为这只是暂时的。很快,公司就会意识到:高速 vibe coding 的复杂性失控问题,比起理解充分、刻意推进的编程严重得多。

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

AI 确实能帮助初级开发者的一点,是消除常令他们受挫的偶然复杂性,从而加速他们成长为资深开发者。正如我前面所说,把 AI 看成有用但有时过于热心的帮手,而不是仆人,能非常有效地帮助理解代码库的结构、某个问题可用的 API 与技术、某个构建系统或编程语言如何工作,等等。

但你必须写代码。

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

如今找工作

我收到的关于 AI 与编程的问题,归根结底都围绕着找到一份体面的工作。

现在程序员就业市场很糟,这已不是什么秘密;我也看到优秀的计算机科学学生在找编程岗位时举步维艰。

虽然我没有水晶球,但我相信这是暂时情况,而非永久状态。程序员就业市场向来有繁荣与萧条的周期,我相信总会在某个时候从当前的低谷中复苏。

不过,这对正在找工作的人而言只是隔靴搔痒,所以我想给出我平时给学生的具体求职建议。

家人、朋友、朋友的家人

我觉得在线求职网站大多没什么用,尤其对初级开发者如此。它们像买彩票,经由它们找到好工作的概率很低。既然免费,用用或许仍然值得,但不值得投入大量时间。

更好的路径是“四个 F”:Family(家人)、Friends(朋友)以及 Friends 的 Family(朋友的家人)。利用个人关系,在你认识公司里人的企业寻找职位,你会有竞争优势。家人的可能性最强,朋友通常也不错,朋友的家人则弱一些,但同样值得问问。若你认识某家公司的员工,或只隔着几层关系,在那家公司找到工作的机会会大得多。

我会向许多学生强调:这并不意味着你的家人必须在 Google 或其他大型科技公司工作。

任何有一定规模的公司,都有需要用计算机解决的问题。几乎每家员工超过 100 人的公司,都有某种开发团队,即便他们不这么称呼。

举个例子:我有个学生一直找不到工作。我问他们的父母做什么,他们说在 Costco 总部工作。

我告诉他们,其实他们非常幸运,这正是进入一家优秀公司的门票。

也许他们不会从那里以“程序员”身份开始,也许会先做分析师或其他角色。但在那个岗位上拥有编程能力会很有价值,也很可能为一段出色的职业生涯打下基础。

结语

所以,我仍认为把编程当作职业是个好主意。当前就业市场无疑很差,但我认为这是暂时的。

我确实认为编程的做法正在改变,程序员应当培养“纯粹写代码”以外的能力。这一直都是好主意。

我不认为编程会像有些人宣称的那样剧烈改变;我相信编程的基本功,特别是写出好代码、控制复杂性的能力,会始终重要。

我希望这篇文章能帮助回答这个问题,尤其能帮助初级程序员,并让人们更有信心投身这份我觉得回报丰厚、且预计会长期存在的职业。

还有,公司:至少让初级开发者写一部分代码。这符合你们的利益。

</>