資料是什麼——更多的資料

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

上次說到,程式設計師們把資料按照物件打成包,以此為單位處理資料。這種方法進一步發展,就形成了所謂物件導向的方法。物件導向的方法非常有效,尤其是在靜態型別的場合,對確定的型別使用確定的演算法,得到確定的結果。由於不再需要花很多精力去保證正確的程式處理了正確的資料,因此程式設計的重點就轉移到對每一種具體的型別,以及各種型別之間的關係的處理上來。所幸型別、物件、關係都很複雜,所以程式設計師至今還有事可做,並且資料越多,型別和關係也就越多,因而這些工作就越複雜,甚至複雜到連程式設計師也沒辦法搞清楚的程度。 型別是對資料的一種抽象,代表著一類資料所共同具有的模式,從這個角度說,型別應該從資料中來;然而實際的資料處理常常相反,先有型別然後才有資料。在軟體開發這個行當裡,這種先入為主長期被視為理所當然,資料的各種複雜問題很多也是由此而來。造成這種情況有其歷史的原因,因為最初沒有資料,早期的資訊系統一項最重要的功能就是產生資料。在沒有資料的時候,設計系統當然是先入為主的,設計者只能憑想象勾畫出資料的特徵。這樣一來,最初的資料型別是由很多各自獨立的軟體設計者各自想象出來的,每個人的型別系統都是他特有的知識結構決定的,每個人的知識結構自身能夠達到自洽尚且可以做到,而不同人的知識結構放到一起要形成一個自洽的體系幾乎是不可能的(進一步說,這是因為人與人交流的資訊頻寬太小造成的,整合不同人腦中的知識所需要的頻寬是至今為止任何人與人交流方式都無法滿足的)。因此要把不同人設計的型別系統結合到一起,甚至把同一個人在不同時期設計的型別系統結合到一起,都是一件困難的事情。然而,把各種不同的系統連線起來又有著現實的需求,並且這種需求隨著網際網路的普及越來越強烈,為了滿足這些需求,可憐的程式設計師們想出了各種各樣的辦法。

最簡單直接的辦法就是人工編寫一組規則,給兩個不同的型別系統之間建立起一個轉換介面,具備足夠知識的人確實可以理解他人設計的型別系統,並實現正確轉換,但是隨著系統數量的增多,這種方法面臨介面爆炸的問題,因為是兩兩轉換,介面的數量(Cn2)增長遠遠快於系統數量(n)增長。既然點對點轉換會產生介面爆炸,很自然人們想到了集中式方法,星形網路不會介面爆炸,所有的系統都統一轉換到一套標準的型別體系是不是就解決問題了呢?然而我們前面已經說過了,這是不可能的,人類中的哪個成員也完成不了這個任務,構建統一型別系統的努力註定是沒有結果的。在經歷了挫折之後,人們只好承認這一點,並且從理想的全面整合後退到了務實的部分整合,弱化型別的影響,因此各種弱型別語言在今天大行其道,就是由此造成的。

相關文章