在过去的一两年里编程领域迎来了翻天覆地的变化,如果说C,JAVA这些在过去几年里风靡全球,抢占Tiobe榜单,那么在如今移动领域兴起的年代 ,objetive-C也给Java造成很大的冲击。在编程领域没有“一招鲜,吃遍天”的说法。对于开发者们来说总是在不同的领域里寻找着合适的最佳语言。
那么反过来说,每种编程语言在不同的场景里,开发效率和执行效率都是有着天壤之别,比如说erlang适用于并行,PHP适用于WEB,R适用于统计,C#适用于界面等等,所以术业有专攻,一个优秀的程序员不在乎languages千千万,更关注的是编程技术发展的指向的领域。
所以本文我们来分析一下目前在各个领域比较流行的四大编程语言,在不同领域和不同场景里面的最佳实践。
LUA
结合Cocos2dx游戏开发
自从Cocos2d-x团队大力支持Lua的绑定后,备受移动开发者的关注。在游戏开发中涉及到的用户界面交互,场景管理以及角色逻辑等等完全可以使用Lua完成。实际应用上,与Corona SDK这样100%使用Lua进行开发的游戏引擎相比,cocos2d-x+Lua不但有着明显的性能优势,更是在扩展能力上也不受到任何限制。
在脚本语言的领域里,js则更是个强大的对手,很多人也会去选择Cocos2d-x+js。那么相比之下,Cocos2d-x+Lua到底有如何的优势呢?编者摘自知乎上面 游戏开发者的精彩回答:
1. 运行效率:Lua 的性能在各种测试里比JavaScript快不少。而移动设备上存在不支持JIT 的情况(未越狱的 iOS 设备),Lua对比JavaScript的性能优势就更明显。
2. 安全性:现在 cocos2d-x使用LuaJIT来执行Lua,所以可以把Lua代码编译为字节码再打包到游戏里。由于LuaJIT的字节码是高度优化过的,所以目前还没有反编译工具。而JS虽然也可以用字节码,但从目前的情况看还达不到LuaJIT的安全性。
3. 与C/C++的交互:Lua 原本就是作为嵌入式语言来设计的,所以天然和C/C++很容易交互。JS这方面是个劣势。
4. 与 Java/Objective-C 的交互:不管是 quick-cocos2d-x 里提供的 luaoc/luaj 模块,还是 wax, luajava 这些开源项目,都让我们可以绕过 C/C++ 层实现 Lua 和 Java/Objc 的交互。这个优势在游戏发行阶段,集成各种第三方SDK时绝对会节约巨量时间!
当然,cocos2d-x 目前明显是在主推JS的解决方案,因为JS可以跨越移动设备、桌面的界限,实现一套程序跑任意平台。不过个人认为以当前 HTML5 的发展情况,对于要强调体验的游戏来说,HTML5 还要一些时间。
所以,从目前的市场情况来说,Lua 明显是更理性的选择:成熟、安全性高、众多大作采用。
Python
Web后端、服务器开发
python被称作为胶水语言,可以通过编译的C语言程序来扩展,能够完成现实中的各种任务,包括开发者们日复一日所做的事情。作为编制其他组件、实现独立程序的工具,它通常应用于各种领域。实际上,作为一种通用语言,Python的应用角色几乎是无限的:你可以在任何场合应用Python, 从网站和游戏开发到机器人和航天飞机控制。
而能够让大多的开发者喜欢的是Python代码的可读性。清晰明了而简单的编码可以减少编程时间。无论是面向对象、命令式和函数式的应用,以及自动内存管理都是Python的特色。
在IT领域更多开发者更喜欢用它来做为WEB开发,并被列入LAMP (Linux, Apache, MySQL 以及Python/Perl/PHP)中,引领动态语言。相比PHP,在知乎上一位匿名用户就认为Python可以非常自然的扩展到队列(RabbitMQ)、后台处理系统(基于 Celery)、数据挖掘(SciPy、NumPy)、文本处理(NLTK)、系统部署(Fabric)、监控(Supervisord)等所有方面,而PHP只能做网页前台。
所以,根据Python在Web的一些优势,总结一下几点:
1. Python的代码风格简洁易懂易于维护,包括语法优势不用写大括号,代码注释风格统一,强调做一个事情只有一种方法
2. 有着丰富的Web开源框架,主流的包括Web2py,Web.py,Zope2,Pyramid,Django等。
3. 跨平台能力,支持Mac,Linux,Windows等。
4. Python可用库和模块比较多,非常方便。
5. Python应用领域比较广泛,可用后端,服务器,Web应用程序等开发。
6. Python社区非常活跃,在社区里面能够找到一切你所需要的答案,也得到很多大牛的极力推广。
R语言
统计分析最强,没有之一
对于R语言来说一直在小众领域成长着,早年主要用来做统计计算。随着时代的进步,在如今大数据爆发的年代,R终于在这一波浪潮中,越来越多的工程加入到这个圈子里来,对R计算引擎,R的性能,R的各种程序包进行改进和升级,让R获得了新生。不但可以给Hadoop注入统计的血脉,连Oracle都扩大对R语言的分析支持。
在知乎上的用户就针对R语言统计分析进行了很好的解释:
R语言主要是用于统计分析、绘图的语言。其实对于一直以商业为驱动,原则金融行业来说从来都不缺乏实用的工具,而且据我了解有专门公司在这方面产品,也是相当之成熟。所以我的看法是对于那些固定常见的业务并不缺乏实用成熟的工具,因为市场就是一抓一大把。
就我的理解而言R这门也可以用来探索 分析现有数据并高效的成图,让大数据图形化,用于统计计算和统计制图。 但前提是如果已经其他软件做了这件事 为何还要自己手动Coding呢? 所以是对于常规业务是不需要 因为有软件做了况且做的还很好,如果你是精算师 或是 某个特定市场前景根据数据分析预测,这个时候可能就需要R语言的帮助了,而使用好R必然有两个前提。
A: R语言分析需要有数据来源?
B: 如何快速熟练使用好R?
所以综上,
观点很简单对于常规业务真的没有必要大材小用。常规的软件已经足够好用,如果你有足够的时间学习Coding,也觉得通过自己编写数据模型分析预测 自己假设。这确实是一件很Cool的事情,但使用前提是需要解决我上面提到两个问题,如果你想做的很好还需要你相当的耐心学好R自身。
其实R语言实际意义是规避了像那些商业软件内部代码不公开一样,运算和分析规则只有内部人知道,而普通用户和分析师不知情。而R的目的则是在有数据的前提下可以自由的计算任何想计算的统计量或图形,其实它也避免了固定的商业分析中存在一些问题,无法得到取截尾均值作为统计向量,能够很好规避统计分析方法不清的问题。
Node.js
网站前后端开发
Node.js经过了几年的发展已经日趋成熟。在如今很多大型的高流量网站基本都采用了Node.js开发,像cnodejs的社区,雪球网,PayPal等。在知乎上 就详细的解读了Node.js在Web开发的一些场景应用。
首先,node新开一个http连接的开销,相当于一个大函数调用,相比php的新开线程动辄花费2MB内存和上下文切换的漫长时间,已经很小很小了。所以,node天生就是为高并发的应用而诞生,在设计之初就承载着巨大的使命。而这种极度追求代码效率和美感的设计,是以提升学习理解的难度,和考验编程能力为代价。如果你像我一样,有代码洁癖,追求极致,那么node将是不二选择。如果你仅仅是为了完成工作,或者快速搭建项目上线运营,那么还是用php或其它什么看似方便却一点也不“美”的语言吧。
再者,由于js的异步特征,始终有用户代码在执行,省去了等待查询数据库和文件系统的时间,相比CPU的时钟频率,去读一次数据库太久太久,久到让CPU等得花儿都谢了。node让CPU不在等待,node让妈妈不用担心我的内存。但是这种高效运用CPU的异步回调,将会带来逻辑上的混乱,一不小心就会一团乱麻理都理不清,下文有叙。
以上两点,导致node适合在具有大量细小的http请求环境下工作,典型的就是一个web即时聊天程序,或者一个支撑上万人同时在线的游戏服务器。你甚至不用考虑http请求数太多的问题。
如果用node开发网站,你可以把数据请求分的很细,也就是说不必像php那样把所有数据一次性加载到客户端,而是加载一部分,让浏览器渲染页面的同时,再去加载另一部分。Facebook的页面优化技术,就是这种分块加载的模式。可以让页面的加载速度在用户体验上提升5到10倍。
node无论从代码执行速度,还是开销,都是最完美的选择。但是缺点在于js异步特征的难以理解和控制,如果没有相当过硬的js开发经验和特征理解,项目稍微大一点,代码结构就会一片混乱。node是在考验一个人的代码设计和掌控能力,如同九阴真经,练的好就一身绝学独霸武林,练的不好就走火入魔精神崩溃。动不动就长达8层的回调嵌套,可不是闹着玩的。除了采用step同步方案解决控制流倒置和深层回调嵌套问题,把数据请求分得很细,再分多次加载,不仅在代码流程上更美观,也更符合node的特性。
有人说,异步代码是反人类的。其实同步执行才是反人类。想象一下,你需要打印一叠材料:打印机开始工作后,你站在那里等着,5分钟后打印完毕,你取走材料回到办公室。这似乎没什么。但是如果有100份需要打印?10000份呢?你也站在那里干等着?还是趁这个时间喝杯咖啡,或者多写几个if else 吧。