[size=medium] 简单表述,就是用通俗直白的表达来正确说明问题。说起这个话题,首先我会感觉心虚,以前为了装X,故意以专业术语加模糊的定义来描述问题,看到别人似懂非懂的神情,我既兴奋又惶恐,感觉一定要把他绕在里面才算专业。但换作别人讲个问题把我绕晕,我就满不在乎,认为别人应该也没弄明白是怎么回事,因为我总觉着每个问题都应该有个简单道理。这种人性的弱点也让我走了不少弯路,幸好及时悔改,不至于遗失太多。
两年多来我所苛求的简单似乎总没有实现过。系统是越设计越复杂,逻辑越改越多,有时候非得整个系统重构才能看起来舒服些。痛定思痛,为了追求理论的朴实,我开始总结日常所遇到的很多系统、架构、产品的简单之处,以求他日我来设计系统时,也有追求的目标。
跑远了,继续来说主题。假设朋友用手机跟我聊天,我在网上看到一段很有意思的话想和朋友分享。如果我知道朋友的手机是可以上网的,那么我会给他一个URL让他自己去看,如果他不能上网,我就会把内容贴给他。当然,我也可以不论朋友的手机能不能上网,都把网页内容发给他。在这里,就涉及到数据简单有效传输的问题。在系统数据传输过程中,我们应当秉持简洁的理念,用最少的信息达到完整传输的目的。
网络通信中的众多协议是非常简洁的。因为要处理跨网络的端到端传输,路途遥远,如果不能有效表述信息,对网络资源的浪费是可观的。所以每个协议对字节锱铢必较,力求用最少的数据表达有效属性和控制协议。同样一个有意思的例子是HTTP 304状态码,用于判断服务器端数据的lastModifiedTime与客户端缓存数据的lastModifiedTime是否一致,如果一致就表示在这次请求之前的一段时间这些数据没有任何变化,客户端可以放心使用本地缓存,否则就将最新的数据发送到客户端。对于网页中很多的静态内容,只是一个状态信息就可以减少很多网络数据流量,实属有效性的典范。
这种成功的例子很多,对于我们来说,在实践中应当将简单有效性体现在哪呢。在[color=brown]设计阶段[/color],尽量简单易懂。如考虑问题时,就假定这个问题出现是现实生活中,我们人是怎样去解决的,有怎样的流程,然后代入系统角色中来解决问题([i]软件设计过程中有角色扮演这样的一种分析模式[/i])。这样做的好处既让另外的设计和开发人员理解,也易于项目的其它角色对项目有很多的认识。同时,在软件的生命周期中,占绝大部分时间的维护阶段可以省太多力气。在[color=brown]实现阶段[/color],简洁有效的接口和返回值是十分必要的。各模块之间有着简单的接口,注释清楚明了。模块间传输的数据也应当有效,简明。假如A与B模块都要处理数据库中的某些数据,那么在A和B之间传输的就应当是这些数据在数据库中的主键或惟一标识,而不是整个数据([i]当然,是在不考虑数据库压力,而传输成本比较大的情况下[/i])。
以上的举例基本只是我们开发中的一部分,我们还得学习新的技术和概念。在我们学习时,这种简单性也至关重要。多年来对于学习我总结的一条经验就是:要学就一次学懂。但在自身知识层次或是书本表述能力各异的情况下,要一次学明白实在是有些难。软件行业的特点是源源不断涌现的新名词,新概念。很多时候一个简单的概念被不断包装炒作后,再附带一些难于理解的解释,基本就可以忽倒一批人,对之加以膜拜。以Spring热炒的IoC来说,一个简单概念被冠以一个好玩的名字,控制反转。在大家还在迷糊的时候,又一位大师([i]具体是谁大家清楚[/i])站出来说这个不应该叫IoC,应该叫DI,翻来倒去的折腾概念,这可能和国外有限年代的历史文化有关吧,以发明缩写为傲。同样让大家很压抑的一个概念是AOP,无奈的可笑。
很多时候当我们学懂一个东西后,可能会恍然大悟,噢,原来是这么回事。其中感慨的时候肯定是和自己已明白的一个道理联系起来了,这些本身的道理是很简单明了的。所以,在给别人想讲清楚一件事的时候,要用最直白,最易于理解的方式,如讲故事,套例子,怎样直白怎样来。在学习一个新东西的时候,仔细关注作者最初说的那句话,知道这个东西是做什么的,之后的理解都是建立在你知道它是做什么的之上。
貌似用了很多废话来说明一个简单的道理。如果你很厌烦大段文字从开头跳到这里,那么我可以告诉你上面说了很多话,其实就是四个字:[color=red][b]大道至简[/b][/color]。
[/size]
[size=medium][url=http://langyu.iteye.com/blog/746179] 我所认识的软件开发原则:权衡[/url]
[url=http://langyu.iteye.com/blog/744455] 我所认识的软件开发原则:封装[/url]
[url=http://langyu.iteye.com/blog/744442] 我所认识的软件开发原则:二八原则[/url]
[url=http://langyu.iteye.com/blog/745296] 我所认识的软件开发原则:减少等待时间[/url][/size]
两年多来我所苛求的简单似乎总没有实现过。系统是越设计越复杂,逻辑越改越多,有时候非得整个系统重构才能看起来舒服些。痛定思痛,为了追求理论的朴实,我开始总结日常所遇到的很多系统、架构、产品的简单之处,以求他日我来设计系统时,也有追求的目标。
跑远了,继续来说主题。假设朋友用手机跟我聊天,我在网上看到一段很有意思的话想和朋友分享。如果我知道朋友的手机是可以上网的,那么我会给他一个URL让他自己去看,如果他不能上网,我就会把内容贴给他。当然,我也可以不论朋友的手机能不能上网,都把网页内容发给他。在这里,就涉及到数据简单有效传输的问题。在系统数据传输过程中,我们应当秉持简洁的理念,用最少的信息达到完整传输的目的。
网络通信中的众多协议是非常简洁的。因为要处理跨网络的端到端传输,路途遥远,如果不能有效表述信息,对网络资源的浪费是可观的。所以每个协议对字节锱铢必较,力求用最少的数据表达有效属性和控制协议。同样一个有意思的例子是HTTP 304状态码,用于判断服务器端数据的lastModifiedTime与客户端缓存数据的lastModifiedTime是否一致,如果一致就表示在这次请求之前的一段时间这些数据没有任何变化,客户端可以放心使用本地缓存,否则就将最新的数据发送到客户端。对于网页中很多的静态内容,只是一个状态信息就可以减少很多网络数据流量,实属有效性的典范。
这种成功的例子很多,对于我们来说,在实践中应当将简单有效性体现在哪呢。在[color=brown]设计阶段[/color],尽量简单易懂。如考虑问题时,就假定这个问题出现是现实生活中,我们人是怎样去解决的,有怎样的流程,然后代入系统角色中来解决问题([i]软件设计过程中有角色扮演这样的一种分析模式[/i])。这样做的好处既让另外的设计和开发人员理解,也易于项目的其它角色对项目有很多的认识。同时,在软件的生命周期中,占绝大部分时间的维护阶段可以省太多力气。在[color=brown]实现阶段[/color],简洁有效的接口和返回值是十分必要的。各模块之间有着简单的接口,注释清楚明了。模块间传输的数据也应当有效,简明。假如A与B模块都要处理数据库中的某些数据,那么在A和B之间传输的就应当是这些数据在数据库中的主键或惟一标识,而不是整个数据([i]当然,是在不考虑数据库压力,而传输成本比较大的情况下[/i])。
以上的举例基本只是我们开发中的一部分,我们还得学习新的技术和概念。在我们学习时,这种简单性也至关重要。多年来对于学习我总结的一条经验就是:要学就一次学懂。但在自身知识层次或是书本表述能力各异的情况下,要一次学明白实在是有些难。软件行业的特点是源源不断涌现的新名词,新概念。很多时候一个简单的概念被不断包装炒作后,再附带一些难于理解的解释,基本就可以忽倒一批人,对之加以膜拜。以Spring热炒的IoC来说,一个简单概念被冠以一个好玩的名字,控制反转。在大家还在迷糊的时候,又一位大师([i]具体是谁大家清楚[/i])站出来说这个不应该叫IoC,应该叫DI,翻来倒去的折腾概念,这可能和国外有限年代的历史文化有关吧,以发明缩写为傲。同样让大家很压抑的一个概念是AOP,无奈的可笑。
很多时候当我们学懂一个东西后,可能会恍然大悟,噢,原来是这么回事。其中感慨的时候肯定是和自己已明白的一个道理联系起来了,这些本身的道理是很简单明了的。所以,在给别人想讲清楚一件事的时候,要用最直白,最易于理解的方式,如讲故事,套例子,怎样直白怎样来。在学习一个新东西的时候,仔细关注作者最初说的那句话,知道这个东西是做什么的,之后的理解都是建立在你知道它是做什么的之上。
貌似用了很多废话来说明一个简单的道理。如果你很厌烦大段文字从开头跳到这里,那么我可以告诉你上面说了很多话,其实就是四个字:[color=red][b]大道至简[/b][/color]。
[/size]
[size=medium][url=http://langyu.iteye.com/blog/746179] 我所认识的软件开发原则:权衡[/url]
[url=http://langyu.iteye.com/blog/744455] 我所认识的软件开发原则:封装[/url]
[url=http://langyu.iteye.com/blog/744442] 我所认识的软件开发原则:二八原则[/url]
[url=http://langyu.iteye.com/blog/745296] 我所认识的软件开发原则:减少等待时间[/url][/size]