我是这么利用数据——天下武功,无坚不摧,唯快不破

欢乐的财神 发布于 2013/12/23 09:09
阅读 968
收藏 1

算不上一个真正的武侠迷,上学的时候在课堂上背着老师看过几本《武侠故事》,由于后来电脑游戏吸引力更大,所以。。。

不过同座位老是提起这么一句很“武侠”的话:天下武功,无坚不摧,唯快不破,至今深有感触。

以前以为,快就是咏春拳那种,打的快,使对方乱了手脚无法及时还击,直到了解了爱因斯坦说过的:当速度快过光速,时间将会停止,甚至倒流。

这些扯淡的说法总在学生年代给我带来幻想,以为自己掌握了无敌的技能,可以仗剑走天涯。参加工作后,我便无一例外的把他们运用到了我的软件里,今天和大家分享我在认识软件上的一点小小经验。

回到武功这个话题,怎么理解“唯快不破”呢,我们一起来想象一下:双方面对面站立,准备搏斗,甲方出拳,常规情况下乙方可以选择的自然是防御或者躲闪,但是如果乙方足够快,就可以在甲方出拳的那一刹那,绕到他身后给他后脑一拳,于是,甲方倒地,乙方获胜。

这便是时间停止的概念!电影镜头里的慢动作看过吧,仿佛就是甲在慢动作,乙却很流畅出招,胜负自然不言而喻(这里需要想象力哦!)不过,没有人可以做到这么快!可喜的是:CPU可以!它每秒上亿的逻辑运算能力,导致了我们人类在电脑面前就是慢动作,理解了这点,我发现一个软件在和人交互的过程中可以无数次叫停时间,完成无限多的准备工作,然后再让时间继续。

叫停了时间干什么呢?给点例子吧

1、比如注册时验证用户信息。用户在输入用户名时,我们便可以对这个用户名进行实时存在性验证,无需打扰他的其他动作,验证的结果就可以在几乎察觉不到的时间内反馈出来。理论上我们可以在用户提交的时候再生硬的弹出一个“用户名已经存在!”这样的窗口来阻止用户,但是这显然不如这种同步进行,仿佛以超越时间概念的方式进行来的顺畅。

2、比如Excel软件里,你输入一些数据,关于这些数据的汇总信息(求和、平均、最大值之类)会同步的显示出来,它没有打断你的操作,而是在你的操作同一时间就产生了结果。理论上它是需要花一些时间的,但是这个时间太短了,你察觉不出来,它就给出了结果。

3、还有很多

有人会说其实这就是个异步操作,或者说计算机本来就那么快而已,这没什么了不得。

其实故事没那么简单,关键的问题是:从一开始,你怎么思考问题?让我们回到问题的最初,你需要从软件来自哪里、为何产生等等问题上重新思考!多年扯淡的经验告诉我:有许多问题都要回到最初再好好想一想,那些在你脑子里,习以为常的概念,反而是最有价值突破,而又最难突破的!

好好想一想,你认为软件是什么?很多人理解的软件就是人的逻辑的固化,按照预定义的方式快速的无人干预的进行。这种思考方式致命的弱点就是:强硬的把人的弱点加到了软件身上!认为人存在的限制也是软件的限制,这就好比软件是一只雄鹰,你却绑了它的翅膀,让它练习走正步!

到底软件是什么?软件的快,在一定程度上量变引起了质变!我认为理想中的软件至少是超越了时间的一个概念,就像前面提到的,它可以在任何一点上叫停时间,完成它想要完成的一切,然后再让时间继续。

软件如果没有了时间,拿什么来衡量它的进度呢?答案就是——数据。积累了多少数据,软件就经历了多少,它可以思考的范围就扩大到了多少,不要捆住你的软件,不要用人的逻辑限定它,让它在数据的天空里翱翔!这对我们写出优秀的软件意义非凡,想象一下:

1、每一步都是软件的十字路口:业务逻辑中的每一步都有new information,也就是新的元素加入进来,而这个元素是否和已经存在的数据发生了某些逻辑上的关系,是否意味着我们可以采取某些必要的措施,或者已经导致了某些一定会发生的结果,如果是,何不立即就让他们发生。

2、每一个细微的瞬间都是软件的十字路口:时间的每一秒流逝、每一位用户加入、每一次操作的成功或失败都意味着新的逻辑产生,软件可以捕获它们,分析它们,在已经存在的数据里是否有着一些本该要发生的事,却没有发生,如果是,何不让他们立即就发生。

3、每一个维度都是软件的十字路口:人可能没那么周全的组织能力,但软件可以在一瞬间搜罗所有的数据,而不必错过每一个可能重要的环节,利用这些种类丰富的数据,甚至它们本身就已经是逻辑的一部分,而不必人为指定。

来吧,软件不是平坦的路,它是绚丽的烟花,这颗刚刚升空,下一颗早已就绪,上一颗却在绽放!

加载中
1
vietor
vietor

怎么跟上次看到的一个ThingsWork的人发的微博一个调调?———不知所云。

这种思考方式致命的弱点就是:强硬的把人的弱点加到了软件身上!”——不知道你是否有过实际的项目经验:任何现有的软件系统的变更都是非常“麻烦”且“复杂”的事情,并不能仅仅定义成“强硬..加到了软件身上”。

咳,重复一下我之前看到关于那篇“ThingsWork的xxxx快xxx”的其中一个评论:软件开发不好的全去做“咨询”了。

0
欢乐的财神
欢乐的财神

引用来自“vietor”的答案

怎么跟上次看到的一个ThingsWork的人发的微博一个调调?———不知所云。

这种思考方式致命的弱点就是:强硬的把人的弱点加到了软件身上!”——不知道你是否有过实际的项目经验:任何现有的软件系统的变更都是非常“麻烦”且“复杂”的事情,并不能仅仅定义成“强硬..加到了软件身上”。

咳,重复一下我之前看到关于那篇“ThingsWork的xxxx快xxx”的其中一个评论:软件开发不好的全去做“咨询”了。

好吧,我只能说:他说的和我真不一样。

请容我再表述一下我的观点:人的逻辑运算能力有限,这本身没什么,但是开发者却把自己算的慢,也强制要求软件慢慢算,这便是限制了,而且绝对强硬。

我倡导的做法是:以全新的角度,考虑CPU很快,一个  action开始之后,你可以形象的认为时间停了,你可以做任意多的准备和响应,直到你认为可以继续了,再放开时间,逻辑继续。

这不是什么新的做法(程序本来就有异步),而是把一种思考方式给提出来,供大家参考,以全面的审视目前的软件,是不是整体上利用了数据在做周全的考虑,而不是拍脑袋。

另外,你感到的”麻烦“和“复杂”,就是拍脑袋拍多了,也许本文给你一些解脱的机会。

ps:粗读之下,你指向的文章强调编程打字要快,和我不怎么一样。

vietor
vietor
通常情况下,说CPU很“快”有两种情况: 1)懒得(或没必要)优化算法了,反正用户是感觉不到的。 2)多线程相关的代码有缺陷,不能寄希望与“边际事件”不发生。 而博主的大论,最终只跑出来“以异步的方式考虑软件开发“这个理论,涉嫌“藏的太深”!
修改登录密码
修改登录密码
但是开发者却把自己算的慢,也强制要求软件慢慢算, ---->我怀疑你是不是做过开发
0
首席安全砖家
首席安全砖家
境界不够, 我看起来 不知所云
0
gggggame
gggggame

我很努力 很认真的拜读了,这跟数据有什么关系?

欢乐的财神
欢乐的财神
我想表达的就是:数据才是驱动程序的根本 如果可以,请参考我给 @晓骏 的回复
0
修改登录密码
修改登录密码
不知所云~~~~~~
修改登录密码
修改登录密码
回复 @欢乐的财神 : 你这个比方有点意思. 不过, 我更觉得数据像路程, 计算机处理算法像交通工具. 交通工具发达了,自然能处理更多的路程/数据. 现在的问题是, 你如何造出高铁(处理大数据的算法)? 文中你说的例子,那个验证用户名的问题,和快慢没有任何关系,只不过是业务层面的问题
欢乐的财神
欢乐的财神
好吧,我想表达的是:没有高铁的时候,人们很难想象5小时的车程可以到达千里之外。 有了软件,人们却还在以自行车的思维驱动软件。自然不能乘上高铁千里驰骋。 你可能又要说我不知所云了,请参考我给 @晓骏 的回复,数据就像是高铁的轨道,程序在这条轨道上才能飞速成长。
0
欢乐的财神
欢乐的财神

引用来自“晓骏”的答案

境界不够, 我看起来 不知所云

呵呵 是我说的话题比较怪,这样吧,说些补充,如果有帮助的话

1、如果你编写的代码在你的脑子里也能执行,那么软件和你的区别就是它可以免费重复N多遍,仅此而已

2、如果你编写的代码在你的脑子里已经不能运行了,尽管代码是你写的,你知道意图,但是你已经理不清头绪,程序的走向已经受其他东西控制了,那么就是我文中说的方法了。

3、受什么东西控制呢?当然是数据!由于数据是业务上积累下来的,所以它反映了业务上的逻辑,反向应用在业务上原理上是正确的,而你已经说不清程序会怎么运行了。

4、为什么要这么做呢? 文中重点阐述了“唯快不破”的思想,只有利用这种做法,使得程序来自数据的积累,走向数据的积累,因为数据的积累而不断完善,导致数据的积累可以循环,这个过程不受人为控制,从而不受错误的人为控制。

5、文中的最后,我把程序比喻为一场烟花 show,你只知道烟花将会被点燃,然后在空中爆炸,但是烟花却自己在空中随性表演、自然绽放,而你欣赏的不是烟花要在空中爆炸这个简单的陈述句,而是每一次惊艳的色彩。

0
欢乐的财神
欢乐的财神
回复 @vietor : 呵呵 本文不是在讨论因为CPU很快就不优化算法的问题上,旨在讨论类似于异步的思考方式上,不是说异步执行程序,而是异步指导开发,我建议开发的时候就是异步思考的,每一步的执行都同时用数据做验证,调用数据搞清楚逻辑之后再继续,而不是人为指定逻辑,比如这个变量必须大于2,这个表达式必须为真,我的倡导是程序执行到这个判断时,依据数据算出来应该大于几,或者哪个表达式要不要为真,这样的话,程序的发展就会自然的贴合了业务,你想想,要是哪里错了,就意味着N多逻辑错了,怎么可能N多逻辑同时错了,所以,结论就是,要么早就发现了这个错误,要么这个错误本身不是错的。 另外,请参考下 我给 @晓骏 的回复
欢乐的财神
欢乐的财神
回复 @vietor : 嘿嘿 所以我要谢谢大家 将来修订时会考虑到评论中的这些问题
vietor
vietor
回复 @欢乐的财神 : 我还是要不免提一句:涉嫌含义隐藏太深!
欢乐的财神
欢乐的财神
回复 @vietor : 看来我算是说清楚了,这正表明了在线写文章的好处,可以直接验证读者是否明白,呵呵 至于理想和现实之间的差距,我始终认为不破不立,不去努力的打破这个拧巴的数据和逻辑的关系,怎么迎来那一天大家都能享受数据化程式的好处呢?
vietor
vietor
哦,这次好像是说“数据决定程序逻辑”。“方向上”是对的;只是“实际情况”是“数据(一般就是指需求)”的变化会很频繁,而程序的逻辑变更是不能“频繁”的。逻辑会迎合”数据“,但逐步到后期”逻辑“会”要求“数据了。
修改登录密码
修改登录密码
我不懂你说的逻辑错误和你标题里说的快到底什么关系
下一页
0
欢乐的财神
欢乐的财神

@eel

你回复了好多,我一并答复你

1、你分割了项目经理的责任,意味着出现了问题你选择抱怨别人,然而真的遇到了困难,你其实没的抱怨,最终还是自己忍受,尽管你可骂出来,但是无济于事,只有你能解决问题,才是根本。

2、快是一个相对的概念,在我看来,算法快,不是终极的快,或者说快的方面不能解脱我,而程序中应对变化的快,才是真的快,如果逻辑每天变10次,你的程序每天可以变100次,你说谁快?

3、怎么才能让程序变化的比变化本身还快,那就不能基于人的思维,而是基于数据的事实。

4、我说人不能以自行车的思维驱动软件,你却说计算机算法才像交通工具,这显然和我说的不一样,算法像工具你只能干的很快,活儿干错方向了,你只是损失的更多,而数据像交通工具,你可以变的很快,只有你变的很快,你才能击败对手,so,题目中说:唯快不破!

ericsoul
ericsoul
我想起一句:编程就是程序员与上帝比赛,程序员做的就是通过编写代码让计算机把复杂的事情简单化,让傻瓜都能操作。而上帝总能制造出更傻的傻子。而且到目前为止,这场比赛一直是上帝赢了。lz的意思感觉是说敏捷开发,或者说设计高可变性的程序。似乎还有说程序利用数据自学习,自动变化适应业务的变化。呃,也许我语文不甚好,没catch the point。
返回顶部
顶部