編碼的起源#

  • 編碼早在電子計算機發明前就存在了:文字、數字、名字、街道名稱、化學符號、數學方程等都是對信息的編碼
  • 計算機使用的編碼和人類日常使用的編碼有本質區別

人類編碼的特點#

  • 從具體到抽象的演變:人類的編碼是從具體的描述中逐漸抽象出來的,不斷增加和改變
  • 允許重複:父母取名時只要好聽有意義就行,很少考慮重名問題
  • 主要考慮是否好記:人在對不同對象編碼時,主要考慮是否好記,而非效率
  • 例如地址編碼源於對地區特徵的描述,如北京的西三旗、甜水井胡同等

郵政編碼的演變#

  • 英國人發明了郵政編碼,用不重複的字母對地區編號、細分,使每個地區都有唯一的編號
  • 早期設計只考慮了當時(19 世紀)的問題,後來需要不斷增加和改變
  • 這是人類思維方式的典型——從解決當前問題出發,逐步演化

計算機編碼的特點#

  • 從一開始就是抽象的:先根據需要區分的對象數目設計好編碼,再把真實世界裡的對象對應到某個編碼中
  • 不允許重複:互聯網上的網站名、計算機外圍設備接口的名稱都不能重複
  • 以效率為優先:計算機編碼是有意識地被設計出來的,設計時進行了通盤考慮
  • 一旦確定就很難改變:無論是軟體還是硬體,一旦編碼方式設計完成,就很難改變。因此設計之前要把各種情況考慮清楚

IP 地址的例子#

  • IPv4 用四組 0 ~ 255 的數字來標識全球每一台服務器
  • 當年設計時預留了 40 億個編號,如今已不夠用,正在推廣 IPv6
  • 計算機內部的編碼人可以「理解」,但人看了後很難明白其含義

優秀從業者需要做到的兩點#

  1. 暫時忘記人類的思維習慣,站到計算機的角度來設計編碼
  2. 善於建立橋梁,實現計算機內部抽象編碼和人能夠理解的形象編碼之間的一一對應關係

在計算機行業裡,從業者有無經驗常常體現在動手開幹之前,能否站在計算機的角度審視一遍自己的想法。這是四級工程師和五級工程師的差異。

二進制編碼的優勢#

  • 計算機內部使用二進制是很有道理的,因為世界上所有的信息都可通過二分的方法來確定,而且效率很高
  • 用 0 和 1 的組合就能對各種信息和對象進行編碼
  • 在計算機內部,二進制所代表的編碼容易通過開關電路來產生、輸出和辨識
  • 高級語言(如 C、C++ 和 Java)的發明,是為了彌補機器語言不夠直觀的缺陷,連接人的解題步驟編碼和機器解題步驟編碼之間的橋梁

要點#

  • 人對目標的編碼是一個漸漸演變所得到的結果,以方便為目的;而計算機的編碼要爭取一次性儘可能考慮清楚所有情況,以效率為目的
  • 它們之間經常需要一座橋梁來連接