描述
开 本: 32开纸 张: 纯质纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302586791
如果你以开发软件为生,可以通过本书了解如何才能成为一名真正的专业软件开发人员。
如果你是软件项目的管理者,可以通过本书了解好项目和不成功的项目之间的区别,探讨如何才能成功完成项目。
如果你是软件企业的管理者,可以通过本书了解系统化的软件开发方法有哪些好处以及如何获得这些效益。
如果你是一名希望在软件领域工作的学生,可以通过本书了解软件工程领域的知识体系,以及软件工程领域的职业前景。
《软件开发的艺术》共包含4 部分21 章,探讨了软件行业中个人、组织以及行业的现状,解释了如何以工匠精神来打造自己的专业软件开发职业路线。《软件开发的艺术》对软件行业的所有从业人员有较强的参考性和指导性,适合富有开拓精神的企业和团队阅读。
第Ⅰ部分 软件“焦油坑”
第1 章 与恐龙搏斗 3
译者有话说 ? 6
第2 章 假黄金 7
移动巨石 8
巨石和软件 10
边做边改的编程模式 11
注重质量 15
银弹造成的假象 17
软件不“软” 19
如何识别假黄金 21
译者有话说 ? 22
第3 章 货物崇拜与软件工程 25
软件开发的效仿者 26
货物崇拜式的软件工程 28
真正的辩论 28
译者有话说 ? 30
第4 章 软件工程不是计算机科学 31
“是”与“应该是” 32
工程与科学 33
抛开表面,审视实质 35
正确的问题 38
译者有话说 ? 38
第5 章 软件工程知识体系 41
本质性与附属性 42
定义稳定核心 44
软件工程知识体系 47
树立里程碑 52
译者有话说 ? 53
第6 章 软件新世界 55
职业定义 57
探索软件工程职业 58
穿越赫拉克勒斯神柱 64
译者有话说 ? 65
第Ⅱ部分 个人专业化
第7 章 人尽其才 69
MBTI 人格测试 70
软件开发人员的MBTI 测试结果 71
伟大设计师的人格特征 73
全面和绝对的承诺 75
软件人口统计 77
教育 79
工作前景 80
编程高手和问题成员 82
关注人性 83
译者有话说 ? 84
第8 章 提高软件意识水平 87
软件意识分级 88
对症下药 90
你有经验吗 91
译者有话说 ? 92
第9 章 建设软件社区 93
译者有话说 ? 97
第10 章 建筑师和木匠 99
职称分级 99
职业专业化 101
团队专业化 104
时间将会给出答案 105
译者有话说 ? 105
第11 章 经验是写作的基础 107
译者有话说 ? 112
第Ⅲ部分 软件组织专业化
第12 章 软件淘金热 115
软件淘金热 116
后淘金热时代的发展 118
淘金经济学的思维和不解 120
向上扩展和向下扩展 121
回到淘金热 122
译者有话说 ? 123
第13 章 优秀软件实践案例 125
实际状况 126
软件实践改进后的收益 127
不同方法的投资回报率 130
了解软件估计 131
改进软件带来的间接效益 132
最佳的规模经济 133
软件组织的挑战 134
迈出关键的一步 135
10 个棘手的问题 135
译者有话说 ? 136
第14 章 托勒密推理 139
SW-CMM 概述 140
提高成熟度级别 142
可以处理的所有风险 144
哪些人在用SW-CMM 145
完美兼顾软件开发 146
认真的承诺 148
组织评级 148
形式和本质 150
译者有话说 ? 151
第15 章 量化人员因素 153
人员因素 153
低效率开发人员 155
具体工作环境 157
工作动机 157
资深员工的价值 159
重要的关注点 159
译者有话说 ? 160
第16 章 Construx 专业发展体系 161
Construx 知识领域 163
能力水平 164
专业发展阶梯等级 166
职业发展阶梯 168
不同能力水平的CKA 要求 171
专业发展阶梯的经验教训 175
专业发展阶梯的优势 179
推广Construx 专业发展阶梯 180
译者有话说 ? 181
第Ⅳ部分 行业专业化
第17 章 专业工程 185
我们需要工程 186
工程与艺术 187
工程学科的成熟过程 190
软件开发的科学 192
软件工程的责任 194
译者有话说 ? 194
第18 章 软件工程历练 197
专业工程师的发展 201
第一步 202
学术认证 204
软件工程教育的差异 205
继续教育 207
一些观点 208
译者有话说 ? 209
第19 章 证书的意义 211
认证 211
许可证 213
软件工程师可以获得许可证吗 215
许可证制度好吗 218
许可证的起步 221
获得证书的优势 223
获得证书 225
三条路径 225
铁戒指的意义 228
译者有话说 ? 228
第20 章 职业道德准则 231
软件工程师的道德准则 232
道德准则的必要性 235
学习不能停的时代 238
译者有话说 ? 238
第21 章 慧眼识珠 241
为什么需要技术转化 242
创新的传播 243
鸿沟 245
一些棘手的问题 246
风险在哪里 248
分级推广代理 250
站在巨人的肩上 253
译者有话说 ? 254
说起来容易,做起来难,总有一些事情如此。
——《IEEE 软件》
记得有一次,我们乘坐的飞机正在跑道上等待起飞,突然听到机长紧急播报:“飞机的空调系统有问题,无法向机舱正常供氧,我们需要在起飞之前确保空调系统能够恢复正常。我刚刚尝试了重启空调系统,但没有成功,现在必须重新启动整个飞机系统。众所周知,现代飞机由计算机控制,是不太靠谱的。”
飞机熄火,重新启动。随后,我们的航班顺利起飞了,没有发生任何异常。最后飞机落地,走出机舱的那一刻,我悬着的心终于放了下来。
这是一个最好的时代,也是一个最坏的时代。
优秀的软件组织能够有效控制项目,以达到既定的质量目标,并准确预测软件的交付时间,不论是年份还是月份。他们能在预算范围内完成软件项目,不断提升生产力,保持员工士气高涨,让客户非常满意。
● 一家电信公司需要修改大约3 000 行代码,而整个代码库大约有100 万行。他们需要小心翼翼地进行修改,确保至少一年内不会出现任何错误。他们总共花费了9 个小时来完成所有工作,包括需求、分析、设计、实现和测试。
● 一个为美国空军开发软件的团队承诺只需要1年时间和200万美元预算就能完成项目,而另一个知名团队对这个项目的报价却高达2 年和1 000 万美元。当低价中标的项目团队提前一个月交付项目时,项目经理透露了一个关键信息:团队的成功主要得益于使用了一种已存在多年但并不常用的技术。
● 一家航天公司采取固定价格合同策略为其他企业开发商业软件,结果表明,只有3% 的项目超出预算,97% 的项目都成功控制在预算之内。
● 一家致力于实现卓越品质的软件公司连续9 年每年平均产品缺陷率降低39%,累计减少99% 的缺陷率。
除了这些成功案例外,软件行业在经济上每年仍为全球带来超过10 亿美元的额外收入,无论是通过软件销售直接获得,还是间接通过提高效率和创造与软件相关的产品与服务实现。
创建良好软件所需的实践已经确立了,并且可以在今后的10 年至20 年或更长时间里使用。虽然某些项目取得了卓越成就,但软件行业整体未能充分挖掘出软件的全部潜力。平均项目水平与顶尖项目水平之间存在巨大差距,许多领域的软件实践要么严重过时,要么不够高效。软件项目的平均表现远远达不到预期,看看下面这些知名的失败案例。
● 美国国税局(IRS)在其软件现代化项目上浪费80 亿美元,导致美国纳税人每年损失高达500 亿美元。
● 美国联邦航空管理局的高级自动化系统计划的预算超支30 亿美元。
● 行李处理系统的问题导致丹佛国际机场的开放时间推迟了一年多。据估计,延误造成的损失高达每天110 万美元。
● 阿丽亚娜5 号火箭因为1 个软件错误导致火箭在首次发射时爆炸。
● B-2轰炸机(译注:这样的战略轰炸机最大起飞重量接近170 吨,但只有0.1 平方米的雷达反射面积,大小相当于普通鸟类。B-2 在设计上使用了诸多先进的隐身技术手段,如锯齿边缘的机翼和尾翼、特殊涂料吸收雷达波等。在作战能力方面,B-2 也具备长时间独立作战能力,其最大载弹量达20 吨,不加油的情况下作战半径可达1.2 万千米。如果可以进行一次空中加油,其作战半径将大幅提升至1.8 万千米,差不多可以覆盖全球大部分区域。此外,B-2 还配备了当时最先进的电子设备,如相控阵雷达、综合电子战系统等,因而可以在复杂环境下有效地执行任务。B-2 参与过多场实战考验,均保持零损失的记录。)因软件问题而未能按时执行首飞。
● 西雅图渡轮的计算机系统故障导致了十几次的码头碰撞,造成的损失超过700 万美元。华盛顿州计划投资超过300 万美元,将渡轮的自动控制系统改回手动控制。
● 虽然很多项目没有发生重大失误,但仍然引发了诸多问题。大约25% 的软件项目彻底失败,12 而项目在被取消时一般已经多花了一倍的预算,约50% 的项目经历了延期、超预算或被迫缩减功能。
在企业层面,这些失败的项目意味着巨大的机会损失。想象一下,如果在只花费了10% 的预算而不是200% 的预算时就能够识别出那些最终会失败的项目并提前砍掉它们,让公司把这些资源重新分配给那些有潜力成功的项目上。
在国家层面,这些被叫停的项目意味着巨大的浪费。粗略估计,这样的软件项目给美国经济造成了400 亿美元的损失。
即使项目成功,仍然可能给公共安全或公共福利带来风险。莲花(Lotus)公司的项目负责人曾经接到一位外科医生的电话,说他当时正在进行心脏手术,需要使用电子表格来分析患者数据。《新闻周刊》发表过一张照片,显示战场上的士兵们使用Excel 来规划军事行动。微软公司的Excel 技术支持团队确实接到过士兵们从前线打来的电话。
本书的目的
软件开发应该是可预测、可控制、经济上可行且可以管理的。通常,软件开发通常不会以满足这四个要求为目标,但它有潜力同时满足这些要求。本书主要聚焦于软件工程这一新兴行业的发展,探讨如何建立高效且经济的专业软件开发实践。
本书讨论了以下几个主题:
● 什么是软件工程?
● 软件工程与计算机科学有何关系?
● 为什么传统的计算机编程不够好?
● 为什么我们需要软件工程这一职业?
● 为什么要为软件开发专业设计最佳模型?
● 不同的项目或公司在采纳成功策略上存在哪些差异与共性?
● 软件组织可以采取哪些措施来支持专业软件开发方法?
● 软件开发人员如何成长为成熟的专业人士?
● 软件行业应该如何建立真正意义上的软件工程职业发展路线?
本书的组织
本书将从当前计算机编程实践的现状出发,逐步过渡到探索未来可能出现的软件工程职业。
第Ⅰ部分“软件‘焦油坑’”将阐述软件领域是如何发展到现在这种状态的。显然,软件领域的现状受到多种因素的影响,我们需要充分理解这些因素,从而促进而不是阻碍软件项目的革新,让人们主动为项目的成功而努力。
第Ⅱ部分“个人专业化”将介绍个人层面上可以采取哪些行动来进一步提高个人的软件专业化水平。
由于软件项目的复杂性,许多关键因素无法仅通过个人努力有效解决。第Ⅲ部分“软件组织专业化”深入讨论了实现软件项目专业化的实践方法。
第Ⅳ部分“行业专业化”将探讨整个软件行业必须采取哪些措施来推动个人层面和组织层面的专业化进程。
自1999年以来,我学到了什么
我从1999 年以来获得了下面这些经验教训。
● 对软件开发人员实行许可证制度的提议引发的争议远超我的预期。我依然认为,对一小部分软件工程师进行认证,是保护公众安全和福祉的重要步骤。我曾经试图解释,许可证是改善软件开发专业水平所需要的许多举措之一,但它不是最重要的。
● 软件工程师的培训不必与许可证申请紧密关联。在本科和研究生的教育课程中,可以培养软件开发人员的工程思维,但不必强迫他们成为持证专业工程师。事实上,如果只有不到5% 的软件开发人员需要获得许可证,那么将大部分教学的焦点集中在许可证上似乎不太合适。
● 当2000 年1 月1 日来临时,世界并未陷入混乱。尽管我不曾认为千年虫(Y2K,即日期从两位数扩展到四位数,比如从99 变为1999)会引发灾难,但我确实认为,解决Y2K 问题的过程比这个问题本身更重要。软件行业采取的补救措施比我预期的更有效。除此之外,Y2K 问题在某种意义上是软件成功开发实践的结果。如果有这么多软件系统的生命周期都超过预期,那么Y2K 一开始就应该成为问题。
● 现代软件开发在许多方面所取得的成果令人印象深刻,在讨论软件领域的专业化时,我们不应忘记领域内的众多成功案例。
我们必须留意,在改善那些有缺陷的做法时,不应该一并舍弃那些已被证明有效的方法。
谁应该阅读这本书
如果你以开发软件为生,可以通过本书了解如何才能成为一名真正的专业软件开发人员。
如果你是软件项目的管理者,可以通过本书了解好项目和不成功的项目之间的区别,探讨如何才能成功完成项目。
如果你是软件企业的管理者,可以通过本书了解系统化的软件开发方法有哪些好处以及如何获得这些效益。
如果你是一名希望在软件领域工作的学生,可以通过本书了解软件工程领域的知识体系,以及软件工程领域的职业前景。
软件开发的专业化
行业研究人员通过长期以来的观察发现,在同一行业内,不同组织的生产效率有高达10 倍的差异。最近的研究甚至显示,这种差异可能高达惊人的600 倍。18 那些最高效的软件组织的确表现优异。
真正的软件工程专业化所带来的好处是不言而喻的。传统观点认为,任何变化都伴随着巨大的风险。然而,在软件领域,最大的风险实际上是保持不变,并继续固守不健康的高成本开发实践,而不是开始采用那些多年前就已被证明更加有效的实践方法。
应该如何改变呢?这正是本书剩余部分的核心主题。
编注:为了方便广大读者进一步查阅和拓展相关资源,我们对本书英文版中的所有原文注释进行了统一处理。大家可以扫描二维码,查看和下载全书的所有注释。
评论
还没有评论。