前言
在计算机软件领域,做出过重大贡献的神人很多,比如:《计算机程序设计艺术》(The Art of Computer Programming)一书的作者- Donald Knuth;Pascal 的作者 Anders Hejlsberg;Unix ,Go程序语言,B程序语言,UTF-8编码,ed文本编辑器的创造者、设计者Ken Thompson;GNU项目发起人,Emacs,GCC,GDB发明者和GU Make Free Software公司创始人 Richard Stallman;java之父James Gosling,linux,git作者林纳斯托瓦兹;c语言、unix作者丹尼斯里奇等等。
我们可以列举出非常多大神,在这闪耀的明星中,最为闪耀的莫过于Linus Torvalds和Dennis Ritchie。
那么这两位谁的贡献更大呢?
这是一个很难回答的问题,就如同关公战秦琼,仁者见仁,智者见智。
还是先对两位大神做个介绍吧。
C语言之父,UNIX之父。
1) Dennis Ritchie(1941年- 2011年10月12日)
Dennis Ritchie
Dennis Ritchie曾担任朗讯科技公司贝尔实验室下属的计算机科学研究中心系统软件研究部的主任一职。1978年与布莱恩·科尔尼干(Brian W. Kernighan)一起出版了名著《C程序设计语言(The C Programming Language)》。此书已翻译成多种语言,被誉为c语言的圣经。
2011年10月12日,共事20年的同事Rob Pike从加州到新泽西去拜访他,才发现他已经去世了。由于是独居,无法知道准确的死亡时间。 享年70岁。
丹尼斯·里奇生平
丹尼斯·里奇因为一直都是单身(大神的思想境界真的)
2) C语言
丹尼斯·里奇创建了C编程语言和Unix 操作系统。无论是这其中哪一个项目,都可以让他在计算机界傲视群雄。而丹尼里奇开发了两大项目,可以说是计算机史上独一无二的。
事实上,C语言在各种软件程序,嵌入式系统开发,操作系统中,使用是最广泛的。同时,C语言也影响了大多数现代主流的编程语言。
C语言时间线
1960s年代后期,贝尔实验室对计算机系统的研究进入繁盛时期。MIT、General Electric、Bell实验室合作的Mutlics项目以失败而告终(1969年左右)。
就是在这个时期,Ken Tompson开始写Mutlics的替代品,他希望按照自己的设计构造一个令人舒服的计算系统(也就是Unix)。
后来在写出第一个版本的Unix时,觉得Unix上需要一个新的系统编程语言,他创造了一个B语言。B语言是没有类型的C,准确说B语言是Tompson把BCPL挤进8K内存,被其个人大脑过滤后的产生的语言。
由于B语言存在的一些问题,导致其只是被用来写一些命令工具使用。恰好在这个时期,Ritchie在B语言的基础上,进行了重新的设计改良,从而诞生了C语言。
K&R
1973年,C语言基本上已经完备,从语言和编译器层面已经足够让Tompson和Ritchie使用C语言重写Unix内核。后来,Unix在一些研究机构、大学、政府机关开始慢慢流行起来,进而带动了C语言的发展。
1978年,K&R编写的《The C Programming Language》出版,进一步推动了C语言的普及。
3) unix
unix时间线
Unix的诞生与C语言被广泛的传播、使用,有着密切的联系。
上图时间线只显示前几个与C语言在相同时间段内诞生的Unix版本。
后来学术和政府组织中都在使用Unix,也正是由于Unix的风靡与兴盛,带动了C语言被广泛的传播、使用。
在1980年代,C语言的使用广泛传播,并且几乎所有机器体系结构和操作系统都可以使用编译器。尤其是,它已成为个人计算机的编程工具,无论是用于这些机器的商业软件制造商,还是对编程感兴趣的最终用户,都非常受欢迎。
unix分支
Unix分支,实在太震撼了。
来看看其中最著名的几个分支:BSD、minix、Linux、Mac OS X...
足可见unix对现在操作系统的影响,其地位就像《易经》,为群经之首。
易经
4) 第一个C语言编译器是怎样编写的?
不知道你有没有想过,大家都用C语言或基于C语言的语言来写编译器,那么世界上第一个C语言编译器又是怎么编写的呢?这不是一个“鸡和蛋”的问题……
回顾一下C语言历史:Tomphson在BCPL的基础上开发了B语言,Ritchie又在B语言的基础上成功开发出了现在的C语言。在C语言被用作系统编程语言之前,Tomphson也用过B语言编写过操作系统。可见在C语言实现以前,B语言已经可以投入使用了。因此第一个C语言编译器的原型完全可能是用B语言或者混合B语言与PDP汇编语言编写的。
我们现在都知道,B语言的执行效率比较低,但是如果全部用汇编语言来编写,不仅开发周期长、维护难度大,更可怕的是失去了高级程序设计语言必需的移植性。
所以早期的C语言编译器就采取了一个取巧的办法:先用汇编语言编写一个C语言的一个子集的编译器,再通过这个子集去递推,进而完成完整的C语言编译器。
所以创建第一个C编译器的难度不亚于创造C语言的难度。
如果还不理解,举个例子,我们要建一个大厦,图纸什么的都已经设计好了,要开工建设。
那么用于建造大楼的各种设备和工具:塔吊、脚手架、钳子、螺丝刀、水平仪、卷尺等等,这些所有用到的所有工具,都是无数的公司的公司经过多年不断研发积累才达到今天的标准。
而编译c语言的编译器,就相当于建设大楼所需要的各种工具,丹尼斯不光亲自设计了C语言,还亲自从头到尾设计这一整套的工具。
这个工作是创造性的,可参考内容并不是很多,其难度可想而知。
Linux之父、Git之父。
1) Linus Torvalds(1969年12月28日- )
Linus Torvalds
芬兰赫尔辛基人,著名的电脑程序员,Linux内核的发明人及该计划的合作者 ,毕业于赫尔辛基大学计算机系,1997年至2003年在美国加州硅谷任职于全美达公司(Transmeta Corporation),现受聘于开放源代码开发实验室(OSDL:Open Source Development Labs, Inc),全力开发Linux内核。与**妻子托芙(Tove,芬兰前女子空手道冠军)**育有三个女孩。
Linus
划重点:「妻子托芙(Tove,芬兰前女子空手道冠军)」。
跟随着我爷爷的学院教学生涯,我也成了赫尔辛基大学的一名助教,被分配在这年秋季学期里开始用瑞典语教授《计算机科学入门》课程。
就这样,我遇上了塔芙。 她对我一生的影响甚至比 《操作系统:设计与执行》 一书对我的影响还要大。不过,我不会用这种影响的细节来让你烦恼的。
当时,塔芙是我的班上十五个学生中的一个。她已经有了一个学龄前教育学的学位(不像在美国,芬兰要求学龄前儿童的教师要有大学学历),她还想学习计算机,却不能取得像班上其他同学那样的进步。当然,最后她还是?上去了。
我们交往的过程是如此简单。
那是在 1993 年秋天,互联网还没有流行开来。 因此,有一天,我在这个班布置的家庭作业就是给我发一个电子邮件(这要放在今天简直要笑死人),我对学生说:“今天的家庭作业:发给我一个电子邮件。”
其他人的邮件不是一些供记录的短语,就是一些没什么意思的笔记。
只有塔芙,她邀请我和她出去约会。
我娶了第一个通过电子方式走近我的女人。
塔芙是一个曾六次获得过芬兰空手道冠军的幼儿园教师。 她的家庭很独特,尽管我认为还不如我们家那么离奇。 她有许多朋友。
从我们在一起的第一刻起,她就像是最适合我的女人。
经过了几个月的约会,我和我的猫兰迪就搬到她的公寓房间去了。
在搬进去后的最初两周,我甚至都没有动过一下我的计算机。
不算上我服兵役的时间,这两周是我自从我十岁那一年坐在外祖父膝盖上摆弄计算机以来 ,
离开计算机最长的一段时间了。
不必详细描述,但这确实是除去服兵役之外我离开计算机最长的时间的记录了。
---出自linux自传《just for fun》。
just for fun
祖师爷和祖师奶奶的相遇居然这么浪漫,他们的第一个孩子应该就是那两个星期造出来的吧。
2) Git
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,它是目前世界上最先进的分布式版本控制系统。Git 是用于 Linux内核开发的版本控制工具。
与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。
Git是一种非常流行的分布式版本控制系统,它和其他版本控制系统的主要差别在于Git只关心文件数据的整体是否发生变化,而大多数版本其他系统只关心文件内容的具体差异,这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
Git另一个比较好的地方在于绝大多数操作都可以在本地执行,而每个本地都可以从服务器获取一份完整的仓库代码,而且在没网的时候仍然可以修改和使用大部分命令,在方便的时候再跟服务器进行同步,这样可以更好的实现多人联合编程。
Git
2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。
「开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了」(监控工作做得不错!),于是BitMover公司怒了,要「收回Linux社区的免费使用权」。
Linus本可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,但是Linus不是一般人,「道歉是不可能的,这辈子都不可能的」。
于是Linus花了「两周时间」自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!
「牛」是怎么定义的呢?大家可以体会一下。
Git
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
GitHub,全世界开发者的安全空间,在这里,你可以分享你的代码为大家所用,也可以和全世界的开发者一起共建完善你的代码。现在有越来越多的公司都把代码放在了Github服务器上。
一口君从第一次用过之后就爱不释手,被其中的设计哲学深深折服,因为Git管理软件版本实在太过方便了。
通过commit来研究和学习一个软件产品如何从最初code base慢慢迭代成一个成熟的产品,这是提升自己技术水平最快捷之路。
3) Linux
Linux时间线
Linux时间线比较庞大,详情请复制下面链接到浏览器: https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2003
2004
2007
2009
2011
2013
4)《大教堂与集市》
Linus发明Linux过程有点像将简陋的集市构建成一个宏伟壮丽的大教堂的一个过程。
《大教堂与集市》这本书分析了这种设计哲学。
大教堂与集市
世界上的建筑可以分两种:「一种是集市」,天天开放在那里,从无到有,从小到大;还有一种是「大教堂」,几代人呕心沥血,几十年才能建成,投入使用。
「当你新建一座建筑时,你可以采用集市的模式,也可以采用大教堂的模式。」
一般来说,集市的特点是开放式建设、成本低、周期短、品质平庸;大教堂的特点是封闭式建设、成本高、周期长、品质优异。
Eric Raymond总结了集市要变成大教堂,有几个前提条件:
Eric Raymond同时也总结了一些成功的充分条件。
一个开放式的项目,如果加以良好的管理和运作,能取得比同等的封闭式项目大得多的成功。
已经介绍了两位大神的生平的功绩,那下面我们来做个点评吧。
其实究竟谁更强,谁的贡献更大,作为一个晚辈程序员,对它们只有膜拜的分,岂敢随便下结论说他们谁更强,只能从他们的工作内容和主要成就来说说个人看法,不足之处,还请指正。
首先说说C语言之父丹尼斯•里奇(Dennis M. Ritchie),他对C语言的贡献大家有目共睹,不必多说。
除了是C语言的主要发明者之外,他还因为对Unix操作系统的重大贡献而被称为Unix之父。然而他的贡献远非如此,在Unix取得了巨大成功之后,他们在20世纪80年代开始研究一个名为Plan 9的操作系统,其目的就是解决Unix中的一些问题。
在之后的几十年中,该项目演变出了一个叫Inferno的项目以及一个名为Limbo的新语言,而该语言被公认为是目前火热的编程语言Go的前身。
从上面可以看出,丹尼斯•里奇的贡献是多方面的,除了编程语言还有操作系统,也正是因为如此,他获得了无数的奖项,其中最著名的就是「图灵奖」(1983)和「计算机先驱奖」(1994)。
再说说Linux之父,Linus Torvalds,他的贡献主要是开发了Linux操作系统的内核,然后将之开源公布于世,最后形成了对计算机行业影响巨大的一套操作系统,并且因此获得了计算机先驱奖(2014)。
2005年用两周的时间就研发出了Git,而这个软件版本管理软件影响了全球无数的软件开发者。
成果上来说,二位实在不相上下。
从难度上讲,编译器要比操作系统难度高很多,而且linux并不是从零起步的,它是继承unix系统内核的,使之适应PC兼容机,而我们知道,C语言之父Dennis M Ritchie同时也是unix的创建者之一,在发明C语言之后,他自己又重新用C写了一遍unix,linus对他就是小弟弟了,写个操作系统对他而言并不费事。
现代的windows、linux给人感觉很庞大,因为它们是个平台,上面有海量应用和中间件,编译器给人感觉很小,但对内行来说,「编译器的难度要远高于操作系统」。
操作系统是需要耗费很多人工开发上面的应用,是软件界的劳动密集产品,而编译器更像是大师的艺术品,编译器是生产其它软件的工厂,对它的要求非常高。
我们国家其实早就能做操作系统了,985大学里专业的本科学生就能交一份非商用的操作系统作业,但自己的编译器还是零,并不是学了编译原理就写的来编译器的。
从他们的工作成就来看,我认为丹尼斯•里奇更厉害一些,他的成就是多方面的,而且最关键的一点,Linux的系统原型(Unix的变体minix)和编程语言(C语言)都来自于丹尼斯•里奇的贡献的。但是如果仅仅从编程能力来说,到他们那种级别对编程都已经是炉火纯青,很难分出高下!
C语言之父相当于自己动手造了一台挖掘机。人们可用他的挖掘机做能做的事。
linux之父相当于自己带头挖了几个基坑,然后有一大票自带砖瓦、钢筋、混凝土的小伙伴共同建起一座大厦。又因为是linus是带头人,所以大厦名字由他起且看门大爷是他当。
况且,盖大厦(写操作系统)这种事,里奇同志早就干过了,而且是用自家造的机器和两个小伙伴就干成了!
应该说在Dennis M Ritchie面前Linus就是弟弟。
两位都为社会进步做了很大贡献。如果硬要比较的话,个人觉得linux和git的直接贡献更大一些。
没什么好说的,去各大软件公司走一圈就知道了,几乎没有不用Linux的。
Linux应用的领域非常之广:
Linux在服务器领域的发展
随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。
据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。
Linux在桌面领域的发展
近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。
Linux在移动嵌入式领域的发展
Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%
此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的操作系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功于Linux与开源的力量
Linux在云计算/大数据领域的发展
互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统
国内 Linux 操作系统发展现状
国内目前涉足Linux操作系统研发除学校、研发机构外,主要 Linux 发行版包括红旗、中标、共创、新华、拓林思等,均有桌面和服务器两个版本; 国内各发行版均基于国际社区版本发展而来,基于国际社区成果,在界面定制上做了一些工作,并没有掌握核心技术,且与国际Linux 操作系统发行版之间存在一定的技术差距,缺少技术积累,面临Linux发展后劲不足等问题
国外Linux操作系统发展现状
国外 Linux 操作系统发展现状 国外主要发行版包括redhat、ubuntu、Suse 等,均提供桌面和服务器两个不同版本。服务器领域 Linux 操作系统发展比较成熟,桌面发展比较缓慢,嵌入式领域发展较快。
可以说我们的生活已经无法离开Linux,绝大部分软件工程师都会用到Linux,但一定要记住这些都是建立在C语言的基础之上。
其实2人都不是从0开始的, 一个是基于B语言和unix系统的需求出发创造了c语言,
一个是基于minix和unix思想还有当时的机遇开发了linux。 都是站在前任的肩膀上成功的。
在彭老师心里,Dennis Ritchie更加重要一些,因为他用C语言开辟了一个新的世界,从诞生开始到现在,一直稳居语言榜前三位,都快50年了,我们依然在用它。
而Linux在服务器和移动端的占有率实在太高,直接贡献更多一些,而linus最厉害的一点是他做到了协调世界各地数以百万计的开发者开发维护linux,这难度更大些。
彭老师内心可能更崇拜linus多一些,尤其他那一句“「Talk is cheap!Show me your code!」”!
领取专属 10元无门槛券
私享最新 技术干货