Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com

过度设计

上一篇 / 下一篇  2009-02-11 22:47:42 / 个人分类:dev


我觉得我一直都有过度设计的倾向。对面向对象,接口编程,抽象层,设计模式,插件化。。。所有提高软件灵活性,可配置性的技术都乐此不彼。后来发现使用这些技术本身也是有代价的,那就是增加了软件的复杂性。再后来,读了“unix编程艺术“,我发现我的问题不仅仅是没有对技术做全面的评估,而且在解决问题的思路上也是误入歧途。


不得不承认,所有这些新技术确实能取得“自我欣赏”的效果,但事隔一段时间后再重读代码,也有“摸不着头脑”的效果。如此反复几次,我才发现了是这些抽象的层,数据结构让我难以抓住程序是如何实际解决问题的。


在以前我认为事情的发展是这样的:软件要解决的问题越来越复杂,所以软件变得越来越复杂,为了降低复杂性,人们发明了新的技术。


但事情的另一面是,新的技术本身比旧的技术要复杂。也就是新技术本身也引入了复杂性。


所以要做出正确的设计,需要评估新技术引入的复杂性和降低的复杂性。以前的我,只看到事情的一面而不顾另一面,难免会出现所谓的过度设计。


另外一个更根本的问题值得我反思,这种复杂性是必需的吗?有些情形,这种复杂性完全是自找的


1)没有找到解决问题的巧妙的方法

或许多了解一点,或许转变一下思路,就有非常简单而且巧妙的方法来解决问题。而且以效率最高的方式。

关于圆珠笔的故事,关于左右手不能同时操纵机器的故事,关于剔除空肥皂盒的故事。这些故事都说明了,一个巧妙的解决问题的方法的令人惊叹的效果和效率。


2)试图让程序更聪明

如果你读了unix编程环境,你就会理解KISSkeep it simple and stupid)是一个多么智慧的箴言。与其让程序兼容变化,不如让这个地球上最聪明的人来处理变化。


我曾经写了一段程序来处理ftp传输文件,后来想到如果能兼容scp会更酷,加入scp的过程中,发现如果加一个抽象层来处理所有能传输文件的协议还会更酷。最后的结果是代码由几行变成了几百行。而且事实是,从来没有用户试图用scp来传输文件。

所以这种复杂性完全是自找的。也是完全可以避免的。


现在如果让我在程序的功能和程序的简单直接做出选择,我首先选择简单。


相关阅读:

TAG: dev

 

评分:0

我来说两句

Open Toolbar