本文仅代表我的个人观点,欢迎各位批评与指正。
如果有人说上帝是全能的,似乎会被别人笑死。为啥呢,因为似乎“上帝没法创造一个他自己都搬不动的石头”。这问题在哲学上引起过广泛的思考。但是如果是一个程序员,似乎完全不会纠结这个问题。上帝必需是全能的。为什么呢?因为,上帝拥有命名权,所有人对语言的解释权只要在上帝手里一切都好办。
“上帝能否创造一个他自己都搬不动的石头?”,用程序员的角度来思考,把这句话断个句:上帝能否创造一个“他自己都搬不动的石头”?答案当然是能啦,上帝随便找个石头,把他改名成“他自己都搬不动的石头”。恩,无论人类怎么表述这句话,只要上帝稍稍改改名就行了。如果拿中国的来说事呢?
“上帝能够画一个方的圆吗?”当然也可以啦,程序员表示完全木有压力啊。计算机是不知道圆是什么形状的,那么无论我是把一个矩形定义为圆(Rectangle circle = new Rectangle();),还是把一个圆定义为矩形(Circle rectangle = new Circle();),这都是成立的。
所以说,创造者从某种意义上来说是永远全能的。因为,他能够掌握被创造者对语言和逻辑的理解,即时是再荒谬的语言,创造者也可以通过更改对语言的语素和语义的理解而达成任何一个“凡人”看上去无法理解的命题。程序员作为程序的创造者和实现者,对于自己的某个程序,程序员也应该是全能的。如果使用这种全能性,就成了程序员必修的一门功课。
使用全能悖论往往可以给一些人造成不小的麻烦。比如,我常做的.net应用程序,这货有个工具叫Reflector,反编译代码完全无压力有木有啊。有些程序员使用花指令,混淆变量名的办法来阻止我们阅读源代码。这也就是全能悖论的一种应用。但是,我更喜欢的就是使用别人先入为主的办法,把所有类的名字改一下,改的有意义但是又无法组合的情况就可以了。因为,即使是花指令也是有一定的结构,而逻辑无法理解的变量名是无法阻止我阅读源代码的。但是,一个有逻辑意义的单词往往可以让阅读代码的人痛不欲生,由其是关键类名的名称改变。
还记得说慌的最高境界吗?十名话里有一句是假的其它几句是真的,这才是最高境界。而阻止别人阅读代码的最好办法,也不外乎就是如此吧。恩画一个正方形的圆。
public class Circle
{
public int r
{
get;
set;
}
public void Draw()
{
int w = 2 * Math.Cos(Math.PI / 4);
//Draw
}
}
因为只有一个思想,所以也没有细细的去写那个代码,但是 我想即时是使用画圆的方法也可以画出来吧,本身嘛,一个圆的内切正方形只有一个,这个其实不算什么。但是,由此可以引发的其它感想还是蛮不少的。恩最后,我想说的是:
今天,你全能了吗?