现代编程框架是否让人离计算机原理越来越远?-酱紫君
还是要对底层祛祛魅,一天天的和型月世界里的野生魔术师似的,还在整越原始、越古老、越神秘、越强大那一套。
笑死,一群麻瓜连根源在哪都不知道就在那追求根源,根源是需求而不是底层,全局更优>局部最优。
我说了很多遍了,编程是将人类的意图传递给机器的过程。
语言和框架是一种信道,有不同的语言和框架是因为传输目标不一样:
所有被语言、库、框架屏蔽的细节都是干扰,一切与直接表达业务意图无关的代码,都可以被视为噪音。
包括但不限于,手动内存管理的引用计数、TCP连接的握手重试、数据库连接池的维护等等,这些都是对表达意图本身毫无帮助的冗余信息。
正确进化的方向是提高信噪比,从汇编到高级语言,再到现代框架,降噪手段不断地进化再进化。
实际上,整个软件工程的发展路线完全正确,离计算机原理的根源信息论越来越近了。
你跑的慢是你业务理解有问题,不是你不懂计算机底层。
提前优化是万恶之源,你业务逻辑写完了,有了完整的 profile,然后再谈优化也不迟。
从信息论的角度看,优化本质上是一种信息压缩过程。
既然程序代码本质上是将业务意图编码成机器可执行指令的过程,那么一个未经优化的程序就可以看作是一种冗余度很高的编码。
比如你准备使用 Caching,这个决策的依据是什么?
是【业务】告诉你这份数据在一段时间内是不变的,没有具体业务层面的先验信息,你根本就不应该做缓存。
又比如你准备加 Indexing,这个决策的依据是什么?
是【业务】告诉你这个字段命中率非常高,不是【俺寻思】用户会通过这个字段来查询。
所有成功的优化,本质上都是利用了业务层面的确定性,来消除技术实现层面的不确定性。
所以说,优化这个行为根本就不是单纯的底层技术探索能搞定的,局部最优可能全局更劣。
它是一个综合信息决策过程,你需要先从业务域中提取出有价值且可以用来压缩的先验信息,然后才选择合适的技术工具去执行这个压缩操作。
如果你对业务一无所知,没有任何可以用来压缩的冗余信息,那么优化也就无从谈起。
你学那么多底层原理有啥用呢,不过是用战术上的勤奋来掩盖战略上的懒惰而已。
评论区
11200958: 说的很对,封装良好的抽象就是为了屏蔽噪音细节。但很多时候世界没有这么美好。程序员不仅仅需要“向编程语言传达意图”,很多时候还需要管理和检查“自己的意图有没有被良好实现”。良好抽象实在是可遇不可得的事情。别说设计和实现上的抽象泄漏了,有几个文档能把事情完整说清楚?很多时候我们往往要部分了解下一层,才能用好上一层的功能,哪怕只是为了能用,而不是试图提升上一层的性能。解决问题需要的知识像是倒金字塔形。越是高性能、新兴的系统,越复杂、越难以规约,不完备性往往越强,需要使用的底层知识越多、越低级,这个金字塔越深、越尖锐。非常不巧的是,好用的轮子是稀疏的,而需求永远都会落在这些好用的轮子之间。写系统级编程语言往往最大的问题不是如何表意,而是它到底怎么理解了你的意思,他下面到底在干啥。于是要查查文档、翻翻源码,看下hir/mir/asm,看看到底发生了啥。 👍🏽42 💭浙江 🕐2025-11-01 10:00:26
│ └── Melon: 我就不提“正确的实现”了 我换个说法 “合理的实现” 这本身就要求既懂业务又懂技术还懂得评估各种成本 懂技术本身就包括了熟悉框架和各种抽象层试图解决什么问题 要不然你凭什么说你的实现合理[捂脸]问题是 真实业务场景 即使不那么合理的实现有时候也能接受 不行就二期优化嘛 先跑通上线再说 又不是多么大不了的事情 实在优化不来了大不了推倒重来[捂脸] 👍🏽8 💭海南 🕐2025-11-01 15:07:53
│ │ └── 核心与非核心: 那是因为目前只能做成那样,只要做出来是行业平均水平就对得起工资了 👍🏽0 💭江苏 🕐2025-11-03 10:34:49
│ └── Gnoeypnuegpues: 很多东西只有项目真正跑起来才知道瓶颈是什么[捂脸] 👍🏽3 💭北京 🕐2025-11-01 20:14:00
Xenoa: 我要发明三进制计算机!嗯?怎么苏联人搞出来过…… 👍🏽12 💭安徽 🕐2025-10-31 11:52:30
Morphin: 有一种caching的决策依据是根本没自信可以写出高效存取的代码,缓存了再说[吃瓜] 👍🏽2 💭澳大利亚 🕐2025-10-31 19:21:01
│ └── 木易: 先优化代码而不是先缓存。 👍🏽0 💭北京 🕐2025-11-02 18:32:02
force lion: 你说的对。但是为啥提示“内容包含医疗建议”[捂脸] 👍🏽2 💭天津 🕐2025-10-31 22:06:43
│ └── 晨木: 因为本文思想是:在现实里追求越古老越强大是一种病,得治 👍🏽4 💭广东 🕐2025-11-02 16:21:42
momo: 你是否指,随便在哪一层本质都是完备的 👍🏽2 💭广东 🕐2025-11-01 00:21:11
邱缠: 程序仔要有4种心,效率无敌心, 运营无敌心,还有两个忘了,老实说都可以走,就是每种走着走着都会忘记市场, 只不过大小不同,就算走先跑起来,也是一样。[机智] 👍🏽1 💭福建 🕐2025-11-01 20:01:05
kyerblish: “根源是需求而不是底层,全局更优>局部最优”[大哭] 👍🏽1 💭澳大利亚 🕐2025-11-01 12:03:25
INN: “所有被语言、库、框架被屏蔽的细节都是干扰” typo -> "所有被语言、库、框架屏蔽的细节都是干扰"或者改成,在语言、库和框架中,所有实现细节的屏蔽封装都是为了避免对用户造成信息干扰 👍🏽2 💭广东 🕐2025-10-31 23:50:14
wangruyang2024: 型月世界的比喻非常巧妙 👍🏽2 💭上海 🕐2025-11-02 20:12:44
│ └── 颉颃天: 魔法解释成对魔网的编程感觉也不错.[潜水] 👍🏽0 💭辽宁 🕐2025-11-03 11:26:05
│ └── wangruyang2024: 博德之门了哈哈 👍🏽0 💭上海 🕐2025-11-03 16:54:28
王汪汪: 了解底层原理,但不要强记底层实现 👍🏽2 💭上海 🕐2025-10-31 21:40:22
老凡: 过早的优化不是在解决问题,而是在创造问题。当然,你如果是做售前需要忽悠预算,过早优化是必须的。[害羞] 👍🏽1 💭河北 🕐2025-11-03 13:36:26
星空妄想者: 想法还是太保守了,现在AI本身都已经开始脱离现有的计算机体系结构了不是嘛。 👍🏽0 💭上海 🕐2025-11-01 06:55:36
│ └── 清水: AI的加速优化,不还是紧贴着计算机底层的各个层面吗,包括对最新架构特性的利用,通过编译融合kernel,系统层面做kv cache的管理,每个都和底层相关 👍🏽2 💭安徽 🕐2025-11-01 16:31:05
时光很匆忙: “提前优化是万恶之源”,完全赞同。 👍🏽1 💭河南 🕐2025-11-01 02:08:56
ktw361: 这个是正解 👍🏽1 💭英国 🕐2025-10-31 16:31:03
李晟显: 所以有些人以远离具体业务为荣,这种倾向简直不可理喻——你在底层钻研自嗨做出来的东西是准备给谁用的呢?谁来评判你做出来的东西实用不实用呢? 👍🏽11 💭上海 🕐2025-11-01 03:53:20
│ └── 逍遥剑: 做底层的通病了,包括做理论(理论计算机、纯数、理论物理)的看不起做应用的都是这种思路的延伸 👍🏽3 💭美国 🕐2025-11-01 09:31:57
│ │ └── 李晟显: 我可以接受理论研究者不希望被以实用主义方式评价,毕竟很多理论落地都在不知道何时的未来——让理论研究者保持对他们研究内容的热爱是很重要的。但反过来看不起应用那只能说有点蹬鼻子上脸了。 👍🏽2 💭上海 🕐2025-11-01 23:15:47
│ └── 翼若云: 数学家:啊,这……我不好说! 👍🏽1 💭浙江 🕐2025-11-01 10:24:28
│ └── 那温度: 这不就是古希腊那些数学家吗,他们追求研究的数学理论一定要抽象到无法应用才好,因为研究数学是研究完美的“神界”,不应该被肮脏的人世间污染 👍🏽1 💭北京 🕐2025-11-01 10:39:52
人非草木: 不可否认业务决定了程序的价值,但程序优化的本质并不等价于信息压缩,举个简单的例子,从单线程拓展到多线程,或者从CPU拓展到GPU并行计算,信息熵是增加的,但程序在处理效率(信息流速或带宽)上是否得到了优化?我认为优化本质是有效信息流速提升,压缩只是其中一种手段 👍🏽0 💭湖北 🕐2025-11-01 10:21:02
hitsmaxft: 从自私的角度奖,大企业里分工明确,碰到自己搞不定就立马甩锅给底层去查就好了,人只要不要脸一身轻松 👍🏽0 💭浙江 🕐2025-11-03 09:48:21
拉丁教父垃圾: 认识底层技术是为了更好实现自己的意图 不知道其运行逻辑 就没法衡量出自己写的代码执行效果如何 牺牲了什么又得到了什么。计算机你得到同样的结果 但是这个过程非常重要 尤其是当你这段内容要高频处理巨大内容时 👍🏽0 💭安徽 🕐2025-11-02 15:59:21
薇斯特塔塔: 最后一句话真精辟[赞同] 👍🏽0 💭日本 🕐2025-11-02 19:33:01
KaraX: 说得对 所以我已经开始使用Cursor进行自然语音编程了。没错,连自然语言都不用了 👍🏽0 💭广东 🕐2025-11-02 13:06:40
hxh: 各种框架出现其实是无法应付各种编程任务所带来的压力,而不得已采取的取舍折中,呈现出片面性和不可理解性,其实最好的划分就是横向分割编程任务,分为应用层,中间层,底层。而不是用应用层来掩盖底层。这样不同的应用层任务都有相同的底层人员处理成为现实。就是颗粒度更加细化。 👍🏽0 💭北京 🕐2025-11-02 08:55:36
吴俣: 程序员本质是把业务映射到技术上面,随着技术越来越成熟这个映射就越来越容易,吃香的人才就变成既懂技术又懂业务的人才而不是纯懂技术原理的人才 👍🏽0 💭浙江 🕐2025-11-01 23:08:00
金属喵: 型月都出来了(不过现代编程其实是魔禁里黄金黎明的现代魔法,不用再啃原典就能学会( 👍🏽0 💭加拿大 🕐2025-11-01 09:10:18
shiki: 所以光刻机就是噪音? 👍🏽0 💭河南 🕐2025-11-03 20:54:56
快捷键: 需求才是底层[捂脸] 👍🏽0 💭英国 🕐2025-11-01 05:56:03
solitude rain: 䏔[生气] 👍🏽0 💭陕西 🕐2025-10-31 14:38:45
KolRigo: 缺一个自动化生产力帮我分析决定使用哪些基础技术栈以及完成相应的配置现在写高级语言还是和玩断线人偶似的,所有底层你得考虑,不考虑就有可能爆炸 👍🏽0 💭中国台湾 🕐2025-10-31 11:06:55
│ └── 大林: 那还是封装地不到位 👍🏽0 💭安徽 🕐2025-10-31 16:44:47
壁虎分享刚编故事: 编程也是没必要的,机器能懂人话的话。 👍🏽0 💭广东 🕐2025-10-31 13:30:56
│ └── 毛当当的蛋: 以后还真有可能。其实现在的LLM也算是自然语言编程了。 👍🏽0 💭浙江 🕐2025-10-31 15:20:30