大约一年前,我在网上看到有人做了一个叫做codegame的网站,这个网站很好玩,它提供一些诸如发射炮弹,行驶,转向的接口,允许你用js来写一辆坦克的行为代码,并且还能让你写的坦克和其它人的坦克在不同的地图对战,那几天我迷上了这个游戏,还写了一篇博文来介绍这个网站,我花了整个晚上写了大约六百行逻辑代码,这使得我的小坦克知道如何寻找敌人,发射炮弹,躲避攻击,当然,它也会在靠近障碍物的时候及时转向或者掉头。
听起来很厉害是吧?的确如此,我的小坦克(我称之为DK的巨剑)战胜了几乎所有的预设坦克,并且在和其他人写的小坦克的战斗中,也丝毫不落下风,有那么些时候,我真的认为自己是个天才,甚至觉得,我写的这些东西,装在真坦克上肯定也不差。
了解我的人都知道,我算是一个非常渣的程序员(幸好我不是我们公司的程序员,不然就完了),对算法可能说得上一窍不通,什么排序,二叉树,寻路算法,我统统不知道
那很奇怪,为什么我能写出那么牛逼,或者说看似那么牛逼的坦克呢?
原因在于,我用了很多的if,老实讲,我只会用if,这些if背后并没有什么算法,只是简单的逻辑描述,它们冗长而低效,然而有时候却能战胜复杂的行为逻辑,有一次DK的巨剑艰难的击败了一辆坦克,写这辆坦克的哥们坚毅的跟我说,我要再去优化一下最短路径算法。这是我第一次听到「最短路径算法」这个东西。
还有这种玩意儿?后来,这个网站的开发者举行了一个杯赛,让最顶尖的坦克互相对战,我非常遗憾的止步16强了,老实讲,这也并不算很遗憾,尤其是当我看到排名前几位的坦克的时候,它们转向是如何的及时,躲避是如何的灵敏,甚至还可以预测对方的路径从而预先开火,简单的炮弹仿佛能够精确制导一般,让我看的非常震撼。
我发现,靠我那些原始而简单的代码,其实是能够实现一辆6-7分的智能坦克的(满分为10分),但是这也就是极限了,不深入的研究算法,是无法实现8分,9分,甚至10分的坦克的。另一件不幸的事则是,花一个晚上,就可以做出一辆「DK的巨剑」,然而你可能得花一周,才能做出一辆「更好一点点」的8分或者7.5分坦克,并且,这辆坦克由于运气或者人品,还不一定总是能战胜那些7分的坦克。
这看上去令人沮丧,但并不应该成为我们都只去做那种7分坦克的理由,不是吗?
汽车刚被做出来的时候,时速5公里,且开15公里就要休息一会,计算机刚被做出来的时候就更惨了,30吨重,占地170平米,且计算能力只有每秒5000次,算起来,比几百个人拿着小本子一起算快不了多少,但是,它多少还是快了一点。虽然快这一点付出的代价很大,但无疑是值得的。
从去年开始,我就经常看到新闻说,哪里的少年仅仅花极少的钱(通常是成熟产品价格的百分之10或以下),就做了一个差不多的产品,能够完成很了不起的事情,例如可以用在非洲的水过滤器,廉价的空气净化器等等,我欣赏他们的创造力,但我却觉得,媒体和舆论有些过头了。在战争年代,1000辆7分的坦克可以打赢100辆8分的坦克,人海战术嘛,所以想方设法降低7分坦克的造价是非常有价值的,但是在这个科学技术已经足够发达,人类有能力去探索未知事物的时代,我们是不是应该更去鼓励人们造出9分甚至10分的坦克呢?
事实证明,很多这些所谓的发明创造不过是难以运用到实际生活的美好设想而已,但是过度的宣传和美化,让人们觉得,追求7分坦克是最重要的事,这无疑给那些追求10分坦克的人更大的压力。
这个世界上已经有足够多的7分坦克了,去造那些难造的坦克吧,如果不能,也请尊重做这些常识的人,无论他们成功或是失败。
佛罗斯特写诗说;林子里有两条路,我选择行人稀少的那条。无独有偶,王安石也写过,世之奇伟瑰怪非常之观,常在于险远而人之所罕至焉。景区永远都有人开发,开发的越来越成熟,但传奇是属于那些探险者的,我希望这个世界能永远把这些探险者当成英雄。