语义扩散
2006年12月14日
我习惯于创造新词来描述我在软件开发中看到的事物。这在该领域的作家中是一个普遍的习惯,因为软件开发仍然缺乏很多有用的术语。构建术语的一个问题是,术语很容易失去其含义,在这个过程中,语义会发生扩散——这又是一个可能添加到我们术语中的新词。
语义扩散发生在你有一个由个人或团体创造的词,通常有一个很好的定义,但随后在更广泛的社区中传播时,这个定义被削弱了。这种削弱有可能完全失去定义——以及该术语的任何用途。
我之所以写这篇文章,部分原因是我看到语义扩散正公开地发生在两个词上:“敏捷”和“Web2.0”。这两个词都是在过去几年里创造出来的,而且都有很长的定义。(敏捷有敏捷宣言,以及宣言作者的众多书籍和文章。Web 2.0 有一篇由 Tim O'Reilly 撰写的定义性文章。)然而,这两个词在该领域都面临着很多曲解。我遇到过一些人认为敏捷方法意味着你不应该做任何计划,还有一些人认为 Web 2.0 仅仅是关于使用 AJAX。(一个更私人的例子是重构误用,但我现在先不谈这个。)
语义扩散本质上是传话游戏的连续,在传话游戏中,与术语的创造者不同的一组人开始谈论这个术语,而不注意遵循原始定义。这些人会被另一组人听到,然后这组人会继续添加他们自己的扭曲。在经过几次这样的传递之后,除非你回到最初的创造者那里,否则很容易失去该术语的关键含义。讽刺的是,最容易遭受这种现象的往往是流行的术语。当然,这是不可避免的,因为不受欢迎的术语参与创建传话链的人更少。
语义扩散往往与一个想法的炒作阶段相吻合。当一个想法变得有吸引力时,很多人就会被……吸引。这些追随者中的许多人都在谈论这个词,并教授它。如果这些人不认真地追根溯源,传话游戏就开始了。流行的思想也主要通过更容易导致误解的传播媒介传播——比如写作。许多追随者没有机会直接与创造者一起工作,因此无法直接向他们学习。
与流行度相关的另一个指标是可取性。一个听起来不错的词可能更容易遭受语义扩散。“敏捷”听起来像是你想要的东西,敏捷的反义词一点也不吸引人。谁会想仅仅停留在网络的 1.0 版本呢?Kent Beck 注意到了这种效应,因此故意选择了“极限编程”作为名称,因为它本身就不那么令人向往:“极限”通常被用作贬义词。使用一个不那么令人向往的词可能会减少语义扩散,但我认为它并不能完全避免这个问题。毕竟,我们看到了“面向对象”的语义扩散,这是一个中性词。
与硬技术相比,语义扩散更容易发生在广泛的概念上。Ruby on Rails 目前正在被大肆炒作,但因为它是一个具体的工具,所以它的含义很难被削弱。与敏捷更广泛的价值观和原则列表相比,极限编程的具体实践列表也可能减少这个问题。
语义扩散是一个令人痛苦的过程,特别是对于那些觉得这些想法有用的人来说。目前,我看到了这两个词的绝望迹象,敏捷世界中的一些人正在谈论放弃“敏捷”这个词。
我对这一切都比较乐观,主要是因为我以前见过。曾经有一段时间,几乎所有的软件工具或方法都被描述为面向对象的。但现在,几年过去了,面向对象的基本含义已经被很好地理解了。我在模式上也看到了同样的事情。所以,术语确实会恢复它们的语义完整性,目前的扩散并不意味着这些术语会失去它们的含义。我对此也不太担心,因为我预料到了,因为我以前经历过这个过程。我认为这是思想变得流行的必然结果,尽管它有问题,但我更喜欢炒作而不是无知。最后一个令人欣慰的想法是,一旦不可避免的反弹到来,我们就会重新关注最初的含义。在我写这篇文章的时候,我感到欣慰的是,我想不出一个完全失去其含义的词,尽管我相信这种情况已经发生过。(SOA 不算,因为我认为它从来没有一个共同认可的含义。)
无论最终结果如何,我们仍然必须在语义扩散发生时应对它。一种选择是放弃,放弃扩散的术语,选择一个新的术语。我不喜欢这种选择,因为一个新的术语只会增加混乱,即使你成功了,你也只是在为新的术语重复这个过程。所以我倾向于继续重新阐述当前的术语,指向那些理解真正含义的人。
更复杂的是,这些术语也在发生变化。我相信,如果你去问敏捷宣言最初的 17 位作者,他们今天会拿出一个不同的文件。(更不用说,这个群体已经不是今天最适合代表这场运动的人了。)同样,那些被认为是创始者的责任是指出这一点,既要谈论这些想法是如何演变的,也要指出那些在演变过程中发挥积极作用的新人。(我很高兴最初的 17 人“让船航行”,走自己的路。)让我们不要忘记,在坚持明确的定义和教条主义之间存在着微妙的平衡。
所有这些都是艰苦的工作,但一个好的术语值得为之奋斗——特别是因为你需要的唯一子弹是文字。
语义反转
语义扩散的一种常见形式是,该术语最终的意思与其最初描述的含义相反。例如,“DevOps”变成了一个独立的运营团队的名称,或者“最小可行产品”被用于一个 1200 万美元的首个版本。Holly Cummins 简洁地创造了“语义反转”来描述这种令人担忧的变体。