前 言 Preface
为什么写这本书?退休后,我开始为孙辈们撰写一本以家庭为中心的回忆录,我意识到自己正在以前所未有的方式进行一次全方位的时光回溯。这些遍及我的户外和职业冒险经历的回忆发人深省。每一次,当我问年轻的同事是否知道汤姆·德马科、杰瑞·温伯格或肯·奥尔时,他们都说不知道。他们知道Azure、Ruby和敏捷实践,但对软件开发历史却知之甚少。技术飞速发展,让人无暇顾及过去。
我想写一写软件开发的历史,用我的亲身经历加以点缀,来介绍那些人,那些通过构建更好的软件,努力让世界变得更美好的先驱们。无论是1800年代的毛皮捕猎者吉姆·布里杰(Jim Bridger)、阿波罗宇航员、结构化软件开发者肯·奥尔,还是敏捷方法论者肯特·贝克,这些先驱都表现出了冒险精神、适应能力和特立独行的个性。我希望重温早年间与同事分享的经验,为新进的同事提供一种视角。
新冠。封城。退休。构建项目完成。萎靡不振。下一步是什么?这些都是2022年开始时我脑海中闪过的念头。随着我开始回忆、研究、查找旧邮件和文件,把家庭回忆录写成一本书的想法开始成形。我的想法是围绕软件开发的不同时代来组织这本书,写下我在每个时代的工作、故事、经历和观察。就这样,一点一点地从几个模糊的叙事片段演变成书。我想探索软件行业如何以及为什么会从1960年代的临时代码涂鸦发展到2022年的各种方法、方法论和工具。
我的职业生涯和整个软件开发都受到信息技术(IT)变革的巨大影响。举个简单的例子:iPhone的64 GB内存是1970年代初我用过的IBM 360大型计算机的25万倍。2021年,1 GB内存的价格约为10美元。然而在蛮荒时代,虽然技术上不可能实现1 GB的内存,但加起来的1 GB内存的成本将近 7.34 亿美元!我们需要记住,方法、方法论和思维方式都是为了解决每个时代的问题而演变的,它们既受到当时技术的推动,也受到其制约。
在我探索这段历史的过程中,本书演变成了一部交织而成的创意非虚构作品。非虚构,顾名思义,是与虚构相对的。我一直不明白为什么这种体裁被命名为其他事物的非。关于技术和科学的书籍通常都是非虚构的,而且很遗憾,对于非研究者来说,有时会觉得乏味。而创意非虚构作品的出现,则是作家们利用人物、故事、结构、张力和情节等文学工艺元素,使非虚构作品具有可读性和趣味性。简而言之,它们是真实的故事,精心的讲述。
交织叙事是非虚构(或虚构)作品的一种类型。一条故事线讲述作者的个人故事,另一条故事线探讨环境、社会公正问题或历史事件。随着时间的推移,这两条故事线交织在一起,相互促进,形成一个具有黏着力的整体。
本书包含了几条故事线。第一条故事线包括软件开发在四个不同时代的演变和各种革命。第二条故事线描述了我个人和客户在每个时代的经历。第三条故事线是向勇于探索、敢于创新的先驱们致敬。第四条和第五条故事线是技术创新和管理趋势。
用这种交织式的叙事体裁写作有两个好处,即范围和故事。如果要写一本关于软件开发历史的书,那将远远超出我的兴趣和能力。将范围限制在我所参与的事件上大大缩小了覆盖面。我的职业生涯完全与业务系统有关(除了早年作为电气工程师的经历)。我从未参与过科学或工程计算,从未编写过编译器或操作系统,从未编写过复杂的算法,也从未在UNIX系统上工作过。我所研究的是业务系统,如用于会计、财务、订单处理、库存管理和运输的系统。我研究的是改进软件开发的方法和方法论。我研究的是技术、项目管理、组织和领导问题。
这其中的一个挑战是术语。今天的流行术语在以前可能根本不存在。我应该使用软件开发、软件交付还是软件工程?关于术语的争论,过去和现在都很激烈。软件工程真的是工程吗?软件开发是软件工程的子集还是超集?等等,不一而足。我的第一反应是加入这场定义之争,但后来我重新考虑了这个决定:这是一条疯狂之路! 因此,考虑到我个人的偏好,我将软件开发作为一个宽泛的术语,并在觉得合适的时候加入一些软件工程的标签。在本书中,我对软件开发的定义涵盖了从产品和项目管理到需求、设计、编程、测试和部署的所有活动。
另一个难题是主题时间。例如,面向对象编程一词最早出现在1960年代中期,但使用一直很有限,直到1990年代市场迅速扩大。技术债务也是类似的情况。我的指导方针是到市场扩张期再深入研究这些主题。
能与两代软件开发先驱合作,我感到既幸运又惭愧。早期,我的同事有肯·奥尔、汤姆·德马科、蒂姆·利斯特、埃德·尤尔登、拉里·康斯坦丁和杰瑞·温伯格。在1999年即将跨入21世纪之际,我又将阿利斯泰尔·科伯恩、帕特·里德、肯特·贝克、迈克·科恩、肯·施瓦布、杰夫·萨瑟兰和马丁·福勒等敏捷专家列入了这个名单。
我写这本书有如下目的:
- 记录软件方法、方法论和思维方式的演变和革命。
- 记录并致敬软件开发先驱。
- 以史为鉴,面向未来。
- 给我们这一代人一个追忆似水年华的载体。
- 让年轻一代一瞥那些他们可能错过的事件。
此外,我还希望我的孙辈们能更多地地了解我,了解我的职业生涯并探索其意义。
最后,谈谈我对软件开发历史的看法。视角是一个人看待历史事件的角度……每个资料来源都有其视角。二 ○我从我的视角来看待这段历史,这当然包括我的年龄、受教育经历、工作经验和地理位置,还包括种族、性别、性取向和宗教信仰。我只能从我的视角来写作,但我也认同并支持围绕多样性、公平性和包容性而百花齐放的目标。
本书的故事线交织在一起,讲述了一个故事。对于登山者来说,一根编织紧密的登山绳将他们捆绑在一起,形成一个协作、自组织的团队。而将人团结在一起的绳子,有很多种。