NO SILVER BULLET.docx
《NO SILVER BULLET.docx》由会员分享,可在线阅读,更多相关《NO SILVER BULLET.docx(16页珍藏版)》请在冰豆网上搜索。
NOSILVERBULLET
没有银弹:
软件工程之本质与事故
熟悉软件工程,至少是由非技术经理,有什么性质的;它通常是无辜的,简单的,但是能够成为一个怪物错过时间表,吹的预算,和有缺陷的产品。
所以我们听到绝望地呼喊的银色子弹——一些让软件成本的下降速度的计算机硬件成本
但是,当我们展望10年的地平线,因此,我们看到没有银色子弹。
不存在单一的发展,无论在技术还是管理技术,通过它本身的承诺,甚至一个订单数量级的提高生产率,可靠性,简单。
在本文中,我将试图表明,通过审查的性质的软件问题和性能的子弹了。
怀疑论不是悲观,但是。
虽然我们没有看到令人吃惊的突破——事实上,我相信这是不符合自然的软件——许多正在鼓励创新。
一个有纪律的,一致的努力开发,传播,并利用这些创新确实应该产生一个订单数量级的改善。
是无捷径,但有一条路。
第一步的管理疾病是更换恶魔理论与体液理论的生殖理论。
这一步,是希望的开始,在所有希望破灭的神奇的解决方案。
它告诉工人就逐步发展,巨大的努力,并持续不懈的服务,将不得不支付一个学科的清洁。
因此它是与软件工程。
它有很难吗?
——必不可少的困难
不仅有没有银弹现在看来,很自然的软件就不可能会有任何——没有发明,为软件的生产率,可靠性,和简单什么电子,晶体管,和大规模集成了计算机硬件。
我们不能指望永远看到双重收益每两年。
首先,必须注意到,异常不是软件的进展是缓慢的,但计算机硬件的进步很快。
没有其他技术文明时代开始以来已看到六个数量级的性能价格增加30年。
在没有其他技术可以选择采取增加可以改善性能或降低成本。
这些收益流的转变从一个组装电脑制造业为过程工业。
其次,看看有什么进展速度可以期望在软件技术,让我们研究的困难,技术。
亚里士多德,我把他们分为本质,固有的困难的性质,软件,和事故,困难,今天参加生产而不是天生的。
一个软件实体的本质是建设相关联的概念:
数据集,数据之间的关系,算法,和函数调用。
这实质上是在这样一个概念结构是相同的,在许多不同的表述。
它仍然是高度精确和丰富的详细。
我认为最难的部分建筑软件的规格,设计,和测试这一概念建构,不是劳动的代表和测试富达的代表。
我们还使语法错误,肯定;但他们模糊与概念上的错误在大多数系统。
如果这是真的,软件将很难。
这本身就是没有银色子弹。
让我们考虑的固有特性的这一不可约的本质的现代软件系统的复杂性,整合,可变性,和隐形。
复杂性。
软件实体更复杂的大小或许比任何其他人类建构因为没有双方都(至少在语句级)。
如果是,我们使相似部分为一个子程序——打开或关闭。
在这方面,软件系统不同于计算机,建筑,汽车,在重复的内容丰富。
数字计算机本身是更复杂的比大多数人建立:
他们有非常大的多的国家。
这使得构思,描述,和测试他们的努力。
软件系统有数量级更多的国家比电脑。
同样,一个扩大的一个软件实体不只是重复同一元素在较大尺寸的,它必然是增加了一些不同的元素。
在大多数情况下,这些要素相互交流,在一些非线性的方式,和整体的复杂性远远超过线性增加。
软件的复杂度是一个重要的属性,并非偶然。
因此,描述一个软件实体,其复杂性往往抽象的抽象本质。
三个世纪以来,数学和物理科学取得了很大进步,通过建立简化模型的复杂现象,获得性能的模型,并验证这些特性的实验。
这种模式的工作,因为的复杂性,忽略了模型不必不可少的特性的现象。
它不工作时的复杂性的本质。
许多经典的问题开发软件产品来自这个必不可少的复杂性和非线性的增加大小。
从复杂性带来的困难,团队成员之间的交流,从而导致产品缺陷,成本超支,进度延误。
从复杂性是难以计数,不太理解,所有可能状态的程序,从那来的不可靠性。
从复杂的函数来调用函数的困难,使程序难以使用。
从复杂的结构是难以扩大计划,不产生副作用的新功能。
从复杂的结构来unvisualized状态构成安全活板门。
不仅是技术问题,但管理问题,以及来自复杂。
它概述努力,从而阻碍概念完整性。
这使得它很难找到并控制所有松散的目的。
它创造了巨大的学习和理解的负担,使人员更替的灾难。
整合。
软件的人并不孤单面对复杂性。
物理学研究非常复杂的物体,即使在“基本粒子”水平。
物理学家对劳动力,然而,在一个坚定的信念,有统一的原则被发现,无论在理论还是在unifiedfield夸克。
爱因斯坦认为,必须有对自然的简单解释,因为上帝并不是反复无常和。
没有这种信心的舒适的软件工程师。
大部分的复杂性,他必须掌握的是任意的复杂性,强迫莫名其妙的许多人权机构和系统的接口必须符合。
这些不同的接口的接口,和不时,不是因为迫不得已,但只是因为他们是由不同的人,而不是上帝。
在许多情况下,必须符合的软件,因为它是最近到达现场。
在其他国家,它必须是因为它被认为是最合适的。
但在所有情况下,多的复杂性来自于构象其他接口;这种复杂性不能简化了任何重新设计的软件单独。
易变性。
软件实体不断受到压力的变化。
当然,这样的建筑,汽车,电脑。
但制造东西经常更改后制造的;他们是取代后的模型,或根本的变化纳入later-serial-number副本相同的基本设计。
召回汽车真是相当罕见;改变电脑少一点的话。
无论是更频繁比修改了软件。
部分,这是因为软件系统体现其功能,和功能的部分,最感到压力的变化。
一部分是因为软件能够更容易修改——它是纯thought-stuff,无限的延展性。
建筑实际上得到改变,但高成本的变化,了解所有,有助于抑制冲动的变化。
所有成功的软件得到改变。
2过程的工作。
首先,作为一个软件产品的发现是有用的,人们尝试在新的情况下在边缘或超出原来的域。
扩展功能的压力主要来自用户谁喜欢的基本功能和发明新的使用它。
其次,成功的软件生存超出正常生活的车,它是第一个写。
如果没有新的电脑,那么至少新磁盘,新的显示,新的打印机来;和软件必须符合其新车辆的机会。
总之,软件产品是嵌入在一个文化矩阵的应用,用户,法律,和机械车辆。
这些都不断的变化,与变化的无情力量改变对软件产品。
隐形。
软件是无形的,几何抽象的有力工具。
建筑物的地板计划帮助建筑师和客户评价空间,流量,意见。
矛盾和不明显。
规模的机械零件图纸和坚持数字模型的分子,虽然抽象,达到同样的目的。
一个几何现实中捕获的几何抽象。
软件的现实本质上不是在空间。
因此,它没有准备几何表示的方式,土地的地图,硅芯片有图,电脑已连接原理图。
一旦我们试图对软件结构图,我们发现它是不一,但一些,一般有向图叠加在另一个。
若干图可以表示控制流,数据流,模式的依赖,时间序列,命名空间的关系。
这些图形通常不均匀平面,多层次少。
事实上,方法之一是建立概念的控制这些结构是执行环节削减到一个或多个图形成为分层。
[1]
尽管进展的限制和简化结构的软件,他们仍然是内在的unvisualizable,从而不允许想使用它的一些最强大的概念工具。
这不仅缺乏阻碍了设计过程中,在一个想法,这严重阻碍了沟通心灵。
过去的突破解决意外的困难
如果我们研究的三个步骤,软件技术开发已最富有成果的过去,我们发现每个攻击不同的主要困难,建设软件,但这些困难已意外,不必不可少的,困难的。
我们还可以看到自然极限的推断每个这样的攻击。
高级语言。
当然,最强大的中风的软件生产率,可靠性,和简单已逐步使用高级语言编程。
大多数观察家信用发展至少五倍的效率,并伴随提高可靠性,简单,和理解。
什么是高级语言完成的呢?
它使一个程序从它的大部分偶发复杂性。
摘要:
行动计划由概念,数据类型,序列,和通信。
具体程序是有关,登记,条件,分支,渠道,磁盘,等。
在某种程度上,高级语言体现了建构一个想在抽象程序和避免所有较低,它消除了整体的复杂程度没有固有的程序在所有。
最高级语言可以做的是提供所有的构造,程序员在抽象程序。
诚然,我们思考问题的层次数据结构,数据类型,和业务正在稳步上升,但在一个不断下降率。
和语言发展的办法接近成熟的用户。
此外,在一些点,制定一个高层次的语言创建一个tool-mastery负担增加,没有减少,知识的任务的用户很少使用深奥的构造。
分时。
分时带来了重大的改进在程序员的生产力和质量的产品,虽然没有那么大,由高级语言。
分时攻击一个完全不同的困难。
分时保留的即时性,从而使一个保持概述复杂性。
缓慢回升的一批编程是一个不可避免地忘记细节,如果不是很推力,什么人想当他停止程序和要求编制和执行。
这种中断是昂贵的,一个人必须刷新自己的记忆。
最严重的影响可能是衰减的掌握都是发生在一个复杂的系统。
缓慢的周转时间,如机器复杂,是一个意外而不是一个必不可少的困难,软件过程。
限制的潜在贡献分时直接。
主要影响分时缩短系统的响应时间。
作为这种反应时间为零,在一些点,它通过人类的门槛,显而易见的,约100毫秒。
超出阈值,没有好处,是可以预料的。
统一的编程环境。
和interlisp,第一集成编程环境开始广泛使用,似乎有提高生产率的积分因子。
为什么呢?
他们攻击的意外困难,导致使用个人计划,提供综合图书馆,统一的文件格式,和管道和过滤器。
因此,概念结构,原则上可以随时调用,饲料,和使用他人确实可以轻松地这样做,在实践中。
这一突破性的发展反过来刺激整个toolbenches,因为每一个新的工具,可以适用于任何程序使用的标准格式。
因为这些成就,环境问题是今天的许多软件工程研究。
我们期待在他们的承诺和限制在下一节。
希望为银
现在让我们考虑的技术发展,往往是最先进的潜在的银色子弹。
什么问题,他们解决的问题——本质,或其余意外困难?
他们提供了革命性的进展,或增量的?
艾达和其他高级语言的进展。
一个最吹捧近期发展是艾达,一个通用的高级语言,1980年代的艾达不仅反映进化改进语言的概念,但实际上体现了鼓励现代设计和模块化的特点。
也许艾达哲学更是一个比艾达的语言,它是哲学的模块化,抽象数据类型,层次结构。
艾达是富,一个自然结果的过程,要求奠定了其设计。
这不是致命的,为子集的工作词汇学习可以解决问题,和硬件的进步会给我们廉价的聚合物为编译成本。
推进构建软件系统确实是一个很好用的增加聚合物的美元的购买。
操作系统,大声谴责在1960年代的记忆和生命周期成本,已证明是一个很好的形式,使用部分的和廉价的内存字节过去五金浪涌
然而,艾达将不能证明是银色子弹杀软件生产率的怪物。
这是,毕竟,只是另一种高级语言,和最大的收益从这些语言来自第一过渡的转型——从意外复杂的机器更为抽象陈述,一步一步的解决方案。
一旦这些事故已被删除,其余的将较小,与支付其去除一定会减少。
我预计,今后十年,当时效力艾达评估,它将被视为已作出了重大的差异,但不因任何特定的语言特征,也不是所有这些组合。
新艾达环境也证明是事业的改善。
艾达的最大贡献,将切换到它引起现代软件设计技术培训。
面向对象编程。
许多学生的艺术坚持面向对象编程更希望比任何其他技术潮流的一天。
[2]我在他们。
马克舍曼的笔记与达特茅斯消息必须仔细区分不同的想法,这个名字:
抽象数据类型和层次类型。
这一概念的抽象数据类型是一个对象的类型应定义一个名字,一套正确的价值观,和一套适当的行动,而不是由它的存储结构,它应该被隐藏。
例如艾达包(私人类型)和调制模块。
层次类型,如simula-67的类,允许一个定义的通用接口,可以进一步完善提供下属类型。
两者的概念是orthogonal_one可能不隐藏和隐藏没有等级。
这两个概念代表了真正的进步,建筑的艺术软件。
每个删除另一个意外的困难的过程,使设计师表达设计的精髓而无需大量表达语法材料,添加任何信息内容。
为抽象类型和层次类型,其结果是删除一个高阶的意外困难和允许高阶设计表达。
然而,这样的进步可以做不超过删除所有意外困难表达设计。
复杂的设计本身是必不可少的,而这种攻击没有任何变化。
一个数量级的增益可以通过面向对象编程只有在不必要的type-specification灌木仍然在我们的编程语言本身是十分之九的工作,参与设计的程序产品。
我不相信。
人工智能。
许多人期望在人工智能的研究进展提供了革命性的突破,将给地提高软件生产率和质量。
【3】我不。
要知道为什么,我们必须解释何谓“人工智能。
”
d.l。
帕纳斯澄清用语的混乱:
[4]
完全不同的定义,我在今天普遍使用的。
ai-1:
使用计算机解决问题,以前只能解决运用人类的智慧。
2:
使用一组特定的编程技术称为启发式或以规则为基础的编程。
在这种方法中人类专家研究确定什么启发式或规则的拇指使用解决问题的…该计划的目的是解决问题的方式,人类似乎解决它。
第一个定义有一个滑动的意思了…能符合定义1但今天,我们看到程序如何工作和了解这个问题,我们不认为这是任何更多…不幸的是我不能确定的技术,独特的这一领域的…大部分的工作是解决问题的具体的,和一些抽象或创意是需要了解如何转移。
我完全同意这一批判。
该技术用于语音识别似乎没有什么共同的用于图像识别,既不同于使用专家系统。
我很难看到的图像识别,例如,将使任何明显的差异,在编程实践。
同样的问题是真正的语音识别。
硬物建设软件是决定什么人想说的,不是说它。
没有便利的表达可以给超过边际收益。
专家系统技术,人工智能2,值得一段自己。
专家系统。
最先进的人工智能技术,和最广泛的应用,是技术专家系统开发。
许多科学家正在努力工作,运用这一技术在software-building环境。
[3,5]的概念是什么,和什么样的前景?
专家系统是一套包含广义推理引擎和规则库,采用输入数据和假设,探讨了推论的推导从规则库,收益率的结论和建议,并提供解释其结果为用户定义的推理。
推理引擎通常可以处理模糊或概率数据和规则,除了纯粹的确定性逻辑。
这种系统提供了一些明显的优势超过编程算法设计到同样的办法来解决同样的问题:
inferece-engine技术开发应用独立的方式,并应用于很多用途。
一个可以证明努力的推理引擎。
事实上,这个技术很先进。
可变部分的application-peculiar材料编码规则基础,以统一的方式,和工具提供了发展,变化,测试,和记录的规则库。
本规范的许多复杂的应用程序本身。
权力的这种系统不是来自ever-fancier推理机制而不是ever-richer知识基础,更准确地反映真实的世界。
我认为最重要的推进提供的技术是分离的应用程序本身的复杂性。
这怎么能技术应用于软件工程任务?
在许多方面:
这种系统可以显示界面规则,建议测试策略,记得bug-type频率,并提供优化提示。
考虑一个假想的测试顾问,例如。
在其最基本的形式,诊断专家系统是非常喜欢飞行员的清单,只是列举建议,可能造成的困难。
随着越来越多的体系结构体现在规则库,规则库,如需要更复杂的帐户的麻烦的症状报告,测试顾问变得越来越具体的假设产生和测试建议。
专家系统可以脱离最根本上从传统的,其规则库可能应该分层模块化方式相同,相应的软件产品,使产品的模块化改性,诊断规则库可以模块化以及修改。
工作需要产生的诊断规则的工作,就必须做无论如何在生成的测试用例集的模块和系统。
如果是在一个适当的一般方式,以一个统一的结构规则和良好的推理引擎,它可能实际上减少了总劳动产生运行测试用例,并帮助以及终身维护和修改测试。
在相同的方式,人们可以假定其他顾问,可能很多,可能是简单的,对其他地区的software-construction任务。
许多困难妨碍早日实现专家系统顾问程序开发者有用。
一个关键的一部分,我们的假设,是开发简单的方式从program-structure规范的自动或半自动生成的诊断规则。
更加困难和重要的是双重的,知识获取任务:
寻找表达自我分析专家,谁知道为什么他们做事,并制定有效的技术提取他们所知道的和蒸馏成规则的基础。
基本前提建立专家系统是专家。
最强大的贡献的专家系统将被放在服务的经验的积累的经验和智慧的最好的程序员。
这是一个不小的贡献。
之间的差距,最好的软件工程实践和一般实践是非常wide_perhaps比任何其他工程学科。
一个工具,传播良好做法是很重要的。
自动编程。
近40年来,人们一直期望和写作“自动编程,或产生一个程序解决一个问题,从问题的声明规格。
今天有些写得好像他们希望这种技术提供下一个突破。
[5]
帕纳斯[4]意味着这个词是用于魅力,不是语义内容,主张,
总之,自动编程一直是一种委婉说法编程的高级语言是目前提供给程序员。
他认为,在本质上,在大多数情况下,它是解决的方法,而不是问题,其规格已得到。
一个可以找到例外。
技术建设发电机组是非常强大的,它是经常使用的良好优势项目排序。
一些系统的积分微分方程也允许直接规范的问题,和系统评估的参数,选择从图书馆的求解方法,并生成程序。
这些应用有非常良好的性能:
这个问题很容易的特点是相对较少的参数。
有许多已知的方法解决方案提供一个图书馆的替代品。
广泛的分析导致了明确的规则选择的解决方案的技术,给定参数。
很难看到这种技术推广到更广泛的世界的普通软件系统,在这种情况是例外的整洁。
它甚至很难想象如何突破泛化可能发生。
图形编程。
最喜欢的科目为博士论文软件工程图形,或视觉,程序设计——计算机图形学的应用软件设计。
[6,7]有时承诺举行了这样一种做法是假定类推与超大规模集成电路芯片设计,其中计算机图形学中多产的作用。
有时理论家证明该方法考虑流程图作为理想的计画-设计中提供了强大的设施施工。
即使没有说服力的,更令人兴奋的,尚未出现,这种努力。
我深信,没有什么会。
在第一个地方,我认为在其他地方[8],流程图是一个非常贫穷的抽象的软件结构。
事实上,它是最好看作是伯克斯,冯诺依曼,和哥斯廷的尝试提供了急需的高层次的语言对他们提出的计算机控制。
在可怜,多页,connection-boxed形式的流程图今天被阐述,它已被证明是无用的,作为一个设计工具——程序员画流程图后,而不是之前,编写程序的描述。
其次,今天的屏幕太小,在像素,显示的范围和解决任何认真详细的软件流程。
所谓的“桌面”今天的工作站,而不是一个“airplane-seat”隐喻。
任何人谁洗牌圈完整的论文而坐的乘客将承认两国之间的差异——一个能看到的只有极少数的事一次。
真正的桌面提供了概述,和随机访问,评分的页面。
此外,在适合的创造力强,多个程序员或作家已经知道放弃的桌面更宽敞的楼。
硬件技术将大大推进之前我们的范围范围是足够的软件设计任务。
更重要的是,正如我上面所讨论的,软件是很难想象。
一个图的控制流,variable-scope筑巢,可变交叉引用,数据流,分层数据结构,或任何人,只有一个维度的错综复杂的联锁软件的大象。
如果所有的图表叠加产生的许多相关的意见,很难提取任何全球概览。
超大规模集成电路类比根本是误导——一个芯片的设计是一个分层的二维描述其几何形状,反映了其在三维空间的实现。
一个软件系统是不。
程序验证。
许多努力在现代编程进入测试和修复错误。
有没有可能银色子弹被发现通过消除误差的来源,在设计阶段?
既可以从根本上提高生产力和产品的可靠性后,深刻的不同策略证明设计正确之前,巨大的努力投入实施和测试?
我不认为我们会发现生产力魔术这里。
程序验证是一个非常强大的概念,这将是非常重要的诸如安全操作系统内核。
技术不答应,然而,节省劳动力。
核查工作太多,只有几个重大项目所验证。
程序验证并不意味着错误的程序。
有没有魔术这里,要么。
数学证明也可以是错误的。
因此而验证可能会减少program-testing负荷,不能消除它。
更严重的是,即使是完美的程序验证才可以建立一个程序符合规格。
最难的部分软件的任务是到达一个完整和一致的规格,和许多建筑的本质其实是调试程序的规范。
环境与工具。
如何更多的收益可以预期从爆炸的研究更好的编程环境?
人的本能的反应是,big-payoff问题——分层文件系统,统一的文件格式,使统一的接口,和广义的工具——是第一次攻击,并已解决。
语言智能编辑发展尚未在实践中广泛使用,但大多数他们的承诺是自由和简单的语义错误语法错误。
也许最大利润尚未实现的编程环境是利用综合数据库系统来追踪无数的细节,必须准确地回顾了单个程序员和保存的一组合作者在一个单一的系统。
当然,这项工作是值得的,并肯定会承担一些水果在效率和可靠性。
但由于其本身的性质,返回从现在必须边际。
工作站。
什么收益预计为软件艺术从某些快速增加的力量和记忆能力的个人工作站?
嗯,多少可使用一次卓有成效?
组成和编辑程序和文件完全支持今天的速度。
编译可以提高,但10个因素在机器的速度肯定会离开thinktime主要活动在程序员节。
事实上,它似乎是现在。
更强大的工作站,我们当然欢迎。
我们不能期望从他们的魔法效果。
有前途的攻击概念的本质
虽然没有技术突破的承诺给予的那种神奇的结果与我们所熟悉的在硬件方面,既有丰富的良好的工作目前正在进行,并保证稳定,如果不引人注目的进展。
所有的技术攻击对事故的软件过程基本上是有限的,产能方程:
如果,我相信,这个概念的组成部分的任务现在大部分时间,然后没有任何活动的任务仅仅是表达的概念可以给产能。
因此,我们必须考虑这些攻击的本质,解决软件问题,制定这些复杂的概念结构。
幸运的是,其中一些攻击是非常有前途的。
购买与建立。
最激进的解决方案构建软件不是建立在所有。
每一天,这变得更加容易,因为越来越多的供应商提供更多、更好的软件产品令人眼花缭乱的各种应用。
虽然我们的软件工程师都生产方法,创造了个人电脑革命不一,但许多,大众市场的软件。
每一个报摊进行月刊杂志,其中按机器类型,广告和审查数十种产品,价格从几元到数百元。
更多的专业人士提供非常强大的产品为工作站和其他作业系统市场。
即使软件工具和环境可以买现成的。
我已在别处提出市场个别模块。
[9]
这种产品是便宜比重新建设。
即使在一个十万美元的成本,购买一个软件成本大约只有尽一programmeryear。
和即时!
立即至少产品真的存在,产品的开发人员可以参考产品到用户。
此外,这些产品往往是更好的记录和更好地保持比国产软件。
发展大众市场,我认为,最深刻的长期趋势的软件工程。
软件的成本一直是开发成本,不复制成本。
分享成本之间甚至一些用户根本上削减每用户成本。
另一个角度看,它是使用复制一个软件系统有效乘以其开发者的生产力,是提高生产力的纪律和民族。
关键的问题,当然,是适用性。
我可以用一个现成的软件包完成我的任务?
一个令人惊讶的事情发生在这里。
在1950和1960年代,研究后,研究表明,用户将无法使用现成的软件包的薪金,库存控制,应收账款,等等。
要求太专业,太高的案件的变化。
在1980年代,我们发现这种封装在高需求和广泛使用。
发生了什么变化?
不,真的。
他们可能有些更广义和更可定制的比以前,但不多。
不,不是。
如果有的话,商业和科学的需求更加多样和复杂的今天比20年前的。
大的变化已在硬件/软件成本比率。
1960,买方的200万美元的机器觉得他能买得起250000美元一个定制的工资程序,一个很容易和nondisruptively到computer-hostile社会环境。
今天,买方的50000美元的办公机器不可能提供一个定制的工资程序,所以他适应工资程序可用包。
计算机现在如此普遍,如果不让心爱的适应,这是理所当然的接受。
有戏剧性的例外,我认为推广软件包已改变了多年来:
电子表格和数据库系统。
这些强大的工具,那么明显的回顾与但这么晚出现,借给自己无数的用途,一些比较另类。
文章和书籍现在比比皆是在如何应对突发任务的电子表格。
大量应用,将原已书面自定义程序语言中或报告程序生成现在经常做这些工具。
许多用户现在经营自己的电脑,一天又一天的各种应用,从来没有书面程序。
事实上,许多这些用户无法写新程序的机器,但他们仍然是善于解决新问题与他们。
我相信最有力的software-productivity战略的许多组织今天是使计算机天真的知识工作者的发射线与个人电脑和广义写