ARTICLE · BETA
Coding
Coding
1、Coding 的本质不是写代码,而是人在数字世界中的创造活动(在 coding agent 出现之后,这句话更能立住了),Coding 就如同神笔马良手中那支画笔,几乎能在数字空间中构建任何东西。而 Coding agent 则是生成式 AI 浪潮里,当下能看到的最大的应用机会,也许只有视频生成可与之媲美。
2、Coding agent 前面的 “coding” 可能迷惑了很多人,包括之前的我,这个词会让人觉得,这不过是个帮人类进行编程的工具(其实 agent 这个词也有很大迷惑性,真是个糟糕的名字),但实际上,它其实是非常强大的通用性工具,可以完成很多任务,不管是做网站做 App 做游戏,还做各种模态的内容,甚至是直接代理操控各种硬件设备,都能搞定。并且这种通用性的能力是可持续扩展的,它可以随着大模型能力的提升,传感器的扩展丰富,各种数据和工具接口的接入完善,不断随之水涨船高,这点其实很可怕,因为难以看到上限。
3、Coding agent 的演进也许会经历几个阶段:
一、在人类的指令下完成更复杂的任务
二、可自循环地完成更复杂的长程任务
三、更经济地构建可持续运行的复杂系统
目前看,我们还在阶段二的早期,目前各个公司主要在卷能力的上限,也就是能完成多复杂的任务,基本是唯「通过率」论,代码质量如何并不关心。而这导致了目前 agent 产品一个问题:干活“只管生不管养”,生成的代码往往极其冗余,堪称屎山大师。这会直接导致代码的可读性和长期可维护性都变得极差,尤其是对于一个复杂的系统,当越过一个临界点之后,这会成为限制 agent 能力持续提升的一大瓶颈。
4、在渡过阶段二之后,Coding Agent 之间的竞争,会从“可运行的代码生成器”,进化为“生成可持续运行系统”。前者强调能不能跑通,后续强调是不是长期可持续可维护。大家会对所生成代码的可读性、可维护性、简洁性提出更高的要求,更追求“系统能长期优雅地运行”。所谓变得更简洁更优雅,不是什么道德洁癖,而是实打实的经济账,这个等会展开。
5、它跺它也麻。混乱的代码库会让工程师抓狂,也会让 AI 发疯。AI 很强,但也有自身局限性。
首先,自回归模型的注意力是有限的,代码越冗余、耦合越严重,AI 理解的准确率也就越低。面对一团乱麻的代码,AI 修改时同样容易犯错,顾头不顾尾,改了 A 崩了 B ,引入隐形 bug。
另外,代码堆砌得越厉害,token 消耗越高,其对上下文窗口的占用也越大。当项目大到一定程度,上下文很可能根本装不下项目信息,自然也就失去了精准修改的能力。
这和人类面对屎山代码的困境本质一毛一样:当复杂度超过了理解主体的认知带宽,谁来维护都一样难。人读不懂的烂代码,AI 同样会读错、改错,只是它犯错的速度比人快得多。
6、实打实的经济账。年初很多公司鼓吹员工多用 AI ,额度报销无上限,但一年还没过,就有不少公司开始限定消耗上限,本质也是一种经济帐。企业是理性的经济组织,核心不是你消耗了多少 token,而在于你到底创造了什么价值。而今,在头部模型厂商不断提价的背景下,企业显然越加理性了。而冗余混乱的系统,其维护成本会显性上升,出错所带来的经济损失和信誉损失也越大,不管是企业还是经济个体,不可能不考虑。
有人会说,AI 也能维护系统,确实,但逻辑不会因为维护者从人换成 AI 就消失。AI 改烂代码同样需要更多轮调试、试错,这只是把「人的工时成本」换成了「token 成本 + 调试时间成本 + 故障风险成本」,而且很重要的一点,AI 再强,它也无法担责,越大的公司组织越不敢去赌这一点。
7、大神们如何定义 coding
“Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty.”
计算机编程是一门艺术,因为它把积累的知识应用到世界中,因为它需要技巧和创造力,尤其是因为它能产生美的作品。
唐纳德·克努特(Donald Knuth)
斯坦福大学荣休教授,1974年图灵奖得主,“算法分析之父”,代表作《计算机程序设计艺术》,排版系统TeX发明者。
⸻
“Programs must be written for people to read, and only incidentally for machines to execute.”
程序必须是写给人读的,只是顺便让机器执行。
哈罗德·埃布尔森(Harold Abelson)、杰拉德·萨斯曼(Gerald Jay Sussman)
MIT计算机科学教授,经典教材《计算机程序的构造和解释》(SICP)作者。
⸻
“Program testing can be used to show the presence of bugs, but never to show their absence!”
程序测试可以用来证明bug的存在,但永远不能证明bug的不存在。
艾兹格·迪杰斯特拉(Edsger W. Dijkstra)
荷兰计算机科学家,1972年图灵奖得主,最短路径算法发明者,结构化编程与程序正确性思想的核心奠基人。
⸻
“A most important, but also most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use. If the tool is a programming language this influence is, whether we like it or not, an influence on our thinking habits.”
关于工具,最重要也最不易察觉的一点,是它会塑造使用者的思维习惯。如果这个工具是编程语言,那么无论我们是否愿意,它都会改变我们的思考方式。
艾兹格·迪杰斯特拉(Edsger W. Dijkstra)
图灵奖得主,现代算法理论与结构化编程的奠基人。
⸻
“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.”
软件设计有两种方式:一种是做得足够简单,明显没有缺陷;另一种是做得足够复杂,看不出明显缺陷。
托尼·霍尔(C. A. R. Hoare)
1980年图灵奖得主,快速排序算法发明者,形式化验证与程序设计理论先驱。
⸻
“Controlling complexity is the essence of computer programming.”
控制复杂性是计算机编程的本质。
“Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?”
人人都知道,调试程序的难度是最初写程序的两倍。所以,如果你写程序时已经把聪明用到极限,那你以后还怎么调试它?
布莱恩·柯尼汉(Brian Kernighan)
贝尔实验室核心成员,Unix文化核心传播者,与丹尼斯·里奇合著《C程序设计语言》,AWK语言共同作者。
⸻
“C++ is designed to allow you to express ideas, but if you don’t have ideas or don’t have any clue about how to express them, C++ doesn’t offer much help.”
C++的设计是为了让你表达想法;但如果你没有想法,或者不知道如何表达这些想法,C++也帮不了你太多。
“I think we should look for elegance in the applications built, rather than in the languages themselves.”
我认为我们应该在构建出来的应用中寻找优雅,而不是只在语言本身中寻找优雅。
本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)
C++语言创造者,其设计的C++是现代系统软件、游戏引擎、金融高频系统、嵌入式领域的核心底层语言。
⸻
“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”
糟糕的程序员关心代码本身;优秀的程序员关心数据结构以及它们之间的关系。
林纳斯·托瓦兹(Linus Torvalds)
Linux内核创始人、Git版本控制系统作者。
⸻
“Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Programming isn't about algorithms, it's about data structures.”
数据为王。如果你选对了数据结构并且组织得当,算法几乎总是不言自明的。编程的核心在于数据结构,而非算法。
罗布·派克(Rob Pike)
Go语言联合设计者,贝尔实验室Unix核心成员,谷歌首席工程师,极简主义工程哲学的代表人物。
⸻
“Any damn fool can write code that a computer can understand, the trick is to write code that humans can understand.”
任何傻瓜都能写出计算机能理解的代码,真正的本事是写出人类能理解的代码。
马丁·福勒(Martin Fowler)
软件工程教父,ThoughtWorks首席科学家,代表作《重构》《企业应用架构模式》,敏捷开发先驱。
⸻
“What hackers and painters have in common is that they're both makers. Along with composers, architects, and writers, what hackers and painters are trying to do is make good things.”
黑客和画家的共同点在于,他们都是创造者。和作曲家、建筑师、作家一样,黑客和画家想做的,都是创造好东西。
保罗·格雷厄姆(Paul Graham)
程序员、技术作家、投资人,Y Combinator联合创始人,代表作《黑客与画家》。
⸻
“Measuring programming progress by lines of code is like measuring aircraft building progress by weight.”
用代码行数衡量开发进度,就像用重量衡量飞机制造进度。
比尔·盖茨(Bill Gates)
微软创始人,全球个人计算革命的推动者。
⸻
“Everybody in this country should learn how to program a computer… because it teaches you how to think.”
这个国家的每个人都应该学习编程,因为它教会你如何思考。
史蒂夫·乔布斯(Steve Jobs)