苹果全球开发者大会今年的“猛料”不如往期,但Swift开源的消息,却足以赚足开发者眼球。关于苹果为什么开源Swift的分析已是铺天盖地,就无需多言,在这里更想由此思考一下语言发展的趋势及伴随的现象。
苹果全球开发者大会总能掀起一股旋风,虽然今年大会的“猛料”不如往期,但Swift在今年晚些时候开源的消息,却足以赚足开发者眼球。
其实苹果的行事风格,我还是蛮喜欢的:“苹果把自家的事情做好,给用户最酷的体验,他的实力就是我行我素的资本,而用户也欣然接受这样的苹果。”不过,苹果有自己的平台、软硬件,Swift也才发布将近一年的时间,这么快就开源Swift?
关于苹果为什么开源Swift的分析已是铺天盖地,就无需多言,我觉得最重要的一点还是——通过吸引更多的开发者使用Swift,获得更多的支持以及创意,能够为苹果带来更大的商业利益。
在这里,我更想由此思考一下语言发展的趋势及伴随的现象。
一、语言/工具的封闭模式已经落伍了
十来年前的软件公司还有封闭资本,那时候的VB、Delphi足够好用,尽管盗版也很普遍,但光靠卖这些工具就能赚到盆满钵满。到了后 来,Delphi几经挣扎还是没落了。当年李维在《Borland传奇》里将主要原因归咎于管理层接二连三失策,而从历史轨迹来看,靠封闭单一的工具类产 品支撑业务发展,路口必将越收越窄。再来看看偌大的微软帝国,其产品和技术的覆盖面遍布各个角落,但最终也于2014年年底宣布开源.NET开发框架。
回首Java的二十年历程,JDK是开源的(你只要打开Src.zip,就能看到源代码),有开源免费的Eclipse和NetBeans的支 持,同时借着“一次编写四处运行”的宣传语吸引无数开发者积极投入,构建出了一个庞大的Java社群,至今仍雄霸天下,这就是开源力量。
在这十多年里,不得不提的当然还有PHP、Python、Ruby等一大波开源动态语言的盛行,这些早已为业务所证明是成熟而稳定的解决方案。互联网上,用PHP、Django或RoR构建的网站比比皆是。
看看TIOBE语言榜就知道,开源的编程语言是多么流行!
随着互联网/移动互联网的发展,“免费”已经是经典的商业盈利模式,现在互联网的盈利点越来越集中在云平台/云业务租赁、各种增值服务、流量、订 阅和广告上,越大的用户量,盈利越明显。而越多的开发者支持,创新点就越多,产品也越丰富。因此,我认为作为开发支撑基础的编程语言和工具,其开源和免费 趋势将逐渐成为主流。毕竟,用户资源和开发者资源,都是事关产品生存的生命线。
但为何仍有这么多不开源的产品,比如不少数据库产品都不是开源的?其实,开源是一种模式,商业也是一种模式,看看著名的《大教堂与集市》就会有更 多感悟。君不见,开源的大数据、NoSQL解决方案已经对商用数据库造成了不小冲击,而是否开源,也是商业公司的一种选项,比如微软开源.NET框架、苹 果开源Swift。商业公司的选择总是考虑利益第一,有可能是短期,也可能是长期的,但无论如何,千万别把商业公司当作开源的天敌,在合适时机做出合适的 选择,如果需要开源,也未尝不可。要知道,微软、苹果其实也为开源做出了不小贡献!
二、语言的发展
有时候还是蛮怀念十几、二十年前的软件开发环境,好像你只要会C或C++就可以了。但时光早已不同,尤其是近年的语言趋势更是呈现出许多新特性。 这些新特性的流行,得益于2000年代的动态语言,比如前面提到的PHP、Python、Ruby。而这些语言的日益流行,又得益于互联网应用的兴起。 PHP在网站构建方面占据大半壁江山,Python因应互联网数据量的喷发在科学计算领域得以重用,而RoR成就了多少初创公司的创业荣光。当年被人不看 好的小脚本,却在互联网时代找到了大展身手的好时机。现在你不会一门动态语言都不好意思说自己是程序员了。
还必须提一下JavaScript,当年几乎人人不待见的丑小鸭,谁能想到今天的地位如此突出呢?甚至还延伸出了Node.js这样一个优质平 台。一时间多少JavaScript开发者希望借助它实现心中的“全栈”梦想。同样,没有互联网,也就不会有JavaScript的大行其道。我认 为,JavaScript在当代的价值,不会输给十几年前的Java。
动态语言的流行,也让许多组织和个人认识到了其存在的价值——那就是开发效率大大提升。以前编程需要为1M、甚至几百K的内存绞尽脑汁,运用各种 Hack技巧。但遵从摩尔定律,硬件的发展速度非常快,于是,开发者逐渐将眼光转到了开发效率上。动态语言中广泛应用的filter、map和 reduce等具有浓郁函数式风格的高阶函数,被认为是提升开发效率的有效手段。当然,苹果的Swift,同样也大量应用了这些特性。
就目前编程语法发展过程的几个关注点,我的理解如下:
- 不止是面向对象,函数式的回归正在进行时。过去十几年时间里,Java和C#两种语言占据主流,面向对象编程被赋予至高无上地位。但现在大家越来 越认识到,面向对象编程达到一定规模时,复杂度也伴之而来。因此,旧有的函数式风格又重出江湖,特别是一些函数式特性在动态语言中得到了良好验证。现在, 开发者对待面向对象与函数式两种风格,已经不是非此即彼的印象了,而是认识到它们是可以相辅相成的,比如Scala。即使是Java,也开始引入一些函数 式特性,更不用说先行一步的C#。再进一步,抛开风格之争,遵从应用为先,从而采取实用的编程模式,比如Golang、Rust。
- 并发特性的增强。多核及大数据时代的来临,现实对并发特性提出了新需求。新出现的系统级语言如Scala、Clojure、 Erlang、Go及刚正式发布的Rust,都对并发特性给予极大关注,并各有各的解决方案。即使是动态语言如PHP、Python和Ruby等,也在这 方面不断尝试。同样的,函数式语言中的不可变性概念,能够较好地符合并发实现的现实需求。
三、语言营销、语言魅力
语言间的各种对比、争论由来已久,而且还历久不衰,这其实也说明了语言的流行除了客观条件,还存在一定主观因素的影响。确切地说,这些主观因素中很重要的两点是:
- 语言的官方组织或作者希望进一步扩大该语言影响力而采取的宣传攻势;
- 爱好者出于对该语言的热爱而释放出的赞誉之词,反过来还有反对者的不满宣泄。
因此,语言是有“营销”因素存在的,也许这也算是各种编程语言的魅力之一。当然,在语言营销过程中,利益关系往往紧随其后。举个例子,我印象最深 刻的一个语言营销例子就是每年推出的Java短片,其中可以看到暗喻语言的各种恶搞,无形中让人对Java产生了不小兴趣。此外,当下流行的各种语言/技 术大会,姑且不言参会价值,同样是一种典型的语言/技术营销手段。
Swift开源的消息在WWDC 2015大会上发布,可谓天时地利人和,算是一种成功的营销。加上Swift具备的现代语言特性,Swift开源的策略可谓一炮打响,足以让粉丝激动许久。
一门语言,如果有几个业内知名大牛支持,有一个实力雄厚的组织和平台,具备一定优质特性,再加上合适的营销策略,就很容易吸引众多粉丝。
你我皆凡人,都有冲动之后就嚷嚷“再买就剁手”的经历,可见营销的影响力简直无孔不入。而开发者对语言的追求,一是现实刚需,二是自我兴趣,三是 利益契合,如果光靠一时冲动,那么早晚会迷失自我,如何在感性和理性的平衡中选择自己的语言方向?这很重要,但也许是另一个话题了。
四、Swift开源带来了什么?
从技术角度来思考,Swift开源能带给我们什么?我觉得主要有以下几个方面:
- 除了苹果自家的平台,以后也能在Linux上用Swift开发应用了,这样可以吸收更多Linux平台上的Swift开发者;
- 基于Swift的应用会更加丰富,有了开发者对Swift的普遍热情,以后也许会出来各种Swift的Web框架或其他什么有趣、有用的应用;
- Windows平台虽然不在此列,而官方并不反对把Swift移至到其他平台,但需要有人做这件事。嗯,微软应该不会忽略Swift?总之,只要机会之门打开,一切皆有可能;
- 苹果的私房菜Cocoa并未开源,开源的是Swift编译器和标准库,要在非苹果官方平台开发iOS应用,暂时还不太可能;
- Swift开源后的成功,特别是在不同平台上的成功,很大程度上取决于生态的建立、有多少框架/第三方库的支持。同时,也直接受Swift最终采用何种开源许可的影响。
总而言之,Swift开源是大大前进了一步。而超越Swift开源本身,当今编程语言的发展趋势也值得我们认真思考。如果从完全理性的角度看待编 程语言,那么编程语言无非就是一门编程语言:“选择好适合自己的编程语言就是了”。但问题就在于如何选择合适的编程语言呢?语言的魅力也许就像盲人摸象, 你无法做到足够理性,或者这世界就没有银弹,编程语言的比较和纷争,将是一个永恒的话题,热度无限……