前言
1986年1月28日,美国东部时间上午11:39,“挑战者”号航天飞机在发射仅73.124秒后,因右侧固体火箭推进器的故障,在4.8万英尺的高空化成碎片。七名航天勇士魂断苍穹,其中包括高中教师克丽斯塔·麦考利芙。麦考利芙的母亲亲眼目睹女儿在九英里高空中不幸罹难,彼时彼刻她脸上的表情,至今印刻在我的心头无法拂去。
挑战者号之所以解体,是由于高热气体从出现故障的固体火箭推进器的外壳接缝处泄露出来,喷到外部燃料舱体上。主液氢燃料舱底部发生爆炸,液氢被点燃,并将液氢燃料推入上方的液氧燃料舱中。与此同时,固体火箭推进器从下支架脱落,开始绕上支架滚动。推进器的机头捅破了液氧舱。整个飞行器因异常受力,逆向气流旋转,但同时仍然以1.5马赫的速度飞行。在巨大的过载下,挑战者号迅速被撕成碎片。
在火箭推进器的圆形接缝处,有两个由合成橡胶制成的同心密封圈。当壳体通过螺栓连接在一起时,密封圈被压缩,起到密封作用,确保气体不会从接缝处逸出。
但在发射前夜,发射台气温降到了17华氏度 ,比密封圈的最低承限温度低了23度,比以往发射气温低了33度。这个气温下的密封圈已经硬得失去了弹性,无法很好地密封高热气体。推进器点火后,高热气体迅速累积,对壳腔形成了瞬间压力脉冲。助推器壳体向外膨胀开来,密封圈受到的压力变小。硬化的密封圈无法保持密封,一些高热气体就泄漏出来,并且将密封圈中70多度的弧形范围都气化了。
设计了推进器的莫顿·赛奥科公司的工程师事前已经知道密封圈有问题,并早在7年前就已经将这些问题报告给莫顿·赛奥科公司和美国宇航局的管理人员。事实上,在以前的发射中,密封圈就曾发生过类似的损坏,只是没有引发灾难而已。发射气温越低,后果就越严重。工程师们已经针对该问题设计了一个修复方案,但修复方案却迟迟未得以实施。
工程师们知道密封圈在低温的时候会硬化。也知道挑战者号发射时的气温比以往任何一次发射时的都要低,远低于红色警戒线。简而言之,这次发射的风险太高了,他们不能对危险视而不见。于是他们写了备忘录,发出高危预警信号。他们强烈要求赛奥科公司和美国宇航局的管理人员们取消此次发射任务。在临发射数小时前所开的紧急会议上,这些工程师展示了最有说服力的数据。他们摆事实,讲道理,软硬兼施,拒不执行这次发射任务。但最后,管理人员们对此还是无动于衷。
发射时,一些工程师不忍观看现场直播,因为他们担心发射台上会发生爆炸惨剧。但是,随着挑战者号优雅升空,他们开始有点放松下来了。就在挑战者号解体前的瞬间,看着飞行器已经迈过1马赫的关口时,一位工程师还说他们已经“躲过一劫”。
管理人员们听不进去工程师们的抗议,也不看备忘录,更没有命悬一线的危急感。他们认为自己更了解情况,认为工程师们小题大做了,他们不相信工程师们的数据和结论。他们之所以进行这次发射任务,是因为面临着很大的财务和政治压力。他们对此心存侥幸,希望一切都能平安无事。
这些管理人员不只是愚蠢至极,他们是在草菅人命。他们以为自己才是专家,他们的恐惧、希望和直觉才是准的。恰恰是因为他们的自以为是,七名优秀宇航员的生命以及一代人对太空旅行的梦想,都在那个寒冷的早晨一起灰飞烟灭了。他们篡夺了真正了解情况的工程师们的权力。
而那些工程师呢?当然,工程师做了他们应该做的事情。他们通知了管理人员,并且极力捍卫自身立场。他们经由适当的渠道,调用了所有合适的沟通协议。他们做了在体系内力所能及的事情,只是最后不得不听从领导的决定。因此,看起来工程师可以毫无愧意地置身事外了。
但是,我不知道那些工程师之中,是否有人会躺在床上夜不能寐,眼前浮现克丽斯塔·麦考利芙母亲脸上的惨痛表情,为之前没有给丹·拉瑟 打电话而悔恨不已。
关于本书
这本书主要阐述软件开发者的专业精神。书中包含了许多实务性的意见,试图回答诸如以下的问题:
· 什么是软件专业人士?
· 软件专业人士如何行事?
· 软件专业人士如何处理冲突,应对很紧的工期,如何和不切实际的管理人员打交道?
· 软件专业人士何时应该说“不”?怎么说?
· 软件专业人士如何应对压力?
你还会发现,在本书的实务性意见背后,隐隐体现出一种奋力突破的积极态度。这种态度提倡要诚信,要富有荣誉感、自尊心和自豪感,要勇于承担作为一名手艺人和工程师所肩负的重大责任。这种责任包括要努力工作,出色完成任务;要擅于沟通,能够就事论事;要管理好时间,能够坦然面对艰难的“风险回报”决策。
除此之外,这种责任之中还包括神圣的使命感。身为一名工程师,你比任何管理者可能都了解得更透彻。了解这些也意味着你肩负着要敢于行动的重大责任。
参考文献
[McConnell87]:Malcolm McConnell, Challenger “A Major Malfunction”, New York, NY: Simon & Schuster, 1987
[Wiki-Challenger]:“Space Shuttle Challenger disaster,”http://en.wikipedia.org/ wiki/Space_Shuttle_Challenger_disaster
作者简介
Robert C. Martin,世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C++ Report 前主编,被后辈程序员尊称为“Bob大叔”。20世纪70年代初成为职业程序员,后创办Object Mentor公司并任总裁。Martin还是一名多产的作家,至今已发表数百篇文章、论文和博客,除本书外,还著有《代码整洁之道》、《敏捷软件开发:原则、模式和实践》、《UML:Java程序员指南》等。他最近创办了cleancoders.com网站,专为软件开发人员提供教育视频。
译者简介:
章显洲,阿里巴巴高级技术专家,敏捷与精益方法实践者,专注于敏捷与精益管理,擅长互联网研发团队的构建与改善。业余以技术翻译作为个人修炼与回馈软件开发社区的途径。自2009年来,翻译和合译的技术书籍包含《精益软件开发艺术》、《微软的秘密》、《软件架构师应该知道的97件事》、《程序员的职业素养》、《看板》。偶尔也会出现在技术社区的聚会上作一些分享和演讲。
余晟,毕业于东北师范大学计算机系,副修中文,非正统型技术爱好者。曾任抓虾网、银杏泰克主力程序员,盛大创新院高级研究员,现任华南某电商公司技术总监。坚信计算机可以无限延伸人的能力,前提是人必须理解计算机的逻辑,所以对任何技术都不应该浅尝辄止,仅仅满足于“会用”。
目录
第1章 专业主义
1.1 清楚你要什么
1.2 担当责任
1.3 首先,不行损害之事
1.3.1 不要破坏软件功能
1.3.2 不要破坏结构
1.4 职业道德
1.4.1 了解你的领域
1.4.2 坚持学习
1.4.3 练习
1.4.4 合作
1.4.5 辅导
1.4.6 了解业务领域
1.4.7 与雇主/客户保持一致
1.4.8 谦逊
1.5 参考文献
第2章 说“不”
2.1 对抗角色
2.2 高风险时刻
2.3 要有团队精神
2.3.1 试试看
2.3.2 消极对抗
2.4 说“是”的成本
2.5 如何写出好代码
第3章 说“是”
3.1 承诺用语
3.1.1 识别“缺乏承诺”的征兆
3.1.2 真正的承诺听起来是怎样的
3.1.3 总结
3.2 学习如何说“是”
3.2.1 “试试”的另一面
3.2.2 坚守原则
3.3 结论
第4章 编码
4.1 做好准备
4.1.1 凌晨3点写出的代码
4.1.2 焦虑时写下的代码
4.2 流态区
4.2.1 音乐
4.2.2 中断
4.3 阻塞
4.4 调试
4.5 保持节奏
4.5.1 知道何时应该离开一会
4.5.2 开车回家路上
4.5.3 洗澡
4.6 进度延迟
4.6.1 期望
4.6.2 盲目冲刺
4.6.3 加班加点
4.6.4 交付失误
4.6.5 定义“完成”
4.7 帮助
4.7.1 帮助他人
4.7.2 接受他人的帮助
4.7.3 辅导
4.8 参考文献
第5章 测试驱动开发
5.1 此事已有定论
5.2 TDD的三项法则
5.3 TDD的优势
5.3.1 确定性
5.3.2 缺陷注入率
5.3.3 勇气
5.3.4 文档
5.3.5 设计
5.3.6 专业人士的选择
5.4 TDD的局限
5.5 参考文献
第6章 练习
6.1 引子
6.1.1 10的22次方
6.1.2 转变
6.2 编程柔道场
6.2.1 卡塔
6.2.2 瓦萨
6.2.3 自由练习
6.3 自身经验的拓展
6.3.1 开源
6.3.2 关于练习的职业道德
6.4 结论
6.5 参考文献
第7章 验收测试
7.1 需求的沟通
7.1.1 过早精细化
7.1.2 迟来的模糊性
7.2 验收测试
7.2.1 “完成”的定义
7.2.2 沟通
7.2.3 自动化
7.2.4 额外工作
7.2.5 验收测试什么时候写,由谁来写
7.2.6 开发人员的角色
7.2.7 测试的协商与被动推进
7.2.8 验收测试和单元测试
7.2.9 图形界面及其他复杂因素
7.2.10 持续集成
7.3 结论
第8章 测试策略
8.1 QA应该找不到任何错误
8.1.1 QA也是团队的一部分
8.1.2 需求规约定义者
8.1.3 特性描述者
8.2 自动化测试金字塔
8.2.1 单元测试
8.2.2 组件测试
8.2.3 集成测试
8.2.4 系统测试
8.2.5 人工探索式测试
8.3 结论
8.4 参考文献
第9章 时间管理
9.1 会议
9.1.1 拒绝
9.1.2 离席
9.1.3 确定议程与目标
9.1.4 立会
9.1.5 迭代计划会议
9.1.6 迭代回顾和DEMO展示
9.1.7 争论/反对
9.2 注意力点数
9.2.1 睡眠
9.2.2 咖啡因
9.2.3 恢复
9.2.4 肌肉注意力
9.2.5 输入与输出
9.3 时间拆分和番茄工作法
9.4 要避免的行为
9.5 死胡同
9.6 泥潭
9.7 结论
第10章 预估
10.1 什么是预估
10.1.1 承诺
10.1.2 预估
10.1.3 暗示性承诺
10.2 PERT
10.3 预估任务
10.4 大数定律
10.5 结论
10.6 参考文献
第11章 压力
11.1 避免压力
11.1.1 承诺
11.1.2 保持整洁
11.1.3 危机中的纪律
11.2 应对压力
11.2.1 不要惊慌失措
11.2.2 沟通
11.2.3 依靠你的纪律原则
11.2.4 寻求帮助
11.3 结论
第12章 协作
12.1 程序员与人
12.1.1 程序员与雇主
12.1.2 程序员与程序员
12.2 小脑
12.3 结论
第13章 团队与项目
13.1 只是简单混合吗
13.1.1 有凝聚力的团队
13.1.2 如何管理有凝聚力的团队
13.1.3 项目承包人的困境
13.2 结论
13.3 参考文献
第14章 辅导、学徒期与技艺
14.1 失败的学位教育
14.2 辅导
14.2.1 DIGI-COMP I, 我的第一台计算机
14.2.2 高中时代的ECP-18
14.2.3 非常规辅导
14.2.4 艰难的锤炼
14.3 学徒期
14.3.1 软件学徒期
14.3.2 现实情况
14.4 技艺
14.5 结论
附录 工具
内容摘要
《程序员的职业素养》是编程大师Bob大叔40余年编程生涯的心得体会 讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。
《程序员的职业素养》适合所有程序员,也可供所有想成为具备职业素养的职场人士参考。
主编推荐
《程序员的职业素养》适合所有程序员,也可供所有想成为具备职业素养的职场人士参考。
以下为对购买帮助不大的评价