《软件方法》强化自测题集>>
《软件方法》各章合集>>
8.1.8.3 伪创新为什么受欢迎
比起严谨的建模方法,伪创新更受欢迎,因为它迎合了“广大开发人员”呆在舒适区的需要。
如本书所言,软件开发的一个迭代周期中的四个工作流:
A-业务建模——定位需要改进的目标组织(人群或机构)以及该组织接下来最需要改进的问题。
B-需求——描述为了改进组织的问题,所引入的信息系统必须具有的整体表现。
C-分析——提炼为了满足功能需求,所引入的信息系统需要封装的核心域机制。
D-设计——考虑质量需求和设计约束,将核心域机制映射到选定非核心域上实现。
很多开发人员只有D的知识,当岗位发生变化,需要他做A、B、C的工作时,按道理应该去认真学习A、B、C的技能才对。
但是,很多人并不愿意走出自己的舒适区,甚至还会有意无意地把其他人拉到自己的舒适区。
例如,在和涉众讨论需求时,频频蹦出一些“技术潮词”,目的就是以自己的“所长”来碾压涉众,从而掩盖自己业务建模和需求技能的不足。
例如,在讨论核心域的类模型时,动不动就谈到如何实现或者质疑“会不会有性能问题”,从而掩盖自己抽象能力的不足。
于是,投其所好的伪创新就登场了。
最开始的伪创新极力贬低A、B、C的重要性。例如,想那么多有啥用,最后不是还得写代码?张嘴就是Linus Torvalds的“Talk is cheap. Show me the code.”。
这就是之前的“敏捷”论调,高喊“砸烂一切枷锁”来吸引热血程序员。
但是,事实是残酷的。“发明家”及其追随者慢慢发现砸烂一切是不行的,追随者的信念开始动摇。
轮到下一代伪创新登场。
下一代伪创新不再贬低A、B、C,而是从D来臆想A、B、C,得到的A、B、C“方法学”非常“简单易学”。
不过,伪创新往往不会直接宣传自己“简单易学”,而是会说自己很高深。宣传中往往带有“艺术”、“禅”、“道”等字眼,有意无意地朝宗教、艺术、玄学方向引导——比起枯燥的数学理论和逻辑推理,这些东西可是太好下嘴了。
开发人员上手一学,发现其实不难!就像上面举的两个刷工作量的例子一样,投资少,见效快,产量大,而且仪式感十足。
最妙的是,不用走出舒适区辛苦学习,就得到了“方法学”,这可太符合只掌握D的开发人员的胃口了!开发人员有捡到了便宜的感觉,心中豪气顿生——不愧是我!别整三岁的,有能耐你整四岁的!
8.1.8.4 伪创新特点
造词
为了防止有人怀疑“天下哪有免费的午餐”,伪创新往往会造一个新名字,让人有“取得突破”的感觉,以进一步坚定追随者的信心。
造词手段可以是换词。例如,把“术语表(Glossary)”换成“通用语言(Ubiquitous Language)”。
造词手段可以是拼词。例如,在“愿景(Vision)”前面加上“领域(Domain)”,得到“领域愿景”(Domain Vision)。
如果人们得知一个东西曾经存在过,那么当这个东西再次被拿出来宣传时,人们会对宣传持有较多的理性,“这东西如果真的这么厉害,那之前怎么……”,宣传的人也会收敛,不至于那么夸张。
如果换一个名字,就会给人一种“全新”的感觉,人们可能就会给一个机会,毕竟是“新”的,没准人家真的有这么牛呢。
例如,说青霉素可以治愈肝癌,大众肯定不信,要是真的可以治愈肝癌那么多年不早就验证了嘛;如果把青霉素改个名字叫“K9527-α”,说可以治愈肝癌,可能就会有患者给它一个机会,买了试一试。
一个机会就够了!大不了这个词不好使了再换个词呗,造词工厂的流水线可是全年开工的!
并不是说青霉素没有价值,杀灭细菌总是可以的。就算是淀粉做的假药,还可以起到充饥的作用呢。
危害在于,被误导的肝癌患者可能会将宝贵的金钱和时间资源优先用在了“K9527-α”上,耽误了获得更好治疗方案的机会。
割裂历史
伪创新会有意无意地忽略掉自己出现之前的某段历史,来证明自己的“进步”。
例如,“敏捷”的一些宣传中,一开始会描述“瀑布”如何如何糟糕,然后说“敏捷”如何如何比“瀑布”好,如图8-27:
图8-27 网络截图
把“敏捷”直接和“瀑布”对比,似乎在“敏捷”出现之前就是“瀑布”。
实际上,增量迭代开发、持续集成等软件工程实践早已有之,甚至于图8-27中提到的著名“瀑布”论文,Winston W. Royce发表于1970年的“Managing the Development of Large Software Systems”,也并不提倡以顺序模型作为团队的过程模型。图8-28是该文的一个截图,注意图中的“Iterative(迭代)”一词。对全文感兴趣的读者可自行搜索阅读。
图8-28 摘自Managing the Development of Large Software Systems(Royce W. W. , 1970)
这样的宣传,抹杀了造词“敏捷”之前的软件开发过程所取得的进展,给不了解情况的开发人员留下“这是敏捷发明的,所以嘴上喊着敏捷的人最懂”的印象。
“领域驱动设计”的宣传也有这种误导,如图8-29。
图8-29 网络截图
把“面向过程”、“CRUD”直接和“领域驱动设计”对比,似乎“领域驱动设计”之前就是一片空白。
包括Eric Evans也在《领域驱动设计》的前言中说:
Leading software designers have recognized domain modeling and design as critical topics for at least 20 years, yet surprisingly little has been written about what needs to be done or how todo it. Although it has never been formulated clearly, a philosophy has emergedas an undercurrent in the object community, a philosophy I call domain-driven design.
领先的软件设计人员认识到领域建模和设计的关键性已经有至少20年,然而令人惊讶的是,关于需要做到什么或者如何做,一直以来几乎没人写点什么。不过,一种哲学像一股暗流已经在对象社群出现,虽然还从来没有被清晰确切地表述出来。我把这种哲学叫作“领域驱动设计”。
Eric Evans说的20年,指《领域驱动设计》出版时间2003年前面的20年,大约是1983-2002年。
事实和Eric Evans所说的在这个期间“几乎没人写点什么”恰好相反,那个年代的“领域驱动”味道比今天还要浓,如果没有涌现各种面向对象方法学,UML是怎么来的?
关于面向对象方法学和UML的历史,可参见本书第1章。对Eric Evans以上言语的批评,可参见我写的文章《DDD浮夸,Eric Evans开了个坏头》(https://mp.weixin.qq.com/s/fzRG27uyDSWtNN9thi6Lrw)。
*忽略自己出现之前的进展,把对比的参照物拉回到很多年前,让人联想到穿越小说,主人公回到古代发明肥皂香水水泥火药来碾压对手。*
实在绕不开历史,需要引用文献时,伪创新也会优先把引用停留在“圈子”内,例如Rob*** Series、Mar*** Series,对“圈子”外的贡献所知甚少或视而不见。“圈子”内可以互吹互捧,张三造了一个新词,他自己不吹,由李四、王五、赵六来帮着吹,李四造了一个新词,他自己不吹,由张三、王五、赵六来帮着吹……
图8-30 封闭圈子引用
感兴趣的读者可以看看你手上的带有“敏捷”、“领域驱动设计”名字的书,关注一下它的参考文献。
例如,Eric Evans《领域驱动设计》的参考文献共25篇,图8-31是前17篇。
图8-31 摘自《领域驱动设计》(Eric Evans,英文原版出版于2003年)
可能有的读者会说,咦,这些好像都挺有名的呀!是的,很多都在网红圈子中。
可惜,软件开发不是娱乐业,流量为王。某句话、某篇文章或某本书在某个领域“最有名”,不代表它在该领域“最正确”或“最深刻”。
门槛低
对伪创新圈子而言,“创新”来得非常容易。不用认真学习前人的成果,把自己的一些朦胧感悟写出来,换个新词,就是“创新”了。
有的人甚至是这样“创新”的:我和公司同事某某(也是网红)讨论了什么什么,就悟到了某某创新。
*你的问题在于读书不多,而想得太多。(杨绛)*
了解前人已有的成果,前人曾经想过什么,做过什么,哪些成功了,哪些失败了,才能提出并解决真正的问题。
不了解前人成果,蒙头就得到的,只能叫“学习体会”、“学习感悟”——这些文字里,常会见到“我发现”、“我悟到了”等字眼。
图8-32 学习体会和创新的区别
发表学习体会,包括错误的学习体会,当然没问题,这是个人自由,只要不把学习体会包装成“创新”就好。
***********
初中数学里要学习全等三角形、相似三角形、SSS、SAS……,到了高中以后学了正弦定理、余弦定理等解三角形的知识……就不会再回去用初中的方法解题了。
但是,不是所有人都能学会高中的知识,比如说张三。
张三可能会这样解释:
“我这个人能力比较弱,只能掌握全等三角形、相似三角形的方法。”
这样的说法没有问题。
张三还可能会这样解释:
“这个题目比较简单,用全等三角形、相似三角形的方法做足够了,而且这样更方便广大人民群众理解。”
这样的说法也可以。不过,竞争对手不是傻子,市场中哪里有什么"简单题目"!能带来利润的题目都很复杂。
但是,张三如果这样说:
“全等三角形、相似三角形的知识比高中三角函数的知识更深刻。”
这就是自欺欺人了。
更要警惕的是,有一个李四,也许和张三一样没有掌握高中方法,也许掌握了高中方法但是为了忽悠张三们,偷偷把"全等三角形"改名为"叠合三角形",然后和张三宣传:
“我发明了"叠合三角形"新方法,比高中的三角函数有用,三角函数过时了。”
这就是可恶了。
***********
[202205升级知识讲解]23套UML EA和StarUML的建模示范视频-全程字幕
6月9-12晚网络软件需求设计方法学全程实例剖析公开课
《软件方法》书中自测题-题目全文 分卷自测(1-8章)16套111题
《软件方法》强化自测题集110题
CTO也糊涂的常用术语:功能模块、业务架构、用户需求……[20210217更新]
如何选择UMLChina服务