值得尝试的七大前沿性编程实验

Erlang、Node.js、Go:本文将指导大家迈出走向热门编程语言的第一步。

值得尝试的七大前沿性编程实验

“前沿”这个字眼可能太过激烈,甚至会直接吓跑一些保守的企业技术人员。对于企业IT部门而言,利用前沿性技术打造新产品简直有几分痴人说梦的味道。

这种反应不只源自对新方案的恐惧或者现有机制太过陈旧以至于难以更新,毕竟企业团队需要采纳一切可资借鉴的新思路来指导业务流程——甚至包括新思路的阶段性成果。但从管理者的角度出发,他们也需要尽可能保持业务体系的稳定性,因此原有堆栈代码带来的确定性能带来理想的使用安全感。

使用前沿性技术的关键在于多做实验而不能粗暴地组织全面升级。在预期效果最明显的领域尝试部署新代码,观察这些前沿工具能否提供我们所需要的性能及功能,然后权衡业务流程的基础要素是否受到了影响。单靠实验并不一定能立即暴露出新技术中的全部潜在弱点。因此逐步增加对应工作量,在审查结果达到全面准确之后再以严谨的态度进行实施才是正途。

在本文中,我们将论证与当前“最新最强”技术方案相关的七种实验流程。请放心,这些技术都已经具备一定发展历程——事实上,其中一些已经有超过二十年的历史。但它们仍然能够为现代企业堆栈提供显著的领先优势,也因此受到技术行业的广泛关注。不要抗拒,请以积极的心态加以尝试。这些技术是大家从熟悉的世界迈向新纪元的理想起点,更快、更简单、更纯粹——不容错过。

前沿实验第一位:利用Erlang实现纯粹的并发效果

目前前沿技术的主要诉求在于解决实际问题——换言之就是治标不治本。云计算之所以能够兴起,是因为数据中心的管理工作令IT部门十分头痛。而像Erlang这样的新语言之所以不断涌现,则是因为技术老鸟们无法胜任新时代下的技术要求。

作为一种拥有二十多年历史的编程语言,Erlang凭借着自身的高效结构将并发线程的执行难度降至最低,从而赢得了越来越多技术人员的青睐。如果利用Erlang进行编程,Web服务器能够在多用户并发任务当中带来更出色的表现——这是由于该语言的设计初衷旨在帮助开发人员通过限制程序的编写方式来做出正确决策。当然,技术从牛们完全可以利用其它语言实现同样的功效,但Erlang在设计中采用一系列安全辅助机制,从而避免线程紊乱状况的发生。Erlang语言为需要被锁定及解锁的共享变量中引入了功能性设计及消息传递机制,这使得IT部门所开发的企业集群能够更好地应对多用户环境。

Erlang语言由Ericcson开发,最初是为了用于内部电信系统,而后逐渐演变为开源项目。在Erlang步入开源道路之后,其大型技术社区如今已经提供大量支持工具,例如在大部分主流操作系统中进行基本运行安装,以及其它开源项目。很多参与者利用OTP——全称为开放电信平台——作为网站数据服务的交付基础,这也是大部分简单项目的最佳起点。(大家可以点击此处下载Erlang。)

不过任何一种语言都存在局限。Erlang的主要瓶颈在于,其新工具的设计目的并不是为了修复那些由失误或故障引发的问题;它们关注的是提供差异化决策方案。也就是注重“取舍”而非“问题”。

举例来说,云计算能够带来出色的简便性与灵活性,但却会同时造成控制与安全方面的难题。使用Erlang语言的程序员需要牺牲一部分自由度来换取新的开发模式。如果大家的代码需要面对的是多位彼此互不相关且无需沟通的用户,那么使用Erlang模式来编写代码是最便捷的方式。不过如果大家需要让自己的线程彼此沟通——前提是各位有能力攻克这项难关——使用Erlang反而会让事情变得更加复杂。

从小处着手,了解Erlang是否能够与自己的实际需求相吻合,而后通过取舍获得最佳代码表现,这就是我们进行实验的意义所在。

前沿实验第二位:Node.js Web堆栈

很多企业在评判服务的实际效果时,都会观察其是否能够快速交付数据。没人愿意让一位潜在客户面对着空白的浏览器窗口破口大骂。此外,在向顶头上司进行工作汇报时,大家也肯定不希望把时间浪费在等待关键性业务分析报告生成身上。

不少前沿性工具都专门为速度而生。以Node.js为例,它的流行主要是因为其出色的运行速度。它在与新型NoSQL数据库协作时的速度表现甚至更快,这是由于新型NoSQL数据库在数据保存方面速度拔群。总之,我们可以在这套小型平台上建立起高速Web基础设施,并且同时降低对电力资源的消耗。速度与能效之间往往存在着紧密联系。

这样的速度表现对于将快速响应视为首要目标的企业用户来说极具吸引力。更短的网站响应时间能够大大提高客户的第一印象,从而将潜在客户转化为实实在在的买家。不过银行等拥有大量固定客户的企业对于这方面特性可能并不关注。

Node.js是一套以Chrome V8 JavaScript引擎为基础创建的开源堆栈,但大多数技术人员会在nodejs.org网站上为各类主流平台寻找预先开发好的可执行方案。作为主要赞助商,Joyent公司还提供配备镜像的云设备,其中包含所有必要库及工具。

很多开发人员习惯于直接向Web框架求助,例如Tower、Geddy或者Railway,它们能够切实简化数据驱动的基础网站的开发流程。

Node.js的局限与性能无关,最大的问题在于它给开发人员带来沉重的技术负担。即使是最为睿智的程序员也需要加倍小心,因为这意味着所有数据包都运行在同一进程当中。如果某位用户的无意操作偶然触发了代码中的bug,整个Web服务器都将陷入崩溃。优秀的程序员以及严格的测试流程能够避免问题的发生,但没人能保证永远不出纰漏。在这方面,Erlang的做法正好相反——它利用多项限制帮助程序远离严重错误。

Node.js与NoSQL相结合完全能够成为当下前沿实验的理想方向之一:专注于为爆炸式发展中的社交网络提供支持。如果大家打算亲自进行实验,请务必选择对速度要求较高、但对稳定性不太关注的领域。如果您的数据需要精心打理,请告别Node.js、远离风险。

前沿实验第三位:HTML 5 Web与移动应用

古语有云“新官上任三把火”,刚刚诞生的新工具也值得我们体验一下其旺盛火力。从零开始刚刚建立完成的最新语言及软件堆栈很可能尚未经过新版本带来的细微调整并舍弃不合用的API,但其语法及格式也因此比较纯粹、简洁。

这往往能为大家带来更简单、更纯粹的代码。尽管程序员们能够利用任何语言编写出复杂的代码,但新型堆栈往往不需要经过太多代码修复及版本测试流程。智能手机上的某些应用需要经过几十个版本的严格测试,从而确保其能够以正确版本发挥正确效果。新型堆栈就不至于带来这样的额外复杂性。

目前市场上已经存在多种HTML 5项目,旨在为开发者提供创建网站或者移动手机应用所必需的基本要素。代码,或者被称为框架或者支架,能够在页面中组织内容并提供由菜单为主导的过渡机制。其中最具人气的项目包括jQuery Mobile、Sencha Touch以及Titanium,但近来还兴起了更多其它工具。很多人气极高的CMS堆栈,例如WordPress或者Drupal,已经开始将关注重点转移到移动环境当中,而且往往能够使用大量原始代码。

虽然这些新的代码堆栈足够简洁,但它们需要将原有平台彻底淘汰之后才能实现效果。新工具能够轻松帮助开发者编写出简单而精致的代码。它们往往直接忽略掉陈旧硬件以及操作系统版本。当然,它们的简洁性与高速性源自对现有预发布代码的高度依赖。

HTML 5框架往往会在大家使用旧版本或者不符合标准的浏览器时发生故障。突然之间,菜单显示的位置出现严重偏移,而且文字内容也开始只显示一半——这说明CSS指令无法正常工作。有时候新需求需要与旧方案和谐相处,但新代码却坚持以同一种方式实现某一种功能,这也是最令人头痛的问题。

在迈入实验阶段之前,请认真考虑自己是否有能力为技术的特定子集提供必要支持。

前沿实验第四位:利用R语言进行数据处理

从简洁Web设计到更为复杂的大数据分析,R语言已经成为目前大部分热门新工具的开发核心——这些成果往往被用于通过数据解决问题或者掌握客户情况。在众多成果工具集的支持下,R不仅是一种能够为通用统计公式提供预定义功能的语言,更是一种思考问题并找寻解决方案的全新方式。

举例来说,大数据分析软件包中的统计模型能够识别并标记复杂的模式并充分发挥现代计算机集群所提供的全部性能资源。统计模型取代了原本只能排序或者寻找最大值的简陋机制。与前沿统计软件协作意味着大家能够实现深层次分析,并在旧有代码无能为力的状况下找到有价值的蛛丝马迹。

这些新型视角的出现帮助企业节约了数十亿美元的常规支出。他们帮助店铺确定所在地域的口味喜好,根据人们的审美习惯以颜色、图案、大小等标准安排货架摆放方式。它们汇总出的结论帮助营销人员精准确定广告投放量。总之,只要有数据的地方,我们就有机会从中找到有利于自身的发展机遇。

作为开源项目,R语言专注于通过培养机制建立核心用户群体。很多开发人员会以R Studio等更为完整的IDE作为起点,因为这些IDE捆绑有编辑器以及具备执行引擎的输出窗口。在生产堆栈领域,R Studio IDE已经成为最理想的开发机制。

不过像R语言这样的统计工具也有缺陷,其结果并非永远直观,实验所获得的效用也常常不够明显。这是因为尽管思路足够前卫,但其执行流程还不够科学。大数据分析是一套极为出色的理论,甚至堪称伟大的灵感,但几乎没人能准确说出这项技术到底有多出色——特别是在背景条件的影响之下。统计分析真能帮助大家改善自己的产品吗?收集到的数据能否带来理想的精确度以指导工作?没人说得清,但如果能花上几个月组织实验,大家没准会得到自己的结论。

考虑到R语言等统计工具令人激动的特性,我们不禁急于利用它对磁盘阵列中保存的数据进行一番全面分析。也许大家运气很好,巨大的机遇正在磁盘中静静等着你来发现。不过很多技术人员已经发现,单靠大数据分析机制还不足以彻底实现“去其糟粕、取其精华”的目标,人力的介入不可避免。单靠分析结果中那一串串数字只会让人找不着北。

前沿实验第五位:体验NoSQL的极致速度

让我们面对现实:我们程序员其实是个相当懒散的群体。我们不愿意从零开始创建项目——除非不得不做。新工具的出现往往是由于对新型功能的强烈需求。有时候情况甚至更为严重。

获得这些新功能的惟一途径就是接受新型工具。许多新型NoSQL数据库能够毫不费力地迁移到云环境当中。弄一堆设备,在它们之间顺利运作,这正是技术人员的专长与构建基础设施的出发点。总之,如果没必要,IT部门根本不会有热情引进新机制。

目前可供选择的NoSQL数据库可谓层出不穷,其中大部分项目在功能方面存在广泛交集。对这些交集进行一一列举并详加解释是项巨大的工程,受篇幅所限,我在这里就不再赘述了。总之,目前比较热门的工具有Cassandra、MongoDB、CouchDB以及Riak。某些企业还会提供工具即服务方案。MongoLab以及MongHQ就是两套利用MongoDB实现数据存储的方案,只要版本版本相近即可实现兼容。

以闪电般的速度以及灵活的扩展性实现响应非常重要,为了充分享受新工具在这两方面带来的提升,大家值得对手中的全部现有代码进行重写。不过此类前沿方案的核心吸引力还在于,我们找不出它们在发展过程中误入歧途的端倪。通常情况下,技术方案往往存在阴暗面,我们需要通过艰辛的探索——甚至错误——才能全面地对其加以认识。

NoSQL数据库也面临着同样的问题。它的速度确实够快,但这主要是因为它并不提供任何坚实的一致性承诺。这类数据库项目单纯接纳大量数据并在确定全部数据都已经写入磁盘之前就显示“全部完成”信息。对于社交网站这类内容不太重要的企业来说,个人用户状态信息的丢失不至于惹出什么大麻烦,但其它企业的心态可就没这么轻松了。

寻找合适的区域,确保其中不涉及任何关键性数据,接下来就可以放心大胆地鼓捣这些键-值数据存储方案了。

前沿实验第六位:利用图形数据库寻找连接

数据库概念确立于上个世纪。简单来说,我们首先定义包含着特定数据列的列表,然后向其中插入行,全部填满后就形成了一套数据库。数列中可以包含整数、十进制数字或者字符串,传统数据库的灵活性也就仅限于此了。

但Neo4j等图形数据库的出现给数据库概念引入了新思路。我们仍然可以在数列中添加数字及字母,但现在大家还可以在不同单元行之间创建指针以形成网络结构。如果存储的内容是社区网络,那么数据库就能够记录下每位用户以及与之相关的好友。

在规则数据库中,我们一直可以为每个单元行赋予一个键,并将所有指针以键的形式保存在同一个列当中。图形数据库的强大实力体现在用户运行查询之时。图形数据库能够对网络进行解压,并利用经过精密调整的搜索算法组织网络查询。它不需要像关系数据库那样处理复杂的链接与加入关系。如果大家希望查询某位用户的朋友的朋友的朋友一共有多少位,查询引擎能够直接给出结果。如果大家希望测试两位用户之间需要经过多少次朋友关系跳转才能彼此联系,引擎则需要搜索网络并找出答案。

Neo4J由Neo技术公司所打造,提供三种版本并遵循多种许可模式。社区版以GPL 3.0许可为基础并提供所有搜索能力。高级版及企业版则增加了多种工具,用于监控数据吞吐量、实现集群同步并对数据库进行备份。二者都遵循针对实验及开源项目的Affero GPL许可,能够支持且无需公开大家自己的代码。

在功能集方面,我们同样需要做出取舍。图形数据库与其它数据库家族成员相比,在开发水平及调整精度上有所欠缺。它们在图形算法领域可算当之无愧的专家,但在传统功能方面则既不够渊、也不够博。选择图形数据库就意味着放弃其它功能取向。

前沿实验第七位:利用Go简化结构

多年以来,各类编程语言就像雨后春笋一般争相涌现。由于每个人都希望把自己喜爱的功能及思路添加进来,因此很多原本单纯的想法最终变成了一大坨重量级负担。现在是时候创建一套崭新而又经过修剪的王牌语言了。

Go就是这样一款由谷歌公司的众多技术专家创建出的语言。其语法机制对于熟悉C及Java的程序员来说并不陌生,而且其本身难度也绝对亲民。我们不仅可以通过定义类型对代码进行编译,甚至还能在代码运行过程中对其加以修改。无用存储单元收集程序负责所有内存分配任务。Go还提供一套轻量级机制用于组织并发方法,这样大家就能轻松编写出支持并行运行的代码了。

谷歌以自由度极高的开源许可为基础,为Unix、Linux、Mac OS X以及Windows等系统平台提供了编译器与运行堆栈。目前已经有多家企业开始以实验方式测试Go语言,而谷歌也表示尝试将其代码引入某些生产环境。大家可以访问tour.golang.org网站以交互方式了解这款新语言。

Go这样的语言最适合帮助企业用户在重新组织或者设计办公环境时清理原有负担。对结构加以精简能够简化员工之间的协作难度,因为大家的沟通将变得更顺畅、也能够更轻松地向预定目标共同努力。Go的支持者们对其特性大加赞美,认为它能够帮助自己与他人协作开发出简洁而极具功能性的产品。简洁性将协作过程中经常出现的沟通与同步障碍一扫而空,这也正是Go语言的核心价值所在。

相关推荐