2007-12-30

印度数字?

都说阿拉伯数字,原来却是印度人发明的,这世界就是不公平啊,谁喊得声音大传播得远就有话语权,即使只是复述一遍而已。韩国人最近几年老是说些无耻之言,比如“中国黄河以北是高句丽领土(言下之意应由他们继承)”、“孔子、周公是韩国人祖先”、“中秋、端午是韩国的传统节日”……估计他们是坚信一句话:“谎言重复千遍就成了真理”,可谓狼子野心。

印度数字这一说法是昨天晚上的一个科普节目介绍的,介绍了人类对于数字的发明创造历程,discovery系列节目,拍的很有趣味性。其实印度人共享最大的可能是对0的创造与使用,将“我没有”、“我不知道”这些虚无的概念用一个0来表达,并且将0作为1、2、3等普通数字的延伸,以相同规则处理,使“无”作为“有”的一种并不特殊的特例,解决了以前的难题,对世界的数学描述更进一层,的确是很了不起的发明。

知识大多来自于对现实的抽象,抽象必然有个度的问题,如果抽象程度太低,则描述能力不够,导致“白马非马”,抽象程度过高又容易太虚空,出现“永远推不翻”的“无用”真理。因此,这个度的掌握就是关键问题。

软件设计也是如此。哪些需求算是一类问题?哪些feature可以共同实现?哪些对象可以抽象成一个类?哪些类可以抽取出一个父类?哪些函数之间是over-ride或over-write?……诸如此类的问题没有统一的机械化公式来处理,没有统一标准,所能找到只能是在一些原则上的指导,真正地掌握需要经验的积累,而非简单地对照书本所能学会的。因此,优秀的设计者很难得,靠工厂生产不出来软件,更生产不出来优秀的软件工程师。

其实在写程序中和0的发明较类似的是null对象的概念,以前看过一个设计模式,将null用具体的null对象代替,如用NullBloger代替Bloger类的null值,这样可以避免很多null引起的问题,如NullPointerException等。但这种方法也有代价,那就是对几乎所有类都要有其Null对象,实现其中的方法等。是否值得做,这就是对“度”的权衡问题。

没有评论: