技术

2014年盘点四大热门语言的最佳实践

【IT168评论】在过去的一两年里编程领域迎来了翻天覆地的变化,如果说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语言的分析支持。

  在知乎上chenkai的用户就针对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 吧。

==================================================


北京时间320消息,昨晚在网络上突然传出一则消息:腾讯核心创始人、CTO张志东宣布辞职。即时起,他将不再担任腾讯执行董事,而在六个月后首席技术官一职也将卸任。卸任后,张志东将转而担任腾讯学院专职讲师,公司终身荣誉顾问以及腾讯学院荣誉院长一职。

张志东在离职群发的一封邮件中称,近几年来身体状况不太好,体力和精力成为一个大瓶颈,因此曾在两年前提出辞任的想法,与马化腾、刘炽平沟通后,决定再留任两年,以帮助技术领军同事成长和完成交棒接力的过程。

同时他还表示,他并不是一个能力全面的人,领导力不是他的强项,在一家过两万人的企业里任职管理层,自己有很多不足之处。他深知公司所处是一个日新月异的行业,需要领导者全心投入和充沛精力,决不可以倚老卖老。所以他希望,可以在公司培养出更全面的技术领导人,可以接替自己更好地带领公司走向未来。

腾讯董事会主席兼CEO马化腾随后在一封致全体员工邮件中称,他与Tony的感情不仅于此,4年的大学同窗,16年的创业伙伴,我们一起共度了比家人还要长的时光。这样的经历,这样的感情,用什么语言去描述都是很难尽述。

据悉,张志东技术非常了得,传闻QQ架构设计源于1998年,然而截止到20098月,QQ用户数从之前设计的百万级别到现在的数以亿计,整个架构还能适用。

谈及未来,张志东希望能帮助技术人员成长

对于未来如何安排,张志东在接受腾讯科技采访时称,他会调整一下生活节奏,将会成为一名腾讯学院的讲师,今后的重点会放在技术人员的成长助力上,会考虑一些技术型公益方面的事情。像美国的GoogleFacebook,它们为业界做了很多思想贡献、开源的贡献等,这点是我们的榜样。腾讯在发展的过程中,有不少经验教训,这些方面应该会对技术人员成长有帮助,会考虑在学院帮助发展这些事情。

谈及腾讯如何应对互联网潮起潮落的未来时候,他表示,面向未来,给人印象最深刻的是Google,它投入巨大的资源投入未来的技术理念研究,完全不局限于其主营业务。腾讯目前无论是人才、视野还是技术,都有很大的差距,需要我们持续的努力。中国与美国有不一样的国情,我们的人口密度非常高、基础设施和服务设施相对不足,用互联网来帮助中国社会更有效率、帮助人们生活更为优质,这是腾讯应努力的方向。

附录:

张志东群发的邮件

各位同事,
我怀着感恩和欣慰的心情在写这封信,我将辞任腾讯公司管理层和董事会的工作。在公司永不停息的发展和努力奋斗中,不知不觉已走过十六个年头,从27岁走到43岁,这是我人生中最值得珍视的日子,我和所有腾讯人一起,见证并参与了中国互联网大潮,伴随团队一起成长,这让我的职业生涯感到特别开心。
对交棒接力的思考
我不是一个能力全面的人,领导力不是我的强项,在一家过两万人的企业里任职管理层,我有很多不足之处。加上近几年来,身体状况不太好,体力和精力成为一个大瓶颈。我深知公司所处是一个日新月异的行业,需要领导者全心投入和充沛精力,决不可以倚老卖老。我一直很希望,可以在公司培养出更全面的技术领导人,可以接替我更好地带领公司走向未来。
2
年前我开始和PonyMartin深入沟通我的想法,经过多次深入沟通,我们达成了一致。用两年的时间,在公司向移动互联网转型的过程中,帮助技术领军同事成长和完成交棒接力的过程。
很开心看到,经过多年的融合实战锻炼,公司的管理团队已有很长足的进步。Ls 带领的 TEG Mark/Dowson 带领的IEG/MIG/SNG Allenzhang带领的微信团队,这两年来取得重大进展,完成了面向移动互联网的关键组织变革。他们几位和团队一起风雨同行多年,无论在技术能力,在带领团队的领导力上,特别在企业文化上,都已取得团队的高度认同,他们已能很好的接棒。正因为伙伴们的良好成长和组织的进一步成熟,使得我可以有机会很放心地离任管理层,更换一种生活节奏。
离任管理层之后,我新的工作是将是腾讯学院的培训讲师,致力于公司技术理念和文化理念的传承工作。在帮助公司技术产品的同事成长助力上,一直是我未完成的心愿和兴趣所在。原来在管理层的工作太忙,很惭愧在这里花在腾讯学院的时间很少,贡献也少。希望退下管理层之后,可以有更多时间完成这个心愿。
对团队的感恩
十六年前,Pony和我在做IT工程师,我们有一个梦想,梦想我们可以做一个互联网产品给很多人用,同时可以养活自己。因为一个朴素的梦想,因为创业伙伴之间的相互鼓励,我们开始了腾讯的创业之旅。一个小公司能否凭技术和服务能生存下来 ? 我们完全没有把握。
幸运的是我们遇上了中国互联网大发展的浪潮,深圳这座改革开放的窗口城市,具有浓厚的创业气氛, 出于对互联网的热衷,我们一头撞进了互联网这个新兴行业。
感恩创业伙伴和管理团队,我的个性比较急躁和固执,能力不全面。是创业伙伴们对我的包容,让我可以发挥所长,修正我的缺点,帮助我成长。在公司发展的过程中,遇到过很多难关,难免经常有激烈的争论,但腾讯的管理团队一直具有很强的包容性,可以包容多种个性的伙伴,相互扶持,凝聚力量。能和这样的伙伴一起共事一起成长,是我的幸运。
感恩所有的腾讯同事。在许多同事身上,我感受到十年如一日的热忱和坚持。要做好互联网服务是挺苦挺累的事情,新事物、新问题层出不穷,用户的期望不断在提升,团队每天奔忙于各类改进,时刻面对各类突发事件,为了不让用户失望,腾讯人十年如一日用心的投入。许多可敬可爱的同事,他们并不仅仅是在做一份工作,而是用心做一份事业,用心帮助身边的同事。在他们身上,可以让人感受到团队的魅力。在公司的每一天,我都可以感受到腾讯人的正气和朝气,每天都能感受到工作的快乐。
对腾讯未来的期许
公司发展的每个历史阶段,都必然会面临新问题和新挑战。我最关心的并不是业务得失成败,而是团队文化的凝聚。在我看来,一项业务受挫了,我们还可以重新再来。能让腾讯人全心投入,努力奋斗的原因,并不是公司收入、市场份额、股票升跌这些外在因素,而是这里有一群志同道合的人和气场,小伙伴们具有共同的价值观,渴望通过技术和产品改变世界。
移动互联网的大潮,将催生前所未有的创新机遇和前所未有的挑战。腾讯必然会遇到许多艰难险阻,期望腾讯人能时刻在意用户感受,永远对用户体验战战兢兢,永远对社会、对行业持敬畏之心,期望腾讯人能打造出让社会和行业受益,让生活更美好的生活平台。
最后,祝福所有腾讯的兄弟姐妹们身体健康和家庭幸福。
Tony
2014-03-19

马化腾致全体员工邮件

各位同事:
今天,我怀着很复杂的心情回复关于Tony的这个邮件。Tony在两年多前就对总办提出了这个请求,也特别和我们整个创业团队进行了反复沟通,在公司业务的变革挑战下,在团队特别需要时,他又留下来与我们高强度地并肩战斗了两年。今天,我首先代表全体总办、全体腾讯人对Tony过去16年来所做的一切、特别是过去两年多的继续担当表示由衷的感谢!对Tony转身成为腾讯学院的一名讲师,专注于他一直非常执着和热爱的技术人才培养工作,我也由衷地为他感到高兴。
我与Tony的感情不仅于此,4年的大学同窗,16年的创业伙伴,我们一起共度了比家人还要长的时光。这样的经历,这样的感情,用什么语言去描述都是很难尽述。回想当年,踏入社会工作数年,因我俩都刚好是国内为数不多的互联网寻呼系统的开发者之一,且有着共同的梦想,才有了腾讯创业的开始。
创业初期、直到创业多年以后,Tony都是我们首要依赖的一线技术专家,也是大家的技术主心骨,为腾讯互联网海量服务能力奠定了深厚的技术基础。今天,Tony依然从未间断过对公司技术发展的关注和指导、高度重视人才的培养,哪怕是选择了退出管理岗位,仍然希望坚持这一爱好,留在公司做技术顾问和学院讲师。
比技术本身更为重要的是,Tony是公司用户价值观的最坚持的践行人。在总办会议上,Tony是最能站在用户角度毫不妥协的人,始终保持着这份固执Tony这份坚持,也融入了公司的强用户导向的理念基因。
很多事说再多,都不如自己亲自做。Tony在过去16年中,始终如一为理想而固执,是很多同事们的好领导、好朋友。这些行为也感染到了我们的创业团队,感染到每一个和Tony打过交道的同事,这些不是纸面上的文字可以呈现的。
过去两年,Tony考虑到自己将要逐步放下管理工作,在继续支持公司业务的同时,把很多精力放在了培养接班人、延续公司文化等方面,这些工作的价值会在未来的工作中体现,也是公司要继续坚持下去的重要方向。
好在Tony的爱好仍然是技术,仍然是传道授业,仍然会在公司担任终身荣誉顾问、学院讲师和文化大使,总办和同事们仍然可以和Tony在一起工作和一起交流。我们尊重Tony的选择,也清晰地记得Tony一直强调的一句话:不一定非要在管理层才能对公司有贡献,任何一个员工,都可以为公司发光发热。。相信Tony也能继续在公司内部致力于自己的爱好,并且让事业和生活更加平衡。
最后,还是要对Tony再说一次感谢,代表我自己、更是代表同事们感谢Tony。你不仅仅是公司过去16年的CTO,更是一个天真、执着、善良和可敬的良师益友。无论在任何岗位,你都是腾讯人心中的好伙伴!
Pony
2014.3.19


Agile已死 Agility长存?

发表于18小时前| 1486次阅读| 来源PragDave|3条评论| 作者Dave Thomas

摘要:随着时间的流逝,敏捷宣言创始人之一的PragDave发现,敏捷(agile"已落入某些顾问/商贩帮他们出售产品的一种工具,并非是用来进行高效开发和保证产品质量的一种方法理念。

【编者按】在13年前,Dave Thomas16位软件专家聚集在犹他州的Snowbird一起创建并签署了现在众所周知的敏捷宣言。然而,随着时间的流逝,Dave Thomas发现,敏捷(agile"已落入某些顾问/商贩帮他们出售产品的一种工具,并非是用来进行高效开发和保证产品质量的一种方法理念。下面是笔者对原文的翻译:

13年前,我和16名中年白人聚集在犹他州的Snowbird,分享我们在软件开发上的一些共同信仰,我们想知道是否有一种方法能够描述我们的软件开发理念和信仰。

花了不到一天的时间,我们便发表了这些非常有价值的实践列表,即众所周知的敏捷软件开发宣言

Individuals and Interactionsover Processes and Tools 个体和互动高于流程和工具
Working Software
over Comprehensive Documentation 工作的软件高于详尽的文档
Customer Collaboration over Contract Negotiation, and
客户合作高于合同谈判
Responding to Change over Following a Plan 响应变化高于遵循计划

我为我们所做的事情感到自豪。我认为,这个宣言的存在已经帮助开发者打破了8090年代浪费时间和损伤灵魂的开发实践。

然而,除了那次的Snowbird会议,我从未参加过任何与敏捷有关的会议,我也没有担任敏捷顾问。为什么?因为我不认为这些事情与敏捷宣言有任何关系,这些敏捷会议就好比举办芭蕾舞会,在我看来,围绕这四条核心价值观(宣言)的产业小组更像是创建一个贸易联盟。

不幸地是,我的想法已被时间证明是正确。敏捷(agile一词已经被破坏,它已经变的毫无意义,没有任何产生任何价值。所谓的敏捷社区已经变成了顾问和供应商们兜售服务和产品的竞技场。

所以,我认为,敏捷一词是时候该退休了。

我相信,当敏捷变成一个名词时,是没有人反对禁用这个词的。“Do Agile Right”“Agile for Dummies”是众多英语词汇中错误且毫无意义的词汇。敏捷不是一个名词,它是一个形容词,它是用来修饰某些东西的。“Do Agile Right”就好比说“Do Orange Right”

但是,撇开语法错误,还有一个更大的问题。一旦该宣言走红,它就像是一块磁铁,某些人就会把它当成是获利的工具,宣传某种论点或者把它当作一些产品的卖点。它将会成为一种营销术语,就好像一些商人喜欢把econatural视为一体一样。敏捷一词就这样失去了其本质。

这将伤害到每个人,尤其是开发者们。编写代码并不是件容易的事,因此,开发者会自然而然的寻找某些方法实践来帮助他们提高效率。但我仍然坚信,开发者坚持敏捷宣言的价值和实践将会在开发上助他们一臂之力。

可是,一旦敏捷变的毫无意义,开发者们就不会把它当作实践向导。我们不妨简单地在全球范围内把敏捷一词替换成空格。

回到正途

让我们再来看看这四条宣言:

Individuals and Interactions over Processes andTools 个体和互动高于流程和工具
Working Software over Comprehensive Documentation
工作的软件高于详尽的文档
Customer Collaboration over Contract Negotiation, and
客户合作高于合同谈判
Responding to Change over Following a Plan 响应变化高于遵循计划

左边的语句代表了一种理念,如果在左右两边做出选择,那些使用敏捷方法进行开发的开发者更倾向于选择左边。

现在再来看看那些顾问和经销商所说的:让你的工作变的敏捷,是左边还是右边,你将发现,他们给你提供的工具和流程是多么的复杂。

回归本源

下面我将会告诉你如何以敏捷的方式来做东西:

做什么:

弄清你目前所处的阶段
朝目标迈一小步
基于所学,对你的理解进行调整
重复以上

如何去做:

当面对两个以上的选择时,它们都可以实现大致相同的价值,最后采取更容易在未来做出变化的那个。

就是这样。这四个思路和一个实践涵盖了高效软件开发的一切。当然,这个过程会涉及到大量的思考,并且在整个开发中会来回多次的循环、迭代该过程。许多时候,你甚至需要专注变量的命名到长期的项目交付等所有事情,但是,只要是向你推荐或试图卖给你一些更大或更复杂的东西的人,他们都是为了骗取钱财。

本文所提到的这些都是当务之急――它们用动词告诉你做什么和如何去做。

让我们抛弃那些不做正事的人所用的敏捷

相反,让我们换个词来描述我们所做的:Let’s develop with agility

You aren’t an agile programmer―you’re aprogrammer who programs with agility.
You don’t work on an agile team―your team exhibits agility.

You don’t use agile tools―you use tools that enhance your agility.

“Agile”很容易被用到任何地方,而“Agility”很难被挪用。

这是非常重要的,你可以购买和销售标签,通过参加一个短期培训,你就可以突然地在自己的职位上贴上敏捷这个标签。但是你买不来经验――你只能赚钱。

保护我们的资产(investment

不管怎样,我们做什么远胜于我们怎么称呼它。而好的词汇也更有利于我们有效地进行沟通。

我们已经失去了“agile”这个词,让我们试着使用“agility”,让我们保留它的本义和真谛。让我们携起手来一起保护它,以免它落入到哪些出卖“agility”灵魂的人手上,并且最终卖给我们。

文章来自:PragDave





你可能感兴趣的:(Agility)