一、我所知道的Java
转眼间,我们的CAFEBABE都诞生20年了。
最开始接触Java,当时应该是1.5版本,不过最开始并没有用到1.5的泛型、scanner等新特性;后来,用过一阵子1.6;再到后来,就工作了,用1.7;然后,陆续有的小组要采用1.8了;然后最近刚刚发布JDK9的新特性(javac将不兼容1.5版本),预计16年发布。
比较重大的版本,应该是1.4加入的nio,1.5的泛型,1.7的nio2,G1,script engine,1.8的闭包(lamda表达式)
Java发展,从设计上来讲,最大的精明之处就是将java语言的规范和jvm的规范分开,jvm是一个平台,一个大森林,森林里头,活跃着诸多漂亮的小精灵,JRuby,Groovy,Scala,Clojure...
从Java7->Java8,在java上新增函数式编程(可以视为java老大哥自身拥抱函数式编程的改变),以及JVM上的函数式语言Scala,Clojure(函数式家族与CAFEBABE联姻),或许你大概知道这里要说的新世界就是函数式编程。
二、面向对象语言的产生
如果我说是电脑操作的图形化直接导致或催生了面向对象语言的诞生,或许你可能不信。当apple正在紧锣密鼓开发图形化的Macintosh,微软也推出图形化的Windows,操作系统从终端过渡到了图形界面,电脑逐渐普及,用户消费能力逐步提高,在图形化操作系统上开发图形化的软件的需求也就越来越强烈,而这个时候,面向过程语言,就显得有点力不从心。聪明的程序员说,我想要抽象出一个按钮,可以点击,可以响应事件,可以有很多风格,这样以后我每次开发的时候,直接复用就可以了。于是就有了诞生面向对象语言的需求了。
说起C/S开发,说起RAD开发,不得不提起曾经如日中天的Borland公司,以及红极一时的Delphi语言。Dephi当年一登场,便获得VB杀手的江湖名号,凭借“真正的程序员用c,聪明的程序员用Delphi”这句话也名满江湖,搞得微软的VB老大哥压力山大,后来也为两家公司之争埋下了伏笔,即使到现在各种编程语言满地开发的世界里头,Dephi及其老祖Pascal还是双双雄踞在TIOBE排行榜的前20,依旧宝刀未老。
说起Borland公司曾经的辉煌,世界第三大软件公司,高品质软件开发工具的霸主,到后来与微软竞争不利,失去霸主地位,后来被Micro Focus收购......想起来真有种“滚滚长江东逝水,浪花淘尽英雄,是非成败转头空”的感伤(具体可以看李维的Borland传奇,我相信很多程序员都读过)。曾经的SUN不也是如此吗,不过相比而言,Java比Delphi还好一些,Oracle至少还延续了Java“霸主”的地位。
不过,虽然Borland落寞了,Borland的宝贵资产并没有消失,Bill Gates虽然打赢了与Borland的开发工具之战,但同时求贤若渴的Gates,早就盯上了Turbo Pascal以及Delphi的设计者开发者,天才程序员Anders Hejlsberg,当时BillGates亲自开车去找Anders Hejlsberg。当时BillGates想起了1983年乔布斯对百事可乐的 CEO John Sculley说的流传千古的一句话:Do you want to sell sugar water for the rest of your life, or do you want to change the world?也想慷慨激扬一番,但是换成这里,场景还是不合适啊,BillGates顿时词穷,还是落了个俗套,毕竟有钱能使鬼推磨啊,开天价500万美金的年薪,请Anders Hejlsberg过去,Anders Hejlsberg心里略微有所动,但是面不露色,BillGates见状,忙问Anders Hejlsberg还有什么要求,Anders Hejlsberg便开口,我要一个完全由我支配的团队。BillGates顿时顿足捶胸,这好说啊,早不说呢。就这样,Anders Hejlsberg正式入驻微软,后来开启了C#从2000年至今的辉煌时代,时至如今,如果不是由于微软平台的缘故,估计C#将更加大放光彩,即使是现在,C#也比大它5岁的Java老兄要高级很多,比如真正的泛型,比如async......
Anders Hejlsberg早在设计Dephi语言的时候,就有想过要引入垃圾收集器,不过当时Borland老板不同意,觉得当时市场竞争激烈,还不是时候搞这种底层研究的时候,Anders Hejlsberg无奈放弃了,后来BillGates抛出橄榄枝,Anders Hejlsberg提出了要有一支完全由他支配的团队的要求,正是源于此,有了老板的放权,Anders Hejlsberg就可以放手大干一番。
讲了这么多,还是要顺带讲下Pascal老祖,及其子孙的。
从图中来看,C#是有Pascal的基因的,同时也借鉴了Java老大哥的一些设计。
当然这里不是要讲C#,而是老祖Pascal,它由瑞士Niklaus Wirth教授在60年代设计的,我相信,学过谭自强的C语言的人,大多都会记得“程序=算法+数据结构”(Algorithm+Data Structures=Programs)这句江湖名言,没错,这句话正出自老祖Pascal语言的设计者——Niklaus Wirth。正是凭借这句话及其他杰出贡献,Niklaus Wirth从此奠定了江湖地位,同时获得了计算机界的诺贝尔奖——图灵奖。
如果你细看Niklaus Wirth的简历,会发现,他的母校正是苏黎世联邦理工学院,再想想当今预借屠龙宝刀Spark去夺取天下的Scala的发明者Martin Odersky,当年正是苏黎世联邦理工学院师从Niklaus Wirth。在攻读他的博士学位,吸收了Niklaus Wirth的雄厚的内功心法之后,Martin Odersky设计出了Scala,后来创建了TypeSafe公司,如今Scala可谓是江湖武林逐渐崛起的黑白两道通吃的大器晚成者,凭借着倚天剑AKKA和屠龙刀Spark,正掀起一场血雨腥风,搞得Hadoop、Storm等诸多老前辈坐立不安。
三、函数式编程语言的兴起
前面说了,图形化的市场需求,成了面向对象语言兴起的导火线;风水轮流转,函数式语言,正是由于OOP这种命令式编程无法充分发挥多核时代的计算能力而兴起。函数式语言的不变性,天生就适合并发编程,适合多核计算,当年时机未成熟,没能一统江湖,成为一代侠客的利器,现在时过境迁,环境利好,正好是显山露水的时候。
这个时候还是稍微回顾下编程语言的江湖吧:
你会发现,进化到Ruby,已经是OOP语言的一个顶峰了。
未来呢,在多核时代的世界里,未来在函数式编程语言的手头里:
纵观当今.NET的动态,你会发现DDD在.NET如火如荼地讨论着,而且由于缺乏倚天剑AKKA这样的江湖利器,微软早已坐立不安,微软的research部门正忙着研发.NET版的Actor模型,2014年刚刚发布Orleans的预览版,预试图在多核的云计算里头占据一席之地。