从程序员的角度来看DNA(2)
人类DNA的代码长度
人类基因组代码长度大约3个GB,压缩后只有750mb。也就是一张标准CDROM的数据量,比现在动辄几个GB的软件尺寸小得多。而且DNA代码和我们安装的软件代码都是“编译后”的代码。
条件编译
一般认为大概有20000到30000个基因在人类基因组里(当然人类目前并没有完全识别出每一个基因),大部分细胞只使用了很小一部分基因的功能。这是有道理的,1个肝细胞只需要整个DNA代码的很小一部分来完成它的功能,它根本用不到神经细胞的一些功能。
但是几乎所有的细胞都携带着一个基因组的完整拷贝(类似于“分布式”数据库存储),所以这整套基因代码里必须有 #ifdef这样的条件语句来指定哪些代码是不需要的,哪些代码不用进行“编译”。那么这些细胞是如何进行分化,执行不同的功能就说得通了。生物的基因代码里充满了大量的 #if/#endif 这样的语句,来指定哪部分代码需要编译。
这就是为什么现在'干细胞’这么火,这些细胞具有分化成其他任何一种细胞的能力。可以这么说:这些干细胞的遗传代码也许还没有被加上 #ifdef 。
说得更准确些,干细胞并不是同时把自身的一切基因都进行“编译”----它们不能立即变成肝细胞和神经元细胞。细胞可以被当做是一个状态机,最开始,它是一个干细胞,在这个细胞的生命周期内,它可以克隆很多次,在满足一定条件时它将向一个特殊的方向分化。每次向一个特殊的方向分化都可以视为在一根大枝干上选择一根小枝干,特异化为具备指定功能的体细胞。
每个细胞都可以决定(或者被外部因素诱导到)自己的未来特异性状态,每次它的决定都会导致它更加特殊化。这些选择带来的改变都具有持久性,因为在克隆过程中会发生转录因子修改DNA来存储选择带来的改变('位置效应’),让分化后的细胞一般难以退回到干细胞状态。细胞的高度特异分化也降低了其自我修复的能力,这部分地使得生命体寿命有限。
例如,肝脏细胞,虽然它携带的基因让它做肝细胞该做的事,而且一般不会起到一个皮肤细胞的作用。但一些自然的条件或人类的技术干预,可以'培育’细胞让它沿着分化体系'开倒车’,进而使他们再次具有干细胞的向其他种类细胞分化的能力。
例如人类掌握了 间接细胞系转换(indirect lineage conversion,ILC)的方法,利用这种方法,体细胞能退回到早期阶段,从而进一步变成接近干细胞状态的“祖细胞”,这让人类可以获得修复身体受损组织,甚至在未来显著延长寿命的能力。正如在编程时,只要源代码还保存完整,一切修复和排错工作就仍能进行。