首页
登录 | 注册

软件设计的真谛

假设我们身边的一切都是用制造材料加以描述的:“空调”不是“空调”,而是“由金属和塑料做成的物体”;“书”不是“书”,而是“由纤维和墨做成的物体”。沟通时我们也不用“空调”和“书”这样的词汇,而是“金属和塑料做成的物体”和“纤维和墨做成的物体”。可以想象大脑在面对这些信息时会让我们觉得多么的痛苦,显然这样的事情在现实中很少发生,因为我们的大脑具备很强的抽象能力 ,会通过抽象塑造“空调”和“书”这样的概念提升沟通效率和维持思维次序。我们学习知识的过程其实就是不断精确掌握(抽象)概念和建立思维次序的过程。

对于程序员来说除了生活在现实世界,还“身处”由程序所构建的虚拟世界中。程序设计其实是在个人头脑中构建虚拟世界的过程,而维护代码则首先是通过程序所表达的虚拟世界与其他程序员间接沟通的过程。为了提高程序员间的间接沟通效率,我们一定希望虚拟世界也象现实世界那样充满着象“空调”和“书”这样的概念,也希望程序员们在虚拟世界所使用的概念相似。由于现实世界中程序员们已掌握了大量的相似概念,如果能将这些概念带入虚拟世界,那将显著提升程序员间通过虚拟世界(即程序)沟通的效率。因此,作者认为软件设计的真谛,是通过程序构建与现实世界相似的虚拟世界。通常,设计质量越高就越能在虚拟世界中找到现实世界的影子。

软件设计活动的关键又是什么呢?还是让我们回到现实世界去寻找答案吧!

在远古时期,人类只能通过徒步从一个地方到达另一个地方。后来发现马可以被驯服,通过马车能更快地从一处到达另一处。再后来,人类逐步发明了自行车、汽车和飞机,且每一次发明都使得交通效率得以大幅提高。在这里,马车、自行车、汽车和飞机都共同地为了解决交通效率问题。很显然,马车、自行车、汽车和飞机都是不同的概念,人类通过抽象发明这些概念,并通过相互学习的方式使得大家掌握其含义。如果将焦点放在交通工具上,我们会发现交通效率越高则其概念越抽象,复杂度也越高。或者说,越是抽象的概念,其所隐藏的复杂度就越高。

从这个关于交通的例子中我们不难发现,现实世界中我们是通过转移复杂度的方式解决复杂问题的,且每一次不同的转移都伴随着抽象概念的建立,转移的复杂度越多所建立的概念就越抽象。由于复杂度被转移了后,使得一小部分人专注于被转移的复杂度(比如制造飞机),而其他绝大部分人在享用复杂度被转移所带来好处的同时不用关心被转移走的复杂度(乘飞机的人不用关心飞机的驾驶与制造)。同样的事情也发生在软件行业!不同的是软件行业“制造”的不是汽车和飞机,而是编程语言、数据库、平台和框架等。

不难发现,软件设计的关键活动应是抽象,通过抽象建立新的概念并将部分复杂度转移到概念背后。尽管不断的抽象增加了新概念的复杂度,但也简化了所需解决问题的复杂度。显然,好的设计应是其所简化的复杂度要大于因为抽象所创造的复杂度。
本文出自李云的博客,请务必保留此出处:http://blog.chinaunix.net/uid-26470037-id-3192790.html

相关文章

  • 综述 UBI全称Unsorted Block Images,是一种原始flash设备的卷管理系统.这个系统能在一个物理的flash设备上管理操纵多个卷并且能在整个flash芯片上实现损耗均衡. 从某种意义上说,UBI和LVM有点相似,LVM ...
  • 笔记之一       Ruby之所以设计模块的概念,在于弥补传统的C之类语言的模块概念的缺失.在软件设计中,模块化体现很多很有用,它直接关系到软件设计的效率和灵活性.C中没有明显的模块的概念,就要由程序员自己通过软件的手段来强化模块概念,通 ...
  • SIMATIC  Net介绍: SIMATIC  Net软件是用于西门子工业网络通讯的软件.  主要用于和其他厂家的监控软件通讯,比如说iFIX,不过需要SI7作为驱动,走OPC,SI7与OPC交换数据;如果用S7A做驱动的话,可以不用SI ...
  • 你必须知道的.NET(第2版)
    你必须知道的.NET(第2版)  王涛 编著 ISBN 978-7-121-14128-7   2011年7月出版 定价:79.00元 16开 548页 宣传语:以深入浅出的笔法,触摸.NET底层和框架的有趣角落,了解.NET平台的开发.设 ...
  • 作为一个.NET程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中.就像一个赛车手,一定要了解他的爱车 – 能做什么不能做什么. 本文参考Scott Hanselman给出的.NET问题列表,整理如下.包括WinForms,ASP.NET ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.011 s.
京ICP备10005923号