Java小故事
在最初,Java语言是叫做oak(橡树)。是因为刚开始公司门口有一颗橡树。所以就叫做橡树。然后发现oak已经被美国橡树公司注册了,就不能再继续使用了。所以需要改名。而程序员最爱喝的是咖啡,盛产咖啡的岛叫做爪哇岛,由此语言就叫做Java了。
Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言。所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。2009年,Sun公司被甲骨文公司收购,所以现在下载JDK一般都是去Oracle官网下载。
Java语言共同创始人之一:詹姆斯·高斯林 (James Gosling),被称为“Java之父”。
Python小故事
Python的创始人名叫Guido van Rossum,因为这个名字冗长又难记,调皮的中国程序员发挥拼音的特长给他起了个特短的名字,龟叔。
故事要从ABC开始说起,ABC不是中国农业银行,也不是美国广播公司,它是由荷兰教学研究组织旗下的CWI负责研发的一种结构化高级语言。
1982年,龟叔从阿姆斯特丹大学毕业进入了该组织,参与ABC语言的研发,ABC语言致力于提高程序语言的可读性和易用性,说白了就是降低编程语言的学习门槛,让更多的非计算机专业的人也能快速上手。
上世纪80年代,最流行的语言就是C,C语言功能强大但是实现过程繁琐,学习门槛也不低,而且你必须以机器而不是人的思维方式去编程,如果不是科班出身的程序员估计只能望C兴叹,而与之形成鲜明对比的是Shell,Shell字面意思就是壳,区别于内核,它实际上是一个命令解释器,他接受用户的命令然后送到系统内核去执行,简单理解,如果把系统内核比作汽车发动机,轮胎等装置,Shell就是你的方向盘,离合刹车,Shell允许你使用一些简单的脚本把系统的功能连接在一起, 不是专业程序员也能很快上手,实现一些复杂功能,比如日志定期备份,批量处理文件等,虽然ABC语言在当时已经解决了可读性以及易用性的问题,但并没有获得很大的成功,一方面由于运行ABC语言的编译器需要更高配置的电脑,另一方面ABC的设计也有很多遗憾之处 比如扩展性很差,实现新功能的成本很大 ,有没有一种语言即能像C一样无所不能,又能像Shell一样简洁优雅呢?
1989年,龟叔为了打发无聊的圣诞节假期,开始动手编写这个他想象之中的新语言,并且命名为Python,Python有蟒蛇的意思但是这个Python并不是来源于此,据龟叔本人说这是为了纪念喜剧天才Monty Python,Monty Python是一个英国的喜剧团体,有喜剧界的披头士之称,1969年,Monty Python’s Flying Circus翻译过来也就是巨蟒的飞翔马戏团,第一季在BBC电视台播出,并且迅速获得观众的追捧,龟叔也是忠实观众之一。
1991年,第一个Python编译器正式诞生,Python借鉴了ABC的很多语法规范,比如强制缩进,它是用C语言实现的,能够调用C语言库,并且具备了类 函数 异常处理以及模块系统等Python核心组件的雏形。
Linux小故事
很久很久以前,大概在1965年左右,由贝尔实验室(Bell)、麻省理工学院(MIT)及通用电气公司(GE)共同发起了一个叫做Multics的项目,目的是充分压榨当时的计算机的资源,期望能实现同时提供三百台以上的终端连接。项目本身非常复杂,看不到希望,于是贝尔实验室在1969年左右退出了该项目。(项目最终是成功了,但是这不是重点)
退出项目的贝尔实验室的一个成员,Ken Thompson。时间就稍稍的充裕了一点,于是想玩玩"太空旅游"的游戏消遣下,但为了玩的更舒服,自己就移植了这个游戏到PDP-7上,当然这需要一个操作系统,因为有之前项目的经历,很快就做好了一个简化版的系统Unics,虽然他的目的在游戏上,但是这个系统却在实验室内部广为流传开了。
因为Unics系统是汇编写的,想要再移植到其他机器上很不方便,Thompson和他的同事Ritchie就想用高级语言来重写一下,但是当时最合适的只有B语言,而编译出来的性能并不能满足他们,于是Dennis Ritchie将B语言重新改写成了C语言,并用C语言编写了了Unics内核,改名为UNIX,1973年,UNIX和C语言出现了。
在这之后,UNIX和C首先风靡学术界,其中加州伯克利大学(Berkeley)的Bill Joy,对源码进行了移植并添加了一些工具软件和编译程序,并命名为Berkeley Software Distribution(BSD),Bill Joy也是后来Sun这家公司的创办者之一。除此之外,IBM也有自己的AIX,以及HP,DEC都开发了适合自己机器UNIX的版本
贝尔实验室是隶属于美国电信大厂AT&T公司的,它们的系统名称是System V,因为商业上的考虑,在1979年发行的第七版UNIX收回了版权,并且特别提出"不可对学生提供源码"。因此UNIX的发展到此也告一段落了。
目前被称为纯种的UNIX就是System V和BSD这两套。
时间来到了1984年,同样是伟大的一年,荷兰的一位大学教授为了能在课上教授UNIX并且避免版权的争议,于是自己开始编写一个类UNIX系统Minix,用了两年多的时间才得以完成。同时,在这一年Richard Mathew Stallman(史托曼)发起了GNU项目,并成立了自由软件基金会(Free Software Foundation,FSF),为避免GNU开发的自由软件被其他人利用而成为专利软件,发布了通用公共许可证(General Public License,GPL),GPL强调软件可以自由的地获取、复制、修改与再发行,并继承GPL的授权模式,不可仅单纯销售其软件,也不可修改软件版权。
1991年, Linus Torvalds(林纳斯·本纳第克特·托瓦兹)在学习了Minix后,觉得Minix还是有一些不足,于是参考Minix自己写了一个操作系统,放在了网上并在BBS上贴了消息,大家可以自由的下载使用,由于一些软件的兼容性问题,他按照POSIX标准修改了部分内核代码,使得linux兼容了UNIX。Linux不久也加入了GNU,作为GNU项目的内核,我们平时所说的Linux操作系统应该是GNU/Linux。
Git小故事
在git诞生之前,Linus Torvalds选择使用BitKeeper进行Linux版本管理。BitKeeper 是一个闭源的商业软件,这个决定长期受到社区的质疑和争议。
2005 年,一位 Linux 开发成员 Andrew(Samba 协议之父)写了一个可以连接 BitKeeper 仓库的外挂,因此 BitMover 公司(BitKeeper 持有者)认为他反编译了 BitKeeper。BitMover 决定中止 Linux 免费使用 BitKeeper 的授权。最终 Linux 团队与 BitMover 磋商无果,Torvalds 决定开发自己的版本管理系统。
十天后,git 诞生了。你没有看错,git 从开始到诞生,Linus Torvalds 这位天才只用了十天的时间。在确定开发 git 前,Linus Torvalds 对市面上多个版本管理方案进行过评估,但现有的方案都不令人满意,最终决定开发自己的版本管理系统。
Linus Torvalds 认为,健壮的版本管理系统应当有以下三个特性:
-
可靠性(reliable)
-
高效(high-performance)
-
分布式(distributed)
这三个特性,被视为git 的核心灵魂所在,深远得影响了 git 及其他 SCM 的后续发展。
Javascript小故事
1993年,国家超级电脑应用中心(NCSA)发表了NCSA Mosaic,这是最早流行的图形接口网页浏览器,它在万维网的普及上发挥了重要作用。1994年,Mosaic的主要开发人员随即创立了Netscape公司,并雇用了许多原来的NCSA Mosaic开发者用来开发Netscape Navigator,该公司的目标是取代NCSA Mosaic成为世界第一的网页浏览器。在四个月内,已经占据了四分之三的浏览器市场,并成为1990年代互联网的主要浏览器。网景预见到网络需要变得更动态。公司的创始人马克·安德森认为HTML需要一种胶水语言,让网页设计师和兼职程序员可以很容易地使用它来组装图片和插件之类的组件,且代码可以直接编写在网页标记中。
1995年,网景招募了布兰登·艾克,目标是把Scheme语言嵌入到Netscape Navigator浏览器当中。但更早之前,网景已经跟昇阳合作在Netscape Navigator中支持Java,这时网景内部产生激烈的争论。后来网景决定发明一种与Java搭配使用的辅助脚本语言并且语法上有些类似,这个决策导致排除了采用现有的语言,例如Perl、Python、Tcl或Scheme。为了在其他竞争提案中捍卫JavaScript这个想法,公司需要有一个可以运作的原型。艾克在1995年5月仅花了十天时间就把原型设计出来了。
最初命名为Mocha,1995年9月在Netscape Navigator 2.0的Beta版中改名为LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript,当时网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上Java这个编程语言“热词”,因此将其临时改名为JavaScript,日后这成为大众对这门语言有诸多误解的原因之一。
PHP小故事
PHP原本的简称为Personal Home Page,是拉斯姆斯·勒多夫为了要维护个人网页,而用C语言开发的一些CGI工具程序集,来替换原先使用的Perl程序。最初这些工具程序用来显示拉斯姆斯·勒多夫的个人履历,以及统计网页流量。他将这些程序和一些窗体解释器集成起来,称为PHP/FI。PHP/FI可以和数据库连接,产生简单的动态网页程序。
拉斯姆斯·勒多夫在1995年6月8日将PHP/FI公开发布,希望可以通过社区来加速程序开发与查找错误。这个发布的版本命名为PHP2,已经有今日PHP的一些雏型,像是类似Perl的变量命名方式、窗体处理功能、以及嵌入到HTML中运行的能力。程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。
在1997年,任职于TechnionIIT公司的两个以色列程序员:Zeev Suraski和Andi Gutmans,重写了PHP的语法分析器,成为PHP3的基础,而PHP也在这个时候改称为PHP:Hypertext Preprocessor.。经过几个月测试,开发团队在1997年11月发布了PHP/FI2,随后就开始PHP3的开放测试,最后在1998年6月正式发布PHP3。Zeev Suraski和Andi Gutmans在PHP3发布后开始改写PHP的核心,这个在1999年发布的语法分析器称为Zend Engine,他们也在以色列的RamatGan成立了Zend Technologies来管理PHP的开发。
Elasticsearch小故事
许多年前,一个叫Shay Banon的待业工程师跟随他的新婚妻子来到伦敦,他的妻子想在伦敦学习做一名厨师。而他在伦敦寻找工作的期间,接触到了Lucene的早期版本,他想为自己的妻子开发一个方便搜索菜谱的应用。
直接使用Lucene构建搜索会有很多的坑以及重复性的工作,所以Shay便在Lucene的基础上不断进行抽象来让Java程序嵌入搜索变得更容易一些,经过一段时间的打磨,就诞生了他的第一个开源作品,他给自己的这个作品起了个名字,叫 “Compass”,中文即“指南针”的意思。
之后,Shay找到了一份新工作,新工作是处在一个高性能分布式的开发环境中。他在工作中渐渐发现,越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写Compass,将它从一个库打造成了一个独立的server,并将其改名为Elasticsearch。
Elasticsearch发布的第一个版本是在2010年的二月份,从那之后,Elasticsearch便成了Github上最受人瞩目的项目之一,并且很快就有超过300名开发者加入进来贡献了自己的代码。后来Shay和另一位合伙人成立了公司专注打造Elasticsearch,他们对Elasticsearch进行了一些商业化的包装和支持。但是,Elasticsearch承诺,永远都将是开源并且免费的。
不过悲剧的是,Shay承诺为妻子开发的菜谱搜索应用,到现在还没做出来...........
MySQL小故事
MySQL数据库的历史可以追溯到1979年,那时Bill Gates退学没多久,微软公司也才刚刚起步,⽽Larry Ellison的Oracle公司也才成⽴不久。那个时候有⼀个天才程序员Monty Widenius为⼀个名为TcX的⼩公司打⼯,并且⽤BASIC设计了⼀个报表⼯具,使其可以在4MHz主频和16KB内存的计算机上运⾏。没过多久,Monty⼜将此⼯具⽤C语⾔进⾏了重新编写并移植到了UNIX平台上。当时,这只是⼀个很底层且仅⾯向报表的存储引擎,名叫UNIREG。最初的UNIREG是运⾏在瑞典⼈制造的ABC800计算机上的。ABC800的内存只有32KB,CPU是频率只有4MHz的Z80。在1983年Monty Widenius遇到了David Axmark,两⼈相见恨晚,开始合作运营TcX,Monty Widenius负责技术,David Axmark负责搞管理。后来TcX将UNIREG移植到其他更加强⼤的硬件平台,主要是Sun的平台。虽然TcX这个⼩公司资源有限,但Monty Widenius天赋极⾼,⾯对资源有限的不利条件,反⽽更能发挥他的潜能。Monty Widenius总是⼒图写出最⾼效的代码,并因此养成了习惯。与Monty Widenius在⼀起的还有⼀些别的同事,很少有⼈能坚持把那些代码持续写到20年后,⽽Monty Widenius却做到了。
1990年,⼀次Monty接到了⼀个项⽬,客户需要为当时的UNIREG提供更加通⽤的SQL接⼝,当时有⼈提议直接使⽤商⽤数据库,但是Monty Widenius觉得商⽤数据库的速度难以令⼈满意。于是Monty Widenius找到了David Hughes(mSQL的发明⼈)商讨合作事宜。想借助于mSQL的代码,将它集成到⾃⼰的存储引擎中。然⽽令⼈失望的是,在经过⼀番测试后,他们发现mSQL的速度并不尽如⼈意,⽆法满⾜客户的需求。于是Monty Widenius雄⼼⼤起,决⼼⾃⼰重写⼀个SQL⽀持。从此MySQL就开始诞⽣了。
MySQL命名的由来:Monty Widenius有⼀个⼥⼉,名叫My Widenius,因此他将⾃⼰开发的数据库命名为MySQL。Monty还有⼀个⼉⼦,名为Max,因此在2003年,SAP公司与MySQL公司建⽴合作伙伴关系后,Monty Widenius⼜将与SAP合作开发的数据库命名为MaxDB。⽽现在的MariaDB中的Maria便是Monty Widenius的⼩孙⼥的名字。
Google小故事
“google”一词源于单词“googol”, 即10的100次幂,写出的形式为数字1后跟100个零,表示数量极大。该词现在也可以用作动词,例如“google某物”的意思是在google搜索引擎上搜索“某物”这个关键词。
为了给公司起一个出众的名字,Google的创始人们曾花费数天进行头脑风暴,他们想起个能和海量数据索引有关的好名字。在创意过程中,有人说到了“googol”。googol 是一个数学名词,它由美国数学家Edward Kasner的一个9岁大的侄子创造,指的是10的100次方,表示1后面跟100个零。那是一个非常巨大的数字,这不正好切合了该公司远大的科技意图吗?
Google公司没有直接起名为Googol,流传着几种说法,有一种说法是,在注册域名的时候由于拼写错误,把这个词打成了“google .com”;另一种说法是,可能是因为版权的问题而不能使用Googol,并且在注册Google.com的时候,Googol.com已经被注册。不管怎么说,Google公司是想用这名字来表达出一个巨大数字的含义,喻指Google公司有志于穷尽互联网上的海量资源。
Redis小故事
Redis 全称为 Remote Dictionary Server(远程词典服务),Redis 的作者是一名意大利程序员叫 Salvatore Sanfilippo(网名:antirez)。
antirez 早年是系统管理员,2004到2006 年做嵌入式工作,之后接触 web,2007 年和朋友共同创建一个网站 LLOOGG.com。随着 LLOOGG.com 的用户越来越多,LLOOGG.com 要维护的列表数量也越来越多,要执行的推入和弹出操作也越来越多。
LLOOGG.com 当时使用 MySQL 数据库,而 MySQL 每次执行推入和弹出操作都要进行硬盘写入和读取,程序的性能严重受制于硬盘 I/O 。最终,LLOOGG.com 所使用的 MySQL 再也没办法在当时的 VPS 上处理新增的大量负载。由于 LLOOGG.com 当时还没有找到盈利模式,所以为了尽量节约开支,antirez 没有选择直接升级 LLOOGG.com 所使用的 VPS, 而是打算另寻办法,在现有硬件的基础上, 通过提升列表操作的性能来解决负载问题。所以 antirez 决定自己写一个具有列表结构的内存数据库原型。这个数据库原型支持 O(1) 复杂的推入和弹出操作,并且将数据储存在内存而不是硬盘,所以程序的性能不会受到硬盘 I/O 限制,可以以极快的速度执行针对列表的推入和弹出操作。
经过实验,这个原型的确可以在不升级 VPS 的前提下解决 LLOOGG.com 当时的负载问题。后来 antirez 使用 C 语言 重写了这个内存数据库,并给它加上了持久化功能,就这样伟大的 Redis 诞生了。