蒙大拿州立大学教授 Carson Gross:AI 时代还要不要学编程?答案是"Yes, and"
Yes, and
蒙大拿州立大学计算机教授 Carson Gross 回应"有了 AI 还要不要当程序员",答案是"Yes, and":编程的核心是解决问题和控制复杂度,这一价值不会因 AI 消失。
Carson Gross 2026年2月27日
我在蒙大拿州立大学教授计算机科学。我是三个儿子的父亲,他们都知道我是一名计算机程序员,其中至少有一个表达了对这个领域的兴趣。我热爱计算机编程,并试图把这份热爱传递给我的儿子们、我课堂上的学生,以及任何愿意听我说话的人。
亲戚、朋友和学生越来越多地问我的一个问题是:
有了 AI,我还应该考虑成为一名计算机程序员吗?
我的回答是:“是的,而且……”
“是的”
计算机编程从根本上讲是两件事:
- 用计算机解决问题
- 在解决这些问题的同时学会控制复杂性
我很难想象有这样一个未来:懂得如何用计算机解决问题、如何控制这些解决方案的复杂性,会比今天更不有价值。所以我认为,即使 AI 工具出现,这仍将是一个可行的职业。
“你必须亲手写代码”
话虽如此,我认为 AI 对初级程序员来说非常危险,因为它确实能够为许多问题有效地生成代码。如果初级程序员不学着写代码,只是生成代码,他们就剥夺了自己深入一线、从而对代码形成切身理解的机会。
因此,我警告我的学生:
“是的,AI 可以为这项作业生成代码。别让它这么做。你必须亲手写代码。”
我解释说,如果他们不写代码,就无法有效地阅读代码。在基于 AI 的编程未来中,阅读代码的能力肯定会很有价值,也许更有价值。
如果你读不懂代码,你就会落入魔法师的学徒陷阱,创造出你既不理解也无法控制的系统。
从编程到提示词,就像从汇编到高级编程吗?
有人说,从高级语言到 AI 生成代码的转变,就像从汇编到高级编程语言的转变。
我不同意这个类比。
编译器在很大程度上是确定性的,而当前的 AI 工具并非如此。给定一个高级编程语言结构,比如 for 循环或 if 语句,你可以相当有把握地说出,在给定的计算机架构下生成的汇编会是什么样子(至少是优化前)。
对于基于 LLM 针对某个特定提示词的解决方案,就不能这么说了。
高级编程语言是一种非常好的方式,可以用最少的文本,为使用计算机解决的问题创建高度明确的解决方案,而汇编做不到这一点。它们消除了大量偶然复杂性,只留下(假设代码写得还算合理)大部分是必要的复杂性。
另一方面,LLM 生成的代码往往不能消除偶然复杂性,事实上,还可能因为选择不恰当的问题解决方法、走捷径等而增加大量偶然复杂性。
如果你读不懂代码,你怎么能分辨呢?
而如果你想读懂代码,你就必须亲手写代码。
AI 是一位很棒的助教
我告诉学生的另一件事是,人工智能如果使用得当,是一个极其有效的助教。如果你不把它当作代码生成器,而是当作帮助你理解概念和技术的伙伴,它可以极大地促进你的智力发展。
学习计算机编程时最困难的事情之一就是“卡住”。你就是看不出诀窍,或者甚至不知道从哪里开始才能取得进展。
更糟糕的是,当你因为偶然的复杂性而卡住时:你不知道如何使用某个特定的工具链,甚至不知道工具链是什么。
这不是你的问题,这是你的环境的问题。毫无意义地卡住会剥夺你真正学习的时间,并且常常让人退出计算机科学领域。
(我在伯克利自学 Unix 时卡住了,这也是我从那里的计算机科学项目退学的原因之一。)
人工智能可以帮助你越过这些障碍,如果使用得当,可以成为一个很棒的助教。我发布了一个AGENTS.md文件,提供给我的学生,用来配置编码代理,使其表现得像一个出色的助教,而不是代码生成器,我鼓励他们以这种角色使用人工智能。
人工智能不一定会损害你作为计算机程序员成长的能力,只要使用得当。
“, and…”
我确实认为人工智能将改变计算机编程。不会像一些人认为的那样剧烈,但会在一些根本方面。
原始编码可能变得不那么重要
可能编码的行为会失去相对价值。
我认为这太糟糕了:我通常喜欢编码的行为,用你的(隐喻的)双手让某物做某事很有趣。写好代码有一种艺术和满足感,并且在做这件事时有很多美学决策要做。
然而,看起来原始代码编写能力在未来可能不那么重要。
随着这一点变得相对不那么重要,在我看来,其他技能将变得更加重要。
沟通技能
例如,清晰写作、思考和沟通的能力,无论是与LLM还是与人类,在未来似乎可能重要得多。许多计算机程序员本来就有文学倾向,这是一项可能随时间增值的技能,值得努力。
读书和写文章/博客帖子似乎是有助于这方面的活动。
理解业务
你可以努力的另一件事是将一些脑力转向更好地理解业务(或政府角色等)。
计算机编程是关于用计算机解决问题,而企业有大量这两者。
一些商业人士看着人工智能说“太好了,我们不需要程序员了!”,但在我看来,程序员说“太好了,我们不需要商业人士了!”也同样合理。
我认为这两种观点都是短视的,但我确实认为人工智能可以让程序员有能力继续从根本上作为程序员工作,同时投入更多时间理解他们正在解决的真实世界问题(商业或其他)。
这与提高沟通技能很好地契合。
“架构”系统
像许多计算机程序员一样,我对“软件架构师”这个术语持矛盾态度。我见过架构宇航员给世界带来很多痛苦。
然而,由于没有更好的说法,我认为软件架构将随着时间的推移成为一项更重要的技能:有效地组织大型软件系统的能力,以及至关重要的,控制这些系统复杂性的能力。
对初级开发者来说,这其中困难的一点是,传统上,良好地架构大型解决方案的能力来自于构建系统较小部分的经验,起初做得很差,然后随着时间推移变得更有效。
我遇到的大多数糟糕的架构师要么是糟糕的程序员,要么根本没有多少编程经验。
如果你让 AI 接管“简单”内容的代码生成,你如何培养成为有效架构师所必需的直觉?
这就是为什么,再次强调,你必须写代码。
有效使用 LLM
另一项似乎可能增值的技能(显然)是知道如何有效使用 LLM。我认为目前我们仍在弄清楚这意味着什么的过程中。
我还认为这意味着什么因经验水平而异。
资深开发者
已经在 AI 时代之前积累了丰富经验的资深程序员处于有效使用 LLM 的有利位置:他们知道“好”代码是什么样子,他们有构建大型系统的经验,知道什么重要、什么不重要。资深程序员的危险在于他们完全停止编程,并开始遭受脑腐。
特别危险的是发出提示,然后在等待时被吸入永恒滚动。
问我怎么知道的。
我通常尝试以以下方式使用 LLM:
- 分析现有代码以更好地理解它,并发现其中的问题和不一致之处
- 帮助我为我想要承担的大型项目整理思路
- 为我正在开发的系统生成相对较小的代码片段
- 生成我不喜欢写的代码(例如正则表达式和 CSS)
- 生成我愿意丢弃或不打算深入维护的演示/探索性代码
- 为我正在开发的特定功能建议测试
我尽量不使用 LLM 生成我需要支持的完整解决方案。有时我会在手动编码的同时使用 LLM,在构建解决方案时帮助我理解 API 和我的选择。
我从不让我构建的系统的 API 由 LLM 设计。
初级开发者
初级开发者处境更艰难。我要再说一遍:你必须写代码。
凭感觉 vibe 解决问题的诱惑非常非常大,但你需要对抗这种诱惑。
同行会凭感觉 vibe 做事,这会很烦人:你需要比他们更努力,而且你可能会因为慢而受到批评。这里的工作动态很重要,需要理解:如果你的公司优先考虑速度而非理解(就像目前许多公司那样),你需要接受这一点,不要被解雇。
然而,我认为这是暂时的情况,很快公司就会意识到,快速 vibe 编码比经过充分理解、深思熟虑的编码遭受更严重的复杂性爆炸问题。
到那时,我预计在 AI 辅助下更慢、更深思熟虑的编码将被理解为利用这项新技术的最佳方式。
AI 可以 帮助初级开发者的地方在于,通过消除那些经常绊倒他们的偶然复杂性,加速他们成为高级开发者的道路。正如我上面所说,将 AI 视为一个有用但有时过于热心的助手,而不是一个仆人,可以非常有效地理解代码库的形态、针对特定问题可用的 API 和技术是什么、给定的构建系统或编程语言如何工作等等。
但你必须写代码。
而公司们:你们必须让初级开发者写代码。
今天找到一份工作
我收到的关于 AI 和编程的问题,基本上都围绕着如何找到一份体面的工作。
程序员就业市场现在很糟糕,这已不是秘密,我看到优秀的计算机科学专业学生难以找到编程职位。
虽然我没有水晶球,但我相信这是暂时的而非永久的情况。计算机程序员就业市场往往随着繁荣与萧条而周期性波动,我相信我们会在某个时候从当前的萧条中恢复过来。
然而,对于现在正在找工作的人来说,这只是冰冷的安慰,所以我想提供我给我的学生们的具体求职建议。
家人、朋友、朋友的朋友
我认为在线求职网站大多毫无意义,尤其是对初级开发者而言。它们就像彩票,通过它们找到好工作的机会很低。既然它们是免费的,可能仍然值得使用,但不值得投入大量时间。
更好的方法是四个 F:家人、朋友和朋友的朋友。利用你的个人关系,在你拥有认识公司内部人员这一竞争优势的公司寻找职位。家人是最强的可能性。朋友通常也不错。朋友的朋友关系较弱,但也值得一问。如果你认识某家公司的人,或者只隔了几层关系,你在这家公司找到工作的机会就会大得多。
我向许多学生强调,这并不意味着你的家人必须在谷歌或其他大型科技公司工作。
所有 有一定规模的公司都有需要用计算机解决的问题。几乎每一家超过 100 人的公司都有某种开发团队,即使他们不这么称呼它。
举个例子,我有一个学生正在努力找工作。我问他们的父母做什么,他们说在 Costco 公司总部工作。
我告诉他们,他们实际上非常幸运,这是他们进入一家好公司的门票。
也许他们一开始在那里不是作为“计算机程序员”,也许他们从分析师或其他角色开始。但在那个角色之上具备编程能力将非常有价值,并且很可能为一份出色的职业生涯奠定基础。
结论
所以我仍然认为将计算机编程作为职业是一个好主意。当前的就业市场很糟糕,毫无疑问,但我认为这是暂时的。
我确实认为计算机编程的方式正在改变,程序员应该着眼于培养超越“纯粹”代码编写之外的技能。这一直是个好主意。
我不认为编程正在像某些人声称的那样发生戏剧性变化,而且我认为编程的基础,特别是编写好代码和控制复杂性,将永远重要。
我希望这篇文章有助于回答这个问题,尤其是对初级程序员而言,并帮助人们更有信心地进入一个我发现非常有回报、并期望长期从事的职业。
还有公司:让初级程序员至少写一部分代码。这符合你们的利益。
</>
来源:Hacker News · htmx.org