在我的上一篇文章中(不朽传奇-云计算技术背后的那些天才程序员:Qemu的作者法布里斯贝拉) 提到了Bellard是一个极具黑客气质的天才程序员,从某种意义上来说,只有黑客精神能完美阐述Bellard那些“离经叛道”也好,不可思议也好的行 为背后的驱动力。注:这里的“黑客”和我们经常在影视作品或传媒中出现的,主要进行计算机或网络攻击,破坏等行为没有任何关系,Eric Raymond 对此有过清晰的描述,在此不再赘述,为了避免误读,本文统称为极客。
虚拟世界中的极客精神
现实世界里极客精神与天才程序员的关系就像是科幻电影星球大战中所描绘的原力与绝地武士的关系,两者惊人的相似,原力是绝地武士生命的组成部分之一,极客精神亦然,就像绝地武士的最强大力量来自于原力,天才程序员的最强大力量来自于极客精神,其导致的结果也一样,绝地武士主宰了整个宇宙文明的走向,现实世界中天才程序员影响了人类整体信息产业的格局,进而影响了整个人类文明的走向,同样,在科幻世界中绝地武士屈指可数,现实世界中天才程序员凤毛麟角。
计算机体系结构一个现实世界中的矩阵
曾几何时,计算机体系结构对于程序员来说就像矩阵对于Neo一样透明,因为第一代程序员就是硬件设计人员,他们设计并制造了硬件,同时写下能够被硬件执行的代码,时至今日,我 们很少能够看到这些对计算体系如此了如指掌的人了,偶尔闪现的那些身影,他们的名字振聋发聩,并被我们冠以天才的称号,究其原因,是基于工业化的发展需 要,我们创造性的为整个计算领域建立了一套严密的框架体系,这些框架体系是如此“完美”,使整个计算机工业从硬件到软件严丝合缝的粘合在一起,并以极快的 速度向前飞速发展,与此同时,作为这个体系的一个组成部分,程序员自然丧失了先前的自由,被体系结构牢牢禁锢于其中,就像矩阵中的Anderson,命运从此不由自己掌握。让我们简要回顾一下计算机发展史,从中我们可以清晰的看到这一堵堵禁锢我们于其中的高墙是如何建立起来的。
远古时代:
“too much information to decode the Matrix. You get used to it. I…I don’t even see the code. All I see is blonde, brunette, red-head.” 《Matrix》
第一代程序是用机器语言编写的,机器语言是内置在计算机电路中的指令,由0和1组成。例如计算2+6在某种计算机上的机器语言指令如下:10110000 00000110
00000100 00000010
10100010 01010000
第一条指令表示将“6”送到寄存器AL中,第二条指令表示将“2”与寄存器AL中的内容相加,结果仍在寄存器AL中,第三条指令表示将AL中的内容送到地 址为5的单元中。毫无疑问,这种机器指令不需要解码,具有绝佳的执行效率,在这个时代,程序员往往就是硬件设计人员。在这个时代的末期出现了汇编语言,它 使用助记符(一种辅助记忆方法,采用字母的缩写来表示指令)表示每条机器语言指令,例如ADD表示加,SUB表示减,MOV表示移动数据。相对于机器语 言,用汇编语言编写程序就容易多了。例如计算2+6的汇编语言指令如下iMOV AL,6
ADD AL,2
MOV #5,AL
中世纪:
“No – no words. No words to describe it. Poetry! They should have sent a poet. So beautiful. So beautiful… I had no idea.” 《Contact》
当硬件变得更强大时,就需要”更强大”的语言使计算机得到更有效地使用。汇编语言向正确的方向前进了一大步,但是程序员还是必须记住很多汇编指令。 相应的,高级程序设计语言(简称高级语言,机器语言和汇编语言称为低级语言)从而登上历史舞台,高级语言的指令形式类似于自然语言和数学语言(例如计算 2+6的高级语言指令就是2+6),不仅容易学习,方便编程,也提高了程序的可读性。但是在获得效率的同时,识别机器语言成为了一种极为稀缺的能力。
文艺复兴:
“We don’t know who struck first, us or them. But we know that it was us that scorched the sky.” 《Matrix》
在这个时期,由于用集成电路取代了晶体管,处理器的运算速度得到了大幅度的提高,处理器在等待运算器准备下一个作业时,无所事事。因此需要编写一种程序,使所有计算机资源处于计算机的控制中,这种程序就是操作系统。
到了1973年的时候,贝尔实验室的Ken Thompson 与Dennis Ritchie感到用汇编语言做移植太过于头痛,他们想用高级语言来完成第三版,对于当时完全以汇编语言来开发程序的年代,他们的想法算是相当的疯狂。一 开始他们想尝试用Fortran,可是失败了。后来他们用一个叫BCPL(Basic Combined Programming Language)的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,于是就改良了B语言,这就是今天的大名鼎鼎的C语言。于是,Ken Thompson 与Dennis Ritchie成功地用C语言重写了Unix的第三版内核。至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础。而 Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。现代操作系统接管硬件的之时,也是新的一堵墙建立之日,从此程序员更多依靠编译器优化代码,利用链接器完成地址空间的组织,依靠OS来驱动硬件,利用硬件和OS来寻址和实现多任务,从OS层面,又划分为内核程序员与用户态程序员。
现代:
“These walls are funny. First you hate ‘em, then you get used to ‘em. Enough time passes, you get so you depend on them. That’s institutionalized.”《Shawshank Redemption》
体系结构(高墙)的建立使得计算机工业飞速发展,技术与效率的突飞猛进带领我们快速步入云时代,但是,自由精神并没有因此泯灭,相反的,以Linux为代表的开源软件使得我们重新有机会去接触并掌握那些我们“失去”已久的东西,程序员重新开始站在软件的角度来审视硬件,通过编写直接针对硬件或由软件模拟硬件的代码来重新获取我们失去已久的自由。同时以Google和Facebook为代表的公司把Full Stack提升为衡量优秀程序员的标准也极大的激发了程序员的热情。
极客精神与挑战极限
“Some birds aren’t meant to be caged, that’s all. Their feathers are just too bright.” 《Shawshank Redemption》
“有的鸟毕竟是关不住的,它们的羽翼太光辉了!”
极客精神的最核心要素是独立思考并且热衷于挑战极限,有一句哲语是这样描述的,“精神的最高境界是自由”,极客精神正是这句话的生动写照,善于挑战与打破极限是天才程序员与普通程序员的本质区别, 具备极客精神的那些天才程序员能够像鸟儿翱翔于蓝天一样穿梭于计算机体系结构的各个角落,能够像夏洛特福尔摩斯闲庭信步于思维宫殿一样游走于计算科学的各 个领域,这些得益于在他们眼中,那些被高墙隔开的各个区域只不过是他们的一个个私有领地,天才固然有一部分因素来自于他们的天赋,但是更多的是来自于他们 对于自由的渴望和挑战极限的热情,就像传奇程序员John Carmack所言,”只要冰箱里有足够的Diet Coke和最喜爱的Pizza,我能用计算机实现任何事情“。
就像那句话,真正被筑起的是心灵的高墙,不是要置人于千里,而是要看看谁会足够在意自己,从而去推倒这座墙。