转贴一段偶觉得说得非常好的话

简介:
原文来自 非典型秃子 江南白衣  blog文章《 Javaer 双修C++的key point 》的回复:
"在C++设计过程中,通常,我们会在两个角色之间转换:生产程序员和客户程序员,我们需要保持两种角色之间衔接的简单性。例如,STL的实现,可以很复 杂,但是,必须保持使用上的简单性,要足够简单。为了实现这种使用上的简单性,在STL的实现上合理运用高超的技巧,就是值得的--这种复杂性不会扩散。 如果STL的内部实现简单了,但是代价是接口或者使用的时候的复杂,那么这种简单就是有问题的。 
一种复杂性,导致了整体的简单性,就是有益的,反之,则是有害的。 判断一种复杂性是不是可以采用,我的标准是:如果这种复杂性不会扩散,那么,可以大胆一点,如果会扩散,那么就需要谨慎。 我想,这样比简单的回避复杂性更有效。 
当然,复杂性是手段,不是目的,我这里并不是鼓励卖弄技巧和试验复杂方法,只是在简单方法不能完成任务时,不妨试一试所谓的复杂方法。"

兽评:在复杂性和简单性之间存在着这样一种辨证关系,有时候为了提供简单性的接口,我们需要采用异常复杂的技术。对复杂性的控制与管理是软件开发的一个重要的特征,控制复杂性的扩散是一种必备需要。西蒙有一个很好的比喻:从前有两个钟表匠,名叫坦帕斯和霍拉,他们能制作出精美的手表--每个手表都有大约1000个零 部件。坦帕斯在制作手表的时候,如果放下手中的活--譬如去接电话--手表马上会散架,必须重新从头组装那些零部件。顾客越来越喜欢他做的手表。给他打电 话的次数越多,对他来说找到充足的,不间断时间完成一个手表就越难。 霍拉制作的手表不比坦帕斯制作的手表复杂程度低,但是他事先做好设计,这样他就能够将十几个零件构成组件,然后组合这些位置固定的组件。因 此,当霍拉放下手中正在组装的手表去接电话的时候,他只错过一小部分的工作,他可以仅用坦帕斯所用工时的一部分就完成手表的组装--如果这两个手表匠在安 装零件时每10次有一次被打断,那么平均来说坦帕斯完成一只手表所需的时间是霍拉的4000倍。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2006/05/18/402990.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
4月前
|
Java
链表中奇数位和偶数位的置换
链表中奇数位和偶数位的置换
|
5月前
|
C语言
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
38 0
|
3月前
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
|
3月前
|
算法
奇偶分家(2016)
奇偶分家(2016)
354 1
|
4月前
打印2进制位数的奇数位和偶数位
打印2进制位数的奇数位和偶数位
|
8月前
7-5 奇偶分家
输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。
65 0
|
9月前
打印整数二进制的奇数位和偶数位
打印整数二进制的奇数位和偶数位
27 0
|
9月前
C语音:打印整数二进制的奇数位和偶数位
总体思路: (一). 输入数据 (二). 打印奇数位: 使用 for循环 循环产生 1~32 之间的偶数, 使用 移位操作符 移动偶数位,移动后就是奇数位, 这时再 按位与1 取出当前位, 进行打印。打印完奇数后进行 换行
|
10月前
找出列表中的偶数位元素
找出列表中的偶数位元素
42 0
|
算法
C生万物 | 使用宏将一个整数的二进制位的奇数位和偶数位交换
妙用位运算【按位与、按位或、移位】,交换一个二进制位的奇偶数位
86 0
C生万物 | 使用宏将一个整数的二进制位的奇数位和偶数位交换