六安沧州西安三亚宝鸡菏泽
投稿投诉
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

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

  我和几乎所有的CommonLisp和CLOS(CommonLispObjectSystem)的设计者都极度深受麻省理工学院斯坦福大学(MITStanford)设计风格的影响。这种风格的本质可以用正确的做法(therightthing)这个短语来概括。对于这样的设计者,重要的就是要遵循下面的这些设计理念:
  简单性设计必须简单,这既是对实现的要求,也是对接口的要求。接口的简单要比实现的简单更加重要。
  正确性设计在任何值得注意的方面都要保证正确。不正确是绝对不允许的。
  一致性设计必须保持一致兼容。设计可以允许轻微少量的不简单和不完整,来避免不一致。一致性和正确性同等重要。
  完整性设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都必须覆盖到。简单性不能过度的损害完整性。
  我相信大部分的人都会同意,这些理念都是一些好的实施原则。我把采用这种设计哲学的方法叫做麻省理工方法(MITapproach)。CommonLisp(包括CLOS)和Scheme代表着麻省理工方法的设计和实现。
  差点的更好(WorseisBetter)的理念只是稍微有点不同:
  简单性设计必须简单,这既是对实现的要求,也是对接口的要求。实现的简单要比接口的简单更加重要。简单是设计中需要第一重视的因素。
  正确性设计在任何值得注意的方面都要求正确。为了简单性,正确性可以做轻微的让步。
  一致性设计不能过度不兼容一致。为了简单,一致性可以在某些方面做些牺牲,但与其允许设计中的这些处理不常见情况的部分去增加实现的复杂性和不一致性,不如丢掉它们。
  完整性设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都应该覆盖到。为了保证其它几种特征的品质,完整性可以作出牺牲。事实上,一旦简单性受到危害,完整性必须做出牺牲。一致性可以为实现的完整性作出牺牲;最不重要的是接口上的一致性。
  早期的Unix和C语言是使用这种设计理论的代表,我把采用这种设计策略的方法叫新泽西方法(NewJerseyapproach)。我一直在有意的讽刺这种差点的更好理论,让人们相信它显然是一种不好的理论思想,新泽西方法就是一种不好的软件实现方法。
  然而,我相信,即使在一种假象的情况下,这差点的更好理论也要比正确的做法理论有更大的生存空间,也就是说,在软件开发上,新泽西理论要比麻省理工理论更实用。
  让我来复述一个故事,向大家展示麻省理工方法和新泽西方法之间的真实区别,以及为什么各个理论的支持者都完全的相信他们的理论更好。
  两位著名的人物,一位是来自麻省理工,另一位来自伯克利学院(但是研究Unix的)。一次,他们遇到一起讨论操作系统问题。来自麻绳理工的人对ITS(麻省理工学院人工智能实验室的操作系统)非常熟悉,并阅读过Unix的源代码。他对Unix如何解决PC机的losering问题非常有兴趣。当一个用户程序调用系统例程去执行一个长时间的、并包含有重要状态的操作时,例如IO缓冲,losering问题就有可能出现。如果在执行这个操作时,发生了中断,用户程序的状态必须被保存下来。因为对系统例程的调用通常是单指令的,运行用户程序的PC机无法捕捉到例程的过程状态。系统例程要么退出,要么强行继续运行。正确的做法是退出,复原用户程序调用系统例程的指令,让用户程序在中断之后能重新恢复运行,例如,重新进入系统例程。这被叫做PClosering,因为PC机被强制进入一种弱势(loser)模式,其中,弱势者是麻省理工对用户的一种爱称。
  麻省理工的人没有看到有任何的用来处理这种情况的代码,问新泽西人,Unix是如何处理这种问题的。新泽西人说,Unix人清楚这个问题,但提供的解决方式是针对系统例程通常能正常完成的情况的,当系统例程不能成功的完成运行时,它会返回一个错误码,指示操作运行失败。一个正确的用户程序这时需要去检查这个错误码来决定是否需要再次调用这个系统例程。麻省理工人不喜欢这个解决方案,因为这不是正确的做法。
  新泽西人说,Unix的解决方案是正确的,因为Unix的设计理论是追求简单,而这正确的做法太复杂。除此之外的好处是,程序员能容易的添加这种错误探测,重复他们的操作。麻省理工人指出,这种实现方案确实简单,功能性上的接口却变的复杂。新泽西人指出,这就是Unix在设计上做出的合适的取舍。实现上的简单比接口上的简单更重要。
  麻省理工人这时嘟囔着说:有时你需要让一个强壮的人去变成一种软弱的小鸡。新泽西人没明白他是什么意思(我也不太明白)。
  现在,我开始主张差点的更好确实是更好。C语言是一种为开发Unix而设计的语言,它的设计采用的是新泽西方法。C语言因此是一种很容易就能写出漂亮的编译器的语言,它要求程序员编出的代码要易于编译器去解释。有些人称C语言为高级汇编语言。早期的Unix和C编译器都非常的简单,易于移植,需要很少的硬件资源来运行,它提供了你从一个操作系统和编程语言里想得到5080的功能。
  现有的机器有一半在任何方面都低于中等配置水平(更小,更慢)。而Unix和C语言在它们上面运行良好。差点的更好理论表明实现的简单性具有最高的优先级,这意味着Unix和C语言很容易在这些机器上进行移植。因此,如果任何一台机器,Unix和C能在功能性上提供50的支持,那它就会无处不在了。Unix和C就是这样,不是吗?
  Unix和C语言是终极电脑病毒。
  差点的更好理论另外一个好处是,程序员可以有条件的牺牲某些安全性,方便性,全力去获得优良的性能和较少的资源使用。使用新泽西方法开发的软件既能在大机器上运行,也能在小机器上运行,程序具有很好的可移植性,这是因为它们是在一个病毒程序是写出来的。
  有一点很重要,初始病毒必须基本上好用。病毒的传播由于它的可迁移性而得到保证。一旦病毒传播开来,迎来的压力会促使它进一步改进,促使增加功能至接近90完备的水平,但用户此时已经有条件的习惯了这种比正确的做法差一点的东西了。所以,差点的更好的软件会首先获得人们的接受,然后会有限制的让用户降低期望,最后进行改进,直至接近正确的做法。在实际情况中,1987年的Lisp编译器当时和C编译器都是非常的优秀,但是很多的编译器专家仍然努力让C编译器做的更好。
  1995年的好消息是我们有了一个好的操作系统和编程语言;而坏消息是它们分别是Unix和C。
  差点的更好还有最后一个好处。因为新泽西式的语言和系统不够真正的强大来开发出复杂巨型的软件,大型系统必须在设计上进行组件重用。因此,一种整合的传统就此迅速出现了。
  那正确的做法的表现如何呢?我们有两种常见的模式:复杂的大型系统模式和钻石类珍宝模式。
  复杂的大型系统模式通常像这样:
  首先,正确的做法需要去设计。然后实现过程需要去设计。最后,进行实现。因为这是正确的做法,它会提供100预期的功能,实现的简单性从来不是一个可考虑的因素,所以你要用很长的时间去完成它。它巨大而且复杂。它需要复杂的工具,工具需要能正确的使用。其中20的功能会花去你80的精力,所以,正确的做法需要很长的时间来完成,它的运行只有在采用先进技术的硬件上才会表现的令人满意。
  钻石类珍宝模式通常表现如下:
  正确的做法花了大量的时间去设计,但这种方式,在单个功能点上,其实并没有占多大比重。这种设计的实现,如果想让它运行的快,要么是根本不可能,要么是超出了大多数开发者的能力。
  头一种模式也是经典的人工智能软件的开发模式。
  正确的做法出来的通常是大型的软件,但除了正确的做法会把软件设计的巨大外,没有其它的理由造成这种局面。也就是说,大型软件里很多功能是偶然会用到的。
  从这些事情中我们学到的知识是,人们通常不喜欢按照正确的做法做事。但你最好要采纳一半的正确的做法,让你的软件能像病毒一样流传。一旦人们被它吸引,花时间去改进它,使它接近90的正确的做法。

为避免用错处方药需了解些什么人们较多地认为,用错药的事易发生在非处方药上。其实,用错药且造成严重后果的,更多的是发生在处方药上。作为病人,不能得了处方就往药房里跑,拿了药只管往喉咙里灌,下面就和小编一起去……对中风的误解有哪几种呢要预防中风,首先必须对它有正确的认识,才能对它采取正确的措施。然而,现实生活中有很多人对中风认识模糊,甚至误解,很有必要加以澄清,那么对中风的误解有哪几种呢?一、中风是一……如何量脚预测孩子未来身高看过的都说准每一个家庭都希望自己孩子长的高高的,所以很多家长从小就给孩子补充各种营养,生怕影响孩子身高矮别人一截。那么,如何量脚预测孩子未来身高?看过的都说准!就让本站的小编和您一起去了解……加油站管理存在的问题各地的加油站点不断增多,其安全管理工作更是事关人民生命安全和企业经济效益的重中之重,那么加油站管理存在的问题有哪些呢?接下来本站来为大家讲解下吧。加油站常见的问题(……手足口病症状教你日常生活如何预防手足口病一般症状表现:1、急性起病急性起病,潜伏期3~5天,有低热、全身不适、腹痛等前驱症。口腔粘膜出现散在疼痛性粟粒至绿豆大小水疱,手、足出现斑丘疹、疱疹,初起为斑丘疹,……杨梅汁是酸性还是碱性杨梅汁是热性还是凉性杨梅汁是酸性还是碱性杨梅汁是碱性的。杨梅汁味道是酸的,但是食物的酸碱性不是依据食物的味道确定的,而且依据食物在人体内代谢之后的产物的酸碱性来判断的,杨梅汁中含有的代……马儿不吃鱼一秀才骑着一匹马和其他人一起赴京赶考,跋山涉水,经过一段森林时,已到了晚上,忽然眼前一亮,一家客栈出现在大家的眼前。由于秀才比较瘦弱跑的慢,秀才到客店里时东西都被其他人吃的差不……哗众取宠法国小镇禁止外星人飞碟降落和起飞法国小镇明文规定禁止外星飞碟降落起飞。我想外星人如果看见了,会笑。就好像你准备去一条河里洗澡,一只乌龟探出头说,这是我的河,你不能下来。遇见个爆脾气,直接打爆龟壳,……衣冠禽兽原本是一个褒义词它是如何变成贬义词的如今,我们说某某某是个衣冠禽兽,意思就是说他品德败坏,像禽兽一样毫无人性。不管是在辞海还是成语词典中,衣冠禽兽的意思都是贬义。但是大家知道么,在古代衣冠禽兽的意思可不是用来羞辱……袁绍为何输给曹操他是个什么样的人相信大家应该都知道,官渡之战这个战役一直都是三国历史中非常出名的一场战役。但是在这一战,袁绍大军败给了曹操。其实说到底,当时袁绍的优势可是要比曹操多的,但是最后的结果却是曹操赢……公子光是一个怎样的人公子光如何成为吴王的今天准备和各位讲讲公子光的故事。公子光是春秋末期,吴国国君,他在位时间十九年,不仅振兴吴国,还率领吴国雄霸南方,一度逼迫强大的楚王出逃,其国力来到鼎盛。如果只评价公子光的治国能……月起一大波新规将改变你的生活Managershare:明天就是国庆节了,一大波新规将开始施行。手机流量当月不清零10月1日起,移动、电信、联通推出当月流量不清零服务:用户当月剩余流量可转到下月……
幸福从何而来幸福就是在你呱呱坠地那刻起划破天宇的嘹亮;在你身处异国他乡时偶遇旧时好友的举杯畅谈;在你飞扬凌天下时佳人的悉告诫。幸福来自每个人心中。浪迹天涯的游子有幸福,他们的幸……哪些食物越新鲜越不能吃哪些食物越新鲜越不能吃?1、新鲜牛奶。现挤出的牛奶带菌,比如布氏杆菌、结核杆菌等,容易引起人畜共患传染病。此外,这种新鲜牛奶也无法保证挤奶的环境卫生、容器消毒情况以……可乐对男人的危害有哪些现在有很多男人都很喜欢喝可乐,尤其是在夏天的时候,直到有一篇报道出来,说可乐会杀精,其实对于这一点的真实性,我们无处考证,但是我们需要知道的是,经常喝可乐的确会对男人造成危害,……当心病死猪肉流入你的厨房教你一分钟鉴别中国几千年来都是以猪肉为主要肉类来源,是猪肉生产和消耗大国。但近几年关于猪肉的食品安全问题屡见报端,无论是猪流感肆虐、瘦肉精注入、猪饲料异常,还是最近闹得沸沸扬扬的病死猪肉上餐……后的呼声我们不同后不知什么时候开始,我们被冠以80后这一新范围。从那是开始,社会满是冷眼与嗤之以鼻。好像我们这一代真正成了社会的累赘。转眼间80后成了茶余饭后人们口头抨击的代名词。从此社会……老年人睡觉要注意的事项千万不要犯的睡眠禁忌睡觉是在修养自己的身体器官,也是为了第二天的工作和学习做准备工作,所以说睡觉睡得好能够让身体更加健康,可以延年益寿,但是如果睡觉的方法不对的话,轻者伤身,重者可能会没命。接下来……房间家具摆放禁忌家居装修布置家居,有什么禁忌事项吗?下面小编分别从居家布置、家具摆放、装饰摆放、还有房屋结构等方面进行简单介绍希望对您有所帮助。1、沙发不能放在阳光长时间照射的地方,因为……邻里纠纷如何起诉生活中常见的邻里纠纷问题有哪些是我们日常生活中要了解的重要知识。邻里之间是需要和平相处的,但是由此产生民事纠纷的,是可以由双方当事人协商解决的。如果协商不成的,就需要向人民法院……比较好的油漆品牌现在墙面装饰材料多种多样,墙纸、墙砖、墙布等都以强劲的姿势打入装修市场,但是油漆仍然是很多人的不二选择,这是因为油漆色彩多样,价格相对便宜,施工也方便。下面小编来为大家介绍一下……高速路上的禁止标线有哪些平时开车,走高速是家常便饭了。可是,高速上那些标线的含义,你都很清楚吗?如果不了解这些标志,很容易惹来麻烦呢。今天小编和大家说说高速路上的禁止标线有哪些。高速公路的禁止标……如何判断是否得了鼠疫鼠疫给人们带来的灾难是毁灭性的。大家要小心废墟之上鼠疫肆虐,特别是地震后,由于人们的居住环境比较差。在一些灾区群众集中的避难场所,如果生活垃圾、粪便没有得到及时处理,容易污染水……婴儿湿疹可以用金银花洗澡吗婴儿出生后家长最重要的任务就是做好护理,有的家长护理知识很强,宝宝护理得非常好;有的家长护理知识欠缺,宝宝会生病、感染等,其中婴儿湿疹就是常见症状之一。那么,婴儿湿疹可以用金银……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网