阅读更多

2顶
2踩

编程语言

原创新闻 Swift开源带来的思考

2015-06-29 14:59 by 副主编 mengyidan1988 评论(0) 有4651人浏览
苹果全球开发者大会今年的“猛料”不如往期,但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开源本身,当今编程语言的发展趋势也值得我们认真思考。如果从完全理性的角度看待编程语言,那么编程语言无非就是一门编程语言:“选择好适合自己的编程语言就是了”。但问题就在于如何选择合适的编程语言呢?语言的魅力也许就像盲人摸象,你无法做到足够理性,或者这世界就没有银弹,编程语言的比较和纷争,将是一个永恒的话题,热度无限......
  • 大小: 61.9 KB
2
2
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java setcharcter_关于setCharacterStream()的使用问题请教

    转自PreparedStatement中setString方法的异常其实也不应该说是异常,应该是多种因素导致的使用问题。一般在有了一定Java编程经验之后,大家都习惯用PreparedStatement代替Statement。其好处就不用多说了。但是却在...

  • mysql 不固定条件查询_请教一个关于数据库不定条件查询的问题

    该楼层疑似违规已被系统折叠隐藏此楼查看此楼想问各位大神一个关于多条件查询的问题,我是从网上找到了一个比较完整的代码,然后自己改了改,它使用的是sql语句拼接的方法,现在sql语句基本能拼接对,但是在执行的...

  • preparedstatement本质原理

    就这一点问题我请教了一个老司机和阅读了相关资料后,觉得有必要写出来一下。 preparedstatement和statement 这两个对象字如其意,可以参考相关文档对他们的详细分析。preparedstatement就是我们常用的在JDBC中...

  • PreparedStatement 预编译原理

    PreparedStatement 预编译原理30 preparedStatement 有三大优点: 一....二.PreparedStatement尽最大可能提高性能. ... 关于性能的提高也是最有价值的这点, 我对其原理还有些质疑。      网上一:

  • java from space 高_请教Java heap space问题

    展开全部Connection con = null;...PreparedStatement pst = null;try {con = DBCon.getConnection();con.setAutoCommit(false);pst = con.prepareStatement(" select * from test ");rs = pst.execute...

  • JDBC PreparedStatement 实现原理【推荐阅读】

    甚至不知道如何读源码也可以请教噢 。 新的 源码解析文章 实时 收到通知。 每周更新一篇左右 。 认真的 源码交流微信群。 1. 概述 2. JDBC Client 实现 3. MyCAT Server 实现 3.1 创建 ...

  • 请教问题,求指点

    请教问题如下: (下面是进行的双向的多对多的关联关系进行拆分的测试,拆分成两个多对一的关联,但是没有成功的一步就是:只是生成了两张表,还有一张ORDER表没有生成,请教原因还修改的方式,谢了) 【POJO类...

  • java报错不带有参数_对于 PreparedStatement ,executeQuery() 不能带有参数的错误

    public ResultSet executeQuery(String sql){ResultSet result=null;...PreparedStatement pst=null;try {pst=con.prepareStatement(sql);if(sqlValues!=null&&sqlValues.size()>0){ //当...

  • 数据库中间件 MyCAT源码分析 —— PreparedStatement 重新入门

    相信很多同学在学习 JDBC 时,都碰到 PreparedStatement 和 Statement。究竟该使用哪个呢?最终很可能是懵里懵懂的看了各种总结,使用 PreparedStatement。那么本文,通过 MyCAT 对 PreparedStatement 的实现对大家...

  • preparedstatement防止sql注入的本质原理(找了很多文章,发现这种说法好像才是正确的)

    SQL注入的预编译疑惑 ...就这一点问题我请教了一个老司机和阅读了相关资料后,觉得有必要写出来一下。 preparedstatement和statement 这两个对象字如其意,可以参考相关文档对他们的详细分析。preparedstatement就是

  • 数据库中间件 MyCAT 源码分析 —— PreparedStatement 重新入门

    摘要: 原创出处 http://www.iocoder.cn/MyCAT/what-is-PreparedStatement/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 MyCAT 1.6.5 正式版 ...3.1 创建 PreparedStatement 3.2 执行 SQL 4. 彩蛋 ...

  • java刷新页面重复提交,请教怎样处理退后刷新页面的重复提交有关问题?多谢...

    当前位置:我的异常网» Java Web开发»请教怎样处理退后刷新页面的重复提交有关问题?多谢请教怎样处理退后刷新页面的重复提交有关问题?多谢www.myexceptions.net网友分享于:2013-01-19浏览:13次请问怎样处理退后...

  • drds 解决问题_otter 同步 RDS 到 DRDS 出现拆分键无法更新问题

    你好,已经参考过 https://github.com/alibaba/otter/issues/225,但是没有解决我的问题麻烦请教一下:场景如下:商品和sku表,一比多,因为查询sku经常根据itemId查询,使用DRDS时,我选择了itemId作为拆分键,但是...

  • 关于flinksql 与维表mysql的关联问题记录

    我有个问题想请教下,关于flinksql与mysql维表关联 关于mysql更新的问题 有没有好的方法?我现在使用的广播mysql但是有个问题,广播mysql时我的流数据已经到了但是mysql的数据还没有到导致我现在数据会再启动的时候...

  • 从表单中提交图片到mysql_请教mysql插入图片的问题(通过表单提交到servlet,然后将图片插入mysql)...

    PreparedStatement stmt; try { stmt = conn.prepareStatement(sql) ; stmt.setString(1,request.getParameter("sname")); stmt.setString(2,request.getParameter("birthplace")); String birth = request....

  • mysql sleep进程 java_请教java更新mysql,更新进程sleep

    请教java批量更新mysql,为什么update进程会sleep呢???那个数据库只有我一个人在用的,只执行一个select,然后依次根据id进行update,有时候update进程就sleep了.importjava.sql.Co...请教java批量更新mysql,为...

  • [以解决]请教iBatis批量插入数据问题

    在我做批量从插入的时候遇到了数据插不进去的问题,请大家帮忙看看   数据访问接口的代码是: public void saveMessages(String oknos, String userId, String title,String msg){ Map<String,Object&amp...

  • Python基于LSTM+Django的空气质量监测及预测系统源码毕业设计.zip

    Python基于LSTM+Django的空气质量监测及预测系统源码毕业设计.zip个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! Python基于LSTM+Django的空气质量监测及预测系统源码毕业设计.zip个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! Python基于LSTM+Django的空气质量监测及预测系统源码毕业设计.zip个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行!Python基于LSTM+Django的空气质量监测及预测系统源码毕业设计.

  • asp.net某公司员工管理系统的设计与实现(源代码+论文).rar

    计算机毕业设计,含源码

  • myudid

    myudid

Global site tag (gtag.js) - Google Analytics