about 4 years ago

ver 2, 20140607

治疗前

治疗后

0.

写一篇文章就像写一段代码.

1.

在写作的时候, 我的脑子里是有一坨"全局变量"的. 这些全局变量是我已掌握的知识.

在阅读的时候, 读者脑子里全局变量跟我的不一定一样(或者说, 一定不一样), 所以[很]可能出现这两种情况:

1.1. 有个全局变量在读者那里没有, 于是ta不知道我在说啥.

譬如, 如果我不解释 "这些全局变量是我已掌握的知识" 这一句, non-programmer 们就不知道我在说啥.

如果我不解释 "non-programmer" 是什么, non-programmer 们中英语不好且不爱搜索的家伙就不知道我在说啥.

1.2. 有个全局变量在读者和我那里的含义不同, 于是我俩的后续理解就岔开了.

譬如, "代数几何". 初中生会理解为代数和几何; 高中生脑洞大一点会理解为解析几何, 还有一群人会理解成 R.Hartshorne 的《代数几何》.

我在从网上看到过以上三者的对比图, 但是找不到了. 有人留下那图了吗?

1.3. 哦对了, "从网"这个名字, 如果读者没有在全局变量里把它绑定到 "renren.com" 这个对象的话, 在试图理解这句话的时候, 很可能就把 "我在从网上看到过" 自动纠错, 变成 "我从网上看到过".

还好这个歧义不是很严重. 或者说作者和读者在这句话上的语义距离 (我瞎编的概念) 不太远.

这是一种类似 "数组越界, 访问到不该访问的内存" 的情形...

2.

所以啊, 所以, 在写作的时候也应该定义一些"局部变量".

也就是说, 把文章中用到的, 且可能引起歧义的概念一一列出("声明"), 一一解释("初始化"), 让读者的理解接近作者的理解, 从而达到一定程度上的歧义消除.

局部变量法还可以防止这种情形:

2.1. 在定义一个概念之前, 使用一个概念.

李文生老师的《编译原理与技术》里犯了很多这种问题. 去年我整了一个该书的buglist, 但是太懒没有完成, 也没不吝指教地提交给他...

如果我们使用一个概念的时候总是显示地列出("声明")和解释("初始化"), 就可以发展一种自然语言的编译器来对文章进行检查, 找出未列出或未解释就使用的概念.

哦, 顺便向 non-programmer 读者解释一句, 在编程语言中,局部变量是拥有局部作用域的变量。这样的变量只能由声明它的函数或块中访问。(via: http://zh.wikipedia.org/wiki/局部变量)

  • (这是一个笑话,因为引入了更多未列出和未解释的概念。嘻嘻嘻嘻。)
    • (这两句是后来补的。标点使用习惯都变了。)

(正文完)

← 在昨夜四时迷乱的风暴中入睡,从今早十点混沌之漩涡里醒来。 阿里巴巴北京实习 Week 1 →
 
comments powered by Disqus