软件工程通史 pdf下载pdf下载

软件工程通史百度网盘pdf下载

作者:
简介:本篇提供书籍《软件工程通史》百度网盘pdf下载
出版社:清华大学出版社京东自营官方旗舰店
出版时间:2017-06
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

本书深受普利策获奖作品的启发,是一部难得的跨界佳作,娓娓道来的写实风格,可以帮助我们每一个人纵览计算机与软件发展史,横向整合关联行业全景,洞察蕴藏于其中的价值与商机。
本书引人入胜,读起来让人难以释卷,是一本见微知著,令人醍醐灌顶的通史,适合软件工程、信息技术、计算机、大数据等专业人员阅读和参考,是一本可以帮助他们实现科技创新与创业的重要指南。

内容简介

在软件主宰世界的当下,软件行业发展迅猛,成为让人关注的领域。从史前的计算需求,从1930年到2019年,作者从大历史观的角度追古鉴今,从大趋势,典型企业,赢家和输家,新技术,生产力/质量问题,方法,工具,语言,风险等角度,勾勒出波澜壮阔的软件工程发展史,检视软件工程发展史上的重要发明,把脉软件行业并指出企业、职业兴衰的底层原因,同时还对一些优秀的软件企业商业模式有所涉猎。
本书引人入胜,读起来让人娓娓难以释卷,是一本见微知著、令人醍醐灌顶的通史,非常适合软件工程和信息技术相关专业的学生、从业人员与有志于科技创新创业的人阅读和参考。

作者简介

  卡珀斯·琼斯(Capers Jones),2014年国际软件测试卓越奖(ISTQB)得主,著名软件工程方法论专家,软件经济数据与度量专家,软件工程发展史的参与者与见证人,Namcook Analytics联合创始人、副总裁兼首席技术官,软件生产力研究中心(SPR)总裁兼主席,ITT公司个软件度量项目负责人,IBM加州总部管理人员和软件研究人员,设计过7个专利性软件估算工具和4个商业软件估算工具,出版过15本软件工程和软件管理著作,比如《软件质量经济学》。

  李建昊,光环国际副总裁,咨询合伙人,企业转型顾问,SAFe(规模化敏捷)中国社群创始人。曾担任雅各布森国际咨询公司和ThoughtWorks公司中国区首席咨询顾问,参与SEMAT(软件工程方法和理论)中国分会以及OMG国际标准Essence相关论文的中文翻译等工作。目前专注于企业转型、产品创新和人员能力培养,在电信、传统IT、金融保险银行等领域从事敏捷培训、咨询和教练工作。

  傅庆冬,PMP,PMI-ACP,SPC4,CSM,资深敏捷教练,企业级敏捷转型专家。他专注于敏捷培训、实施及企业级转型工作已经超过8年。在帮助大型IT系统开发和管理、企业战略转型和流程变革、IT部门绩效管理等领域拥有丰富的经验。他指导团队和组织理解敏捷思想,帮助他们快速持续改进工作流程与工作效率。他具有15年以上专业软件工程经验,包括极限编程、测试驱动开发(TDD)、以及大型软件系统的持续集成与持续交付等。他也为需要提高工程技术能力的企业进行工程实践培训及辅导。

  戴波,北京石油化工学院信息工程学院院长,教授,硕士生导师,主要研究领域为安全生产信息技术及大数据分析、现代检测技术、长输管道检测等。

内页插图

精彩书评

“卡珀斯• 琼斯开创性地以通史的方式写成一部贯穿史前到2019年的计算简史,真实地诠释和还原了数据时代的前世今生以及近在眼前的未来。软件工程、信息科学、计算机、大数据等专业的学生和从业人员,一定不要错过卡珀斯博士的《软件工程通史1930—2019》。”

——托尼•萨尔瓦奇奥(Tony Salvaggio), Computer Aid公司CEO兼总裁


目录

目 录

第1章 序曲:从古到今话计算 1

人类对计算的需要 2

对数字序列的早期认识 4

那些为数学发展提供原动力的发明 8

数学和计算 10

件相关的关键发明 22

软件对人类和社会的影响 25

小结 37

第2章 1930—1939:数字计算的基础 39

现代计算的先驱 39

小型数学应用程序 43

小结 45

第3章 1940—1949:二战及战后计算机的使用 47

全球冲突与计算机的使用 47

战争期间的技术创新 49

战后的计算机 73

这十年的贡献 78

1945年的软件开发 81

小结 82

第4章 1950—1959:数字计算机和软件开始崛起 83

20世纪50年代的军用与国防计算机 83

20世纪50年代的创新者 87

20世纪50年代的编程语言 90

第一台商用计算机 91

20世纪50年代的软件应用 96

1955年的功能点 97

小结 98

第5章 1960—1969:商用计算机和商用软件的兴起 99

劳动力演进 100

早期的专业外包 102

20世纪60年代的计算机程序员 103

IBM系统/360 111

图灵奖 113

信用卡的发明 117

自动化和新的职业 118

DEC的PDP-1小型机 119

20世纪60年代的编程语言 120

20世纪60年代的计算机业务 123

诉讼永久改变了计算机世界 126

太空里的计算机和软件 127

20世纪60年代的计算机和软件的增长 129

1965年逆向的功能点 131

小结 132

第6章 1970—1979:计算机和软件开始创造财富 133

软件在70年代的发展 133

20世纪70年代期间成立的大公司 137

20世纪70年代成立的计算机公司和软件公司 139

20世纪70年代新创公司的影响力 155

应用软件发展曲折 156

大量零散的软件细分类别 157

改变计算机历史的法律诉讼 168

推动软件行业迅速发展的辅助性发明 169

1975年的功能点 173

小结 174

第7章 1980—1989:PC和个人软件崛起 175

计算的变化加速 176

20世纪80年代成立的公司 178

20世纪80年代软件应用的发展 217

大约1985年1000个功能点的结果 217

小结 218

第8章 1990—1999:万维网的发展和网络公司的兴起 221

万维网的出现 222

20世纪90年代的其他发明 224

20世纪90年代成立的公司 226

大规模更新和遗留软件老化 254

国际日期格式不兼容 256

外包业务迅速扩张 260

20世纪90年代期间软件应用的发展 260

1995年1000个功能点的结果 261

小结 262

第9章 2000—2009:社交网络和经济危机的出现 265

互联网泡沫 266

大衰退 268

21世纪00年代的创新 272

21世纪00年代建立的公司 275

2000—2010年软件的增长 303

大约2005年1000个功能点的结果 304

小结 305

第10章 2010—2019:云、众、博客、大数据和预测分析 307

预测未来 308

软件工程的专业地位 309

21世纪10年代可能的软件工程改进 313

21世纪10年代早期成立的公司 315

预测2013年到2019年的新公司和新产品 332

2010年到2019年的软件预期增长 348

大约2015年1000个功能点的结果 348

小结 349

第11章 现代软件的问题 351

对影响比较大的软件故障进行分析 351

小结 370

第12章 网络犯罪和网络战简史 373

一种新的犯罪形式 374

网络攻击的种类 385

受攻击的可能性 416

加强对网络攻击的防御 418

提高我们对网络攻击的免疫力 420

美国,网络攻击的频率和成本日益增加 429

小结 430

参考文献与网络及其他资源 431


精彩书摘

第1章

序曲:从古到今话计算

  

  我们人类对计算的需要,可能起源于逐渐开始积累物质财产这个大的背景。这样的需要很快演变成为我们需要记录家庭或部落所拥有的财产,比如多少头牛和羊,等等。一旦可以做简单的加减法,与之相关的“记录信息的需要”也随之而来,有了记录,信息保存的时间可以更长,而且还可以分享给其他的人。早期用来记录信息的载体是鹅卵石或实物,但发展到后来,人们发现可以用符号来代替。

  人类不断进化并开始以部落的方式定居之后,产生了其他的需要,比如需要测量砖瓦的尺寸和标定地界。一旦有空闲时间,我们人类又在好奇心的驱使下想要计算时空的距离和恒星的位置。

  很快,与计算有关的活儿被视为是一种繁重而乏味的体力活儿。于是,很快出现了可以帮助提高计算速度的机械装置。算盘是第一个具有开创性的计算器。

  最后,不同的决策支持工具先后问世。对快速计算、永久性数据存储和复杂决策的需要是最终启发我们人类设计和开发计算机及相关软件的关键因素。


人类对计算的需要

  这样一本讲软件工程和计算机发展史的书,不应该开门见山就直接从某个具体的时间(比如1930年)开始。没错,数字计算机和软件设计的确是1930年到1939年之间才首次明确提出来的,但它们的出现实际上离不开历史上几千年以来的许多发明。

  古往今来,人类对计算有不同形式和类型的需要。当然,更需要以固定格式来保存计算结果。

  还有一种不太容易明确的需要是对不同的选项进行逻辑分析。一个典型的例子是产品的市场化是走平稳的长线还是走快而陡峭的短线。再比如,某块特定的土地最适合种植哪一种农作物?

  更重要的决策还有某个部落是否应该对另一个部落发动战争。在今天,有些决策关系到健康,甚至生死攸关,比如,对付抗药性肺结核这一类大病,究竟用什么疗法才最有效?

  再有就是影响到经济发展的决策。一个典型的例子是共和党与民主党。哪些选择对美国经济最有利,双方的观点截然不同。

  要在不同的对立选项之间做出选择,虽然不可能双方都对,但双方显然都有可能选错。(也可能有其他更好的选择或压根儿就没有什么更好的选择)通过对民主党与共和党的辩论进行分析,我们发现双方貌似都是错的,而且,无论采取哪个党派的执政路线,最后都可能不利于美国经济健康发展。

  在计算机或软件设计专业人员看来,建一个强大的数学模型来比较提高税收(民主党目标)、减少开支(共和党目标)或兼顾两者所造成的经济影响,应该不是特别困难吧。

  然而,民主党与共和党都没有用真实的财政模型来展开理性的辩论,而是停留在巧言辞令的层面,没有任何实质性的信息或论据来支撑自己的论断。共和党与民主党的演讲简直让人大跌眼镜,双方都在极其能事指责对方,但都拿不出什么确凿可信的数据。

  这类问题在美国很多州和市也发生过。比如,2012年美国大选前,罗德岛州议会通过一项不明智的决议,每个投票站的选民人数提高一倍,目的是使投票站的数量减半。

  这个愚蠢的决定造成一个不可避免的后果,选民必须排成长队,足足等上四个小时才能投票,有些投票站甚至还得开放到深夜。

  这个问题并不是特别复杂。每个投票站每小时的人流量在很多年前就是知道的。但罗德岛州议会疏忽了对投票站减半后之于选民等待时间的影响进行充分而必要的计算。

  结果,2012年大选中,罗德岛州很多选民等不起四个小时,有的甚至没有投票就直接走人。他们的选举权被这个“脑残”议会所通过的愚蠢决议给剥夺了。议会的这项决议太差劲儿了,在没有对投票站减半对投票时间的影响进行建模之前,绝对不应该予以通过。

  今天,政府出台的法律是否明智,颁布的法规有没有经过大脑,其决策影响评估都可以用计算机和软件轻松算出来,甚至还能够从根源上消除可能出台类似愚蠢决议的任何想法。

  事实上,古往今来,人类一直都在运用数学知识做出逻辑选择,记录数据和信息,在这样的大背景下演绎出软件和计算机的发展历程。下面几个问题与软件和计算机的发展史紧密相关:

* 我们用的是什么类型的计算?

* 我们需要保存什么类型的信息或数据?

* 对于需要长期保留的信息,哪些存储方法最合适?

* 面对复杂的选项或决策,哪些分析方法对我们有帮助?

* 在进行数据与知识的交流时,有哪些最佳方法?

  穿越古今,从大历史观的角度来考虑这五个问题,纵览计算机和软件逐步用于解决这些问题的过程,是非常有意思的。


对数字序列的早期认识

  说起来,我们人类可能是先学会说话,后来才慢慢开始学会数数的,至少可以数手指头,从1数到10。早在3.5万年以前,尼安徳特人①和克罗马农人②可能就会数数,有考古发现为证:捷克斯洛伐克距今3.3万年的狼骨和非洲距今3.5万年的狒狒骨,上面都有并排的划痕。

  这些划痕记录的是过去了多少天,还是多少件物品,或只是单纯记录过去了多少时间,我们对此不得而知。狼骨最有意思,因为上面的55个划痕被分成5组,很有可能是用来记录物品或时间的。

  考古还发现,距今5万年的乳齿象象牙上有16个孔,这些孔的用途也是个未解之谜。尼安德特人和克罗马农人在公元前4.3万年~公元前3万年之间融合,所以这些饰品可能来自其中任何一方,也可能来自同时代但现在已经灭绝的其他部落。

  有趣的是,虽然现代人额前叶更宽、更高,但尼安德特人和克罗马农人的头颅和脑容量都略大于现代人。虽然脑容量与智力水平并不直接相关,但确实可以表明很早以前就存在某种形式的抽象和推理。岩洞壁画的历史可以追溯到4万年以前,这说明人类在当时至少已具备某种形式的抽象能力。

  除了计算物品和财产,对时间流逝保留类似的跟踪记录也十分重要。对于年,人类有主观的了解可能是距今1万年前的事。随着1万年前农业时代的到来,了解特定农作物的种植时间和收割时间对粮食生产有很大的帮助。

  目前已知的第一批人类定居点是公元前7000年土耳其的加泰土丘。这个泥砖构造的小镇大概有几百个居民。考古人员在此发现了农业时代的小麦、大麦和豌豆。肉类食品来自牛和其他野生动物。

  箭头、锤头、陶器、铜和铅等考古发现表明这里发生过某些形式的交易。如果没有物品记录方法,交易是很难实现的。此外还有许多壁画,或许可以说明人们对艺术有兴趣。

  早期人类对数学的认知可能来源于几个关键问题。

* 史前的数字和数学知识

通过计算物品来记录主权(所有权)

理解加法和减法两种基本运算

测量角度,比如东向或西向,以免迷路

计算时节,用来辅助农业生产

计算日常时间,用来协调集体活动

* 早期文明后出现的数学和数学知识

为建筑用途而计算实际的长宽高

为交换物品而计算重量和体积

计算长途距离,比如两个城市之间

计算山体的高度以及太阳高出地平线的位置

理解乘除法数学运算

* 牧师或巫师传授的数字或数学知识

计算天文时间,比如日食,比如恒星的运行位置

测量运动物体的速度

测量曲线、圆和不规则的多边形

测量加速度等变化率

测量音速和光速等不可见的物理现象

* 数学家提出并发展起来的数字和数学知识

对博弈和赌博中的概率进行分析

理解抽象概念,比如0和负数

理解复利等复杂问题

理解非常复杂的问题,比如无限性和不确定性

理解抽象概念,比如无理数及量子的不确定性原理

  经过仔细观察,借助于石头或划痕以及用来测量长度的木棒,史前的数字和数学知识很容易理解和掌握。加减法的演示也很容易,从一堆石头中简单增减石头即可。

  早期文明中,为了了解数字和数学知识,需要物理设备与抽象推理相结合。显然,有些刻度尺用来称重,有些角度计算器用来测量山体高度。有些记录方法用来跟踪系列事件,例如长时间观测和记录恒星在空中的位移。

  来自祭司或巫师的数字和数学知识,结合了抽象推理、精准计时、精准实测,让人清楚认识到数学所代表的东西是看不见、摸不到或不能直接测量的。这就要求有人花时间做智力研究,不再像以前那样继续从事农耕或狩猎。

  数学家提出并发展起来的数字和数学知识,可能是促成计算设备以及计算机和软件最终问世的主要原因。要求对以前的事物有系统化的认知,同时还要结合精准的测量以及对数学推导有强烈的求知欲。这些知识可能起源于数学素养良好并可以在新的方向以创造性思维扩展早期数学概念的人。

  考古发现,古城摩亨朱-达罗③曾经有过复杂的数学运用。事实上,天平秤和称重计就是在这里发现的。

  古城摩亨朱-达罗在巅峰时期可能有3.5万居民。它的街道布局为紧凑的网格状,砖和建筑物都有标准的尺寸,显示出重复使用的迹象。显然,这些都是需要精确测量的。

  摩亨朱-达罗和印度北部城市哈拉帕在建筑风格上很相似,表明古印度曾经有过中央机关。两个古城都发现过一大批描有动物图像和符号的石版,只不过其含义目前还无法破译。有些石版的封泥时期甚至可以追溯到公元前3300年。

  其他古代文明也发展了计数、算术以及长度、重量和尺度单位。埃及和巴比伦在公元前2000年就有算术。

  随着城市成为定居点并逐渐扩大,人们的闲暇时间也增多,出现了非体力劳动和狩猎的职业。这些职业不依赖于体力,毫无疑问,牧师和巫师就属于这一类。他们的时间从生存和觅食中脱离出来之后,开始进一步理解以更多形式出现的数学知识。

  长期跟踪恒星的运行轨迹,测量更远的距离,如不同村庄的产权边界和距离,测量船只的航行轨迹和位移,这些都需要更复杂的数学计算,需要精确测量角度和时间段的变化。造船业的到来,还需要更高深的数学知识,因为船体必须要能弯曲,单是直线测量还不够。

  在河里或海边荡舟或划船,不需要太多或根本不需要用到任何数学知识。但是,一旦驶入大海开始远航,就必须认识星座,以免迷失方向。

  由于大陆漂移的原因,澳大利亚远离其他所有大陆,没有陆桥在任何位置与它连接。然而,大约距今4万年前,就有人类在此定居,显然是通过长途远洋航行过去的。波利尼西亚群岛和复活节岛也远离所有大陆,但几千年前也有人类定居,这说明人们对星座有早期认识,也用到过某些数学知识。

  埃及、美索不达米亚、中国、印度和南美等很多古文明很快就积累了相当复杂的数学知识。这些数学知识往往都与基本功扎实的专业人员有关。

  大家都知道,许多古文明,如中国、苏美尔人、巴比伦人、埃及人、希腊人,都在儿童教育上投入了大量时间和精力。但很多人不知道,印度、中美洲和南美洲其实也曾经大力提供类似的训练,比如奥尔梅克人、玛雅人、印加人以及后来的阿兹特克人。

  日本也有正规的培养体系。针对上层阶级,日本的培养体系既包括兵器的运用,也包括智力教育,比如阅读、写作和数学。所有这些古文明都建立了正规的儿童培养体系和信息记录方法。

  印度北部那兰陀大学④大约建立于公元前472年,后来一直持续到大约12世纪。公元500年左右,这所大学的招生规模达到顶峰。这是古代人员规模最大的大学之一,有1万多名来自亚洲及世界各地的学生,教职人员2000多名。它是世界上第一批开展数学、物理、医学、天文和外语教育的大学。

  那兰陀大学曾经有一个活跃的翻译团队,他们把梵语和印度语的文献翻译成了多种其他语言。事实上,那兰陀大学图书馆在12世纪穆斯林入侵印度时被毁于一旦,关于那兰陀大学的许多信息都来自中国保存下来的中文翻译文献。据说图书馆规模很大,大火一直持续了六个星期。

  即使与希腊和罗马相比,印度的学者也很先进。零的概念和对星座的认识都早于欧洲(美洲中部奥尔梅克人对零的了解和运用也早于希腊人)。

  在古代,每1000个人中超过950人是文盲或只会简单的计数和简单的测量。然而,有极少数人有能力学会更复杂的计算,天文、建房搭桥、导航和造船等行业的发展需要用到这些数学知识。

那些为数学发展提供原动力的发明

  自从开始知道计数和数字概念,使用数字化信息的人就饱受困扰,因为总是需要运算速度更快、结果更可靠(相较于不借助于任何设备的人脑)。为了理解计算机和软件的重要性,我们有必要先了解早期人类为提高计算性能而做出的许多尝试。

  同时,更有必要思考计算机和软件的真实作用及价值。各种计算装置为人类思维能力提供的服务包括但不限于:

* 加减乘除基本运算

* 科学数学,包括功率、正弦和余弦等

* 金融数学,包括单利、复利和利率等投资回报率

* 逻辑计算,比如不同替代方案的路径和选择

* 时间、距离、高度和速度的计算

* 从大量分散信息的集合中推导收敛,得出有用的归纳和总结

* 演绎逻辑,从规律中得出结论

  在为写本章内容而展开调研时,我从网上搜到大量有趣、有用的资源。比如,IBM制作了一个图解数学史,甚至还可以下载到iPad上看。⑤维基百科和其他网站资源也有数十个计算机硬件史以及多个软件发展史。现在全球各地已经有十多个计算机博物馆,比如英国的伦敦科学博物馆,就陈列了一个还可以正常使用的巴贝奇分析机。

  本书将综合介绍六大发明,它们彼此促进,最后相互关联并促成了现代软件的诞生。

  在这六大发明中,排在第一位的是数学。计算设备、计算机和软件的初衷都是为了加快数值计算。数学运算大概是从加减运算开始,而后才引入乘除运算。再之后,出现其他更多更抽象的运算形式,比如几何、三角、代数和微积分等。

  第二种形式的发明是记下想法和信息,以便于分享、传播和长期保管。这类发明包括写入系统和物理存储设备。针对写下的数据,存储方式包括石板、泥版、纸莎草、动物皮、纸以及最后出现的磁存储和光存储。存储位置包括手稿、书籍、图书馆以及最后出现的数据库和云存储。

  第三种形式的发明是物理计算设备,用于协助人类学者进行(比单凭人的脑力和体力)更快、更准确的计算。常用数值表是第一个用来加快计算速度的方法。物理设备包括算盘、量角器、星盘、测量设备、机械计算器、计算尺、模拟计算机和最后出现的电子数字计算机。

  第四种形式的发明是信息发行渠道。毫无疑问,第一种渠道是口头传播,让学生或学徒记下来。但不久之后,出现了信息的传递,包括石头和骨头上的划痕,泥版上留下的记号,最后出现的象形文字、表意文字(比如汉字这样的方块字)和最后的字母表。

  第五种形式的发明是软件。这是最近出现的,2013年所用的所有软件使用年限都不到50年,50%以上的软件使用年限可能还不到20年。

  第六种形式的发明是间接发明。这些催生发明的发明虽然与计算机或软件不直接相关,但有助于促成发明本身的问世。这些激发新发明的发明中,一个是专利系统,另一个不容忽视的是塑料。


前言/序言

  我出生于第二次世界大战之前,刚好在计算机纪元的黎明到来之前。从儿时起,我就记得自己读过一些介绍集成电路的书刊,记得晶体管的发明,我还记得电视的诞生以及后来的彩色电视。
  我当年进入佛罗里达大学时,学校里还没有电脑,没有计算机科学课程,更不要说软件工程了。事实上,工科生仍然在使用计算尺,当时还有一个激烈的辩论是考试时能否使用新型的电子计算器。
  那个时候,没有个人电脑,没有个人音乐播放器,没有社交网络,只有兄弟联谊会或者姐妹联谊会,当然更没有智能手机。没有嵌入式软件应用,也没有人工电子耳蜗这种嵌入式医疗设备,所有这些东西都是后来才出现的。
  年纪稍长的读者经历了整个计算史和软件行业的起步阶段。发明创造突飞猛进,相关公司如雨后春笋般先后涌现和合并,我们生活在一个技术进步日新月异的黄金时代。
  这是我写的第十五本书。尽管我在上个世纪60年代是一名专业的程序员,但我的前第11本书,包括《编程生产力》《软件风险的评估和控制》《应用软件测量》以及《软件成本估算》,都是关于软件管理这个主题的。我对管理主题的兴趣开始于在IBM工作的时候,那是在1973年,我受命和同事查尔斯·图尔克(Charles Turk)博士一起,着手开发IBM的第一个软件估算工具。
  我在IBM时出版了自己的第一本书,随后,我到ITT创办自己的软件公司,当ITT出售电子商务业务时,我一般每两年出版一本书。
  作为《科学美国人》(Scientific American)杂志的终身读者,我喜欢和科技主题与时俱进。(我出版生涯的一个亮点是在1998年11月在《科学美国人》杂志上发表了一篇关于软件规模度量的文章,文章的特色是功能点度量)
  1998年,我卖掉自己的第一个软件公司,随妻子搬到罗德岛州,我从来没有在这里生活过,但我妻子在这里土生土长,而且当地还有很多亲戚。我们搬到这里之后不久,我就被这个州的历史深深吸引了。
  罗德岛州的经济史简直就是美国经济的缩影,开始于轮船制造业和轮船贸易,然后是制造业,再转向以劳动力为成本的服务业。2006年,我出版了《纳拉干塞特湾的历史和未来》(The History and Future of Narragansett Bay),这是我的第一本非软件相关书籍,也是我的第一本历史类书籍。
  罗德岛州一书中的“未来”这一部分内容,涉及当下正蔚然成风的问题:税收增加;政府养老保险不可持续;海湾和淡水层污染;政治冲突;新型外来疾病如(西尼罗河病毒和莱姆病);医生和牙医等专业技师的数量减少;不断膨胀的官僚主义,他们支持的不是广大人民,而是利益集团。这些不仅是州和地方上的问题,也是民族问题。
  不管怎样,通过写罗德岛州的历史对我思考软件工程领域的历史似乎也是有用的,只不过那时我已经在构思其他的书,分别是《软件工程最佳实践》(Software Engineering Best Practices)和《软件质量经济学》(The Economics of Software Quality)。我还和我的商业合作伙伴特德·马洛尼(Ted Maroney)一起,忙着创办一家新的软件公司Namcook Analytics。
  说到直接促成这本书的特殊事件,就是有一次去罗德岛州大学附近一个常去的书店闲逛,我偶然拿起一本书,它有一个有趣的标题,是保罗·斯塔尔(Paul Starr)的《美国医疗的社会转型》(The Social Transformation of American Medicine)。这本书获得了1984年的普利策奖,我要向软件工作者强力推荐。它描述医学从一门个人技艺如何转变为一个受人尊敬的职业、从勉强进行的专业训练到可能拥有任何专业都无法比拟的最好培训。
  斯塔尔的这本书激发了我写作本书的灵感。软件工程仍然只是一门个人技艺,正在逐渐趋向于成为一种真正的职业。例如,软件许可才刚刚开始;正式专业化和委员会认证仍然有待于将来的实现,不法行为的监控也需要在未来加以完善。斯塔尔的这个书给出了一个清晰的路线图,有待软件工程去完成。
  我对医疗主题一直很感兴趣,因为我的第一份编程工作就是在华盛顿的美国公共卫生服务外科医生办公室进行的。我们致力于为国家卫生研究院开发软件。
  事实上,我早期在1994年写的一本书就命名为《软件风险的评估与控制》(Assessment and Control of Software Risks),这本书使用的具体结构和格式来自于《人类传染病控制》(Control of Communicable Diseases in Man)这本医学教科书。医学格式在讨论软件问题时也很适用。
  在计算机和软件领域,新发明和公司的涌现犹如雨后春笋,以至于这本新书需要一个更切实可用的结构。我决定以每十年的时间为一章(从1930年开始直到2012年,再到以后),以此来观察软件的创新、发明和公司。社会团体和专业机构,比如电气与电子工程师学会(IEEE),计算机机械协会(ACM),信息管理协会(the Society for Information Management)和人类进步社会治理工程协会(SHARE)等,都会有所涉及。
  最后一章开始于2010年,直到2019年,包括对潜在未来进展的预测。这来源于罗德岛历史的“未来”篇章的回忆录,也预测了此书完成后的十年。
  然而,开始于1930年似乎有点太突然了。因此,我决定增加一个序曲,总结人类从古代走向现代的快速计算的历程。全书一共包括12章。
  第1章是计算学从古代到当代的序曲。这一章论述了几个相互关联的主题,包括数学运算的演变,用机械传动装置加快数学计算速度的原因;人类交流数学结论的方法;出于历史目的存储和归档数学结果的方法,包括古代著名的图书馆。
  第2章论述20世纪30年代数字计算和软件的基础。介绍了阿兰·图灵(Alan Turing)、克兰德·楚泽(Konrad Zuse)和其他一些先驱者所做的开创性工作。在这个十年中,受经济大萧条的影响,很多公司都倒闭了。IBM公司也差点失败,但是1935年社会保障的来临及时挽救了IBM,并使IBM迎来了连续45年的成长。没有社会保障,IBM公司可能挺不过那十年,那么计算机和软件的历史与今天相比,就将完全不同了。
  第3章论述20世纪40年代,介绍了二战和战后交战国中的计算机和软件。讨论了著名的英国布莱奇利公园解码器,德国克兰德·楚泽的电脑。但是在二战期间,模拟计算机才是真正的“老黄牛”,因此这本书也讨论了船载炮控制、鱼雷瞄准计算机、投弹瞄准器和其他模拟计算机装置。本章的末尾涉及早期的电子数字计算机和我们现在熟知的编程的开端。
  第4章论述20世纪50年代,这个十年见证了计算机和软件从军事和科研目的转向商业用途的过程。十年中,两项巨大的成就是年代初期建成的半自动地面防空警备系统和年代末期建成的机载轰炸雷达安全设备,它们是当时最大的两个系统。许多发明由此产生,比如晶体三极管和集成电路。COBOL等高级编程语言开始出现。
  第5章论述20世纪60年代。这个十年见证了计算机和软件变成上百个企业的商业工具。随着晶体管和集成电路替换管道和离散布线,计算机的实际尺寸有所减小。这个十年同样见证了IBM的快速成长,这归功于IBM 1401型计算机和之后的System 360型计算机。小型计算机和特殊计算机也出现了。操作系统软件和数据库应用技术软件的扩充也使计算机更便于使用。一些大学开始提供计算机科学和软件工程学位课程。软件职位需求的数量剧增。
  第6章论述20世纪70年代。这个十年见证了苹果公司和微软公司的诞生,以及商业软件包的发展趋势。一些公司开始使用软件创造新的业务模型,比如美国西南航空公司和美国联邦快递公司,采用独特的中心辐射式编排来优化物流配送。软件工程成为大学里一门普遍的学科。编程工作快速扩展,随着应用软件越来越大,变得难以管理,用来控制软件混乱状况的结构化开发应运而生。一些公司创立于这个十年,很快成长壮大并创造了超乎想象的财富,成为全球龙头,苹果和微软就是其中的两个。嵌入式医疗装置出现了,比如人工电子耳蜗。
  第7章论述20世纪80年代。占据主导地位的显然是IBM的个人电脑和DOS、Windows操作系统的出现。专业的软件公司如雨后春笋般涌现出来。编程的工作职位需求继续快速增长。面向对象的开发和面向对象的语言开始出现。由于编程语言难以理解,其数量从几十个发展到了几百个。个人电脑也开始趋于便携性,但当时第一个这样的电脑重达25磅。为了协助军事部门使用更好、更可靠的软件,美国成立了软件工程学会(SEI)。
  第8章论述20世纪90年代。这个时代最大的新闻是因特网和万维网的发展和快速膨胀。在这个时代末期,随着许许多多公司设法通过网络出售产品和服务,著名的网络公司泡沫(dot-com bubble,又称“稻糠泡沫”)开始迅速膨胀,并在下个十年的初期破灭。互联网导致远程黑客很容易入侵数据中心,滋生了网络犯罪。软件外包业务特别是国际外包业务迅速发展,因为公司已经意识到自己进行软件编程其实并不划算。
  第9章论述21世纪初期,这个十年的开始见证了网络公司泡沫的破碎,然而那些幸存下来的网络公司,比如亚马逊(Amazon),就成长为巨头。社交网络出现了,还有新型搜索引擎和新型的网站浏览器。敏捷开发方法开始流行,其他方法也同样流行,比如团队软件过程(TSP)和Rational统一过程(RUP)。到本年代末,编程语言的数量高达2500种之多,而且还在继续增长,几乎每个月都有新语言产生。所有的这些程序语言和软件老化使得维护费用变得十分昂贵。对遗留软件应用的维护和支持超越了新软件的开发,成为这个时期本行业最主要的工作。“专利流氓”这个新的细分行业出现了,专利诉讼在电脑公司、软件公司和电信公司之间形成风气,因为他们都在较劲,想方设法用专利来摧毁竞争者,推动发展。
  第10章论述21世纪10年代,这是个推测未来可能发明的时代。云、集群(crowd)、大数据和预测分析技术都是当前的发展趋势。一些将来潜在的发明可能是可穿戴式的计算机、虚拟教育和嵌入式医疗设备的重大进步,速度更快且体积更小的量子计算可能会出现。智能代理(Intelligent agent)用于在多样化的大数据源中提取有用信息,会变得日益强大。网络犯罪自然会有所增加,甚至网络战已经悄然发生。全世界现在已经有正式的网络战组织,他们发起的对工业、财政和军事部门的攻击已经很常见。
  第11章论述的主题很难定性为一个特殊的时代。这章再一次讨论一些著名的软件失败案例,发生的经过,如何做可以避免当初的失败。将这些内容放在一起讲述似乎比将它们按照年代来讲述更好。
  第12章概述网络犯罪和网络战问题的本质和形式,这些问题正在变得日趋严重和普遍。这里与前一章一样,因为网络攻击形形色色,为了突出它们的量级和严重程度,最好将它们放在一起讲。
  历史书的作者很享受写作的过程,但我也希望这本书能够让你也喜欢读。很显然,如果试图将年代框架中出现的每个公司的每一项发明娓娓道来,这本书的篇幅会达到1000多页,可能没有出版社想要出版,更没有读者愿意读了。
  因此,由于篇幅所限,有相当一部分公司略过未讲。当许多公司拥有相似的利基(niche)时,本书只引用一两个来解释这个利基。举个例子,没有必要一一列出50个数据分析公司、50个电脑游戏公司、25个网络研讨会工具公司或者25个抗病毒软件公司的名字。
  说明
  软件行业有个有趣的社会属性,就是一旦一个新利基变成热门,就会有大量相似的公司和产品风起云涌。有时,一个新发明想得到风险投资很难,但对同一个领域的下一批公司来说,就容易得多了。
  把时间线和日期串起来之后,一些信息源就会前后矛盾,对于同一个公司,一个信息源可能说其创建于1982年,另一个引用的时间却是1983年。我希望这本书在时间线和日期上是大概正确的,但也很容易有一年前后的偏差。
  这本书的目的是展示整体的发展历程以及不断涌现的发明创造。软件工程领域已经成为人类历史上最富有创造性和激情的领域之一。我希望年轻的读者有兴趣了解可能在他们出生之前出现的旧发明,希望年长的读者能喜欢阅读这许多新型的发明,比如社交网络和穿戴式计算机(很快会出现①)。
  致 谢
  像以往一样,我要感谢我的妻子艾琳(Eileen),感谢她在过去30年中对我写作15本书所给予的支持。同样感谢我的合作伙伴,特德·马洛尼(Ted Maroney),感谢他对我的各种专利和发明表示兴趣并提供支持。
  感谢本书的策划编辑贝纳德·古德温(Bernard Goodwin)对这本书和我之前一些书的支持。同时还要感谢为编辑和出版此书付出努力的所有工作人员。
  非常感谢这本书以及之前我其他书的评审人员,因为他们审过我的很多书。感谢雷克斯·布莱克(Rex Black)、加里·盖克(Gary Gack)、彼得·希尔(Peter Hill)、里昂·卡贝曼(Leom Kappelman)、阿历克斯·佩提特(Alex Pettit)、沃克·罗伊斯(Walker Royce)和乔·司各菲尔德(Joe Schofield。还有一些非正式的评审人员,比如汤姆·德佩特里罗(Tom DePetrillo)、蓬特斯·约翰逊(Pontus Johnson)、托尼·萨尔瓦吉奥(Tony Salvaggio)、保罗·斯特拉斯曼(Paul Strassmann)和杰瑞·温伯格(Jerry Weinberg),同样在此表示感谢。
  还要感谢Dr. Dobb’s Journal的编辑安德鲁·宾斯多克(Andrew Binstock),注册企业风险管理学院的格雷格·哈钦斯(Greg Hutchins),InfoQ的本·林达斯(Ben Linders)以及信息技术度量和生产力研究所的迈克尔·米拉蒂斯(Michael Milutis),他们出版了这本书和我之前书的精选特辑。
  我们软件领域的所有人都要向这一领域的先驱者和创造者致谢,他们使得这个领域如此有趣,他们是阿尔·阿尔布雷希特(Al Albrecht)、巴里·鲍伊姆(Barry Boehm)、弗雷德·布鲁克斯(Fred Brooks)、沃德·坎宁汉(Ward Cunningham)、艾瑟·戴森(Esther Dyson)、比尔·盖茨(Bill Gates)、格雷丝·霍普(Grace Hopper)、瓦兹·汉弗莱(Watts Humphrey)、斯蒂夫·乔布斯(Steve Jobs)、斯蒂夫·坎(Steve Kan)、米奇·卡珀(Mitch Kapor)、肯·奥尔森(Ken Olson)、阿兰·图灵(Alan Turing)、王安(An Wang)、杰瑞·温伯格(Jerry Weinberg)、斯蒂芬·沃尔夫勒姆(Stephen Wolfram),等等,恕不一一道来。
  过去的这些年,我有幸接触到一些高层主管,他们懂得软件对公司及对世界的价值。这些高管为提高软件方法和实践专门投资建立研究中心,而我有幸得以进入其中一些地方工作。
  这些顶级企业的高管分别是有IBM早期的托马斯·沃森(Thomas J. Watson),ITT公司的哈罗德·杰宁(Harold Geneen)和兰德·阿拉斯库格(Rand Araskog),Electronic Data Systems公司的莫特·迈尔森(Mort Myerson)以及构造计划研究所(Kozo Keikaku Engineering)的富野尚志(Hishahi Tomino)博士。富野博士的公司已经将我之前的大多数书翻译成日语,他们的翻译团队做得非常出色。我也希望这本新书也能找到合适的途径,翻译成日语和其他语言。
  软件和计算机已经深刻改变了人类的通信方式。今天,许多人拥有的虚拟朋友多于真实朋友。一些年轻人花在发短信和社交网络上的时间多过面对面的交谈。互联网和万维网已经打开巨大的信息量集合,超过世界上所有图书馆的总和。现在,几乎每一个复杂设备都由嵌入式软件来操控,包括汽车、飞行器甚至智能应用设备。计算机和软件已经改变了世界,未来还有更多的改变等待着我们。
  ① 编注:在2017年5月微软年度开发者大会上,有一个特殊的腕部可穿戴设备叫Emma,可以帮助帕金森患者正常地绘画和书写。