thinking on computing & computer

从根本上来说,计算机只能帮你做两件事情(there are only two kinds of computing):

* 将数据从一种形式转换成为另一种形式(transform data from one structure to another structure)
* 将数据从一个地方搬运到另一个地方(move data from one place to another place)


也就是说,计算根本就是数据本身的事情,计算机只是帮助实现这一过程的一种手段和工具。无论是OLTP,还是OLAP,以及数据渲染、ETL等过程都是基于数据本身而延展出来的概念。

你得这样想,就算没有计算机但是有其他的算力工具,你也会有需要数据库事务来保证数据更改的一致性状态,以及在这种算力体系下怎么去支持并发,以便能够提高数据处理的时间和空间效率。也就是说,这些玩意儿根本就和计算机自身没有关系,这些理论的核心全是数据,只是数据。计算机语言更是如此,就是用来描述数据流动的程序而已。

如果让算力体系能适应数据自身发展的需求,那么应该就有可能形成一个有freewill的数据系统,前提是这个数据系统是有一定的智能的,知道怎么管理自己的数据。对于现实世界的任何有意识物,算力体系都是必须的,都必然是它们自身存在的一部分。

以前的发展都是数据适应已有的算力体系,这实际上限制了发挥数据本身作用。应该反过来,设计好数据体系,然后再设计配套的算力体系!(软件定义硬件系列)。也就是说并发模型、分布式理论、OS中的调度模型、编程中的设计模式实际上都是数据本身存在的问题,是计算本身存在的问题,而不是计算机存在的问题。冯氏计算机本身只是提供算力的一种常规现实而已。也就是说我们可以脱离现有计算机研究问题,然后再想怎么把这种计算机给造出来就行了。

以前有很多思维误区,认为是计算机的问题,实际上不是,是使用计算机的人的问题。这里面有两种可能的问题:一是没有搞清楚计算本身的正确模型,所以程序本身就有优化空间; 二是没有理解好提供给他们执行计算的算力体系,因而可能设计出一个执行效率很低的方案。

所有的事情都在于首先要有一个解决问题的正确做法!然后才是说怎么根据现有的算力体系做实现!
现实的问题是:要给数据有层次的建模太难了!从操作系统到编程语言,以及各种库的实现来看,数据不但相互纠缠,而且变化无穷。一个问题的解决方案,千奇百怪,各种各样,很难说那种是最好的,还都有各自的适应场景。

The problem is computation, not computer.

当一个问题真正涉及到computer level的时候,它往往都是受制于OS模型(调度算法),I/O模型以及数据网络本身。程序中80%以上的BUG是数据本身没有管理好造成的,20%是没能用好OS、I/O、Network、Memory造成的。(80%的问题出在数据模型上,20%的问题出在算力模型上)

重要的是这些年我们对于数据有哪些重要的认知?
哪些项目做对的了什么事情?(比如Python做对了语法层面的事情,但性能实现做得很糟;Java选对了JIT,但过于老重;C++搞好了性能,但语言层面太过复杂,难以学习...本质上就是我们还没有对PLT有全面且深入的理解)
这些正确的认知是否可以固化在OS, Language, Library, DataBase中,比如将redis教会了我们怎么做应用级缓存,Tensorflow, PyTorch教会我们如何做AI,Docker/K8S教会我们如何做容器,Nginx教会我们如何做反向代理, SqlAlchemy教会我们怎么做ORM, Raft/Spanner F1教会我们怎么做分布式数据库.....
这些正确的理解零零散散,有没有地方,有没有一本书,或者说有没有一个正确的方法可以把收集起来,编撰它们,传播它们,让它们更加易于阅读和理解,而不是躺在陈旧而有庞大的代码库中?

你可能感兴趣的:(计算机科学,语言,理论)