Star trek 是基本上属于 Geek 必看的科幻剧了,虽然年代久远了一点,但里面很多词和符号都成了 Geek 文化的一部分。
我甚至怀疑乔布斯老师是按照 Star trek 里面人手一个 PADD 的创意发明 iPad 的。
Startrek 剧集中塑造了一个外星种族,叫做 Borg. 我觉得很有意思,来八卦一下。
首先,Borg 这个种族常常和邪恶帝国挂上等号。如果你去翻 New Hacker’s Dictionary 的 Borg 条目, 他就会告诉你, See also: Evil Empire. 如果你是 geek 网站 slashdot 的常客,你就会发现, 上面每条微软的新闻旁边,都是比尔盖茨同学戴了一个机械状的头盔/帽子, 是的, 这就是隐喻了比尔盖茨的微软是个邪恶帝国。
为什么说 Borg 是邪恶帝国呢? 这要从 Borg 的生存方式说起。 所有的 Borg 成员,都随时听从一个中央命令机构,叫做 Collective (集体). 这个集体, 随时能够和任何一个 Borg 成员通信, 在 Borg 成员里共享一切信息. 每一个 Borg 成员并没有名字,而是以代号相称, 比如第一联合方阵第一分队 9 人组第 7 号(著名的 Seven of nine)。 这些成员也没有任何所谓的个人意志,都是属于 Borg 集体里的一个工蜂而已。
Borg 本身只是一种社会组织方式,蜜蜂和蚂蚁基本上也是这样组织的。 Borg 的邪恶之处在于,他生存的唯一目标,就是不断的同化其他的种族,以达到自身种族的完美。 他们对其他种族的同化显然非其他种族自愿的,于是他们就不断的发动战争,其中就包括对人类的战争。 同时,他们的武器系统还很发达,能够自动适应对手的武器系统,所以基本上同化其他种族好不费力气。 Startrek 剧集放到 Voyager 的时候,他们基本上已经统治了银河系第四象限的绝大多数星球系统了。 一个种族一旦被同化,就彻底变成了 Borg 集体里面的一个零件,所以,Borg 几乎是所有其他种族的敌人。
Borg 同化的方法也很神奇,就是给你注射一种纳米级别的生物芯片,这种生物芯片一旦到了被同化的生物的体内,就开始改造这个生物。 以人类为例,Borg 认为人的视觉系统不够发达,所以同化人类为 Borg 的时候,人就会被添加一个发红光的眼睛部件。 Borg 的这个特征很显著,盖茨大叔的图就是这么回事。
Borg 这种集中的,集体的,一致对外的组织方式,是效率无比之高的。 当然,Borg 也有一个致命的弱点: 他们的技术非要通过同化其他生物才能获得,他们本身的研发技术却不见得怎么样。用句流行的话说就是 “一直在模仿,从来不创新”。 所以假如遇到不能同化的生物,他们就非常郁闷。比如说,Borg 编号为 8472 的生物的免疫系统特别强, Borg 的生化武器完全不起作用,这时候 Borg 就被打得落花流水。 最后还是靠英勇的人类船长和神奇的医生研发的技术才勉强打败了 8472 号生物的一次进攻。
Star trek 中有多次 Borg 的成员被同化后脱离了组织再次变成一个个体的例子。 最显著的就是 Seven of Nine 的去 Borg 过程了。 Seven 是一个人,很小的时候就被同化成 Borg, 一开始是作为合作来到 Voyager 船上的,但是时刻不忘和集体保持联系。因为一次事故,她和集体的连接被切断了,她立即感觉到“我再也听不到集体的声音了,我很孤独”。 的确,Borg 集体的力量和声音是非常有安全感的,一瞬间失去了之后必然会感到很孤独。 船长 Janeway 就说,你不是 Borg, 你首先是一个人,不要感到孤独,我们船上所有的人都是你的朋友。 Seven 最终摆脱了 Borg 集体的影响,成了 Startrek 系列中最性感的角色,哈哈。
最后附送一个和 Borg 有关的好玩的技术八卦。 大家都知道 GoF 的 Design Pattern 里面的 Singleton Pattern, 就是一个类只能有一个实例。 在 C++ 等标准的静态语言上,实现方法是私有化构造函数等等。 在 Python 这种藏不住构造函数又动态的语言中,
实现 Singleton 看上去是比较麻烦的。 不过,有一个叫做 Borg Pattern 的实现,优雅得实现了 Singleton。 如果你了解了 Borg 种族的特点,又知道 Python 的一些基本知识, 你看下面的这个代码肯定会赞叹到笑出来。
class Borg: __collective_mind = {} def __init__(self): self.__dict__ = self.__collective_mind # and whatever else you want in your class -- that's all!
Borg Pattern 就这么简单。对于小项目中顺手写一些控制资源访问的 Singleton 来说,这个 Borg Pattern 实在是不能再好了。