分享

说说编程语言的那些事

 CLib 2014-03-31

2014-03-29 22:44:33

今天在微信朋友圈里,看到某美女同事在学 Python3.4。某男回复,“搬过来坐,哥给你当指导呗”。:-) 

编程语言很多,而人的精力有限。把有限的精力,用来学习 Python值不值?或者换个提问的方式,什么编程语言有前途?

不妨把这个问题分解为三个子问题。

1. 一统天下的通用语言、具有区域特色的方言,哪一种路线更有前途?
2. 什么样的语言容易火?
3. 当下的诸种语言,哪些更有潜力,哪些有可能退出历史舞台?

 [1]

半个多世纪以来,编程语言如过江之鲫。各种语言的语法用法大体相似,功能模块也多有重复。

与其让大家浪费精力,学习多种语言,重复开发相似功能的模块,为什么不推广一种通用语言,天下所有人都只学一种语言,在此基础上添砖加瓦,避免重复建设。

Douglas Crockford 的回答是,“我们已经尝试过了,但是所有努力无一不以失败告终”。

究其原因,“程序的核心问题在于驾驭复杂性。在应对复杂多变的需求时,如果一个程序语言不能有助于驾驭复杂系统,那么结果就是混淆不清,接踵而至的就是失败”。

言下之意,包打天下的语言,势必笨重而且晦涩。

反观针对特定领域的专门语言,Crockford说,“我们看到大量的专门的语言出现。这些特殊语种在应付特定范围的任务时,非常有效,这就足够了。当人们需要完成特定任务时,有合适的语言作为工具,这是天赐之福”。

他又说到,“语言设计的艺术在于知道如何取舍。。一个好的语言不仅能够帮助我们更好地理解问题,并且有益于找到解决方案的最佳表述方式”。

一句话的总结,对于编程语言而言,书同文,不如多元化。

选择什么语言去学习?首先反问自己,你想用它去做什么?

 [2]

什么样的语言容易火?

1. 率先实践新的编程思想的语言容易火。
   例如,结构化编程导致 Pascal火,面向对象导致 C++ 火,VM 导致 Java 火,面向分布式导致 Erlang 火。

2. 在某一领域,提供强大功能,而且使用简便的编程语言容易火。
   例如,Unix 成就了 C在操作系统领域的不二地位,RDBMS 数据库让 SQL 成为人们既恨之深却又离不开,Netscape 和 IE 使JavaScript 成为浏览器脚本的垄断霸主,方兴未艾的大数据让步入中年的 Python迎来第二春。 

实践新思想、在某一领域有专长,这两个条件都是必要条件,所以是“容易火”,而不是“必然火”。例如,在实践面向对象这一思想方面,SmallTalk 是先行者。但是它的人气远不如 C++。

另外,历史经验表明,有领域专长,比实践新思想,更容易火。道理很简单,有地盘才是军阀,没地盘沦为流寇。

 [3] 

移动互联网和云计算大数据引领的当下,什么语言容易火?

当下以下四个方面的需求很突出,谁更能满足这些需求,谁就更容易火。

1.面向移动设备和电脑浏览器的两栖应用开发语言,能够同时强力而且友好地支持移动应用的开发,和在电脑浏览器里展现的网页开发。

  手机屏幕空间有限,而移动应用无限。什么样的应用,适宜开发独立的移动应用?两类,1. 非常消耗CPU 时间和 RAM 空间的重量级应用,例如视频、游戏、地图导航,2.频繁使用的应用,例如微信。其余的应用,不妨运行在浏览器里,用百度的语汇来说,就是移动轻应用,这类应用包括墨迹天气、去哪儿生活、航旅纵横,等等等等。

  移动轻应用使用什么语言更合适?目前看不清,但是不妨参考一下 Google 的布局。Google鼓励内部竞争,一个流派是基于 JavaScript 的网页开发框架 AngularJS,这个流派的思路是强化 JS + CSS的功能,同时简化使用难度。另一个是以 Rob Pike 为精神领袖的 Go 语言。AngualarJS的优势在于延续了网页开发的传统方式,容易被程序员接受。Go 没有历史包袱,有利于系统优化。

   个人评论,Go 是否能够战胜AngularJS,关键在于是否能与浏览器深度整合。手机两大操作系统,Android 和 iOS,它们的原生浏览器分别是 Chrome和 Safari。而这两个浏览器的内核,(确切地说是 layout engine),是 WebKit 及其变种, 所以 Go是否能胜出,关键之役在于是否能与 WebKit 及其变种深度整合。

   但是此役胜算不大,所以更看好AngularJS。所以,JavaScript 很有可能迎来第二个春天。
   
2. 面向大规模并发的分布式系统语言。

   分布式系统语言,老猴王是 C++。但是Erlang 越来越显现出王者风范。被 Facebook 以 190 亿美元收购的 Whatsapp,以实际运行的数据,强有力地证明了Erlang 的卓越性能。

3. 面向穿戴式设备的嵌入式系统语言。

   最值得期待的是 Lua。Lua的原生系统的规模极小,但是具有强大的扩展能力。

4. 面向快速集成多种数据处理工具的胶水语言。

   无疑是 Python。Python不仅具有强大的系统整合的便利性,而且近年来在自然语言和机器学习方面的大跃进,基本确立了 Python在大数据领域的霸主地位。

[4]

移动互联网的两栖应用,加大数据云计算的后台系统,理想的语言和工具组合,或许是这样的。

1. 电脑浏览器的网页开发 + 移动轻应用开发: 基于 JavaScript 的 AngularJS 框架
2. Web Engine: 基于 JavaScript 的 NodeJS/ExpressJS
3. 实时业务逻辑: Erlang
4. 数据库: MongoDB
5. 离线数据处理:Python

[5]

Java、MySQL、PHP 去哪儿了?
留在记忆里,因为不适应海量数据的分布式需求、和业务流程的动态重组需求。

Ruby on Rail 去哪儿了?
玩具而已,不适应高并发系统,Twitter 就是明证。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多