按:今天在网上看到阮一峰推荐的《Hype Driven Development》,忍俊不禁,联想到工作中的很多经历又百感交集。趁春节假期翻译出来(练练手),与大家共享。
点击“阅读原文”可以看到英文原文。
软件开发团队关于软件架构或技术栈的决策,很多并不是基于
扎实的研究和对期望效果的认真思考,而是
不准确的意见、社交媒体的信息,或者就些是“热门”玩意。这种做派的危害我见过不少,称它为“热闹驱动开发(Hype Driven Development,HDD)”。我赞成的是更专业的做法,称之为“脚踏实地的软件工程”。下面一起看看HDD的来龙去脉,想想我们能怎么改进。
新技术带来新希望
团队把最新最热的技术应用到项目里,这样的景象你见过吗?有人是因为读到了相关的博客,有人是看到Twitter上的潮流,还有人是刚刚在技术大会上听到了关于某门技术的精彩演讲。不久,团队就开始采用这种亮眼的新技术(或者软件架构设计范式),结果他们并不能更快(就像之前说的那样)开发出更优秀的产品,反而身陷囹圄。开发的速度降下来了,信心受挫了,后续版本的交付也出问题了。有些团队甚至干脆专心修bug,而不是开发新功能。他们“只需要多花几天”就能把事情搞定。
热闹驱动开发
热闹驱动开发有很多流派,也有很多渠道介入大家的项目:
Reddit驱动开发
——在选择技术、架构、设计时,团队和个人的决策依据是知名博主的文章,或者reddit, hackernews, blogs, twitter, facebook, Github或者其它社交媒体上的热点。
技术会议驱动开发
——仔细观察观察,参会回来的家伙们有什么表现。他们备受演讲的鼓舞。这是双刃剑。他们没有足够的研究,就开始使用最新最热的类库/框架/架构范式,而这可能是通往地狱的高速公路。
嗓门驱动开发
——有人整天谈论新框架/类库/技术,他自己却没有经验,但是反复念经终于让团队决定采纳它。
Gem/类库/插件驱动开发
——在RoR社区里特别流行这种情况,有时候我会发现一个gemfile太长,只有程序启动时的装载时间比它更长。这种流派源自下面的观念:Rails里的每个问题都应当有个gem来解决。有时候只要自己动手写几行代码就能解决,但是我们还是一个劲地添加类库/插件/gem/框架。
我还希望提到热闹驱动开发的一个常见流派,
StackOverflow 驱动开发
——开发人员从StackOverflow(总之就是互联网上)拷贝代码,而没有真正弄懂它们。
HDD就是开发团队自掘坟墓
凑热闹的问题是:它很容易导致错误决策。无论是糟糕的架构决策,还是糟糕的技术栈决策,给团队的影响都常常持续数月甚至数年。最糟的是它们会造成软件工程上千疮百孔的局面,只能推倒重来。但推倒重来几乎没有成功案例。
一切罪恶的根源似乎都是社交媒体——新观点传播得太快,还没来得及经过检验。大家还来不及细想有哪些利弊,就已经传播开去。
凑热闹的来龙去脉
大多数凑热闹的步骤是相同的,像下面这样:
第一步:真实问题和解决方案
这些热闹源自于某些真的遇到了问题的公司。公司里的团队认为,现成的技术栈、流程、架构并不能解决这个问题,必须自己动手。所以公司研发了新的框架、类库、范式,问题迅速解决了。
第二步:宣示、推广、包装关键词
团队热衷于向他人展示自己的成果。很快他们就发布了博客,也去会议上演讲。这些问题通常是有分量的,所以解决方案也是有分量的,结果也是很可观的,团队对此很自豪。其它人也开始为这项新技术而激动。唯一的问题是,并非所有激动的人都能彻底理解问题和解决方案的细节。毕竟,问题是有分量的,解决方案也是有分量的,所以不是一条推文、一次碎碎念、甚至是一篇博客就能讲清楚的。利用博客文章、技术大会的主题演讲之类的社交工具,原始信息就很容易产生偏差。
第三步:狂热现身
HDD阴影下的开发人员都会阅读博客、参加技术会议。然后世界各地的团队都开始使用新技术了。因为信息眼睛走样了,所以有些人会在框架问题上做草率的决定,即便框架没有解决任何具体问题。但是,团队仍然期望新的框架会带来帮助。
第四步:心灰意冷
新鲜劲头过去了,新技术并没有给团队带来期望的改进,反而增加了很多额外的工作。大家得重写很多代码,花不少时间专门学习。工作的速度慢下来,管理者也没耐心了。大家都感觉被骗了。
第五步:反省领悟
最终团队做了复盘,认清了为新技术付出的代价,也认清了新技术适合解决的问题。大家都变聪明了,直到追逐下一次热闹为止。
HDD举例
来看看几个热闹驱动开发的例子,看看它是怎么发生的。
举例 1:React.js
-
Facebook遇到了一个问题,Facebook自己的复杂单页面app里,会出现各种状态改变的事件,必须追踪到发生了什么,并且保持状态的连贯一致。
-
Facebook用几个时髦的词包装新范式:函数式、虚拟DOM,组件。