資料是什麼——資料的結構

趙丹 Diana Zhao發表於2014-02-14

上次談到語言和資料的關係,語言之所以有含義,一來是詞彙本身與含義建立了聯絡,二來也是因為語言本身具有結構,語音和文字具有簡單的一維順序結構,語言中的空間詞隱喻了詞彙所代表的概念的空間結構,這些不同抽象層次的結構最終與人腦中的概念結構形成某種對映,使人得以理解語言的含義。資料本身沒有語言中詞彙那麼強的與含義的關聯,因此需要更多的結構才能使人建立起資料和概念體系之間的對映,達成對資料含義的理解。語言中最基礎的一維結構是清晰明確的,而更抽象的隱喻結構是不明確的,模糊的;相比之下,資料各種層次的結構都是明確清晰的,並且沒有抽象層次的差別,在所有的維度上都是等同的(資料雖然也可能存在隱喻,但那和語言的隱喻沒有本質區別,不是資料所特有的)。 記得最初開始程式設計的時候就知道一句話:演算法加資料結構等於程式。結構化的資料既是一切軟體的輸入,也是一切軟體的輸出,任何軟體所能做的事情就只是把一批資料變成另一批資料。資料結構是程式對資料的要求,因為要對正確的資料進行正確的處理,從而得到正確的結果,所以程式必須知道正確的資料在哪裡。資料本身是沒有特徵的,在計算機中唯一能對資料進行區別的線索就是資料放置的位置,程式所能做的無非就是“從第六個儲存單元取一個浮點數,和從第十八個儲存單元取出來的整數相乘,把結果放到第三十九個儲存單元去”這樣一類操作。然而對於人類程式設計者來說,這種操作方式非常不方便,因為在人類頭腦中,世界並不是一個個、一列列的數字,而是一個個具體的物件。雖然在尼奧眼中數字就是物件,但他是救世主,我們普通人可做不到,所以為了把普通人眼中所見、心中所想用程式表達出來,俺們這些可憐的屌絲程式設計師想到了把物件和資料聯絡起來的方法,就是把和一個物件有關的所有資料打成一包,全都放在一起。前一篇已經說到,為了讓資料便於和含義相聯絡,可以用語言給資料打上標籤,在把資料按物件包裝起來的時候,這種標籤變得尤其必要,因為包裡面的資料是沒有確定的順序的,如果沒有標籤就無法知道每一個資料到底應該怎麼用。打包這事說起來簡單,其實還是有很多花樣的,比如包的內容和大小是不是確定的就有巨大的差別,如果確定了包中的內容,就不需要分別在每個包裡面給資料打語言標籤了,只需要一個對標籤順序的約定,這個約定程式設計圈黑話一般叫“型別”,當然各個分舵叫法都不太統一,java那邊叫“類”,C那邊叫“結構”,SQL那邊叫“表”。有些程式語言死腦筋,只能處理確定內容的包,這就是所謂“強型別”語言,死腦筋的好處是即使傻傻分不清楚,也不會出問題,因此至今仍廣受歡迎。

在使用了物件包裝資料之後,程式設計師們終於不用再把自己訓練成尼奧了,不過他們的好日子沒有持續多久,很快成千上萬的物件就朝他們砸過來,面對此情此景,俺要先撤了,下次再解決這個問題吧。

相關文章