前几天,有学员发给我截屏,一位“前Google工程师”在自己的网络课上发表了以下言论:

这么多年来,发表类似“感觉UML没用”这样的言论的人,实在是太多了,包括“现Adobe工程师”、“现微软工程师”等等,大公司的名头确实唬住了不少人。

我在《软件方法》中讲述到各个知识点时,也对此类言论有所评述。在此,我专门针对此类言论做一次集中回应。

当惯了尾巴,理解不了脑袋所需的技能

软件开发的一个迭代周期中需要思考四个问题,即四个工作流:

A-业务建模——定位需要改进的目标组织(人群或机构)以及该组织接下来最需要改进的问题。

B-需求——描述为了改进组织的问题,所引入的信息系统必须具有的表现。

C-分析——提炼为了满足功能需求,所引入的信息系统需要封装的核心域机制。

D-设计——考虑质量需求和设计约束,将核心域机制映射到选定非核心域上实现。

如图1。

图1 四个工作流

以上四个工作流的名称使用了传统术语,也有一定的模糊性(特别是业务建模)。更贴切的名称是组织建模、需求建模、核心域建模、实现。如果您觉得业务建模、需求、分析、设计不好,直呼ABCD或改成阿猪、阿狗、阿鸡、阿鸭也无所谓。

针对这些工作流的思考,其实就是建模。任何一个软件项目,这些思考都是逃不掉的,也就是说,我们一直在建模,只不过很多人习惯于无意识地做,运气时好时坏,速度时快时慢,有的人能够有意识地做,让汗水不白流。

思考的结果,可以用口头表达,也可以用文本、其他表示法或自造符号来表达。用UML来表达,目前是一种不坏的做法。如果用UML表达,推荐的用法如图2。可以看到,工作流D可以不需要用UML表达。

图2 各工作流思考内容和推荐表达

如果“前Google工程师”对工作流A、B、C有认识,也掌握了相关的技能,只不过认为自己掌握的其他表示法(例如ArchiMate或BPMN)比UML表示法要好,那么发表以上言论还有可以理解之处。遗憾的是,综合看作者其他言论,他对工作流A、B、C并没有认识,所以作者说“UML没啥用”实际上说的是“工作流A、B、C没啥用”。

为什么“前Google工程师”会这样认为呢?

一些“大厂工程师”,即使在国外总部上班,他所做的工作很可能属于上面所定义的工作流D,没有承担A、B、C的工作,自然感觉不到建模和UML的作用。

这不是新鲜事。上个世纪,市场经济的大幕在中国刚刚拉开时,一些从乡镇企业发展起来的民企,想借助国外先进企业的经验帮助自身提高企业管理水平,从著名外企挖人来当总经理。结果,受惑于老外那花里胡哨的头衔,挖到的“外企人才”其实在外企里扮演的只是走格子的角色,根本担当不起画格子的责任。

习惯了当尾巴,不了解脑袋所需要的技能,也不愿意学习,尚且可以理解,但拿自己的无知和大公司的名头来误导读者,实在不应该。

那为什么有人乐意这样误导呢?

一名护士,即使在美国梅奥诊所工作,也还是护士,并不具备医生的技能,回到中国就当主治医生是不可能的。如果这名护士不想辛苦学习医生的技能,又想获得最大的好处,应该怎么做呢?一个好的策略就是贬低医生的技能,发布类似于“感觉医生没啥用,最终打针还是得靠护士来打”的言论,把周围的人的知识限制在自己懂的范围之内。

护士虽然没有掌握检查诊断的技能,拍脑袋就开药,但为了掩盖自己的缺陷,开处方的时候特别在意字写得很工整,对患者的态度也出奇地好。有时候,患者还真的被蒙住了。可惜,药不对症就是不对症。

***************************

对工作流A、B、C没有认识,最容易产生的误解就是,认为UML模型只是代码的一个“概要描述”或者“视图”。这样的误解经常会导致思维颠倒,先拍脑袋得到D,然后从D反推A、B、C。例如下面的对话:

张三:这个不应该是系统的用例(如果您不理解什么叫“用例”,就先把它理解为“功能”好了)。

李四:是的!我都写好了,运行一下给你看,这个系统确实提供了这个用例。

是否系统的用例应该以“好卖”来判断。权衡涉众利益之后觉得应该有,系统就有,不该有就没有,而不是我写好了代码,所以就应该有。

张三:这两个类关系不应该是泛化,而是关联。

李四:是泛化,不信我打开代码给你看,或者逆向工程转出类图给你看。

是否泛化关系应该以“符合领域内涵”来判断,而不是先写好代码“人是猪的一种”(肯定编译通过),再用写好的代码来证明“人是猪的一种”。

这种误解不只是某些“Google工程师”会有,很多开发人员眼中的“大神”也会有。Martin Fowler所著的UML畅销书《UML精粹》,认为UML有三种用法:草稿、蓝图和编程语言,也是把UML模型当成了代码的一种“文档”。从Fowler的书籍和文章可以知道,他的研究工作集中在C和D,特别是D,对A和B研究并不多。

***************************

最后说一下态度问题。

既然开课教书育人,应该有一个严谨的态度。“感觉”、“没啥用”之类的用语是不合适的。可以说“我不用UML”,“我认为UML在****情况下用处不大”。

***************************

对任何东西,应该先了解,再评论。

读者可以先尝试做下面的题目,看看自己对建模的了解是什么水平。然后再看看对本文有任何看法。

*《软件方法》书中自测题-题目全文+分卷自测(1-8章)16套111题
https://mp.weixin.qq.com/s/Xj9YoZzuR-4loMXwBubEag
*UMLChina建模竞赛题大全-题目全文+分卷自测(10套100题)
https://mp.weixin.qq.com/s/E8GqpXTKWPafJhb_u17-yg

也可以看看我写的其他文章。


为什么“前Google工程师”会“感觉UML没啥用”?相关推荐

  1. 前 Google 工程师出书了!(全彩版)

    微信搜索逆锋起笔关注后回复编程pdf 领取编程大佬们所推荐的 23 种编程资料! 网络上流传着一句段子"程序员两条腿,一条是算法,一条是英文,想跑的更远,这两条腿都不能弱".英文, ...

  2. 前 Google 工程师总结的算法面试指南

    作者 | 小争哥 出品 | 小争哥 (ID:xiaozhengge0822) 为什么要学习算法和数据结构?尽管原因有很多,比如锻炼逻辑思维能力.编码能力.阅读源码的能力等等,但我想对于大多数人来说,最 ...

  3. 前google工程师,带你跨过“数据结构与算法”这道坎

    https://time.geekbang.org/column/article/39922

  4. Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?

    出处:极客时间<数据结构与算法之美> 很多技术人都很迷茫,觉得自己做的项目没有技术含量,成天就是卖苦力.技术的东西,日新月异,有些人总在忙于追求热点新技术,东学学.西学学,平时泛泛地看技术 ...

  5. 前谷歌工程师:如何看待程序员普遍缺乏数据结构和算法知识?

    很多技术人都很迷茫,觉得自己做的项目没有技术含量,成天就是卖苦力.技术的东西,日新月异,有些人总在忙于追求热点新技术,东学学.西学学,平时泛泛地看技术书籍.技术文章,但始终根本抓不住技术的本质,干了三 ...

  6. 前百度工程师出走后纷纷复制创业密码

    前百度工程师出走后纷纷复制创业密码 http://tech.QQ.com 2006年12月04日15:52 环球企业家 (0) 缔造中国最大搜索引擎的幕后角色们正纷纷拷贝.粘贴李彦宏的创业密码 文·本 ...

  7. 最佳开发工具大全!前谷歌工程师两年打造“厂外生存指南”,登上GitHub热榜

    晓查 栗子 方驭洋 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一位曾经的谷歌工程师,花费两年时间,辛苦整理了一份清单. 这个名为"xg2xg"的清单,原本是这位前谷歌 ...

  8. 为什么机器人发展了几十年感觉还是没太大进展

    一.前言 在大多数人的印象里,从工业革命开始,机器人这个概念就诞生了.但是,直到21世纪的今天,机器人还是停留在科技大片中,让人越来越看不懂,这东西到底是忽悠人的?还是忽悠人的?还有忽悠人的? 本文做 ...

  9. 售前技术工程师的成长(转)

    售前技术工程师的成长(转) 在IT圈里混了十多年,差不多八年的厂家技术管理工作,一直与客户进行技术沟通:无论是做网络,还是做安全,感触最多的还是作为售前工程师的时候,因为售前技术工作是介于销售与技术之 ...

最新文章

  1. The application does not contain a valid bundle identifier.解决方法
  2. 5.15 pymysql 模块
  3. Linux系统中CPU使用率查询常用的5个命令
  4. 别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...
  5. npm安装typescript
  6. 一个操作系统的实现01
  7. 选择排序(C++/Java实现)
  8. BZOJ1966: [Ahoi2005]VIRUS 病毒检测 Trie+搜索
  9. springboot 建readme_README
  10. 黑盒测试用例设计方法实践---(判定表驱动法)
  11. cocos2dx基础篇(14)——基本绘图DrawPrimitives
  12. java粒子群算法_Java多线程技术实现的粒子群优化算法
  13. 3种竞争力分析的简单途径
  14. vue3+vite+TS配置项目别名“@/“
  15. 单元测试之 Xunit
  16. C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
  17. 3.8 JS 制作无间断图片循环滚动效果
  18. 致命错误: Call to undefined function mb_detect_encoding()
  19. [秋招]大疆秋招正式批笔试
  20. 伯克利的电气工程和计算机科学专业,加州大学伯克利分校

热门文章

  1. 【171期】面试官:小伙汁,Spring是怎么解决循环依赖的呢?
  2. 正点原子linux串口驱动下载,「正点原子Linux连载」第六十三章Linux RS232/485/GPS驱动实验...
  3. 瑞典安百拓集团将把日本工厂搬到南京;好时在马来西亚开设新研发中心 | 美通企业日报...
  4. hihoCoder #1073 光棍节
  5. iOS开发——网络请求案例汇总
  6. 面试最常考、最常用的10大机器学习算法
  7. 云师大计算机科学与技术,云南师范大学信息学院
  8. java计算机毕业设计计算机实验中心网站源码+mysql数据库+系统+lw文档+部署
  9. [译]借助函数完成可组合的数据类型(软件编写)(第十部分)
  10. mysql 数据库增量备份与恢复