开发技术之争第六位: JavaScript对 Dart与Go (或者说是对抗谷歌本身)
JavaScript也许在谷歌公司内部也拥有一部分坚定的支持者,但从技术巨头无休止地打造自有方案来看、我们丝毫体会不到其对于JavaScript的高度肯定与依赖。最初,谷歌拿出了GWT(即Google Web Toolkit),这是一款颇具智能特性的跨界式编译器,能够将Java代码转换为JavaScript。如果大家查看过Gmail或者其它谷歌产品的代码堆栈,就会发现其并非利用JavaScript进行手工编写。接下来,谷歌公司又创造出了Dart与Go两款编程语言,它们的诞生意义很明确——有朝一日在浏览器环境下彻底取代JavaScript。
Dart与Go二者都拥有正确的发展思路与存在价值。它们的作用在于修复JavaScript以及浏览器堆栈当中所固有的突出问题,但很多人对此表示并不在乎。JavaScript在服务器端已经获得了爆炸式的份额增长,而这完全要归功于Node.js。好了,这就是开发人员关注的一切——其它的,管它呢。
即使倾尽所有力量,谷歌也仍然面临着一场非常艰难的苦战。规模庞大的程序员群体很久以前就开始学习JavaScript,如今也有意愿利用这款语言对自己的服务器堆栈进行重写。要与人的习惯思维对抗真的非常困难,但或许早期采纳者们的赞扬之声以及Dart与Go那清晰的语法和简洁的模型真能让这两位后起之秀在群众中得到一定程度的关注——至少不会彻底被人们所忽视。
开发技术之争第七位: Chef对Puppet
很久以前,一家企业只需要在机房里部署几台服务器、并为其安装新软件即可,多么轻松、多么简便。然而云计算随后席卷而来,每一家网站——无论有无必要——都被迫运行规模庞大的设备集群,并为之配备更为强劲的维护团队。这意味着要在N台设备上重复N次同样的操作,但又不能出现任何误差或者纰漏。Chef与Puppet是两款已经拥有极高人气的工具,旨在帮助管理员们以统一化方式对大量云设备进行配置。
DevOps专家们对于Chef作为一款配置管理工具的卓越灵活性赞不绝口,它允许大家利用Ruby编写指令并实现设备创建。“大家可以轻松发挥Ruby的全部功能,”他们感叹道。Puppet的作用同样在于集群配置,但却专门使用一种类似于JSON的语言、希望能集中办好一类工作。尽管Puppet的新型版本也开始部分引入Ruby,但其基础语言仍然占据着统治地位。现在问题就在大家面前:到底是为任务创建一套定制化语法好呢,还是将一款受众广泛、用途多样的编程语言的一切能力(但也包括危险)直接塞给用户好?
开发技术之争第八位: Hudson对Jenkins
持续集成的核心思路在于以自动化方式对提供到资源库内的所有新代码进行测试与部署。而在这类方案收到良好效果之后,人们就开始对这笔宝贵的遗产加以争夺。此轮对抗的一方是Hudson,属于Eclipse基金会的官方分支项目,且由众多原本效力于Sun、后因收购而转投甲骨文旗下的技术人员负责运作。他们拥有一流企业所特有的审慎态度,构建出了一套稳定且值得信赖的企业级工具。
另一方则是Jenkins,众多技术人员最喜爱的实验性环境。Jenkins的发展节奏与前者相比要快得多,其几乎每个礼拜都会推出新版本。
这场Hudson与Jenkins之间的对抗象征着开发人员领域即将爆发的一场规模更大的争斗:一方是坚持对提交代码进行严格测试、重视稳定性的保守派,另一方则是重视快速开发、快速修复,希望能从规模化开发者社区获取更庞大代码贡献数量的激进派。
开发技术之争第九位: MySQL对MariaDB
说起甲骨文所支持项目面临的选择难题,我们就不能不提到MariaDB与MySQL之间的恩怨情仇。
当初甲骨文买下MySQL时,开源拥护者们担心这位以独断专行著称的红色巨人会打造出一款强大但专有的工具。尽管他们的担心在很大程度上并没有什么实质性依据,但这并没有阻止Monty Widenius——MySQL项目的创始人之一——从头开始建立自己的fork版本。
MariaDB所提供的语法与功能与MySQL几乎如出一辙,但现在它已经拥有众多新特性与存储引擎,能够带来更理想的运行速度——至少在MariaDb的支持者们看来是如此。
那么市场会选择斗志旺盛、充满活力的MariaDB,还是坚持规模庞大且多年以来一直占据主导地位的MySQL?全世界的开发人员会选择规模较小但创新能力极强的新生力量,还是稳固可靠的企业集团?
开发技术之争第十位: 编译对脚本
编译化与脚本化之间的区别并不像当初的即时编译器与优化器之间的差异那样明显,但这种不同在程序员们看来仍然非常重要。他们希望自己的代码被剖析、调整、优化并翻译成更为简单的机器码?还是更希望以相对轻松的方式让计算机在运行时中进行代码解释——仅仅偶尔允许代码对自身进行修改?
一方面的代表性角色有C以及Java等经典语言,它们拥有精巧的开发套件作为支持。另一方面的代表性角色则是Python、Ruby以及JavaScript等精简化脚本语言,它们能够在文本编辑器内完成创建并立即被推送至小型运行时解释器当中。而令情况进一步复杂化的是,Groovy这类混合解决方案能够以脚本类语言的姿态运行在Java虚拟机当中,而且它本身就是一款能够对运行时进行高度优化的工具。也许二者之间的区别正在逐步弱化,但这并不能阻止人们就此作出争论、探讨编译器费尽心力完成的工作到底是否拥有实际价值。