算不上一个真正的武侠迷,上学的时候在课堂上背着老师看过几本《武侠故事》,由于后来电脑游戏吸引力更大,所以。。。
不过同座位老是提起这么一句很“武侠”的话:天下武功,无坚不摧,唯快不破,至今深有感触。
以前以为,快就是咏春拳那种,打的快,使对方乱了手脚无法及时还击,直到了解了爱因斯坦说过的:当速度快过光速,时间将会停止,甚至倒流。
这些扯淡的说法总在学生年代给我带来幻想,以为自己掌握了无敌的技能,可以仗剑走天涯。参加工作后,我便无一例外的把他们运用到了我的软件里,今天和大家分享我在认识软件上的一点小小经验。
回到武功这个话题,怎么理解“唯快不破”呢,我们一起来想象一下:双方面对面站立,准备搏斗,甲方出拳,常规情况下乙方可以选择的自然是防御或者躲闪,但是如果乙方足够快,就可以在甲方出拳的那一刹那,绕到他身后给他后脑一拳,于是,甲方倒地,乙方获胜。
这便是时间停止的概念!电影镜头里的慢动作看过吧,仿佛就是甲在慢动作,乙却很流畅出招,胜负自然不言而喻(这里需要想象力哦!)不过,没有人可以做到这 么快!可喜的是:CPU可以!它每秒上亿的逻辑运算能力,导致了我们人类在电脑面前就是慢动作,理解了这点,我发现一个软件在和人交互的过程中可以无数次 叫停时间,完成无限多的准备工作,然后再让时间继续。
叫停了时间干什么呢?给点例子吧
1、比如注册时验证用户信息。用户在输入用户名时,我们便可以对这个用户名进行实时存在性验证,无需打扰他的其他动作,验证的结果就可以在几乎察觉不到的 时间内反馈出来。理论上我们可以在用户提交的时候再生硬的弹出一个“用户名已经存在!”这样的窗口来阻止用户,但是这显然不如这种同步进行,仿佛以超越时 间概念的方式进行来的顺畅。
2、比如Excel软件里,你输入一些数据,关于这些数据的汇总信息(求和、平均、最大值之类)会同步的显示出来,它没有打断你的操作,而是在你的操作同一时间就产生了结果。理论上它是需要花一些时间的,但是这个时间太短了,你察觉不出来,它就给出了结果。
3、还有很多
有人会说其实这就是个异步操作,或者说计算机本来就那么快而已,这没什么了不得。
其实故事没那么简单,关键的问题是:从一开始,你怎么思考问题?让我们回到问题的最初,你需要从软件来自哪里、为何产生等等问题上重新思考!多年扯淡的经验告诉我:有许多问题都要回到最初再好好想一想,那些在你脑子里,习以为常的概念,反而是最有价值突破,而又最难突破的!
好好想一想,你认为软件是什么?很多人理解的软件就是人的逻辑的固化,按照预定义的方式快速的无人干预的进行。这种思考方式致命的弱点就是:强硬的把人的弱点加到了软件身上!认为人存在的限制也是软件的限制,这就好比软件是一只雄鹰,你却绑了它的翅膀,让它练习走正步!
到底软件是什么?软件的快,在一定程度上量变引起了质变!我认为理想中的软件至少是超越了时间的一个概念,就像前面提到的,它可以在任何一点上叫停时间,完成它想要完成的一切,然后再让时间继续。
软件如果没有了时间,拿什么来衡量它的进度呢?答案就是——数据。积累了多少数据,软件就经历了多少,它可以思考的范围就扩大到了多少,不要捆住你的软件,不要用人的逻辑限定它,让它在数据的天空里翱翔!这对我们写出优秀的软件意义非凡,想象一下:
1、每一步都是软件的十字路口:业务逻辑中的每一步都有new information,也就是新的元素加入进来,而这个元素是否和已经存在的数据发生了某些逻辑上的关系,是否意味着我们可以采取某些必要的措施,或者 已经导致了某些一定会发生的结果,如果是,何不立即就让他们发生。
2、每一个细微的瞬间都是软件的十字路口:时间的每一秒流逝、每一位用户加入、每一次操作的成功或失败都意味着新的逻辑产生,软件可以捕获它们,分析它们,在已经存在的数据里是否有着一些本该要发生的事,却没有发生,如果是,何不让他们立即就发生。
3、每一个维度都是软件的十字路口:人可能没那么周全的组织能力,但软件可以在一瞬间搜罗所有的数据,而不必错过每一个可能重要的环节,利用这些种类丰富的数据,甚至它们本身就已经是逻辑的一部分,而不必人为指定。
来吧,软件不是平坦的路,它是绚丽的烟花,这颗刚刚升空,下一颗早已就绪,上一颗却在绽放!