编程的本质到底是什么?我觉得《编码》这本书把编程的本质说透了。

https://www.zhihu.com/question/413423522/answer/1479627568

https://www.zhihu.com/zvideo/1552290881658716160

编码,就是编程的本质。而计算机编程,最重要的编码当然是二进制编码了。有意思的是,编码不局限于计算机,正如《编码》一书中专门用了一章所介绍的盲文那样,布莱叶盲文系统也是一种二进制编码,因为每个盲文单元由 6 个点阵构成,每个点位不是凸起的就是平的,可以对应于计算机二进制编码中的 1 和 0。布莱叶盲文系统,之所以说它是一个系统,原因是解决了视觉障碍人士使用触觉阅读和书写的难题。

我本觉得自己离盲文很遥远,然而在读了《编码》一书,了解了布莱叶盲文系统设计的精妙之处以及和计算机编码的相通之处后,就对它很感兴趣了。它是由法国的一个盲人小伙子路易斯•布莱叶(Louis Braille)发明的,真了不起!

得到App_2022-09-11_14-34-10.png

有意思的是,在对它感兴趣之后,就发现布莱叶盲文其实无处不在了!比如,我发现每天上下班乘坐的电梯上,其实就有布莱叶盲文呀,而且非常显眼,但在了解它之前,就只是视而不见。

image.png image.png

每个布莱叶盲文单元由 6 个点组成,并且每个点有平和凸两种状态。

image.png

因此 6 个可平可凸的点组合数就是 2 x 2 x 2 x 2 x 2 x 2,即 2^6,也就是 64。所以布莱叶盲文系统能够表示 64 个不同的码字。下图展示了全部可能的 64 个码字,粗的黑点表示凸起,而细黑点表示平的点位。

image.png

布莱叶盲文系统的精妙之处在于,它并不是将每个码字对应某个字母,而是有一个树形的分级结构,从而可以用很少的组合来表达大量的信息。每个码字身兼多种含义,根据上下文可以表示不同的内容。有趣的是,和计算机键盘一样,有些码字像大小写切换键一样,可以表示改变后面字母的大小写。另外还有表示转义的码字,这对程序员来说一点儿也不陌生。因此,学习了布莱叶盲文是有助于学习编程的。实际上,盲童不仅要学习如何阅读盲文,他们还要用特殊的“纸”和“笔”学习写字,这个过程有点像最初的程序员使用打孔纸编写计算机程序。

当你看到这些码字时,不知道能想到什么?骨牌?乐高积木?

盲童学习盲文的过程,实际上比较枯燥,需要反复触摸记忆。而使用乐高积木,可以帮助他们在玩乐中学习,就会有趣多了。事实上,乐高公司专门开发了乐高盲文积木,使用的正是布莱叶盲文系统。

IMG_6817.jpg

IMG_6816.jpg

IMG_6815.jpg

它的封面设计是一个手电筒,寓意是为有视觉障碍的人们照亮五彩斑斓的世界。有趣的是,手电筒发出的光,也可以采用编码而组成一些可以编程的信息,《编码》一书中也专门有一章来讲解如何制作手电筒,并以此为起点,直到构建出一个完整的计算机甚至因特网!

我用乐高盲文积木拼出了自己名字的拼音,感觉在拼搭过程中,逐渐熟悉布莱叶盲文系统,不仅高效,而且有趣。

IMG_6820.jpg

在计算机软件世界里,系统是最高的抽象层次,代表了能够提供价值的东西,也就是解决了某一类问题的东西。而布莱叶盲文系统,解决了视障人群的书写和阅读难题,改变了世界,提供了无法估量的价值。从这个意义上说,路易斯•布莱叶也是一位了不起的程序员!

而乐高盲文积木,给这个系统带来了乐趣,也温暖了这个世界。