February 2015

从变量说开来

数学的变量与计算机语言的变量不同。数学的变量更抽象,是真的变量。而计算机语言
的变量是假的,其实还是属性,是某个内存地址或者寄存器的属性。

一个非程序员A,第一次编程,看到变量,会很疑惑,比如我当年,“这是什么东西的
的变量啊”, variable for what? 后来明白了,原来就是一个地址可以存不同的东西啊
,明白了。指针?这不是很明显么,就是地址啊,有什么难的?

另一个非程序员B,第一次编程,看到变量,说,哦,我知道,数学上小学就学了的,
变量就是数学上的变量啊,懂了。结果看到指针,panic了,数学上没有指针啊,
到底什么是指针啊?

人和人的思维方式不一样,从对数学的态度可以看出。有的人,比如冯诺伊曼,说“
You don't need to *understand* mathematics, you just get used to it". 这种人
就是上面的非程序员B。这些人成为数学家的话,一般会成为分析学家。中国培养出的
职业数学家,大多是分析学家,比如张益唐之类,解决问题能力很强,一般不自己发明
理论。

另外一些人,比如Grothendieck,一定要把数学理解成某种结构才行,这种人成为数学
家的话,会成为几何或者代数学家。这些人解决问题的能力不一定强,比如
Grothendieck连57不是prime都不知道,但他发明了改变数学界的理论。这些人也是非
程序员A。

上述两种人可以用一个简单的测试来区分:给他一个玉米棒子,看他怎么啃。分析学家
会啃得乱七八糟的,代数家会啃得一排排整整齐齐的。我有时在聚会时让大家做这个游
戏,目前发现,中国人还是分析家居多。

Nice place