当前位置:首页 > 经验学习 > 设计思想

“差点的更好“设计理念的兴起

所属栏目:设计思想 时间:2013-12-26 来源: 作者:admin 点击:

我和几乎所有的Common Lisp和CLOS(Common Lisp Object System)的设计者都极度深受麻省理工学院/斯坦福大学(MIT/Stanford)设计风格的影响。这种风格的本质可以用“正确的做法(the right thing)”这个短语来概括。对于这样的设计者,重要的就是要遵循下面的这些设计理念:
简单性—设计必须简单,这既是对实现的要求,也是对接口的要求。接口的简单要比实现的简单更加重要。
正确性—设计在任何值得注意的方面都要保证正确。不正确是绝对不允许的。
一致性 — 设计必须保持一致兼容。设计可以允许轻微少量的不简单和不完整,来避免不一致。一致性和正确性同等重要。
完整性—设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都必须覆盖到。简单性不能过度的损害完整性。
我相信大部分的人都会同意,这些理念都是一些好的实施原则。我把采用这种设计哲学的方法叫做“麻省理工方法(MIT approach)”。Common Lisp(包括CLOS)和Scheme代表着麻省理工方法的设计和实现。



“差点的更好(Worse is Better)”的理念只是稍微有点不同:
简单性—设计必须简单,这既是对实现的要求,也是对接口的要求。实现的简单要比接口的简单更加重要。简单是设计中需要第一重视的因素。
正确性—设计在任何值得注意的方面都要求正确。为了简单性,正确性可以做轻微的让步。
一致性— 设计不能过度不兼容一致。为了简单,一致性可以在某些方面做些牺牲,但与其允许设计中的这些处理不常见情况的部分去增加实现的复杂性和不一致性,不如丢掉它们。
完整性 — 设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都应该覆盖到。为了保证其它几种特征的品质,完整性可以作出牺牲。事实上,一旦简单性受到危害,完整性必须做出牺牲。一致性可以为实现的完整性作出牺牲;最不重要的是接口上的一致性。
早期的Unix和C语言是使用这种设计理论的代表,我把采用这种设计策略的方法叫“新泽西方法(New Jersey approach)”。我一直在有意的讽刺这种“差点的更好”理论,让人们相信它显然是一种不好的理论思想,新泽西方法就是一种不好的软件实现方法。
然而,我相信,即使在一种假象的情况下,这“差点的更好”理论也要比“正确的做法”理论有更大的生存空间,也就是说,在软件开发上,新泽西理论要比麻省理工理论更实用。
让我来复述一个故事,向大家展示麻省理工方法和新泽西方法之间的真实区别,以及为什么各个理论的支持者都完全的相信他们的理论更好。
两位著名的人物,一位是来自麻省理工,另一位来自伯克利学院(但是研究Unix的)。一次,他们遇到一起讨论操作系统问题。来自麻绳理工的人对ITS(麻省理工学院人工智能实验室的操作系统)非常熟悉,并阅读过Unix的源代码。他对Unix如何解决PC机的loser-ing问题非常有兴趣。当一个用户程序调用系统例程去执行一个长时间的、并包含有重要状态的操作时,例如IO缓冲,loser-ing问题就有可能出现。如果在执行这个操作时,发生了中断,用户程序的状态必须被保存下来。因为对系统例程的调用通常是单指令的,运行用户程序的PC机无法捕捉到例程的过程状态。系统例程要么退出,要么强行继续运行。“正确的做法”是退出,复原用户程序调用系统例程的指令,让用户程序在中断之后能重新恢复运行,例如,重新进入系统例程。这被叫做“PC loser-ing”,因为PC机被强制进入一种“弱势(loser)模式”,其中,“弱势”者是麻省理工对“用户”的一种爱称。
麻省理工的人没有看到有任何的用来处理这种情况的代码,问新泽西人,Unix是如何处理这种问题的。新泽西人说,Unix人清楚这个问题,但提供的解决方式是针对系统例程通常能正常完成的情况的,当系统例程不能成功的完成运行时,它会返回一个错误码,指示操作运行失败。一个正确的用户程序这时需要去检查这个错误码来决定是否需要再次调用这个系统例程。麻省理工人不喜欢这个解决方案,因为这不是“正确的做法”。
新泽西人说,Unix的解决方案是正确的,因为Unix的设计理论是追求简单,而这“正确的做法”太复杂。除此之外的好处是,程序员能容易的添加这种错误探测,重复他们的操作。麻省理工人指出,这种实现方案确实简单,功能性上的接口却变的复杂。新泽西人指出,这就是Unix在设计上做出的合适的取舍。实现上的简单比接口上的简单更重要。

请站长喝杯咖啡?

站长一直坚持白天工作、晚上熬夜更新素材,付出了巨大的精力和时间,其中的辛酸难以言述。

坚持免积分、免登录、无任何限制下载!如果本站素材对你有用,不妨考虑请站长喝杯咖啡鼓励一下!

标签:

你应该也喜欢这些吧

共有 0 条评论

给个评价吧

验证码: