是的,而且(Yes, and)

Hacker News Top 新闻

摘要

htmx 作者、Montana State University 计算机科学教授 Carson Gross 撰文探讨“在 AI 时代是否还应该成为程序员”。他认为编程的核心——解决问题与控制复杂性——依然具有价值,但强烈警告初学者不要依赖 AI 生成代码:只有亲手写过代码,才能真正读懂代码。他还指出,LLM 并不像编译器那样具有确定性,往往会引入额外的偶然复杂性。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/08 21:02

# </> htmx ~ Yes, and... 来源: https://htmx.org/essays/yes-and/ Carson Gross,2026年2月27日 我在蒙大拿州立大学 (https://www.cs.montana.edu/) 教授计算机科学。我是三个儿子的父亲,他们都知道我是程序员,其中至少有一个对这个领域表现出了兴趣。我热爱计算机编程,并努力将这份热爱传递给我的儿子们、课堂上的学生以及任何愿意倾听的人。 亲戚、朋友和学生越来越频繁地问到我这样一个问题: > 鉴于 AI 的存在,我是否还应该考虑成为一名计算机程序员? 我的回答是:"是的,而且……" ## "是的" (https://htmx.org/essays/yes-and/#yes) 计算机编程从根本上来说关乎两件事: - 使用计算机解决问题 - 学会在解决这些问题时控制复杂性 我很难想象一个这样的未来:懂得如何用计算机解决问题以及如何控制这些方案的复杂性,会比今天*更*没有价值。因此我认为,即使 AI 工具兴起,编程仍然会是一个可行的职业。 ### "你必须亲自写代码" (https://htmx.org/essays/yes-and/#you-have-to-write-the-code) 话虽如此,我认为 AI 对初级程序员来说非常危险,因为 AI *确实*能够有效地为许多问题生成代码。如果初级程序员不学习编写代码,而只是让 AI 生成,他们就是在剥夺自己获得那种来自一线实践中对代码的直觉性理解的机会。 因此,我警告我的学生们: > "是的,AI 可以为你生成这个作业的代码。但别让它这么做。你*必须*亲自写代码。" 我解释说,如果不亲自写代码,他们将无法有效地*阅读*代码。在基于 AI 的编程未来中,阅读代码的能力肯定是有价值的,也许*更加*有价值。 如果你读不懂代码,你就会陷入"魔法师的学徒"困境 (https://www.youtube.com/watch?v=m-W8vUXRfxU),创造出你既不理解也无法控制的系统 (https://www.youtube.com/watch?v=GFiWEjCedzY)。 ### 从"编程"到"提示词"是否类似于从汇编到高级编程? (https://htmx.org/essays/yes-and/#is-coding-prompting-like-assembly-high-level-coding) 有人说,从高级语言到 AI 生成代码的转变,类似于从汇编语言到[高级编程语言](https://en.wikipedia.org/wiki/High-level_programming_language)的转变。 我不同意这个类比。 编译器在很大程度上是确定性的,而当前的 AI 工具并非如此。给定一个高级编程语言结构,比如 for 循环或 if 语句,你可以有相当大的把握说出对于给定的计算机架构会生成什么样的汇编代码(至少在优化之前是这样)。 对于基于 LLM 的方案来处理特定提示词,情况就不同了。 高级编程语言是一种*非常好的*方式,可以用最少的文字通过计算机创建高度精确的问题解决方案,而汇编语言做不到这一点。它们消除了大量的[偶发复杂性](https://en.wikipedia.org/wiki/No_Silver_Bullet),留下(假设代码写得合理的话)大部分的本质复杂性。 另一方面,LLM 生成的代码往往不能消除偶发复杂性,事实上,它还可能通过选择不当的问题解决方案、走捷径等方式,显著增加偶发复杂性。 如果你读不懂代码,你怎么分辨呢? 而如果你想读懂代码,你就必须自己写代码。 ### AI 是一位优秀的助教 (https://htmx.org/essays/yes-and/#ai-is-a-great-ta) 我还告诉学生们的一件事是:正确使用 AI 时,它是一位极其有效的助教。如果你不把它当作代码生成器,而是当作一个帮助你理解概念和技术的伙伴,它可以在你的智力发展上提供巨大的推动力。 学习编程最困难的事情之一就是"卡住"。你看不到窍门,或者根本不知道从哪里入手才能取得进展。 更糟糕的是,当你因为偶发复杂性而卡住时:你不知道如何使用某个特定的工具链,甚至不知道工具链是什么。 这不是*你*的问题,而是你的环境的问题。毫无意义地卡住会剥夺你真正学习的时间,而且往往让人放弃计算机科学。 (我在伯克利自学 Unix 的时候也曾卡住,这也是我从那里的计算机科学项目退学的原因之一。) AI 可以帮助你越过这些障碍,如果使用得当,它可以是一位很好的助教。我发布了一个 [AGENTS.md](https://gist.github.com/1cg/a6c6f2276a1fe5ee172282580a44a7ac) 文件,我提供给学生们,用来配置编码代理使其表现得像一位优秀的助教而不是代码生成器,我鼓励他们以这种方式使用 AI。 只要使用得当,AI 并不必然是你成长为一名计算机程序员的障碍。 ## "而且……" (https://htmx.org/essays/yes-and/#and) 我确实认为 AI 将会改变计算机编程。不会像有些人想象的那么剧烈,但会在某些根本性的方面发生改变。 ### 裸编码可能会变得不那么重要 (https://htmx.org/essays/yes-and/#raw-coding-may-become-less-important) 编程的*行为*本身可能会失去*相对*价值。 我觉得这很可惜:我通常喜欢编码的过程,用你(隐喻意义上的)双手让某个东西动起来很有趣。写好代码有一种艺术感和满足感,其中有许多美学上的决策需要做出。 然而,裸代码编写能力在未来可能会变得不那么重要。 当这一点变得相对不那么重要时,我认为其他技能会变得更加重要。 ### 沟通能力 (https://htmx.org/essays/yes-and/#communication-skills) 例如,清晰地写作、思考和沟通的能力——无论是与 LLM 还是与人类——在未来可能会变得更加重要。许多计算机程序员本来就具有文学倾向,这项技能的价值很可能随着时间推移而增长,值得在这方面下功夫。 阅读书籍和撰写文章/博客似乎是在这方面有所帮助的活动。 ### 理解业务 (https://htmx.org/essays/yes-and/#understanding-business) 你可以做的另一件事是将部分精力转向更好地理解业务(或政府职能等)。 计算机编程是用计算机解决问题,而企业和业务中不乏这样的问题。 有些商业人士看到 AI 后说:"太好了,我们不需要程序员了!"但在我看来,程序员说"太好了,我们不需要业务人员了!"似乎同样合理。 我认为这两种观点都是短视的,但我确实认为 AI 可以让程序员在*继续*以程序员身份工作的同时,投入更多时间去理解他们正在解决的真实世界问题(无论是业务的还是其他方面的)。 这与提高沟通能力的目标不谋而合。 ### "架构"系统 (https://htmx.org/essays/yes-and/#architecting-systems) 和许多计算机程序员一样,我对"软件架构师"这个称呼态度复杂。我见过[架构宇航员](https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/)给世界带来许多痛苦。 不过,如果没有更好的词的话,我认为软件架构将随着时间的推移成为一项更重要的技能:有效地组织大型软件系统的能力,以及关键的——控制这些系统复杂性的能力。 对初级程序员来说,困难之处在于传统上,架构大型解决方案的能力来自于构建系统中较小部分的经验积累——最初做得很差,然后随着时间的推移变得更加高效。 我遇到过的大多数糟糕的架构师,要么本身就是糟糕的程序员,要么根本没有多少编程经验。 如果你让 AI 接管"简单"部分的代码生成,你如何培养出成为一名高效架构师所必需的直觉? 这就是为什么你仍然必须亲自写代码。 ### 有效地使用 LLM (https://htmx.org/essays/yes-and/#using-llms-effectively) 另一项(显然)价值可能会上升的技能是如何有效地使用 LLM。我认为我们目前仍在探索这意味着什么的过程中。 我也认为,这意味着什么因经验水平而异。 #### 高级程序员 (https://htmx.org/essays/yes-and/#seniors) 那些在前 AI 时代已经积累了大量经验的高级程序员,处于有效地使用 LLM 的有利位置:他们知道"好"代码是什么样子的,他们有构建大型系统的经验,知道什么重要什么不重要。高级程序员的危险在于他们可能完全停止编程,从而开始遭受[脑腐化](https://www.media.mit.edu/publications/your-brain-on-chatgpt/)。 尤其危险的是发出提示词之后,在等待的过程中陷入"无尽滚动" (https://theneverendingstory.fandom.com/wiki/The_Nothing)。 问我怎么知道的吧。 我通常尝试以下列方式使用 LLM: - 分析现有代码以更好地理解它,并发现其中的问题和不一致之处 - 帮助我组织关于想要承接的更大项目的想法 - 为我正在开发的系统生成相对较小的代码片段 - 生成我不喜欢手写的代码(例如正则表达式和 CSS) - 生成我愿意丢弃或不打算深入维护的演示/探索性代码 - 为我正在开发的特定功能建议测试用例 我尽量避免使用 LLM 生成我需要负责维护的完整解决方案。我有时会在手动编写代码构建解决方案的同时使用 LLM,以帮助我理解 API 和编码过程中的各种选择。 我从不让 LLM 设计我正在构建的系统的 API。 #### 初级程序员 (https://htmx.org/essays/yes-and/#junior) 初级程序员的处境更加艰难。我再说一遍:你必须亲自写代码。 通过 vibe coding 走完所有问题的诱惑非常非常大,但你必须与这种诱惑作斗争。 你的同龄人*确实会*用 vibe coding 的方式混过去,这会让人恼火:你需要比他们更努力地工作,而且你可能会因为进度慢而受到批评。这里的工作动态需要理解:如果你的公司像目前许多公司一样把速度置于理解之上,你需要接受这一点,而不要被解雇。 然而,我认为这是一个暂时的情况,很快各家公司就会意识到,快速的 vibe coding 比经过深入理解的、有意识的编码更容易引发严重的复杂性爆炸问题。 到那时,我预计慢速的、更审慎的、有 AI 辅助的编码方式将被理解为利用这项新技术的最佳方式。 AI *可以*帮助初级程序员的地方在于:通过消除经常绊倒初级程序员的偶发复杂性,加速他们成长为高级开发者的道路。如我上面所说,将 AI 视为一个有用的、虽然有时过于积极的帮手而不是仆人,可以在理解代码库的结构、针对特定问题可用的 API 和技术、特定构建系统或编程语言的工作原理等方面非常有效。 但你必须亲自写代码。 还有公司们:你们必须让初级程序员亲自写代码。 ## 如今找一份工作 (https://htmx.org/essays/yes-and/#getting-a-job-today) 我收到的关于 AI 和编程的问题,归根结底都围绕着找一份体面的工作。 程序员就业市场目前很糟糕,这不是秘密,我亲眼看到优秀的计算机科学学生在寻找编程岗位时挣扎。 虽然我没有水晶球,但我相信这是一种暂时性而非永久性的情况。计算机程序员的就业市场往往呈周期性波动,有繁荣也有萧条,我相信我们终将从当前的萧条中恢复过来。 但对于现在正在找工作的人来说,这只是冷冰冰的安慰,所以我想提供我给学生们的具体的求职建议。 ### 家人、朋友、朋友的家人 (https://htmx.org/essays/yes-and/#family-friends-family-of-friends) 我认为在线招聘网站大多没什么用,尤其是对初级程序员而言。它们就像彩票,通过它们找到好工作的概率很低。由于它们是免费的,可能还是值得一用,但不值得投入太多时间。 更好的方法是"四个 F":Family(家人)、Friends(朋友)& Friends of Family(朋友的家人)。利用你的个人关系网络去寻找在你拥有认识公司内部人员的竞争优势的公司中的职位。家人是最有力的可能性。朋友通常也不错。朋友的家人关系更弱一些,但也值得一问。如果你认识某家公司的人,或者与某人只隔着几层关系,你获得该公司职位的机会会大得多。 我向许多学生强调,这并不意味着你的家人必须在 Google 或其他大型科技公司工作。 *任何*有一定规模的公司都有需要用计算机解决的问题。几乎每家超过100人的公司都有某种开发部门,即使他们不这样称呼它。 举个例子,我有一个学生在找工作时很困难。我问他们父母做什么工作,他们说在 Costco 总部工作。 我告诉他们,事实上他们非常幸运,这是他们进入一家优秀公司的门票。 也许他们不会以"计算机程序员"的身份起步,也许他们从分析师或其他角色开始。但在那个角色之上具备编程能力将非常有价值,很可能为他们铺就一条伟大的职业生涯道路。 ## 结论 (https://htmx.org/essays/yes-and/#conclusion) 所以我仍然认为将计算机编程作为职业追求是一个好主意。当前的就业市场确实很糟糕,但我认为这只是暂时的。 我确实认为计算机编程的方式正在改变,程序员应该着眼于在"纯粹"的代码编写之外建立技能。这一直是一个好主意。 我不认为编程正在像有些人声称的那样发生剧烈的变化,我认为编程的基本功,尤其是写出好代码和控制复杂性,将永远重要。 我希望这篇文章对于回答那个问题是有用的,尤其是对初级程序员而言,并帮助人们对进入这个职业领域更有信心——我从中获得了非常丰厚的回报,并且期望在很长一段时间内继续从事这一职业。 还有公司们:让初级程序员至少写一部分代码。这符合你们的利益。 </\>

相似文章

@ai_super_niko: https://x.com/ai_super_niko/status/2070299861757616606

X AI KOLs Timeline

本文讨论了在AI能写代码的时代,计算机从业者是否还需要学习技术。作者认为,语法和API等表层技术正在贬值,但算法、设计架构和判断力等深层能力变得更加重要,学习重心应从初级技能转向高级工程师所需的知识。

@utopiazh: 吴恩达老师建议人人都该学编程。我觉得也不尽然。 "能准确告诉AI/计算机你要它做什么,让它替你完成。" 这句话没毛病,是不是要学编程还是很有争议的。 普通人了解AI的行为模式并能进行对话就够了,如果需要AI悄悄在后台写代码完成任务对用户也…

X AI KOLs Timeline

这篇文章讨论了吴恩达建议人人都该学编程的观点,但作者认为普通人只需了解AI的行为模式并能进行对话即可,AI可以在后台完成编码任务。

AI & The University

Lobsters Hottest

Carson Gross 在演讲中讨论了 AI 对大学计算机科学教育的影响,认为在 AI 时代仍需教学生写代码和读代码,同时指出 AI 带来了评估危机和教学变革的机会。

@Xudong07452910: 这篇论文让我感觉,我们对「AI 会取代程序员」这件事的讨论方向可能全错了。 核心观点:AI Agent 的出现不是让软件工程师工作效率更高,而是让「把决策逻辑永久编码进软件」这件事本身变得越来越不必要。 作者说的是一个更根本的范式变化:传…

X AI KOLs Timeline

这篇论文认为AI Agent的出现不是让程序员更高效,而是从根本上改变了软件范式的本质——代码从永久固化决策逻辑的静态产物,变成了LLM动态生成、用完即弃的临时工具,软件工程的核心将转向设计可靠的推理约束边界。

@XAMTO_AI: 不少人嘀咕:AI编程都这么猛了,基础知识还用得着学吗? 用得着,而且越来越用得着。 安利一个GitHub上的宝藏项目:Professional Programming,从算法到系统设计再到代码质量,覆盖得明明白白。学习路径清晰,不是那种甩…

X AI KOLs Timeline

推荐GitHub上的Professional Programming项目,涵盖算法、系统设计、代码质量等编程基础知识,提供清晰学习路径和实战练习,强调在AI编程时代基础知识仍然重要。