Files
qingshuige-hugo/content/blog/写代码从来不是核心.md
xianliticn e0b6c900cf
All checks were successful
Build and Deploy Qingshuige / build-deploy (push) Successful in 1m24s
Update 文章 “写代码从来不是核心”
2026-04-07 12:12:08 +08:00

61 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 写代码从来不是核心
date: 2026-04-07T01:16:00.000+08:00
author: 线粒体
---
以前对于一些程序员写出来的代码实际上原创的成分很少。遇到问题就上Stack Overflow、CSDN或者各种博客然后照抄。稍微复杂一点的工程就涉及到架构问题。这时候就从各种架构书里去找现成答案然后套用在自己的项目里。境界再高一点才可以稍微有一点自己的创造性思考和实现。诚实地说这种程序员的核心能力究竟有多少价值能看懂语法、懂设计模式、懂算法、会运用现有的工具解决问题这些能力在过去成了程序员的护身符。但是现在有了AI程序员发现自己会做的AI也会做。于是很有挫败感觉得AI抢了自己的饭碗。
现在回过头来审视,过去程序员们那些引以为傲的能力,真的有不可替代性吗?或者说不应该被替代吗?假设这些能力不能被替代,那么人类将始终处于一个停留在低层次劳动的阶段。
比如,过去老百姓不识字,于是知识阶层便使用文字作为权力垄断的工具。后来人人识字,有一些迂腐的知识分子觉得“斯文扫地”,自己风光不再。但是很显然,人人识字是一种历史的进步。而且权力的垄断依旧存在,这时的垄断者正是那些不依靠文字,而依靠更高层次治理能力的人,比如军事才能、政治才能等等。
类比到程序员身上从计算机科学诞生以来直到今天行业内的大佬很少有纯以代码输出能力作为自身核心能力的。很多是搞数学的然后是搞算法的还有设计架构的、搞底层的。有几个大佬是依靠组装轮子把自己立起来的呢但是过去程序员用组装轮子把自己立起来今天有了更厉害的组装轮子的工具AI却还觉得这是一种非常珍贵的能力不应该被替代。组装轮子当然算一种能力它可以创造产品、换取报酬、养家糊口。但是假设不允许这种进步发生人类又怎么能够迈向更高的一个层次呢哪次技术进步不是伴随着大规模的就业洗牌呢无论这个牌怎么洗王牌永远都是香饽饽。对程序员来说跳出代码外的思考能力、数学能力、创新能力、系统思维能力才是香饽饽。今天已经不太需要抄写员了正如将来某一天可能不再需要程序员。
细细分析一下AI能够替代程序员一个关键的能力就是代码生成。但是从computer science这门学科诞生开始代码生成从来就不是一个核心领域。
这个世界上所有的学术科目,根据公认,都是从两个源头演化而来:数学和哲学。若没有跟这两个科目扯上关系,那它就不能被称为学术。
比如,每个人都可以在夜晚看星星,但看星星不是学术。后来引入了数学,成为了观星学,再后来成了天文学,乃至天体物理学,才是学术。因为引入了数学。
计算机按照图灵的表述,一开始是一种纯粹的数学模型,有四大要素。其中,指令只是衍生而出的一种应用工具。在冯·诺依曼的架构里,指令更是一种计算机的“粮食”,喂给它它就转,即使不喂,它本身也完备。也就是说,在这个模型上,指令是可被应用并且有效的。这正如人类有了充分发育的智慧大脑才产生语言,但语言并不代表大脑的智慧本身。
后来为了使得计算机这种东西不仅在数学上,更在现实中也有价值,就有了机器码。机器码是人为约定的,目的是为了操作计算机。也就是说,到了“编码”这一步,已经是计算机发展的中下游链路了。
一开始用的是纸带打孔。所以那时候的“程序员”其实就是打孔员。一张纸带代表一个指令,成本非常高昂。
后来发明了高级语言人类只需要写这种语言机器就可以把它自动编译成机器码。而且有了电子存储器也不需要纸带了。到了70年代左右才有了我们今天熟悉的所谓“编程语言”。
这个时候我们看看,编程语言在计算机科学发展的过程中,扮演了一个什么样的角色呢?它是学术吗?它是数学?还是哲学?把代码写得像证明一样严谨,那么它就是数学咯?或者写得像诗篇一样优美,那么它就是哲学咯?
我们有一门学问叫作编译原理,专门研究编译这件事。编译就是指把高级语言编译成机器码,这是一门数学性很强的科学。但是它和编程语言本身有什么关系?我们见过大量的程序员对编译原理知之甚少,也就是说只要他们不接触机器码和底层开发,编译原理并没有很多人想象中那么重要。
所以写代码本身一开始就和学术扯不上太大关系。发明高级语言,只是为了减轻程序员的工作量。高级语言的编译是一门大学问,但是使用高级语言本身,好像并没有获得太多学术上的关注,倒是很多大企业在用它创造产品。这就又出现一门学科叫作软件工程。
根据Uncle Bob的说法高级语言编程的三大范式早在上世纪就确定了函数式、过程式、对象式。所有的软件工程书籍都在教你怎么用这三种方法写出最稳健、最易于维护的代码。但是它是语言不相关的几乎任何一个图灵完备的语言都可以采取一定的架构解决一定的问题。至于能实现多少那就看这门语言的设计。而语言的设计又跟编译脱不开干系这就又回到编译原理上。
说到底,代码本身从来不是一个目的。写代码没什么了不起,设计代码才是核心领域。
所以我们发现,指令的使用,乃至编程语言的使用,是计算机发展的大树上伸得很长但离得很远的一枝。它属于典型的应用侧。
既然是应用,显然用得越方便、越快速、越稳定越好,因为用它是为了看成果。所以自然而然的想法就是自动生成代码。
代码生成上迈出的第一步恰恰是高级语言的发明。今天很多程序员抨击AI写代码是生成的不好但是他们忘记了他们使用的五花八门的高级语言本质上也是一个机器码生成器。
有了高级语言,开发容易多了,这才有了软件的大爆发。
后来又有了五花八门的硬件、五花八门的操作系统。同一套软件、同一套业务为了适配不同平台就需要好几个团队来分别为不同平台做开发。比如Windows端用C#Android端用Java或KotliniOS端用SwiftLinux鬼知道该用什么。一套软件四套团队怎么办
于是就有了各种各样的跨平台方案人类在代码生成上迈出伟大的第二步。比如现在学会JavaScript几乎什么都能做各大成熟的跨平台框架任君挑选。本质上就是用一套高级语言的代码生成多个平台的机器码。这时候另外三套团队就会失业、被裁员。只不过那时候互联网应用野蛮生长编程也没有今天这般高的热度没有太多人会去倾听他们的心声。
所以今天的程序员早就开始用代码生成技术了。如今有了AI可以直接生成高级语言。形式虽更高级本质却没有变化。只是过去人们手动编写编译器将高级语言编译为机器码如今AI能够深度学习现有的代码人工可以少干预仅此而已。这是软件这门生意发展的必然结果。
另一个方面,深度学习的理论框架早就有了,为什么近年才发展起来呢?
因为技术的发展本身需要一定的时间,而且,还有一个重要原因:硬件变强了。
硬件为什么能变强?因为基础研究的进步。基础研究为什么能进步?因为基础学科的进步。什么基础学科?数理化。好了,我们又回到了计算机科学的核心。
综上所述计算机科学发展的第一动力绝对不是代码。它被替代完全合乎情理。所以程序员们确实没有必要致力于守成。如果真的想提升不可替代性应该尽快修正自己的错觉尽量靠近computer science的核心那就是从“做”到“设计”。
以上80%都是我突发奇想瞎说的。