做数据是什么意思啊(粉丝做数据是什么意思啊)

创业学习网2022-03-27 13:53:59265

作者:赵丹

链接:https://zhuanlan.zhihu.com/p/19668714

来源:知乎


1. 数和数据

数和数据的解释


Data (/?de?t?/day-t? or /?d?t?/da-t?, also /?dɑ?t?/dah-t?) is a set of values of qualitative or quantitativevariables; restated, data are individual pieces of information. Data in computing (or data processing) are represented in a structure that is often tabular (represented by rows and columns), a tree (a set of nodes with parent-childrenrelationship), or a graph (a set of connected nodes). Data are typically the results of measurements and can be visualised using graphs or images.

Data as an abstractconcept can be viewed as the lowest level of abstraction, from which information and then knowledge are derived.

以上维基百科上对于Data的解释令人费解,不仅没有解决问题反而制造了问题。所以从现在起忘掉它吧。我们来自己创造解释。

数据既然带着一个“数”字,自然和数有关系。其实数字远比文字古老,因为计数的符号比文字来得简单多了,各种人类最初计数的方法几乎一样,不是用小棍就是用石头,记录下来不是杠就是点,只是单纯的数量较少的杠或者点,很难辨认是人用来计数的符号还是某种自然力的痕迹,只有出现在其他明显是人工创造的符号——例如史前岩画中,才会被当作数字对待。伏羲八卦显然是中国人类早期使用的数字,显然早于仓颉造字和甲骨文,其他人类大体也差不多。所以最初的数字是人类还不会写字的时候就已经被记录下来了。由于最初的数字实在太简单,只有“1”这个符号,多大的数就写多少个“1”,所以每个数字只包含1比特信息量。但就是这一比特,已经对早期人类起到很大的帮助了,比如他们可以结绳记事,每个疙瘩就是一个数字,这个数字一旦在绳子上处于特定的位置,就与特定时空中的一个事件相对应,能帮他回忆起当时的情景。结绳记事经过一定的发展,打结的方法逐渐多了几种,就相当于从1进制扩展到n进制,每个结的样式成为事件类型的代码,而人们可以根据这些作为代码的来回忆起有价值的信息,这不就是最初的数据吗?其实英文的datum本意是基准,也有“据”的含义,只是没有数的意思在里面。

我们今天面对的被称为数据的的东西,有的是数字,也有的是文字序列,所以乍看上去并不一定和数有关,但其实在信息系统里,所有的文字都是用数字来代表的,比如“数据”二字在UTF8编码中就是十六进制数6570和636E,所以文字其实就是数字。说数据就是可据之数,是完全没有问题的。


2. 数据、逻辑、语言

数和数据的解释

虽然我们可以说数据都是数,即使表现为语言文字的数据也是数,但是语言文字与单纯的数又有一些不同,数和它所代表的含义之间的联系是比较松散的,做过信息系统的人都知道信息系统里有个叫代码表的东西,就是给系统里频繁使用的固定含义编一个数字码,于是在那个系统里,那个数字就代表那个含义了,在另一个系统里又会有一个完全不同的代码表,代码的指定几乎是随意的。除了用作代码,数还用做表示测量结果,但是具体测量结果的数值是由测量系统来决定的,测量系统里很重要的基本要素就是基准单位,比如最基本的长度测量,公制和英制得出的数字就大不相同,我的身高可以是172.5厘米,也可以是5英尺8英寸,所以如果不指明测量系统,那么表示测量结果的数字也毫无意义,因此可以说测量系统是对测量结果含义的约定。当然数最初的用途是计数,计数可以归入测量的范畴,因此不再单独提起。每一种测量系统最根本的基础都是人类常识,人是万物的尺度仍然是成立的,只不过有些测量系统被各种科技手段层层包裹,最基本的常识内核已经不能清楚地看到,比如说长度的测量,最初直接用成人小臂的长度,后来用一个标准的人造物体,最后使用某种光波的波长,越到后来似乎越和人类常识无关,但是不管怎么说,首先基本单位是人的常识尺度,米和腕尺没有数量级的差别,其次仍是以人的观察能力为限,否则为什么不用某种中微子波长呢?

对于人类来说,数所代表的意义,总是需要额外说明的,否则就无法理解。这种说明最容易想到的方式就是语言。之所以可以用语言来说明数,就表示语言和含义之间的联系比数和含义之间的联系更紧密、更固定。这表现在几个方面:首先,语言和含义的联系比数更确定,语言中的每个词汇通常都对应着一个明确的含义,而数字并没有和含义的对应关系;其次,语言中的词汇本身的含义也是用语言来解释的,这种层层解释,最终会落实到人类常识和人类个体的感官经验上,因此可以被人所理解,而数并不能解释数;最后,语言是开放系统,可以不断地容纳新的含义进来,而数必须在封闭系统里才能获得明确的含义,前面提到的代码表和测量值都是如此,没有封闭的代码空间和测量系统,那些数字就没有任何意义。语言的开放性来自语言可以自我解释,并且可以求助于人类常识和感官体验这样的语言系统之外的奇迹,而数字二者都不具备。



3. 数据的结构

数和数据的解释


上次谈到语言和数据的关系,语言之所以有含义,一来是词汇本身与含义建立了联系,二来也是因为语言本身具有结构,语音和文字具有简单的一维顺序结构,语言中的空间词隐喻了词汇所代表的概念的空间结构,这些不同抽象层次的结构最终与人脑中的概念结构形成某种映射,使人得以理解语言的含义。数据本身没有语言中词汇那么强的与含义的关联,因此需要更多的结构才能使人建立起数据和概念体系之间的映射,达成对数据含义的理解。语言中最基础的一维结构是清晰明确的,而更抽象的隐喻结构是不明确的,模糊的;相比之下,数据各种层次的结构都是明确清晰的,并且没有抽象层次的差别,在所有的维度上都是等同的(数据虽然也可能存在隐喻,但那和语言的隐喻没有本质区别,不是数据所特有的)。

记得最初开始编程的时候就知道一句话:算法加数据结构等于程序。结构化的数据既是一切软件的输入,也是一切软件的输出,任何软件所能做的事情就只是把一批数据变成另一批数据。数据结构是程序对数据的要求,因为要对正确的数据进行正确的处理,从而得到正确的结果,所以程序必须知道正确的数据在哪里。数据本身是没有特征的,在计算机中唯一能对数据进行区别的线索就是数据放置的位置,程序所能做的无非就是“从第六个存储单元取一个浮点数,和从第十八个存储单元取出来的整数相乘,把结果放到第三十九个存储单元去”这样一类操作。然而对于人类编程者来说,这种操作方式非常不方便,因为在人类头脑中,世界并不是一个个、一列列的数字,而是一个个具体的对象。虽然在尼奥眼中数字就是对象,但他是救世主,我们普通人可做不到,所以为了把普通人眼中所见、心中所想用程序表达出来,俺们这些可怜的屌丝程序员想到了把对象和数据联系起来的方法,就是把和一个对象有关的所有数据打成一包,全都放在一起。前一篇已经说到,为了让数据便于和含义相联系,可以用语言给数据打上标签,在把数据按对象包装起来的时候,这种标签变得尤其必要,因为包里面的数据是没有确定的顺序的,如果没有标签就无法知道每一个数据到底应该怎么用。打包这事说起来简单,其实还是有很多花样的,比如包的内容和大小是不是确定的就有巨大的差别,如果确定了包中的内容,就不需要分别在每个包里面给数据打语言标签了,只需要一个对标签顺序的约定,这个约定编程圈黑话一般叫“类型”,当然各个分舵叫法都不太统一,java那边叫“类”,C那边叫“结构”,SQL那边叫“表”。有些编程语言死脑筋,只能处理确定内容的包,这就是所谓“强类型”语言,死脑筋的好处是即使傻傻分不清楚,也不会出问题,因此至今仍广受欢迎。

在使用了对象包装数据之后,程序员们终于不用再把自己训练成尼奥了,不过他们的好日子没有持续多久,很快成千上万的对象就朝他们砸过来,面对此情此景,俺要先撤了,下次再解决这个问题吧。


4. 数据的流动、消费与转化

数和数据的解释


上次说到,程序员们把数据按照对象打成包,以此为单位处理数据。这种方法进一步发展,就形成了所谓面向对象的方法。面向对象的方法非常有效,尤其是在静态类型的场合,对确定的类型使用确定的算法,得到确定的结果。由于不再需要花很多精力去保证正确的程序处理了正确的数据,因此编程的重点就转移到对每一种具体的类型,以及各种类型之间的关系的处理上来。所幸类型、对象、关系都很复杂,所以程序员至今还有事可做,并且数据越多,类型和关系也就越多,因而这些工作就越复杂,甚至复杂到连程序员也没办法搞清楚的程度。

类型是对数据的一种抽象,代表着一类数据所共同具有的模式,从这个角度说,类型应该从数据中来;然而实际的数据处理常常相反,先有类型然后才有数据。在软件开发这个行当里,这种先入为主长期被视为理所当然,数据的各种复杂问题很多也是由此而来。造成这种情况有其历史的原因,因为最初没有数据,早期的信息系统一项最重要的功能就是产生数据。在没有数据的时候,设计系统当然是先入为主的,设计者只能凭想象勾画出数据的特征。这样一来,最初的数据类型是由很多各自独立的软件设计者各自想象出来的,每个人的类型系统都是他特有的知识结构决定的,每个人的知识结构自身能够达到自洽尚且可以做到,而不同人的知识结构放到一起要形成一个自洽的体系几乎是不可能的(进一步说,这是因为人与人交流的信息带宽太小造成的,整合不同人脑中的知识所需要的带宽是至今为止任何人与人交流方式都无法满足的)。因此要把不同人设计的类型系统结合到一起,甚至把同一个人在不同时期设计的类型系统结合到一起,都是一件困难的事情。然而,把各种不同的系统连接起来又有着现实的需求,并且这种需求随着互联网的普及越来越强烈,为了满足这些需求,可怜的程序员们想出了各种各样的办法。

最简单直接的办法就是人工编写一组规则,给两个不同的类型系统之间建立起一个转换接口,具备足够知识的人确实可以理解他人设计的类型系统,并实现正确转换,但是随着系统数量的增多,这种方法面临接口爆炸的问题,因为是两两转换,接口的数量(Cn2)增长远远快于系统数量(n)增长。既然点对点转换会产生接口爆炸,很自然人们想到了集中式方法,星形网络不会接口爆炸,所有的系统都统一转换到一套标准的类型体系是不是就解决问题了呢?然而我们前面已经说过了,这是不可能的,人类中的哪个成员也完成不了这个任务,构建统一类型系统的努力注定是没有结果的。在经历了挫折之后,人们只好承认这一点,并且从理想的全面整合后退到了务实的部分整合,弱化类型的影响,因此各种弱类型语言在今天大行其道,就是由此造成的。



5. 数据的含义、解释与呈现

数和数据的解释


20年前的软件主要用来制造数据,那时候数据很少,上千万行的关系数据库表就已经是世界级水平了,只有银行电信这种高大上的行业才会用到。而今,别说千万了,千亿似乎也算平常水平。对于PB级数据来说,如果一个对象数据量为1k,那么至少有一万亿个对象,当然从逻辑上看,这些数据可能表达的不是一万亿个对象,而是少数对象的总共一万亿个历史状态,这些状态数据是信息系统日复一日年复一年不停制造出来的。为了处理大量数据,首先想到的办法是把数据集中存储,统一管理,就像对待各种货物一样。

最初的数据库确实是按照仓库设计的。在传统的关系数据库中,每一个值都被摆到一个三维空间的网格中的一个格子里,三个维度分别是列、行、表。如果数据在时间上变化了,就直接把格子里换成变化后的新值。这是一个以格子为中心的设计,格子基本不变,而里面的数据经常变化。这也是一个没有历史的设计,仓库只关心现在存了什么,不关心以前存过什么,因为货物的价值只在它们本身,历史上的东西已经不是东西了。既然是以格子为中心,那么节约格子就成了要务,任何企图多占格子的行为都是不被允许的,每个数据库设计者都被谆谆教诲,好的设计就是没有冗余,每条数据仅止出现一次。但是在实践中这是完全没有保证的,因为这样的数据库系统只管格子,不管格子里存的内容,如果不同的格子放着相同的值,那是完全没有问题的。在应用设计上,对于一些经常出现的高频值,会编入代码表,但每个应用都有各自的代码表,而转换为代码之后,看起来绝不相似,无法自动合并。

事实上,有意义的值是很少的,因为意义总是人赋予的,地球上有史以来存在过的人类总数据说在一千亿左右,如果每人每天说1000句话,那么有史以来人类讲过的话也不过几百PB,人类书写的各种符号就更少了,因为书写总比讲话困难,并且其中可能还有80%是重复的,诸如“您吃了吗”之类,以至于数量级还会进一步降低。对于数值类的值,虽然理论上各种数域都可以是无穷的,可能存在无穷多个值,但是实际上,有意义的值是很少的,因为意义总是人类赋予的,人给一个值赋予意义总要表达一下,就算每次都能一句话讲明白了,也仅能给所说的话想等数量级的值赋予意义,事实上也是这样,体温计产生的值总是在35.0到42.0之间,北京的气温总是在-20到+45之间,有理数集的无限可能对于实际产生的数值个数并无什么帮助。所以穷尽所有有意义的值并存储下来,对每个值给予一个固定编址是可行的,今天的技术已经能将其实现。

真正困难的事情是找到值的意义,也就是在巨大而复杂的知识网络中定位到值所关联的概念和对象。前面已经说了,传统的数据库中,格子就代表意义,不同的格子可以存储相同的值,但是数据库系统只关心格子,从格子找到值容易,从值找到格子,如果不是根本不可行,也是极为困难。但是对于传统的应用,这似乎不是问题,因为值在产生的时候已经被赋予了意义,并且对值的任何操作之前几乎总是已经确定了它所在的那个格子。唯一一个例外的情况是搜索,搜索是按照值找格子的过程,但是在传统的信息系统里,搜索是很少的,并且简单到只对单一对象类型进行。这也是为什么某个以搜索为核心业务的企业会颠覆传统的数据库理念的原因,因为这类企业对于从值找格子这种在传统看来非主流的逆向操作有着巨大、复杂而且迫切的需求。



6. 数据、信息、知识


value是数据,自由形式。value可穷尽。

key是标签,属于受控集,连接计算和数据计算系统是数据变换系统,输入一组数据,输出另一组数据,把小的计算系统连接起来,组成大的计算系统,本质上就是把各个小系统的输入输出进行对接。

计算系统不产生含义,最初的输入和最终的输出都指向系统外,通过硬件设备传递给人类,才能产生含义。因此可视化是产生含义的主要方法,显示屏是主要输出设备。

计算系统的自由组合是建立通用的问题求解系统的前提。

封闭系统不需要key,编译型语言以位置(偏移量)区分数据。

强类型语言中变量和常量名是key,同一系统的开发者之间以此作为约定,编译后key即消失开放系统中,key是数据与计算的连接点,是开发者之间的约定,鸭子原则是明确的证据。

对key的约定在特定领域中相对来说更有效,领域越窄越有效,因此可以定义DSL。

领域越窄,形式化程度越高,足够窄的领域可以忽视常识的作用,因此DSL有效。

创新首先要打破知识的形式化系统,引入常识,越保守的领域越适合DSL,例如银行系统。

数据库也是一种基于key的数据组织结构,因此传统上用强类型语言开发的封闭式系统之间的互联常常基于共同的数据库,这些系统中以数据库中的key作为约定。

key是连接数据与计算模型的主要手段,此外value本身也包含一部分适配计算模型所需的信息。

key-value的空间排列组合,形成更大的数据结构,称为对象。

对象是分形数据结构的基本单元。数据结构是对value的空间组织方式。

基于表单的信息系统中,数据和数据在用户界面上的展现方式是同构的,不需要进行空间变换,基于空间模拟的系统(2D或3D)中,需要进行输入数据结构的空间变换,UI的空间模型与数据结构没有明显的相关性。

做数据是什么意思啊(粉丝做数据是什么意思啊)

本文内容转载互联网,如发现本站有侵权/违法违规的内容,联系站长,将立刻删除。

标签推荐

相关文章

网友评论