专家喜欢抽象,新手喜欢具体

前两天在敏捷上海讨论组对于敏捷成熟度模型是否有意义有不少讨论,随着敏捷越来越热,不少专家和公司都给出了所谓的敏捷成熟度模型,徐毅在博客中做了不错的总结。设计这种模型的初衷是蛮好的,每个组织可以按照这个级别,有一个不错的成长阶梯。CMM有一个看似很不错的成熟度模型,企业可以按照这个所以把这种模型的方式照搬到敏捷上应该也不错。在我看来这种模型也很容易产生误导,原因就是模型是抽象的,而每个团队的具体是不一样的。尤其是对于初学者来说,他们很难去理解抽象的概念在实际实施中应该是什么样子。

知识的诅咒(Curse of Knowledge)是一个很有意思的概念。作为一个领域的专家,他的思维方式经常是抽象的,理论化的。对他来说一个很大的挑战是他很难理解一个对于这个领域一无所知的人是怎样思考的,新手是如何理解他所讲出来的抽象概念的?新手的特征是他们不喜欢抽象的理论,喜欢的是直接的答案,喜欢的是菜谱一类的东西,这样他们就可以按照菜谱上的讲述的步骤按步就班地实施。因此如何把擅长的领域传授给新手是一个“会教”的专家必须掌握的核心能力。

网球教练Timothy Gallwey能够在几十分钟内教会一个从来不运动的妇女上场打网球比赛,并得到第一分,参见视频。在“The Inner Game of Tennis”一书中,Timothy指出,我们经常学东西是抽象的、指令式的,其实这是一种仅仅适用于左脑的教育方式,很多种情况下并不管用。而很多时候模仿是一种更适合的学习与教育方式。模仿是右脑的学习方式。模仿的同时,去比较,与目标状态的偏差有多少,然后不断调整。这正是我们2-3岁的时候的学习方式。而孩提时代正是人的一生中学习最快的时候。模仿,不断尝试、在错误中学习。

再回到主题,让初学者了解抽象的敏捷开发的各种方法和实践的好方法就是设计一些小的练习,然后不断地去模仿、重复。练习熟练之后,再去思考用不同的方式去解决同一个问题。尝试使用不同的TDD测试用例的顺序,尝试用最蠢的办法去实现。这也就是Deliberate Practice。就跟画家一开始学习画鸡蛋,小提琴手一开始练习空弦一个道理。近些年Kata变得越来越火。@Joseph同学每天都会在家里做TDD练习,练熟悉之后就发布到网上让大家去观摩。除了TDD的,也可以有重构的Kata。而测试方面也可以有Kata。所以对专家的要求不低,他并不只是简单的把书本上的东西重复,需要设计很多小的练习,让新手去体验和模仿,从体验中去体会背后的道理。

同时教练的时候如何提问题也有学问。也是Inner Game of Tennis中的例子,比如教练说击球的时候随挥应该充分,但是多少算是充分其实教练和球员理解都不一样。更好的方式是通过一些问题来启发球员,比如:注意下脚步,注意一下前场击球时候的挥拍等。在指导团队的时候也可以使用相同的技巧,给团队提出具体的启发性的问题,比如:

  • “注意你们的需求粒度”,
  • “你们明确了解什么情况下这个故事算是做完了么?”,
  • “注意一下你在TDD设计测试用例时的粒度,你的TDD每个循环的步子”,
  • “注意你的测试用例中是不是有太多的不需要关注的信息”,
  • “注意一下这个函数中各个代码块的抽象层次”。

总结一下,两个建议

  1. 设计小的Deliberate Practice,让团队去重复、体验
  2. 提出具体的启发性的问题而不是抽象的、指导性的问题

 

Share