如何理解维持现状偏差?

基本概念

“维持现状偏差”是一种人类规避变化的心理本能,即使该变化可能带来好处,但是对改变的恐惧会让人无法采取行动。

深入理解

也就是说,人类的大脑比起对于做新事物之所得,反而会对做新事物之所失有扩大性的评价,于是大脑程序会尽可能地做出没有变化的选择。比如:

A:无条件获得1000日元。

B:玩“剪刀石头布”,如果赢了,得3000日元;输了,一分钱没有。

在确定要二选一的情况下(尽管理论上的期待值是B更高),但大多数人会选A(因为只有胜负两种情况,所以B的期待值是3000日元除以2等于1500日元)。

反之:

A:不得不交1000日元的罚金。

B:无“剪刀石头布”,如果赢了,可以免处罚金;但是输了,要交3000日元。

在这种情况下,虽然理论上期待值是A更高,但是选B的人数却在增加。相对于之后可能到手的东西,人们会对已经到手的东西更加爱惜,于是日常生活中会发生下列事情:

  • 尽管在职场中有各种不满,但就是没办法跳槽。
  • 对已经在一起很久的恋人即使有不满,也没办法开口说出分手。
  • 哪怕交往很久的恋人,也没办法踏入婚姻的殿堂。
  • 尽管有自己一直想挑战的体育项目,但就是没办法开始参与。
  • 尽管想减肥,但就是控制不住吃零食。

“维持现状偏差”是人类具备的生存和防御的本能。“迄今为止,这样的行事方式也不至于消亡,所以就继续控制在这种方式内而不采用新方式”的想法确实增加了脱离生命危险的可能性。

然而要完成新目标的时候,“维持现状偏差”就变成了实现目标的最大阻碍。

例如产生下面这些劝导自己的内心独白:

  • 尽管工资很低,但是觉得适合自己,而自己也没有太大的抱怨。
  • 现在的恋人虽然不完美,但是分手之后难以保证会遇到更好的人。
  • 因为现在很忙,所以等有时间的时候再想吧。
  • 结婚之后可能会十分幸福,但是也会产生各种制约。
  • 这个月的聚会太多,减肥这件事等下个月再开始进行吧。

这就在无意识中阻挡了变化和新的挑战。

此外,这种心理还可能被人所套路,例如网购先体验再付款,虽然并不十分满意,但又懒得退货?分期购买时,若不完全支付将失去最终资格,已使用一段时间虽然效果并不理想却还是继续付尾款?

甚至,会让人变得毫无斗志,无法明确自己的人生目标,

不想设立目标的原因是一旦公开却没有完成的话,不仅非常尴尬,而且心理上受不了。由于虚荣心作怪,所以很难跨越“维持现状偏差”这一障碍。

克服办法

如果要克服这个心理,让自己走出舒适区,进入学习区(简单指乐于接收新事物),仅需要一点,要坚信自己有无限的可能性。例如

发明飞机的莱特兄弟最初肯定没有思索“怎么做才能设计出能载人飞翔的物体”,而是想“人如果能翱翔于长空,那该多逍遥啊”。

如果一开始就思考“怎么做”,就不会想“虽然迄今为止没人能在天上飞,但是我可以做到”,然后内心就会受到阻碍。

当时周围的人看到莱特兄弟肯定会说:“什么?要飞上天?这两个家伙的脑子还真是奇怪。”但是,他们深信自己有无限的可能,认为人类也可以在天空飞翔,所以才能发明出飞机。

不管你设立的目标有多高远,都没有人能证明它不可能实现。

即使以自己过去的经验判断自己不行,也不能成为你现在无法完成的理由。

即使目标是至今都没人能做到的事,也不能成为你无法做到的理由。

把自己跃跃欲试的事情设立成目标,完成的概率会大大提高。

概述快速原型模型的思想和特点

快速原型模型的主要思想是:首先快速建立一个能够反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践让用户了解未来目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进。用户会提出许多改进意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用……,这样反复改进,最终建立完全符合用户需求的新系统。

快速原型模型可以减少模型设计成本,针对于仅完成一些功能性的软件,而不考虑性能、空间等效率要求,比如系统的shell

用户的需求可能产生变化,快速原型模型可以方便的升级得到用户最终需求。从开发周期来看,可以看出它是一种循环进化的过程,用户的参与和反馈,使得这种方法开发出来的系统能够更好地满足用户的需求。

但在实际中由于开发原型系统使用的语言效率低(指开发效率低,如java,效率高的如python)等原因,除了少数简单的事务系统外,大多数原型模型都废弃不用,仅把建立原型模型的过程当作帮助定义软件需求的一种手段。

瀑布模型的优缺点?

瀑布模型是一种线性模型,也称生命周期模型。

这种模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,恰如奔流不息拾级而下的瀑布。

目前,瀑布模型仍然是软件工程中应用的最广泛的过程模型。软件过程基本上可以用瀑布模型来描述,而且是以文档为驱动,适合于需求很明确的软件项目开发的模型。

瀑布模型,在促进软件开发工程化方面起了很大的作用。但是,按照瀑布模型来开发软件,只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。它是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。由于大多数用户不熟悉计算机,系统分析员对用户领域的专业知识也往往不甚了解,因而很难在软件开发的初始阶段清楚地给出完整的需求。

如何理解软件危机?

软件危机的定义

“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件危机表现形式

(1)对软件开发成本和研制进度的估计常常很不精确。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。

2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。

(3)软件产品质量差,可靠性得不到保证。软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,提交给用户的软件质量差,在运行中暴露大量问题。

(4)软件产品可维护性差,软件开发人员在开发过程中按各自的风格工作,各行其是,没有统一、公认的规范和完整规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。

(5)软件成本在计算机系统总成本中所占的比例逐年上升。软件的发展跟不上硬件的发展。由于微电子技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本也随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

(6)软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。软件的发展跟不上用户的要求。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

软件危机产生的原因

造成上述软件危机的原因与软件自身特点有关,也与软件开发人员在开发和维护时所采用的生产方式、方法、技术有关,可概括为以下几个方面。

(1)软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂,这给软件的开发和维护带来客观的困难。

(2)软件开发的管理困难。软件规模大、结构复杂,又具有无形性,这导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。

(3)软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。

(4)软件开发技术落后。在20世纪60年代,人们注重如编译原理、操作系统原理、数据库原理等一些计算机理论问题的研究,而不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应。

(5)生产方式落后。有人统计,硬件的性能价格比在过去30年中增长了10^6。一种新器件的出现,其性能较旧器件提高,价格反而有所下降,而软件则相形见绌。软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依靠,带有很强的“个性化”特征的程序,因缺乏文档而根本不能维护,加剧了供需之间的矛盾。

(6)开发工具落后,生产效率提高缓慢。软件开发工具趋于原始,没有出现高效率的开发工具,因而软件生产效率低下。还有软件开发人员忽视需求分析的重要性,轻视软件维护也是造成软件危机的原因。

解决软件危机途径

目前,计算机的应用日益广泛,世界上发达国家的许多企业将全部投资的10%以上用于计算机领域。但到目前为止,计算机的体系结构在硬件上仍然是冯·诺依曼计算机。实际中复杂、庞大的问题,只能由专门人员编制软件来解决。假设计算机能实现智能化,能进行推理和运算,正确解决用户所提出的问题,那么软件危机就会有根本性的缓解。然而新一代计算机体系结构的研制可能还需要一段时间。那么在目前计算机硬件条件下,要想解决软件危机必须解决以下问题。

(1)首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。

(2)要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法。尽快消除在计算机系统早期发展阶段形成的一些错误观念和做法。

(3)要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。充分认识软件开发不是某种个体劳动的神秘技巧。

(4)应该开发和使用好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具也可以“放大”人类的智力,从而可以有效提高软件生产率。

软件系统开发与制造一台机器或建造一栋大厦有许多相同之处,所以要采用“工程化”的思想做指导来解决软件研究中面临的困难和混乱,从而走出软件危机的困境。

软件工程 软件的特点

答案:

  1. 软件是一种逻辑产品,没有物理实体,可以把它保存在存储体中,但无法观察到它本身的形态、功能以及作用
  2. 软件产品的生产没有明显的制造过程,软件开发完成后可以大量的复制。
  3. 软件产品在使用过程中,不存在磨损、消耗、老化等问题。但软件在运行时,为了适应软件硬件、环境以及需求的变化而进行修改,优化。
  4. 软件产品的开发主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做的”,生产效率低。
  5. 软件产品的成本相当昂贵,软件费用不断增加,软件的研制需要投入大量的人力、物力和资金,生产过程中还需对产品进行质量控制,对每件产品进行严格的检验
  6. 软件对硬件和环境有不同程度的依赖性,为了减少这种依赖性,在软件开发中提出了软件的可移植性问题。
  7. 软件是复杂的。软件是人类有史以来生产的复杂度最高的工业产品,软件是一个庞大的逻辑系统。软件开发,尤其是应用软件的开发常常涉及其他领域的专门知识,这就对软件开发人员提出了很高的要求。

软件工程中软件的定义?

答案:

软件由是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。

解释:

1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。其中的方法和规则通常是在文档中说明并在程序中实现的。特别是当软件成为商品时,相关的文档资料是必不可少的。没有相关文档,仅有程序是不能称为软件产品的。