谈程序语言的设计及程序员心态
我最近读王垠的博客,里面有些文章使我很受益。他总结了程序语言设计上的两个问题:一是片面追求短小,用C语言做例子;二是试图容纳世界,用python做例子。一般来讲,能设计语言的人,都是高手,特别是设计出来的语言用的人多,这些语言的发明者,可以说都是顶尖的人才,其智力、专业程度都是顶尖的。但往往一门语言的设计者,都是一个人。一个人,又是顶尖的人,就很容易存在一个想法:如何彰显自我。我设计的这门语言,假如和别人设计的一样,不搞些智力上的特色出来,怎么能显示出我的牛逼之处?
作为一门程序语言,如果才能搞些智力上的特色呢?最明显的就是比谁的更短。这种思维很自然的泛化到使用这门语言的程序员身上,你那个要写十行,我这个只一行就搞定,牛逼吧,把写得长等同于写得差,写得短等同于写得好,甚至往智力上去延伸。于是在以前C为王的时代,很多人都追求程序写得短,结果搞得可读性很差。自从JAVA兴起,这种比短的思维才被压住。另一个就是谈哲学,python喜欢谈哲学,于是有了王垠所说的,要容纳世界上三只手两个头的人。对于稍大一点的工程,python的这个特性会使得程序不可控,几乎变得不可用,说是画蛇添足,有害无益不为过。
一门程序语言的设计者,其设计思想,思维方式,或多或少会影响程序员。于是程序员多多少少都有追求短小和容纳世界的毛病。追求短小在C语言里比较常见,而容纳世界在JAVA里面比较常见,产生的问题更严重更深远。在我看来,前几年JAVA界流行过度设计,类似SSH的框架就是试图容纳世界的产物。框架的设计思想,比如说,可以随便更换数据库,可以替换中间层,可以多种展示方式,不能说是错误的思想,但是实现手段带来了很大的复杂度。于是又引出了另一种思维,把越复杂的东西给折腾会,就显得自己智力超群,以此换来“优越感”。
中国有句古话叫文人相轻,意思是文人之间互相看不起,觉得别人写的文章不如自己的。写程序有点类似写文章,所以程序员之间也有互相看不起的毛病。经常有些人看几眼别人的代码就说写得差,于是我经常和人说,技术人员不要为难技术人员,不要以彰显自我的心态来看人,要以开放的心态大家共同提高。
另外,很多人注重技术,而不注重产品,大的东西能搞好,但是细节就不愿去搞,结果搞成80%,后面20%迟迟不能完善,只要没有完善,就不是一个产品,不是产品就不能营利,不能营利就没有价值。技术构成产品,但是产品不等于技术,技术一定要形成产品才有价值,这才是我们做为技术人员的价值体现。