Pulpcode

捕获,搅碎,拼接,吞咽

0%

让你的话更有信息熵

信息熵本身是信息论之父克劳德·香农提出的对信息量化的方式,类似你读了一本书,那么这本书有多少的信息量,用信息熵就可以来表述。

即使你没有听过信息熵这个词,你一定听过热力学中的“熵”,这个熵用来度量“体系混乱程度”。简单的来说,你一定记得在能量守恒定律中学到的, 在孤立系统中,体系与环境没有能量交换,体系总是自发地像混乱度增大的方向变化,总使整个系统的熵值增大。所以说如果整个宇宙是一个孤立的系统,那么可以说宇宙的熵也是越来越大的。

信息熵的概念和这个有些关联关系,但也不完全相同,并且还有很多有趣的东西,我们之前学到的很多知识都可以用信息熵的思路去解读。

比如“信息的基本作用是消除人们对事物的不确定性。”。所以我们在交流的时候,或者说在传递信息的时候,其实是在消除这种不确定性。
但是有些事情其实是很确定的,比如你对我说:”太阳从东方升起“,那这句话就没什么信息量,因为这是大家都知道的事情。所以可以说这句话没有消除任何的不确定性,所以它的信息熵很低。也就是说,一句话的信息熵越高,那么它所包含的信息量就越大。这看上去和物理学中的熵有点相反,因为信息就是负熵Negtrophy。所以“信息数据”越集中的地方熵值越小(确定性很高), “信息数据”越分散的地方熵值越大(确定性很低)。两者是没有矛盾的。

那么我们如果从提高信息熵的角度来分析问题,将会有很多思路。但是你可能认为我这篇博客就是要告诉你说话要有含量,有内容。然而事实上并没有那么简单,否则我这篇博客的信息熵很低。

程序命名

不要小看写程序的时候,命名这件事,因为命名这件事在很大程度上确定了一个程序员的思路是否清晰。

比如你不加思考的给一个程序变量命名,那肯定命名出来都是:

1
2
3
4
5
6
7
a
b
i,j,k
v1, v2
result
tmp
data

而这些命名都是没有任何信息含量的,说白了你从变量名中获得不到任何有用的信息。自从我在阅读了《编写可读代码的艺术》这本书之后,我也尝试去认真的写一些有信息的命名。

比如这种tmp,result的命名,太过分空泛。命名最好明确表现出这个变量的用途。

比如data_urlenc,这就可以表达,这是一个“以url方式编码”的输入数据。

这本书还提到,用两个指针,指向一个闭区间的两边时,应该是用first和last,因为它明确的表示,少于切包含。然而对于我们在遍历一个数组的时候,往往最后一个位置是不要遍历的(因为第一个元素是0),所以应该用begin和end这样的命名,来表示超过的最后一个值。

同样,我们在给函数命名的时候,经常会用类似:do,get,make,find,send。这些动词就完全没什么表现力。

比如如果你的函数是要从远程服务器获取文件,那相比get_page,使用fetch_pagedownload_page要好很多。

想比于make,使用create,set up, build, generate, compose, add ,new 就要好很多。

看,当你认真的去设计这些变量的命名和函数的命名时,你才真正的开始思考,这个函数是否有必要。这几个功能是否可以封装到一起。我应该如何重构这部分代码。

发周报

我之前不是很会发周报,发的内容都是类似“我这周做了很多事情,改了A系统,又改了B系统”,这样的话,可以看到这些话完全没有什么信息熵。后来我从dota的更新日志中获得了一些灵感。dota的更新日志看上去都是这样的:

近战兵营的团队金钱奖励从175提高到275
远程兵营的团队金钱奖励从100提高到225
远古黑龙的金钱奖励从199降低到170
远古黑蜉蝣的金钱奖励从50降低到40

其实后来我发现,这些更新日志看上去很精简,但所表达的内容都非常的精确,后来我在发周报的时候,也进行了一些效仿:

移除了x系统获得xx数据的解析,耗时从50ms下降到40ms。
添加x功能到y系统,使得z系统可xxx。

看都是些“动词配名词,来表达做了一个什么动作,然后是带来的效果,来表达动作的效果”。然而就是一个这样的小动作,让我的周报变得非常清晰。

电影剧本

“真正的导演大师,不会放过每一帧”。很多优秀的导演,比如黑泽明,他的电影值得你反复的去看,因为你看得越细,越发现,他的每一个镜头,都有特殊的意义,透露更多的信息。而不像许多电影,仅给你讲了一个故事而已,你看完之后,也就没啥可挖掘的了。

最近在学习摄影,所以对构图比较感兴趣。比如在《七武士》这个镜头中,导演在这个镜头,近景安排了 勘兵卫和菊千代,中景安排了 胜四郎,然后在远景安排了几个农民,这算是从镜头的方式,表达出,这三个人都对勘兵卫 有某种需求,故事线也将围绕这几个人展开。

3d

不仅仅是镜头,一部好的电影剧本,开场的几个镜头和人物对话,就能给观众,表达清楚故事背景,人物关系。而普通的电影,开场更多是为了吸引观众,而弄些花里胡哨的东西,搞得你看了半天也不知道这个片子到底在讲什么。

再比如有的电影,拍风景就是拍风景,拍人物对话就是拍人物对话,但是好的电影,每一个风景,都有特殊的表达用意,可能是烘托主角的内心变化。而在拍人物对话的时候,坐姿,站位,脸上的打光,都能暗示心里活动或是人物关系之类的东西。

幽默

就算是幽默本身,也需要提高信息熵,因为这样能更加提高你这句话的幽默程度。

比如就拿我最近发的一段说说而言,其实是我自己编的一个段子:

pm之美我者,插需求也,rd之美我者,偷偷上线bug也,qa之美我者,测试环境没数据也。

其实如果你是随便写的这样一个段子,没有经过加工,那可能会是:“pm之美我者,做需求也,rd之美我者,上线需求也,qa之美我者,测试需求也。 ”

这一个就是很普通,没带什么信息量的段子,就是简单的将每一个人的职责进行映射。但是我之前编的段子就不一样了,“插需求”,“偷偷上线bug”,这都是对某个不爽的事,进行具体的描述,所以幽默的效果自然要优雅很多。

再回到之前那个“太阳从东方升起 ”这句话的信息熵含量很低说起,其实如果你在劝说别人的时候,如果没能说出应该怎么做的具体步骤,而是简单的讲一些大道理,这就让人很反感,因为这仿佛就在跟别人说,“太阳从东方升起。”,所以我们从小就反感,父母,老师或者领导给我们讲一些大道理。

然而我们在平常的时候,其实是很容易说“废话”的,这是因为比起说一些精炼的,信息熵高的话,说废话要容易的多,而且不费什么脑子,这也就是为什么如果你自己由着性子写一遍文章,那么文章里很容易出现一堆,“好,很,非常,特别”这样很泛泛的词。

我一直在想,这其实是人类的天性,我们在收到有价值的信息时,会不由自主的兴奋起来,同时天生就反感那些没什么信息含量的东西。这是因为进化的选择,肯定希望我们之间在传递信息的时候,能够高效的沟通。这样才能更好的提高自己生存的可能性。比如在猿人的时候,高效的沟通,消除不确定性,才能更好的狩猎,躲避危险。即使在今天这条规律一直没变过。所以在今后与人聊天的方方面面,都要试着提高自己的信息熵。

informationentropy