开始今天的话题之前,先讲一点题外话。用面向对象的方法和大家介绍一下类的设计。
面向对象类图设计
声明:由于手头没有合适的工具,所画的类图并不标准,但表达的意思都在图里了。
简单介绍一下这个类图:如上图所示,一共有两个接口,分别为Animal(动物)和Plant(植物);动物这个接口有3个实现类,分别为Dog,Cat和Tiger,而植物这个接口有2个实现类,分别为Tree和Grass。这里省略了接口和类的内部定义。
假设现在有一个问题是,我们觉得有点热,想要凉快一点。针对这个问题,Dog类可能不会有什么好办法(假设狗真的无法解决这个问题)。不过有人发现Tree可以很好的解决这个问题。
那么我们能否把Tree(树)叫做动物呢?
显然不可以!动物就是动物,植物就是植物。
狗也可能有办法让我们凉快一点,不过确实不如树提供树荫这个方案更好。但这无法改变狗是动物而树是植物,这两个概念!
隐喻
第一节提到的类图,其实是一个比喻。现在我们换一下类图中的几个概念。比如
- 敏捷替换动物
- Scrum替换狗
- 心理学替换植物
- 催眠替换树
现在假设某个组织内采用Scrum效果甚微(暂且不讨论是如何采用的),而恰巧催眠这种方法较好的激活了个人意愿,从而改变了组织。那么这种情况下,催眠能不能叫做Scrum?或者催眠能不能叫做敏捷?
显然不可以!Scrum就是Scrum,催眠就是催眠!敏捷就是敏捷,心理学就是心理学!这是两个不同的概念。
我们反驳的是什么
上面两节里面讨论的概念,来源于最近敏捷社区里面的热议,从而也给我写这篇文章的灵感。
社区里面热议的焦点,主要集中于敏捷教练不同意“催眠是敏捷”。
那么大家反驳的到底是什么呢?
是敏捷社区不接纳新事物、新想法么?以我这几年在社区的经验,答案是否定的。
大家真正反驳的是什么?
如果我们仔细回看一下就会发现,这里面有一个非常明显的概念混淆,即催眠是敏捷。这是大家不能接受的。
敬畏知识
最后引用一位朋友的话,作为最后一节内容:
敬畏知识。
为什么要敬畏知识
知识是不断创造并积累的。我们需要敬畏知识有两大原因:
- 尊重概念的提出者(知识的源头)
- 不会误导他人(传播知识)
很显然,所有的概念都不是完美的,都会有相应的适用场景和改进的空间。那么如果概念有缺陷我该怎么办?我的做法是会找到概念提出者(或者最接近的人)进行讨论,交换彼此的想法。
如果我擅自在原概念上加入其它体系的知识并传播,就是在误导他人。这是作为知识工作者不应该有的态度。
如何敬畏知识
想要做到敬畏知识,有两个小窍门:
- 引用原概念,然后发表自己的观点
- 创建新概念,在原概念启发后可以有自己的知识体系
比如敏捷已经有敏捷宣言,那么我不会去修改敏捷宣言。而有可能创建新的宝宝说。
对于今天的分享,您有不同观点?欢迎回复留言讨论。