现代编程框架是否让人离计算机原理越来越远?

1648 👍 / 72 💬

问题描述

最近我一直在思考一个现象:现在各种高级编程语言和框架层出不穷,极大地提高了开发效率,但很多底层细节都被封装得很好。我发现周围不少年轻的开发者,可以很快上手并完成项目,但对计算机的运行机制、内存管理、I/O 原理等基础知识却知之甚少。这让我有点担忧,这种「黑盒」式的开发模式,究竟是推动了技术进步,还是在无形中削弱了我们对核心原理的理解和掌控?它是否会限制我们解决复杂问题的能力,甚至影响未来的技术创新?想听听大家对此的看法,以及这种趋势可能带来的长远影响。

还是要对底层祛祛魅,一天天的和型月世界里的野生魔术师似的,还在整越原始、越古老、越神秘、越强大那一套。

笑死,一群麻瓜连根源在哪都不知道就在那追求根源,根源是需求而不是底层,全局更优>局部最优。

我说了很多遍了,编程是将人类的意图传递给机器的过程。

语言和框架是一种信道,有不同的语言和框架是因为传输目标不一样:

这么多编程语言,有没有一种可能能把他们“大一统”?

所有被语言、库、框架屏蔽的细节都是干扰,一切与直接表达业务意图无关的代码,都可以被视为噪音。

包括但不限于,手动内存管理的引用计数、TCP连接的握手重试、数据库连接池的维护等等,这些都是对表达意图本身毫无帮助的冗余信息。

正确进化的方向是提高信噪比,从汇编到高级语言,再到现代框架,降噪手段不断地进化再进化。

实际上,整个软件工程的发展路线完全正确,离计算机原理的根源信息论越来越近了。


你跑的慢是你业务理解有问题,不是你不懂计算机底层。

提前优化是万恶之源,你业务逻辑写完了,有了完整的 profile,然后再谈优化也不迟。

从信息论的角度看,优化本质上是一种信息压缩过程。

既然程序代码本质上是将业务意图编码成机器可执行指令的过程,那么一个未经优化的程序就可以看作是一种冗余度很高的编码。

比如你准备使用 Caching,这个决策的依据是什么?

是【业务】告诉你这份数据在一段时间内是不变的,没有具体业务层面的先验信息,你根本就不应该做缓存。

又比如你准备加 Indexing,这个决策的依据是什么?

是【业务】告诉你这个字段命中率非常高,不是【俺寻思】用户会通过这个字段来查询。


所有成功的优化,本质上都是利用了业务层面的确定性,来消除技术实现层面的不确定性。

所以说,优化这个行为根本就不是单纯的底层技术探索能搞定的,局部最优可能全局更劣。

它是一个综合信息决策过程,你需要先从业务域中提取出有价值且可以用来压缩的先验信息,然后才选择合适的技术工具去执行这个压缩操作。

如果你对业务一无所知,没有任何可以用来压缩的冗余信息,那么优化也就无从谈起。

你学那么多底层原理有啥用呢,不过是用战术上的勤奋来掩盖战略上的懒惰而已。