山寨、染色和敏捷-《软件方法》全流程引领AI-第1章 05
《软件方法》全流程引领AI-第1章 ABCD工作流-01
对PlantUML们的评价-《软件方法》全流程引领AI-第1章 02
AI辅助的建模步骤-《软件方法》全流程引领AI-第1章 03
伪创新-《软件方法》全流程引领AI-第1章 04
第1章 ABCD工作流
1.5 警惕和揭秘伪创新
1.5.4 运作
1.5.4.2 山寨
(1)迎合伪创新买家的喜好,有意或无意地模仿已有的X、Y、Z方法,发明出相应的X-、Y-、Z-方法。
★有意:发明者知道X、Y、Z的存在,但只是粗浅了解,没有认真研究。
★无意:发明者不知道X、Y、Z的存在,费尽心思发明出X-、Y-、Z-,实际上仅是对已有X、Y、Z拙劣模仿。
★买家的喜好:只了解D工作流,不了解ABC工作流也不愿意学习。
(2)把谈论范围限制在X-、Y-、Z-,避免谈及X、Y、Z。
图1-35 山寨
可能有的读者会下意识认为,哇塞,这不是GoF设计模式里面的“适配器(Adapter)”模式吗?这样一搞,X、Y、Z能适配不同的目标人群,这是好事啊!
这不是“适配器”。“适配器”是接口不兼容的时候提供“适配”,干活的逻辑还是X、Y、Z的逻辑。伪创新则是另搞了一套粗陋或错误的内容,把X、Y、Z扔掉了(或者压根没听说过X、Y、Z)。
也就是说,有可能X-、Y-、Z-的“接口”和X、Y、Z一样,但内容是粗陋或错误的。
1.5.4.3 染色
把自己定义得很抽象,以便把已有成果纳入自己的领地,我把这个叫作“染色”。
“Domain-Driven Design”的作者Eric Evans就把领域驱动设计称为“哲学”,他在“Domain-Driven Design”的前言中说:
Although it has never been formulated clearly, a philosophy has emerged as an undercurrent in the object community, a philosophy I call domain-driven design.
不过,一门哲学像一股暗流已经在对象社群出现,虽然还从来没有被清晰确切地表述出来。我把这门哲学叫作“领域驱动设计”。
把领域驱动设计定位为“哲学”,这个超然的地位使得领域驱动设计更方便地把从前、现在和以后的成果纳入领域驱动设计的领地。
有心的读者可以用“DDD的”、“领域驱动设计的”、“DDD提出”、“领域驱动设计提出”等关键词搜索,会得到各种染色的结果,如图1-36。
图1-36 领域驱动设计的染色
“领域驱动设计”继承的是“敏捷”的风格。“敏捷”可以说是染色的“巨人”了。
2001年2月喊出“敏捷”口号之后,迅速出现一批名为“敏捷××”的书籍。我挑出一些名字相当直白的书(还有很多内容类似的书名字稍委婉):
Agile Software Development, Alistair Cockburn,2001
Agile Modeling,Scott Ambler,2002
Agile Software Development: Principles, Patterns, and Practices,Robert C. Martin,2003
Lean Software Development: An Agile Toolkit,Mary Poppendieck 等,2003
Agile Management for Software Engineering,David J. Anderson,2003
Agile Documentation,Andreas Rüping,2003
Agile Database Techniques,Scott Ambler,2003
Agile Software Development,Alan S. Koch,2004
Agile Project Management,Jim Highsmith,2004
Agile Project Management,Gary Chin,2004
Agile Estimating and Planning,Mike Cohn,2005
Agile Java,Jeff Langr,2005
Agile Web Development with Rails,David Thomas 等,2005
Agile Development with ICONIX Process,Doug Rosenberg 等,2005
Agile Java Development with Spring, Hibernate and Eclipse,Anil Hemrajani,2006
Agile Systems with Reusable Patterns of Business Knowledge,Amit Mitra 等,2006
Agile Information Systems,Kevin C. Desouza,2006
Agile Software Construction,John Hunt,2006
……
上面所列的这些书籍,大部分有中译本。
图1-37 敏捷宣言之后的几年内出版的一些书
注意,“敏捷”并不把染色限于项目管理或过程改进,面向对象、数据库、Java、Web等内容也被“敏捷”染了色。
最典型的是Robert C. Martin的“Agile Software Development: Principles, Patterns, and Practices”。这本书主要讲述的是面向对象分析设计的一些内容,这些内容非Robert C. Martin首先提出,而且和具体过程没有必然关系,但Robert C. Martin的做法使很多开发人员产生误解,以为这些内容是敏捷圈子的研究成果。
“Agile Software Development: Principles, Patterns, and Practices”的内容扩展自Robert C. Martin于2000年在自己网站objectmentor.com上发表的“Design Principles and Design Patterns”,Robert C. Martin在这篇文章中整理了一些他认为比较重要的“原则”和“模式”。
图1-38 “Design Principles and Design Patterns”截图
★目前,objectmentor.com已不再有效,在网络上可以下载到“Design Principles and Design Patterns”文章的地址是:
https://staff.cs.utu.fi/~jounsmed/doos_06/material/DesignPrinciplesAndPatterns.pdf
“Design Principles and Design Patterns”的几十页内容中,没有一处提到“agile”(正常,口号还没喊出来呢),也没有一处提到“light”、“lightweight”、“process”或“methodology”,说明Robert C. Martin自己非常清楚这些内容写的是什么。
而在他2003年的书中,这些内容摇身一变,成了“敏捷软件开发原则”。读者可以体会一下,Robert C. Martin是出于什么样的心思。
这二十多年来,我在和各种开发人员打交道的过程中,就因此备受困扰。
在圈子的强力宣传之下,开发人员变成井底之蛙,以为所谓的SOLID原则就是软件设计的法宝,学会了它,就能搞定软件设计的问题;反过来,如果没搞定,就是因为没理解透这几个原则。
于是,开发团队就来找我给他们讲SOLID原则(以及同样出名的GoF模式)。碰到这种情况,我也只能如实告知,讲当然没问题,主要就是一个泛化(继承)的应用,车轱辘话产出这么多内容,但除此之外,分析设计还有更难也更有价值的内容值得学习。
读者不妨结合前文内容猜一猜,我这样一说之后,开发团队怎么反应的概率最大?
“敏捷”的“染色”持续到今天。最近几年的各种热点,“敏捷”都有“染色”——敏捷大数据、敏捷机器学习、敏捷人工智能,如图1-39。
图1-39 最近几年出版的紧跟热点的“敏捷”书籍
除了圈子众人主动出击四处“染色”之外,当“敏捷”成为政治正确时,一些本来在圈子外的方法学家(甚至还包括UML三友之一)眼见口号来势汹汹,于是就带着自己的方法来投靠,宣称“我这个***也是敏捷的!”。
如何让“武德驱动设计”包揽每一年的诺贝尔物理、化学、生理学奖?
(1)提出“武德驱动设计”的口号,把它定义为“一种强力推动人类文明发展的科学”;
(2)全球组圈子,散布“武德驱动设计是一种强力推动人类文明发展的科学”的说法;
(3)称赞乐意投靠的诺贝尔物理、化学、生理学奖获得者符合“武德驱动设计”的精神;
(4)建立“凡是强力推动人类文明发展的科学就叫武德驱动设计”的思想钢印。
(5)不认同(至少在口头上)“武德驱动设计”的科学家,将无法获得诺贝尔物理、化学、生理学奖。
你,学会了吗?
(待续)