编码(Encoding, coding, ...)
将信息由一种形式转变成另一种形式的过程。
写了这么久的程序,一直以来都是关注某个具体的技术、算法等,从来没有认真考虑过编码这个活动本身。
记得最早接触编码,是小时候看二战的片子,里面经常提及一个词“莫尔斯码”。那时也不懂这些,只是觉得这玩意应该很难,不是一般人能hold住的。
接下来就是玩学习机的时候,机器包装上赫然写着“支持XX码” ...
之后,在上大学之前,就再没有遇到过“编码”相关的信息了(其实考试用的答题卡也算是编码活动的一部分)。
编码的诞生
我没有去考证最早的编码活动起源于何时,因为人类的很多活动(比如,在草绳上面打结用以计数)都能算作编码。
古时候,人们交流是不需要作什么处理的。
近距离的时候,可以直接对话;(语音的方式)
稍远的时候可能托人带个口信;(语音的方式)
再者,可以写封密函八百里加急。(文字的方式)
这些都可以将信息从一方传递给另一方。
但是后来,人们遇到了一些特殊情况,比如战争。这时候采用以前的做法,直接写信或者带口信的作法会由很大的风险。于是,“暗号”,“口令”之类的加密技术也应运而生。
除了发电报之外,大部分人能够接受的例子就是旗语。
旗舰上通过挥舞旗帜来传递指令给别的舰船,不同的动作代表不同的含义。这期间,人们将指令转换成挥舞旗帜的动作序列,这是个很典型的编码活动。之所以要使用旗语,是因为那个时候,船只之间的交流不可能随时使用语言对话的方式。而且,同一个舰队可以使用旗语传递敌人所不解的信息,因为敌人不知道该舰队的旗语规范("编码方式")。
所以,旗语这种适合船只沟通的「编码」方式,在很长一段时间内被广泛采用。
还有一个例子,就是我们码农写代码这个活动。
通俗一点地讲,码农们需要根据编码规范,编写正确的代码,然后经由「翻译员」---编译器(以及它的一些黄金搭档、好基友)将代码翻译成机器能够「理解」的内容,机器在收到这些处理过的信息之后便可以按照既定设计去完成信息里所描述的操作。
写代码这个活动,可以看成码农和机器的交流!
因为信息传递方和接收方对于信息的传递形式和接收形式都是有所约束的。机器只能识别一系列的电信号,而人类更愿意使用“书面”等易于人类理解和表达的形式传递信息。所以,计算机科学家们便发明了代码、机器码以及编译器、链接器等一系列的编码规范和工具来促进人和机器的“交流”。
从前面的例子里我们应该可以得出一个初步的结论,编码的出现,是因为人们出于种种原因,需要对信息进行形式转换来传递所进行的发明。
我觉得《信息论》作者香农对于通信的定义是比较准确和值得借鉴的。他说,通信就是信息的再现。这里,我们可以延伸一下。再现的形式不一定是信息最初始的形式,而是目标能够理解的形式。这个理解同样适用于编码,这个与通信关联紧密的活动。
(以上,待续 ...)
「推荐阅读」
参见本专题的推荐阅读专栏文章
网友评论
我会持续改进~~