스크립트
00:00:00你还在读代码吗?或者说,你还应该读代码吗?
00:00:04这是周末在 TechX 上出现的一个问题,一场讨论,
00:00:09至少在我所在的圈子里是这样。
00:00:12这是一个有趣的问题,显然也是一个很好的“引战”话题,
00:00:15但这并不是本期节目的重点。
00:00:18我会回答这个问题。
00:00:20对我来说,这不仅仅是简单的“是”或“否”。
00:00:22我也想听听你们的想法。
00:00:24我是真心的。
00:00:25所以请一定要分享一下。
00:00:26这并不简单。
00:00:27我会回到这个问题上。
00:00:29但我认为另一个问题必须先摆出来。
00:00:32你还在写代码吗?
00:00:35因为显然,如果你还在写所有的代码,你自然会去读它,对吧?
00:00:40所以,你不需要去读它,因为是你自己写的。
00:00:43但对于许多开发者,包括我自己在内,我们可能并没有写下所有的代码。
00:00:49在“你写了多少代码”这个问题上,你显然可以处在 0% 到 100% 之间的任何位置。
00:00:55关于这个问题,你写的代码比例是多少?
00:00:58到现在为止,我可能已经接近 100% 不自己写代码了。
00:01:03在过去的六到八个月里,这一点发生了巨大的变化,
00:01:08我相信很多开发者都有同样的感受,随着 AI 模型变得越来越强大。
00:01:14但最重要的是,这些模型在遵循指令方面表现得更好,
00:01:18经过微调后更擅长执行指令,
00:01:20再加上像 Claude Code 之类的周边工具。
00:01:22所以,我的情况变了。
00:01:24我在另一期节目里也谈到过,
00:01:26这种变化也带走了这一手艺中的很多乐趣。
00:01:30我现在正试图在构建东西的过程中寻找新的乐趣,
00:01:33而不是在写代码的部分,那部分乐趣已经被剥夺了。
00:01:37但我之前在另一期节目里已经谈过这个了。
00:01:39所以那不是本期节目的主题。
00:01:42但这当然是第一个重要的问题。
00:01:45你还在写代码吗?
00:01:47当然,对你来说答案可能是“是”。
00:01:50你可能更接近 0% 这个范围,或者处于这个区间的任何位置。
00:01:55这完全没问题。
00:01:57我认为现在下结论说哪个位置才是对的还为时过早,
00:02:02因为在 AI 编码演进的整个过程中,我们还处在早期阶段。
00:02:07随着越来越多的软件实现全 AI 生成,我们还得看看长期的影响,
00:02:12无论你现在身处哪个阶段,这确实是既定事实。
00:02:16所以,这是第一个重要的问题。
00:02:18它与另一个问题有关。
00:02:19但现在那个问题又该怎么说呢?
00:02:21你还在读代码吗?
00:02:22嗯,再说一次,这很复杂,因为我们可以把它拆分开。
00:02:26一方面是“读代码”。
00:02:29另一方面,我会说还有“关心代码”。
00:02:33对我来说,这两者是不一样的。
00:02:36你可以读代码但不关心,这有点蠢。
00:02:40我稍后会回来讲这点。
00:02:41或者不读代码但关心,我认为这也是可能的。
00:02:45而且这会有一定的影响。
00:02:47所以正如提到的,你可能不读也不关心。
00:02:51你可能读代码但不关心。
00:02:55你可能不读代码但关心。
00:02:58当然,你也可以读代码并关心。
00:03:02如果把“读”和“关心”拆分开,就有这四种组合。
00:03:08现在,如果你不读也不关心,那就是我对“抹除式编码(Wipe coding)”的定义。
00:03:14当然,你可能有不同的定义,那也没问题。
00:03:17但这就是我对“抹除式编码”的定义。
00:03:20不读、不关心,这就是抹除式编码。
00:03:22这并不意味着你不在乎产品。
00:03:25你可能还是很在乎的。
00:03:26因为如果你不在乎产品,你起初为什么要做这件事呢,对吧?
00:03:31你可能只是关心产品而已。
00:03:33只要它能用,你就高兴。
00:03:34如果出了问题,你只需告诉 AI:嘿,这里有问题,请修复。
00:03:38请修复。
00:03:39你不在乎代码,也不读代码。
00:03:42这就是我定义的抹除式编码。
00:03:44现在,如果你读代码但并不关心,那有点奇怪。
00:03:49我想在这种情况下,你只是在消磨时间。
00:03:52如果你读代码但不关心,那你可能只是在一份拿薪水干活的工作里。
00:03:57所以,你把时间花在分析那些你并不在乎的代码上。
00:04:00我不知道。
00:04:01这并不是我这里的讨论重点。
00:04:03但当然,这确实是一种组合。
00:04:05现在,这些组合才更有趣。
00:04:08“不读但关心”和“读且关心”。
00:04:11现在,从“读且关心”开始。
00:04:13我想这是显而易见的。
00:04:15我想你可以称之为“AI 驱动的软件工程”之类的东西。
00:04:20因为你可能不再写代码了,或者不写全部代码。
00:04:24但作为一个软件工程师,你依然关心它。
00:04:26你可能依然对它负责。
00:04:28你读代码是因为你关心它,因为你可能要对它负责,
00:04:33你想要看看究竟发生了什么,对吧?
00:04:35说得通。
00:04:36所以,这是显而易见的。
00:04:37我会回到这点。
00:04:38但关于“不读但关心”呢?
00:04:40这可能吗?
00:04:42我会说,是的,是可能的。
00:04:43它可行,但很难。
00:04:46我们可能会争论这是否就是未来,也许吧。
00:04:50先说一个无聊的答案。
00:04:52我显然不知道。
00:04:53我不知道这是否就是未来。
00:04:56就像四年前,我也无法想象有一天我们竟然不再自己写代码了。
00:05:02不再写了。
00:05:03我现在可能还没法想象,有一天我们竟然完全不再读代码了。
00:05:09但在现实中,我们可能最终会处在这样的一个量表上。
00:05:12我会认为我们已经处在这样的量表上了。
00:05:15但再说一次,我会回到这个话题。
00:05:16所以,“不读但关心”。
00:05:18这真的可能吗?
00:05:20正如我提到的,我会说,是的,这大概是可能的。
00:05:24但这是一种完全不同的思考软件的方式。
00:05:27这需要你信任 AI,不仅是在写代码方面,你可能还会在审查代码、扫描或分析代码库、
00:05:34审计代码库时使用 AI。
00:05:40当然,你可以这样做。
00:05:41你可以这样做。
00:05:43你可以使用 Cloud Code 配合 Fable 5 之类的工具,或者 Codex,或者我最喜欢的代理 Pi,配合你最喜欢的 AI 模型来处理代码。
00:05:55然后你可以在新的会话中使用相同的代理配合相同或不同的模型,或者在不同的会话中使用不同的代理配合不同的模型。
00:06:03任何组合都可以,你可以利用它来审查代码、审查最新变更,或者对整个代码库进行频繁审计。
00:06:12你可以做这样的事情。
00:06:13你也可以,而且大概也应该花大量时间进行规划,阅读那些计划,阅读那些规格说明。
00:06:22我认为不读代码,如果方法得当,如果这就是未来,并不意味着你不阅读任何东西。
00:06:32你应该绝对花更多时间与 AI 一起创建好的计划,确保你正在处理正确的东西,使用正确的实现细节,如果你愿意这样说的话。
00:06:47所以,如果以正确的方式,你不仅关心产品,你还关心架构,关心构建模块。
00:06:54当然,如果你花更多时间在规格说明和计划上,然后让 AI 去实现它,你就能增加获得好结果的机会。
00:07:08然后你再进行代码审查,让审查代理也可以访问那个规格说明或 AI 应该实现的计划。
00:07:15现在,当然,你在这里依然会有一个问题,这也是为什么我没有加入“我不读任何东西”这个阵营的原因,因为你无法确切知道你的代码库里发生了什么。
00:07:29你做不到。如果你不读代码,你就是无法确切知道。
00:07:33当然,你可以竭尽全力让 AI 生成你想要的代码,并利用 AI 进行审查,但如果你不看它,你就没有 100% 的确定性。
00:07:44我的意思是,这显然不仅仅是编码的问题。
00:07:46这适用于生活中的任何事情。
00:07:48如果你让 AI 或律师——我们甚至不需要谈论 AI——起草一份合同,而你根本不读它,就直接签署了,你也不会确定里面写了什么。
00:08:00而你可能会也可能不会那么做。
00:08:03我个人不会那么做。
00:08:05我个人确实还在读代码,但或许这才是现在有趣的部分。
00:08:13再次强调,处于量表上,我并没有阅读 100% 的代码。
00:08:19我很难告诉你我具体在这个量表的哪个位置。
00:08:24它可能在中间某个位置,因为我审查了所有 AI 给我的代码。
00:08:31但这当然不意味着我一定要阅读每一行代码。
00:08:36这意味着我先跳到重要的部分,作为软件工程师,我可以识别出来。
00:08:42我知道哪些构建模块是重要的部分,或者我知道某个提交请求或某次代码提交中的哪些部分是重要的。
00:08:51我潜入这些部分。
00:08:53我分析它们。
00:08:54我潜入那些关键的部分。
00:08:56然后我会潜入一些我知道 AI 容易搞砸的部分。
00:08:59这就是我审查的方式。
00:09:01对于不那么重要的部分,我可能只是扫描或简单浏览一下。
00:09:07例如,当 AI 编写一些代码来读取环境变量并解析它们时,
00:09:16我不一定会读那里的每一行。
00:09:18但我只是想看大体的实现路径,尤其是考虑到 AI,例如,倾向于写过度防御性的代码,它会给回退方案设置回退方案,再设置回退方案。
00:09:27我想避免那样。
00:09:28所以我还是会在那里做检查,但我并不关心它如何解析整数之类的细节。
00:09:36所以这就是我目前给自己定位的位置。
00:09:42但就像写代码一样,我不知道这会如何改变,我未来可能会怎样更接近 100% 不去读代码。
00:09:50现在,我不知道我是否会达到 100%。
00:09:54我无法预见未来。
00:09:55我想,如果我们在写代码和读代码上都达到了 100%(不介入),我们真的得看看这对我们作为软件工程师意味着什么。
00:10:06给 AI 正确的任务,了解签名系统和架构,这可能仍然超级重要。
00:10:15这就是我的猜测,我们正朝着这个方向前进。
00:10:18但显然,这很难说。
00:10:21问题在于,如果有一天我们既不写代码也不读代码,你是否还需要知道怎么写代码,对吧?
00:10:31知道怎么读或写代码是否还有价值,对吧?
00:10:35如果那依然重要的话。
00:10:36而现在,对我来说,这绝对依然重要。
00:10:39之所以依然重要,也是因为问题在于,你在乎什么,对吧?
00:10:44这是另一部分,关心。
00:10:46读是一个部分,但我们阅读是因为我们关心,正如我阐明的那样,我们也可能不读但关心。
00:10:53但关心到底意味着什么?
00:10:55我会说,关心显然可以意味着很多事情。
00:11:03它可能意味着代码风格之类的东西。
00:11:06你可能在乎代码风格,函数是如何创建的,那里使用了什么方法。
00:11:13你甚至可能在乎更大的决策,比如你想要面向对象编程还是函数式编程,诸如此类。
00:11:21你可能在乎程序的易读性。
00:11:26你可能在乎安全性,在乎可靠性之类的东西。
00:11:33还有许多我们可以思考的其他维度。
00:11:35有些维度现在对我来说没那么重要了。
00:11:39代码风格、易读性,特别是如果你不读代码的话,这不太重要。
00:11:44在这种情况下,唯一重要的事情是 AI 能够读懂和理解代码。
00:11:50它极有可能处理得很好。
00:11:53现在,代码风格可能依然对 Token(代币)效率有影响。
00:11:58如果你的代码库里充斥着许多不必要的检查——正如提到的,这是 AI 目前倾向于做的,
00:12:04或者某些 AI 模型倾向于做的——当 AI 分析那段代码时,这会消耗额外的 Token。
00:12:11所以那依然是一个考量,但它可能不如过去那么重要了。
00:12:18我是说,过去我们对代码风格都有自己的偏好。
00:12:22而对我来说,那确实改变了。
00:12:24那确实发生了改变。
00:12:26现在,很显然,安全性、可靠性,还有可测试性,这些依然极其重要。
00:12:34很显然,如果要说软件中有什么真正重要的,那便是这些。
00:12:39你希望它能做它该做的事。
00:12:41你希望它能安全地完成。
00:12:43你可能在乎性能。
00:12:46你应该在乎性能。
00:12:47它应该可靠。
00:12:48它不应该随机在你的用户面前崩溃。
00:12:51当然,这些都是我们在现代软件中看到的。
00:12:54现代软件通常不可靠,可能也不安全。
00:12:58100% 的安全性显然无法实现,尤其是考虑到这些 AI 模型在发现安全漏洞方面相当不错,
00:13:04而且我们不一定能接触到能做到这一点的最新模型。
00:13:10但那是另一场讨论了。
00:13:11但你依然应该关心它。
00:13:13这就是我的观点。
00:13:14在我看来,你应该努力构建安全、可靠、高性能的软件。
00:13:20而作为一名软件工程师,当然,这也意味着你可能想要就项目中使用哪些模式、哪些库提供意见。
00:13:30所以,我们要更多地转向系统设计或软件架构领域,这不是同一回事,系统设计和软件架构。
00:13:39但这些依然非常重要,我想说。
00:13:44如果你接近 100% 不读代码——虽然这可能并不适用于你——这些就是有好的规格说明、有好的计划变得重要的地方。
00:13:57这一切都没有对错之分,正如我试图讲清楚的那样。
00:14:02因此,如果你不像以前那样在乎代码风格和易读性——这很可能就是事实——这些部分(规格说明、计划)确实变得更重要了,因为你要确保安全和可靠。
00:14:18因此,关于“你还在读代码吗”的整个问题,显然也带有一点点引战意味,正如我之前提到的,它并没有那么容易回答。
00:14:30这里没有绝对的对错。
00:14:34顺便说一下,这应该显而易见,但如果你有软件在生产环境中运行,或许有成千上万、数十万甚至数百万人使用,这中间也有很大的区别。
00:14:37这还取决于你在哪个领域工作。
00:14:49如果你在银行工作,比如,软件中的错误可能会导致灾难性的后果;不仅仅是银行,还有比银行更重要的领域,显然包括健康、国防、科技等所有这些领域。
00:15:05所以,这是一个重要的考量。
00:15:10如果你是一个用户为零的独立开发者,是的,当然,你可能不会太在乎代码。
00:15:18但总体而言,我认为我们可以看到一个趋势,或者说我们可能会看到这样一个趋势:就像写代码一样,我们在读代码上也正在接近 100%(不介入)。
00:15:32我只是不确定我们是否会达到 100%,以及如果达到了是否是件好事。
00:15:38而且我们绝对不应该停止关心。
00:15:41那么大的问题就是,我们可以不读而关心吗?
00:15:45这真的、真的、真的能行吗?
00:15:48我不确定。
00:15:49对我来说,我没有那种对 AI 的信任。
00:15:53我不确定这是否或何时会改变。
00:15:56它可能会改变。
00:15:57我不排除这种可能。
00:15:58就像写代码或不写代码已经改变了一样。
00:16:03但目前,我依然更处于“读且关心”的部分,或者我正处于两者中间,因为正如我提到的,我处在那个量表的中间。
00:16:11但正如我提到的,请让我知道你在哪里。
00:16:150% 阅读,100% 阅读,也许依然是 100% 编写。
00:16:19那也可能是正确的方向。
00:16:21请告诉我。
00:16:22也请告诉我你对这个话题的总的看法。