想做企业应用开发的程序人员,如果不学习Java、不学c#或PHP等主流程序设计语言,那将是愚蠢的事情。但像Ruby和Erlang那种过去主要针对特定领域的程序设计语言,如今也已成为企业应用的开发语言。
在企业级程序设计语言领域,主流语言总是博大精深。程序码主要由少数几种主流程序设计语言来撰写,一些场合用Java,另外一些场合用c#或PHP;有时,在像游戏程序设计这样追求高性能的任务中,重量级程序设计人员会动用C++或其他通用程序设计语言,所有应用程序都通过SQL语言与数据库打交道。想做企业应用开发的程序人员,如果不学习上述的程序设计语言,那将是愚蠢的事情;然而令人惊奇的是,有一些原本属于特定领域专用的程序语言,现也正在企业应用领域异军突起。
除了那几门主流语言之外,针对日益增长的通用性问题,当前有好几种程序语言也开始提供解决方案─甚至连持续雄霸一方市场的老式专用程序语言也是如此。这些语言都提供自动排版程序码等拼写功能,以免让程序设计师被括弧、大括弧等重重嵌套给搞胡涂。
尽管以下七种特用的开发语言可提供在主流开发语言不能直接找到的特性,但其中有很多语言却还是得依赖于主流语言才能存在。如其中一些语言就得运行在Java虚拟机器上,以便于充分利用Java团队的资源;而当微软设计C#语言的时候,它就很明确地是以营造跨语言虚拟机器运行环境为目标,这些详细虽有助于部署,但对程序师而言似乎帮助不大。
不管怎么说,这七种程序设计语言当前正在企业应用中快速地崭露头角,现在也许该是考察它们优势的时候了!
Python
喜欢使用Python的主要是两种人:那些痛恨括弧的人和科学家。第一类人帮助创立了这种更容易阅读、类似Perl的新语言,但又避免了C语言系列那种到处充斥着前后配对的括弧…等问题,造成程序码不易阅读的毛病。在飞速发展了几年后,这项解决方案已经足够完善,以至于能成为Google应用开发引擎首选的开发语言。格式清淅的Python具有在云端运算环境中扩展所需要的那种结构,而这正是企业级计算所面临的最大挑战。
至于Python会在科研实验室中普及的原因,则有点难以解释,因为它并不象Stephen Wolfram专为数学家所开发的Mathematica软件,Python并未提供任何可明确满足科学家需要的数据结构和元素。Python之父Guido von Rossum认为,Python之所以在实验室受到欢迎,可能是因为“科学家在解释实验结果时,经常需要即兴进行,所以他们会被能让他们很快地进行工作,并且马上就能看到结果的动态语言所吸引。”。
当然,Python还拥有大量科学家可能需要的函式库,如NumPy和SciPy就是其中两个最知名,透过开放原始码方案方式而衍生出,专为科学计算而设计的函式库案例。
像制药公司那样的科学技术产业,并不是唯一把Python用于研究的企业。如今很多华尔街的金融公司都很倚重数学分析,也经常聘请大学里那些习惯使用Python程序设计的科学家。Python在华尔街如此受欢迎,以致于有人甚至建议在债券的招股章程中,必须包含一个用于指定投资人如何得到回报的Python演算法。
Ruby
也许有人会争辩说Python和Ruby算不上是仅限于特定用途的“小众”语言,但事实上,若从企业的角度来看,它们仍然是很有应用发展潜力的工具。这也就是说,Ruby─或更确切地说是RoR(Ruby与Rails框架的组合,Ruby on Rails),在创建系统原型方面越来越流行,它是随着Web2.0的爆发而进入企业应用开发领域,而其中有不少网站一开始都是以Ruby起家。如以提供线上应用软件,并曾被美国科技杂志《Wired》评选为“2008年10大最值得关注的创业公司”─37signals.com 即是真正使用Ruby部署其程序码。
Ruby成功的秘诀,在于其“惯例优先原则 Convention over Configuration (CoC)”的理念。举例来说,当我们在命名一个foo的变量时,数据库的相应字段也会同时自动命名为foo。因此,RoR会是创建系统原型的绝好工具,它让你只需在一个地方输入foo,其余的自动数据表格网页创建、读取、刷新和删除(CRUD)的处理工作(Scraffloding),RoR则自动接手进行。
RoR网站主要致力于关联式数据库数据的分类。较知名例子有从组合论坛、讨论分组和行事历功能的37signals中,所生成的Basecamp、Backcamp及Campfire等网络应用。RoR可用来处理这些数据库表的展现格式,以及决定什么样的资讯才会被显示出来。此外,通过Ruby的命名惯例(naming convention)功能,开发人员无需投入大量的重复劳动工作,很容易地便可产出高品质的程序码模版。
不少企业商用等级(production-grade)的Ruby网站是跑在基于JVM由Java实现的版本JRuby之上,由于JRuby的用户可得到JVM在处理多线程方面的诸多强大好处,这对于有大量用户需要同时上线并行的企业级部署环境,会有极具价值的助益。
MATLAB
该语言原本为数学家求解线性方程组而发明,但由于今日组织需要分析数量越来越庞大的数据,使得企业日益表现出对MATLAB的青睐。许多用于对广告、歌曲、网页进行流量分析的较复杂的统计技术,都依赖于类似MATLAB求解的线性槼划演算法的威力。
可以预见的是:MATLAB的使用将随着网站日志档的增长而扩大。对人们来说,要在主页查看浏览列表只是一项简单的工作,但它背后却需要统计人员绞尽脑汁从一堆复杂的路径中进行分析,才有可能得出那个指针。比如说,人们是不是更有可能在周一或周五买衣服?不良品的生成率是否跟生产线有关联?
出品MATLAB的MathWorks提供了多种白皮书,显示出工程师如何利用该工具来寻求统计答案。比如Toyota车队计划通过分析风洞试验和其他实验室试验来应对北美NASCAR房车赛,而加拿大的生物调试研究所正在寻求治疔烧伤的最佳疗法。
也有很多同类开放原始码方案条目在处理这类工作,包括象是Octave、Scilab、Sage和前面提及的Pytho函式库─PySci。所有这些工具都有助于人们进行试图理解和预测客户行为的复杂统计分析─这对现在的公司来说已经习以为常的工作。
JavaScript
无论如何,JavaScript都不是一门含糊的语言。不管怎么说,它都可能是这个星球上编译次数最多的语言,因为只要人们一上网络浏览器,就得下置其中的JavaScript脚本并解译运行。尽管事实如此,甚至还有越来越热门,基于Ajax的精巧Web应用出现,但JavaScript却仍很少被认为能用于重量级的应用。
这方面不乏尝试的先例,如Netscape早在1996年就试图让JavaScript成为其服务器平台的通用语言,但最终只在浏览器中实现。Aptana,这方面的拥护者之一,在Jaxer没得到市场的接纳后便停止了开发。AppJet,一家侧重研发的小公司,计划使用Java所撰写的JavaScript库─Rhino来简化服务器端的程序设计,则在2009年被Google收购,现在似乎已经转向别的条目发展。
尽管如此,JavaScript的新应用仍彼彼皆是。例如,CouchDB便不使用SQL进行查询,取而代之的是两个JavaScript函数:Map函数用来选择,Reduce函数用来把需要的一切打包。而Node.js则是一个稍后出现,更令人鼓舞的服务器端JavaScript框架,复活了客户端和服务器端程序设计两全其美的古老梦想,这个框架采用Google为浏览器开发的V8 JavaScript引擎,以自行决定输出数据的格式。
在每个人们需要少量脚本(scripting)功能之处,JavaScript找到了新的用武之地。对于大型应用的开发者来说,这是提供用户创建子应用的最简单方式之一。我们可以预期,JavaScript继续在企业应用上发挥作用,特别是一次只需编写一小块程序码的时候。。
R
如今统计分析越来越倚重于“R”,虽然一些纯粹主义者仍沿用其原本的名称─“S”语言,至于Tibco公司所销售的商业版却称为“S-Plus(S+)”。
未来不可以能再出现一个S++,因为S+语言本质上可说是附带统计计算函数和视觉化统计结果的LISP或Scheme语言强化版本。如果老板想要电脑从数十亿行的日志档中寻找模式、丛集和预测性变量,R或S是很受欢迎的解决方案。
就象瑞士小刀一样,R也是编写处理巨量数据集合(big data set)数值和统计程序的有力工具─如果从其可处理的数据集合量来看,比拟为瑞士军用砍刀或许更为适合。Tibco的子公司─Spotfire的S+产品高级主管Lou Bajuk-Yorgan说,该软件有不少用户主要是将其用于研究商业经营或工程条目如何有效或为什么失效。另外还有一个例子,则是用该软件分析天气模式,以确定安装风力发电机的最佳地点。
Erlang
你的服务器需要同步回应许多独立的并发信息吗?你需要把这些请求分发到不同的CPU或位于世界各地的服务器上吗?在实务上,这会是企业运算中最难定义的部分。而Erlang,由Ericsson Computing Laboratory科学家发明的开放原始码语言,则擅长处理这些任务。
这种语言把较少副作用的传统函数程序设计与用来编译生成机器码的现代虚拟机器结合在一起,其特殊的语言结构会强迫程序师,以易于扩展到多核和多机器上的方式撰写程序码。现在不仅有很多用Erlang来开发的Web服务器和CouchDB,而许多以JavaScript替代SQL语法来开发查询语句的数据库,也多半是使用Erlang来撰写。
CouchDB只是个开端,当前有许多处理“巨量数据”的方案管理者正构建具备强大延展性,并可存储大量数据的系统。如Hibari,这套来自Gemini行动公司的开放原始码方案条目,可提供失败后能自动恢复键值映射一致性,并具备相当延展性的保存丛集。而函数程序设计结构,则能使创建可同时有效处理多个连接的大型应用,变得更为简单。
Cobol
称Cobol为小众语言也许不太公平,因为它毕竟曾经一度是商业应用的主流语言。以在早期大型机上发现了第一个软件错误而闻名的Grace Murray Hoppe于1959年主持创建了这套语言,之后进行了几百次的改进,这使得今日的Cobol程序师可以使用对象导向扩展、自我修改的程序码,以及其他许多程序设计的噱头。
但这些改进并未使Cobol赢得某些圈子的尊重,正如著名的电脑科学家Edsger Dijkstra所言:“使用Cobol等于摧残心灵,其教学应视为刑事犯罪。”但大型主机厂商并不理会这一点,仍就在继续发展Cobol。如IBM发布的Cobol 4.2企业版,但它可以很容易地被编号为147.2甚至是588.3。Cobol程序师喜欢这门程序设计语言类似自然语言的语法,即由名词和动词构成从句和主句─一种可令人联想到Ruby的技术。
尽管很少有学校再给新程序师教授Cobol,但这种语言还是尚未退役,因为有不少公司仍在继续投资其Cobol应用。根据Dice.com求职网站的一次最近职位搜索显示,有580份工作提及Cobol,而1,070份提及Ruby。大部分的职位似乎涉及财务(资产管理)和门诊挂号统计(医疔资讯化)。虽然这是一些首先采用电脑进行幕后处理的领域,但有些工作仍然得需要人来处理。
运行在JVM或.net运行环境的Cobol版本,使得企业从大型主机移植程序码到Linux系统成为可能。想使用更便利的IDE集成式开发环境的Cobol程序师,可以查找Eclipse的外挂程序─这是一个有获得新支持的计划条目。
CUDA extensions
作为可程序化的显示卡大槼模平行作业的函式库,CUDA extensions并非纯技术意义上的语言;本质上它仅是C语言的延伸。不过,一些重量级程序师为了在游戏中喧染逼真的血液飞溅画面,开始尝试大槼模平行架构;而另一方面,这些大槼模平行运算再编码回圈的存在,也意味着程序设计师得重新考虑许多既有的C或C++基本程序设计槼则,这些都让CUDA extensions显得更有价值。
一般会采用CUDA extensions的场合有机器视觉、大量模拟和巨量统计运算等应用条目。而大槼模平行计算所自然造成的许多数据分析问题,则使得GPU运算潜力不容忽视。从Nvidia公司最近的一次研讨会上,我们可发现该公司正致力将CUDA的应用范围延伸到包括计算流体力学、电脑视觉、数据库和数据探勘、金融和分子动力学等利基市场。从那份长长的名单就足以解释:为什么它会让重量级程序师很感兴趣。
“很明显,GPU的发展已达地球逃逸速度。”(译注:地球逃逸速度即太空船飞离地球的最小初始速度,又称第二宇宙速度)。Dan Vivoli 说这句话的意思,是指GPU的应用已经不再局限于3D游戏等领域,而有了更广阔的发展空间。Nvidia的高级副总裁Dan Vivoli在Nvidia会议上说,在科学家发表了关于为什么GPU的平行电脑机制能在这些领域有效的论文后,“现在图形处理晶片的应用,应该已经遍布所有科学学科和工业领域。”