从痛苦中学习
我从来没见过有人能诚实地说:“我今天正在构建软件,就像以前可以构建软件一样。”任何不能这么说的人都可以从学习更好的工作方式中受益。这本书为这一探索提供了一些捷径。
经验是学习的一种形式,它能最好地陪伴我们。这也是最痛苦的学习方式。我们尝试新方法的最初尝试常常会受阻,有时甚至会失败。我们都必须攀登学习曲线,在努力掌握新方法并了解何时以及如何熟练使用它们时,接受短期的生产力冲击。
幸运的是,有一种可供选择的学习机制。我们可以通过从已经获得并应用知识的人那里吸取教训、技巧和诀窍来压缩我们的学习曲线。这本书是关于软件工程和项目管理的智慧之珠的集大成——这些有用的见解是我通过自己的个人经历和从其他人的工作中观察到的。你自己的经历和教训可能不同,你可能不同意我所呈现的一切。这很好;每个人的经历都是独一无二的。这些都是我在我的软件生涯中发现的有价值的东西。
我的观点
让我从我的一些背景开始,展示我是如何积累这些经验的。1970年,我在大学里上了第一堂计算机编程课——当然是fortran。我的第一份工作——第二年夏天——是在大学里为助学金办公室的一些操作自动化,全部由我自己完成。我学过两个学分的编程,所以我是个软件工程师,对吧?考虑到我有限的背景,这个项目出奇地成功。我在大学里又修了两门编程课。我从阅读、培训课程、经验和同事那里学到的关于软件工程的其他东西都是我自己学来的。这种非正式的职业道路在一段时间以前并不罕见,因为人们被各种背景的软件开发所吸引,但几乎没有接受过正规的计算机教育。
从早期开始,我花了很多时间做各种各样的软件工作:需求开发、应用程序设计、用户界面设计、编程、测试、项目管理、编写文档、质量工程和过程改进领导。我还做了一些副业,比如攻读有机化学博士学位。即便如此,我博士论文的三分之一都是用来分析实验数据和模拟化学反应的软件代码。
在我职业生涯的早期,我在伊士曼柯达公司(Eastman Kodak Company)做研究科学家,那是一家非常成功的大公司,我用电脑设计和分析实验。我很快就转为全职软件开发,为柯达研究实验室构建应用程序,并管理一个小型软件小组几年。我发现我的科学背景和倾向引导我采用一种更系统的方法进行软件开发。
我在1983年写了第一篇关于软件的文章。从那时起,我写了许多文章和八本书,涉及该学科的许多方面。自1997年以来,作为一名独立顾问和培训师,我为近150家公司和政府机构提供了许多业务领域的服务。这些交互让我观察到在软件项目中有效工作的技术——以及无效的技术。
我对软件开发和管理的许多见解来自我的个人项目经验,有些是有益的,但也有一些令人失望的。我从咨询客户的经验中获得了其他知识,通常是在进展不顺利的项目上。当一切进展顺利时,没人会找咨询师。我写这本书是为了让你不需要在你的个人项目斗争中缓慢而痛苦地积累所有这些相同的经验。一位经验丰富的软件工程师在阅读了这些教训后评论道:“这些教训中的每一个都有一个(或几个)与之相关的伤疤。”