Keynote 原件地址
何谓专业?
「专业」不是Title、不是形象、不是身份,而是你在不断的做事过程中,给人的印象。比如:别人请教你的问题你都能精准回答;别人请你做的事情,你都能完美完成。久而久之,你给人的印象就是「专业」人士。
而要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动?这是本书的主要内容。
书中内容可以总结为如下几点:
- 交付质量:保障交付质量不仅仅需要专业技能,更需要沟通
- 专业技能
- 测试
- 沟通
- 承诺是金:不轻易承诺,承诺了就保障达成
- 学会拒绝
- 承诺是金
专业技能
bob大叔对想成为专业软件开发者所必须精通的内容的建议(这里仅供参考):
- 设计模式:必须能描述GOF书中的全部24种模式,同时还要有POSA书中的多数模式的实战经验。
- 设计原则:必须了解SOLID原则,而且要深刻理解组件设计原则。
- 方法:必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
- 实践:必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程。
- 工件:必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。
测试
如果你读过bob大叔的其它书籍,你会发现bob大叔对测试,特别是测试驱动开发推崇备至。他在书中甚至都不是建议,而是要求每一行代码都必须要有测试覆盖。
从结果来看,编写测试非常有必要:
- 可以保障交付的代码质量
- 可以提高功能迭代的信心
- 长期来看,可以提高测试的效率
但是,在国内软件大环境下是不可能实现的:
- 对软件开发人员要求高,人力成本也就上去了,老板不愿意
- 单元测试前期耗时长,可能导致上线周期变长,产品不愿意
- 产品需求不稳定,经常调整,对研发来说编写测试用例会增加更多的无用功(因为功能会随时被废掉),研发自己也不愿意
个人建议是针对相对稳定、核心的功能进行单元测试覆盖,其它功能模块可以采取人工测试或其它方式来保障。
沟通
乔布斯有句名言:「用户根本就不知道他们想要什么」。bob大叔也是类似的观点:「客户……对功能的设想,其实经不起电脑前真刀真枪的考验……问题在于,东西画在纸上与真正做出来是不一样的。业务方看到真正的运行情况时就会意识到,自己想要的根本不是这样。一看到已经满足的需求,关于到底要什么,他们就会冒出更好的想法——通常并不是他们当时看到的样子……」。
所以,bob给出的办法是「验收测试」,对,还是测试。与「单元测试」、「集成测试」不同,验收测试是业务方写给业务方的,它们是正式的需求文档,描述了业务方认为系统应该如何运行。验收测试的目的是沟通、澄清、精确化。开发方、业务方、测试方对验收测试达成共识,大家都能明白系统的行为将会是怎样。它能解决需求沟通中的难点:
- 用户并不是一开始就知道自己真正想要的是什么,在不断的沟通、交付过程中,用户对自己的需求才真正清楚
- 过早精细化:业务方还没有启动项目,就要精确知道最后能得到什么;开发方还没有评估整个项目,就希望精确知道要交付什么。
- 迟来的模糊性:需求文档中的每一点模糊之处,都对应着业务方的一点分歧。
而如何写出「验收测试」呢?需要沟通,频繁的沟通。这里有个前提,就是业务人员愿意投入大量的精力与你来沟通。但是,实际情况是,业务人员提出需求后,基本就不关心了。他们自己也有自身的任务需要做,除非他的工作就是协助研发理清需求。 另外一种也比较常见的情况就是业务自己也不清楚需求。
理想很丰满,而现实却很骨感。个人认为可行的方案是沟通确定「验收标准」,即将需求转化为一条条的验收清单:
- 研发人员根据验收清单进行功能的实现和验证
- 业务人员根据验收清单进行功能的验收
学会拒绝
对于需求人员的需求,你不能全盘接受。你需要根据实际情况进行反馈:是接受还是拒绝。可以通过沟通寻找需求人员与研发人员都可接受的一个结果。
拒绝的原因有几个:
- 你的时间有限,不可能在有限的时间内完成无限的工作。为了保障核心功能的高质量完成,你需要投入足够的时间。
- 需求人员的需求并不是都是合理的。比如:根据手机壳切换手机主题。你需要进行合理的分析。
承诺是金
而一旦你接受了需求,确定了时间和交付内容,你就必须要尽自己最大的努力去达成。要么不承诺,承诺了就必须达成!
保障你达成承诺的两个前提条件是:
- 时间管理:专业开发人员会用心管理自己的时间和注意力。同时,通过不断的练习,提高自己单位时间的价值,而不是通过延长工作时间来提高价值。
- 合理的预估:把大任务分成许多小任务,分开预估再加总,结果会比单独评估大任务要准确很多。这样做之所以能提高准确度,是因为小任务的预估错误几乎可以忽略,不会对总的结果产生明显影响。(大数定律)
总结
bob大叔给出的很多建议或要求都过于理想,至少对国内软件环境来说。不过还是可以作为参考或努力的目标,尽量去向理想状态靠近,保障自己向专业人士更近一步。