片语

前几天在reader上看到个小故事:

很多年前,我还年少的时候,喜欢下象棋,在学校里基本上我能下赢的,我总能下赢,我下不赢的,总也下不赢。不得其解,也慢慢懒得操练了。

后来有次学校搞业余活动,有个老师是省象棋协会的,组织了一节棋课。我去晚了,只听了半节。大致意思是讲,下棋要讲全局观,要有战略,例如中局五种策略,中局成杀、不成杀则优、不占优占先、不占先则多子、不多子则求和。还有什么炮破士、马破相、残局炮归家等等。却没有讲如何下棋,课堂上也没有摆个象棋,或是什么棋谱。

我并没有把这些当回事儿,之后也很少下棋。

又过多年,毕业后同学聚一起,闲来无事,与一个同学下了两盘。刚开始,他问我这两年有没有下棋,我说没有。他调侃我,“那你以前下不赢我,今天你也难赢了”。我也笑着认同,反正只是玩玩,何必认真。

可是一开局,他就傻眼了,一直处在下风,且每局必输。他很吃惊,我也很吃惊。之后我认真思考了这件事,觉得是那节棋课影响了我,人的思考能力、计算能力都差不多,而思维方式不同,结果也会有很大不同。他看到的是“棋”,我看到的是“局”。决定胜败的不是棋艺。

又过了几年,我已经不再年少,但还算年轻吧。有一次找一个朋友玩,正好他的一个朋友也在,吃完饭没事儿做,恰巧有副象棋,就与他的朋友下了几局。他们都比我年龄大,已经三十多岁了。不过我也没有放在眼里,自以为水平相当可以,三局我两胜,颇为自得。

等他走后,我朋友问我:“他水平怎么样呀?”我带着些“谦虚”,洋洋自得:“他水平挺可以的,我差点就输了,还好我三局两胜,略胜那么一点点。”

我朋友听完哈哈大笑:“你知道他是干吗的吗?他是卖保险的。卖保险的吗,任何人都可能是他的潜在客户,他自然不会去赢你,不光让你赢,还要让你赢得有面子,这才是高手。他原来是在象棋协会的,论象棋,那叫牛×死了。”

我听完之后,惭愧至极。我关注的是“棋局”,人家所关注的,则超脱棋局之外。眼界不一样,看到的也不一样,操控点也不一样,输赢已经不重要,重要的是输与赢,哪个更有利于自己,然后才是“如何去输”与“如何去赢”。棋局只是一个棋子。决定成败的不是棋艺。

这则小故事让我思考了很久。作为一名准程序员,似乎视野就应该是编程而已,顶多再自嘲一下不想当美工的策划不是个好程序员之类的东西。但是,这样的人只是个工人而已。即便他学了再多的算法,有多么熟练的编码速度,他也只不过是上面故事中的第一个对手而已。

于是想到了前几天的面向对象小论文,我在文章的结尾写道:

面向对象技术已经面世40余年了,近些年来,Java、C#、C++等主流的面向对象的语言也一直占据着主流编程语言的位置。可以说,过去十年甚至将来的几年将是面向对象编程模式的顶峰。它的特性鲜明,很适合用在大型软件工程领域的开发。它有很强的复用性,通过对代码的复用,编码人员也似乎从高不可测的科学家、工程师,变成了“代码工厂”中的普通工人,从一定程度降低了编码成本。

但是,新的时代带来了新的变化。并行计算、网格计算等崭新的计算技术正在逐渐颠覆现有的计算理论,而面向对象的编程模式则不是十分适应这种新型的计算模式。此时,Haskell、微软的F#等一系列的函数式编程语言也逐渐走进了主流。它们天生就是并行的、模块化的,并且也拥有一些面向对象的特性。

计算机软件设计技术一直在发展着,也许面向对象程序设计是一种十分理想的设计,但是总会有更加先进的设计会在某一天取代它,正如它取代了面向过程的结构化程序设计一样。设计出最符合现有生产需求的编程模式,而不是机械性的套用已有的模式,才是我们大学生应该做的事情。

写到最后一句话时,我自己也为之一振。看了这么长时间的设计模式,在套用着已有的模式的时候,我也在想现代的甚至未来的程序设计到底需要什么样的模式。而什么才是现代的甚至未来的程序设计呢?程序设计如此,其他领域呢?

这就涉及到了创新。昨天晚上看了一期非你莫属,里面有一位求职者自称很有创新能力,要谋求一份策划的工作。但是很不幸,因为企业给的工资太低,他失败了。在这样的环境下创新很难,但是无论如何,创新依旧是第一生产力。社会不需要民工,需要的是更高层次的人。

突然又想到了马原课老师曾经讲的一句话:

有之非有,存在的无。

刚看这句话时很不理解,待到老师解释之后便恍然大悟。

决定一个人的,不只是他的天赋、努力、运气,更是他的思维方式,他的思想层次。