編碼(Encoding, coding, ...)
將信息由一種形式轉變成另一種形式的過程。
寫了這么久的程序,一直以來都是關注某個具體的技術、算法等,從來沒有認真考慮過編碼這個活動本身。
記得最早接觸編碼,是小時候看二戰的片子,里面經常提及一個詞“莫爾斯碼”。那時也不懂這些,只是覺得這玩意應該很難,不是一般人能hold住的。
接下來就是玩學習機的時候,機器包裝上赫然寫著“支持XX碼” ...
之后,在上大學之前,就再沒有遇到過“編碼”相關的信息了(其實考試用的答題卡也算是編碼活動的一部分)。
編碼的誕生
我沒有去考證最早的編碼活動起源于何時,因為人類的很多活動(比如,在草繩上面打結用以計數)都能算作編碼。
古時候,人們交流是不需要作什么處理的。
近距離的時候,可以直接對話;(語音的方式)
稍遠的時候可能托人帶個口信;(語音的方式)
再者,可以寫封密函八百里加急。(文字的方式)
這些都可以將信息從一方傳遞給另一方。
但是后來,人們遇到了一些特殊情況,比如戰爭。這時候采用以前的做法,直接寫信或者帶口信的作法會由很大的風險。于是,“暗號”,“口令”之類的加密技術也應運而生。
除了發電報之外,大部分人能夠接受的例子就是旗語。
旗艦上通過揮舞旗幟來傳遞指令給別的艦船,不同的動作代表不同的含義。這期間,人們將指令轉換成揮舞旗幟的動作序列,這是個很典型的編碼活動。之所以要使用旗語,是因為那個時候,船只之間的交流不可能隨時使用語言對話的方式。而且,同一個艦隊可以使用旗語傳遞敵人所不解的信息,因為敵人不知道該艦隊的旗語規范("編碼方式")。
所以,旗語這種適合船只溝通的「編碼」方式,在很長一段時間內被廣泛采用。
還有一個例子,就是我們碼農寫代碼這個活動。
通俗一點地講,碼農們需要根據編碼規范,編寫正確的代碼,然后經由「翻譯員」---編譯器(以及它的一些黃金搭檔、好基友)將代碼翻譯成機器能夠「理解」的內容,機器在收到這些處理過的信息之后便可以按照既定設計去完成信息里所描述的操作。
寫代碼這個活動,可以看成碼農和機器的交流!
因為信息傳遞方和接收方對于信息的傳遞形式和接收形式都是有所約束的。機器只能識別一系列的電信號,而人類更愿意使用“書面”等易于人類理解和表達的形式傳遞信息。所以,計算機科學家們便發明了代碼、機器碼以及編譯器、鏈接器等一系列的編碼規范和工具來促進人和機器的“交流”。
從前面的例子里我們應該可以得出一個初步的結論,編碼的出現,是因為人們出于種種原因,需要對信息進行形式轉換來傳遞所進行的發明。
我覺得《信息論》作者香農對于通信的定義是比較準確和值得借鑒的。他說,通信就是信息的再現。這里,我們可以延伸一下。再現的形式不一定是信息最初始的形式,而是目標能夠理解的形式。這個理解同樣適用于編碼,這個與通信關聯緊密的活動。
(以上,待續 ...)
「推薦閱讀」
參見本專題的推薦閱讀專欄文章