软件应该是一棵树

一个成熟的软件是一个复杂的系统,当我是一个新手的时候,我以为它像一座建筑,按照既定的图纸开发出来。现在我更深的体会是,它更像一棵树,是逐渐成长起来的。事实上,世界上最复杂的软件,它的复杂度都远远不如一棵树。

  • 层次结构(分离关注)

从宏观意义上来说,一棵树有花朵、叶子、树干、树根等结构,而具体到花朵又有花冠、花萼、花蕾等结构,更微观上,每个植物细胞都有细胞壁、细胞核、细胞液、叶绿体等结构。任何复杂的系统都有可分解的层次结构,我们要考察这个系统的某个特性的时候,要在合适的层次上进行研究——这也就是“分离关注”。例如我们要解释植物是如何合成植物蛋白的,可以这样解释:

树根从土壤中吸取水分和微量元素,经过树干输送到树冠的叶子,叶子吸收二氧化碳,通过光合作用合成植物蛋白。

接着如果要考察叶子如何进行光合作用,就要从叶子的植物细胞的叶绿体,细胞液,细胞核等不同组成部分的功能和相互之间的交互来解释。

同样的从宏观上考察软件作为一个系统,完成某个功能的时候,可以从不同层次(树根、树干、叶子)之间不同形式的数据(水、微量元素、二氧化碳)是如何传递转化的来解释。之后就要深入到了解某一个层次的组件是如何完成交互来完成某一子功能。

  • 自律性个体

仅仅拿一个植物细胞来考察,就会发现你很难不把它认为是一个自律性的生命个体。作为细胞群中的一员,它和其他细胞不断的交换物质,同时它有自己的化学趋向(趋水、趋光)。根部向水生长,树冠朝向阳处生长,这些宏观的行为,并不是给每一个细胞发送指令,而是它们自发性行为的整体表现。而所谓的自律性,首先要定义个体对哪些刺激敏感而会有哪些产物,例如叶绿体在光线刺激下会通过光合作用合成相应的化学物质,而这种化学物质又作为植物细胞的刺激输入而有新的化学物质产生。这些简单的规则定义之后,就会在整体上表现出统一的规律。这也是软件开发从面向过程到面向对象转变的本质,也就是消息驱动的设计模式。

  • 共同模式

在植物结构层次的各个部分之中,有着大量相同的特点。树根或者树叶,基本的组成单元是细胞,它们的结构是类似的,虽然存在是否含有叶绿体这个显著区别,而且其细胞液的化学成分不同。这是因为细胞的基础结构提供了一系列基础功能,例如细胞壁提供了支撑和保护功能,细胞液提供了物质交互的场所,诸如此类,大自然遵守着软件开发的“DRY”原则,用组合(加一个叶绿体提供光合作用)或者继承(细胞壁有不透水的也有半透膜)的方式,做了一个复杂系统的经济表述。

理论物理学家认为,宇宙只存在四种基本的作用力:重力、电磁力、强相互作用力和弱相互作用力。宇宙通过这四种基本力又组成了恒星、行星、卫星等在宏观层次上大量复用的共同模式。在面向对象的软件系统中,对象与对象只存在三种基本的关系:组合、继承和相关。通过这三种基本关系,又可以识别出多种设计模式。

  • 稳定的中间形式

复杂系统毫无例外都是从能工作的简单系统演变而来的......从头设计的复杂系统根本不能工作,也不能通过打补丁的方式使其工作,必须从头开始,从能工作的简单系统开始。

一颗种子成长为一棵树,要经过几个稳定的中间形式。种子的胚胎已经简单却分明的层次,其中有一些会发育成熟为其他的姿态,有一些会完成历史使命而消失,还有一些模块,例如花朵,是旧系统上全新产生的,但也是依赖于现有的稳定的层次。生长环境会影响树木发育的最终形态,这就像一个软件系统开始成熟起来,而开发人员对其真实行为了解的越来越多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容