第1页 JVM不再只为Java服务
根据我们各自的视角及对具体问题的切身感受,编程世界的发展到底是过快还是过慢在不同人的眼中会有不同的结论。但无论大家的关注重心是Cobol应用还是Node.js破解,有一项事实没人能够否认,即:程序员必须始终紧跟不断发展变化着的编程技术趋势,否则就无法保持自己在这一活跃领域中的竞争力。
从随处可见的JavaScript到无所不包的JVM,时代与主流工具始终处于变化之中。程序员们的工作方式同样如此,多亏了框架与相关规范的出现,目前的发展方向开始摆脱一味追求开放性的误区。对于带宽、能耗以及可扩展性的关注使更多人开始从编程层面寻求解决方案,例如并行计算及显卡。这一切的一切都在我们身边迅猛发生,使得很多人对变化产生了恐惧感,甚至希望可以回到学校重新进修——只要那些传统的教学内容还能帮得上忙。
每隔一段时间,我们就要对进行编程工作所需要的方法及手段加以更新或是全盘替换,这有点像使用新的操作系统或是函数库。在本文中,我们将与大家分析十一大近来正在如火如荼发展着的技术趋势,借以共同把握编程领域的未来走向。
编程发展趋势第一位: JVM不再只为Java服务
在很久很久以前,Sun公司打造了Java并为全世界贡献了虚拟机这一宝贵财富。在微软推出C#语言的时候,人们意识到虚拟机本身在功能上并不局限于某一种语言。任何能够被转化为字节代码的内容都能在虚拟机上发挥应有的作用。
现在,似乎每个人都在为实现这一目的而着手构建自己的语言。将构建虚拟机方面的工作完全交给Sun/甲骨文公司,而将自己的主要精力放在语法与结构的种种细节上,这已经成为当下极为常见的开发态势。
因此,依附于JVM的语言正在不断增多。Ruby爱好者们乐于谈论JRuby在繁重负载下的良好工作状态。Scala与Cloture则可以让开发者们编写出的代码能够在同一套JVM中实现比Java更多的功能性及更快的运行速度。
甚至连Java的拥趸们也开始尝试使用JVM却抛开Java的做法。比如说Groovy,这是一款集合了JVM及Java API的脚本语言。利用Groovy进行缩略并同时采用Grails,大家就能够以类似Rails的编码规则进行工作。需要调用Java函数库?闹太套。Groovy自身的无缝工作设计让我们完全能够在不用大括号的前提下实现Java的全部功能性与稳定性。总之,有了它,妈妈再也不用担心我的编程。
编程发展趋势第二位: JavaScript 不再只为JavaScript
JVM并不是惟一一款向各类语言敞开大门的跨平台解决方案。JavaScript,这款过去常常被咱们的***妹用来为她的交友网站添加提示框的语言,现在也不再只局限于JavaScript编码的苑囿。比起目前各类繁多的精巧语言交叉编译器,JVM上的种种JavaScript实时引擎更是百花齐放。
以谷歌Web工具包来例。我们大可以像上个世纪九十年代在Swing框架上那样编写Java代码,只要通过GWT编译器的转换,结果就可以顺利运行于拥有JavaScript的台式机、智能手机或者平板设备的浏览器中。至于客户端上是否具备Java小程序插件或者JVM则完全不重要,因为浏览器中的JavaScript已经足以提供必要的支持功能。
CoffeeScript是这一领域中的后起之秀,这款缩略语言通过帮助讨厌输入各类标点符号的脚本语言用户自动插入必要符号将目标代码转换为JavaScript可识别的格式。这个主意可谓深得人心,因此现下已经出现了像Coco、Parsec-Coffee-Script以及Contracts-Coffee-Script等一系列衍生产品,其中每一款都拥有各具特色的精巧元编程结构,旨在允许用户更便捷地转换代码。
有些衍生产品太过成功,以至于它们自身几乎也成为另一种全新的语言。想象一下,众多Web开发者们只需利用jQuery敲出可用的代码,而完全不必理会什么JavaScript语言的系统知识,这一切是多么美好啊。
如果大家认为上述事例还不足以说明问题,不妨点击这个链接。这里有包括Ruby、Python、Lisp、Scheme、Haskell以及OCaml等几乎各种语言向JavaScript转换的范例。
第2页 代码永远不可能独善其身
编程发展趋势第三位: 代码永远不可能独善其身
有位朋友曾经告诉我,他曾在位于密歇根州北部由他父亲与叔叔亲手搭建的小屋中生活过一段时间。这一小片天地只属于他们自己,因为这里的一草一木、一砖一瓦都浸透他们的汗水。在那里,他们可以轻松地享受夕阳的抚慰并自由自在地沉浸在成就与自豪的情感当中。
编写程序曾经也是这样。按下编译按钮,那么转换过后,代码就会在我们的设备上有序运转。当然,它与操作系统层之间存在交互,但同时它也是实实在在的有形成果,正如朋友所拥有的小屋。快看这个.EXE文件,这是我独力完成的作品——在那段美好的时光中,我们完全可以这样骄傲地向朋友们宣布。
然而,这种特征正在消失。我们的代码越来越多地依赖于生态系统。举例来说,许多PHP程序员都只是在为WordPress、Drupal、Joomla或者其它什么框架创建插件。他们的代码总是同时也不得不以模块化形式出现,以保障与其它模块的并行运作。
有时具体的单位甚至更小,由代码片段缩小为字符串。例如不少Drupal模块就可以通过调整为PHP服务。程序员只需要将片段形式的代码填充进去即可,而无需单独创建任何新的内容。
当这一整套机制成为主导时,结果当然可能是积极的。但实际上,真正的结果往往喜忧参半。虽然大家使用的代码片段能够在引擎之下发挥作用,但随之而来的还有大量调试工作。在多数情况下,错误都来自系统的核心部位,那是我们完全意想不到的问题来源。而且关于这部分内容的文档资料也很少,因为基本没人指望程序员能以这样的深度剖析系统故障。
而在最极端的情况下,错误也许来自其他人所引用的代码片段。而且我们根本无法同时对二者同时进行调试,因为整套机制的基础正是大家各负其责,做好自己的部分。这时最好的解决方式往往是给对方打个电话,具体聊聊当前所遭遇的冲突。
这些工具常常作用于小型扩展及已经由框架原作者进行过加密的简单工具。采取其它任何方案对于紧迫的调试周期而言都是一种赌博行为。拿出一套有效的后备资源来代替现有代码,进而与自己的堆栈相结合进行读取及跟踪,这当然是不错的想法,然而这种通用方案也已经越来越稀缺。
编程发展趋势第四位: 围墙花园模式铺天盖地
这类紧密集成的代码堆栈同时带来了阴暗面,即:围墙花园。
互联网的起步是以高度开放性为前提的。每个数据包都应被顺利送往其目的地,而每位用户也理应在信息与数据的大地上恣意驰骋。然而,这一承诺正在日渐衰落,原因却不在于ISP(即互联网服务供应商)所努力打造的流量整理或是尝试数据包检测技术。
如今,每个人似乎都希望退回到围墙花园之中,因为这里的一切都安全而简单。如果大家打算为iPhone做点开发工作,那就必须遵守苹果所制定的那些含糊不清的规则,而且苹果——也只有苹果——能够决定是否允许该程序运行在其设备上。这一切我们身为程序员却无法自由把握,用户的意见也不再产生效力。
无独有偶,为Facebook制作游戏也同时意味着需要获得Facebook的相关权限,借以与其用户相连接。无论有多少用户表示喜欢我们的产品,只要Facebook不放话,一切就都成了浮云。说到这里,我们不得不提起微软。这家企业似乎在转瞬之间就变成了最具开放性而且限制条件最少的大公司,同时也在用户群中赢得了广泛的同情之声。他们对过去的成功表现得充满敬畏,并在面对司法部对IE浏览器的穷追猛打时露出一脸无辜。只有天真的程序员才会相信其它公司不会像微软一样再次上演扮猪吃老虎的闹剧。
围墙花园模式中还存在着更深层的弊端,这比丧失控制权要严重得多。围墙花园模式的供应商们对于独立软件开发者们通过劳动所获取的收入始终虎视眈眈。从他们手中漏给程序员们的利润也就只够维持私有服务器勉强运转。
这些自成体系的隔离手段同样使得整个编码世界根据所用语言的不同分裂成数个独立的阵营。只在一瞥之间,我们就可以看到程序员们正从具备独立个性的开放先行者沦为软件工厂中的受剥削者。欢迎来到围墙花园,希望大家早日习惯墙内的生活。
编程发展趋势第五位: 开放性的丧失
对于所有成功的开源软件来说,在细节处修补完善的特色正在逐渐过气。iPhone的成功在每个人心中种下了隔阂与闭塞的种子。当然,最新的车载计算机使用的是Linux系统,但希望大家不会天真地以为输入“安装”,这套东西就自己跑到你的车上了。
即使我们承认刹车系统被重新设置的确非常危险且骇人听闻,但导航系统难道就真的万无一失吗?汽车工业始终在鼓吹他们所选定的系统将如何与我们的手机紧密契合,但这套系统的开放程度仍然无法望桌面系统之项背。事实上目前所出现的一切新鲜事物恐怕都很难在开放性上达到过去桌面系统的水准。而且甚至连桌面系统也开始逐渐丧失自由,大家有没有想过,为什么Windows 8的安全启动架构要剥夺我们使用其它备用操作系统的权利?
这势必会影响到创新精神在未来的发展走向。在车库中埋头钻研的黑客及程序员们将不得不抛开令自己颇为自豪的开发成果,转而投身于那些碌碌无为的大众工作当中。失去了开源实验的动力将对售后市场造成毁灭性的打击。而且企业将越来越难以聘请到自身需要的人才,因为程序员们往往是在对开源软件的修补工作中成熟起来的,失去了培养技能的温床,他们将无法填补关键性的职位空缺。
不过话说回来,前途也并非一片漆黑。我们仍然能够看到一些振聋发聩的喜人特例,这种希望通常出现在程序员之间所共享的代码中。以Apache为例的某些项目始终茁壮成长着,并吸引到了充足的财政支持以支撑顶尖人才的引进。Github与SourceForge仍然在不断推出更多新项目,同时也不乏在尖端领域为开发者们开拓实验平台的系统。然而,纯开放式系统在终端客户群体中的大规模成功还是相当罕见,这似乎在很大程度上受到了主流专有制度的不良影响。
编程发展趋势第六位: 带宽不再免费
Web程序员在成长过程中始终相信带宽这东西既免费又会随着时代的前进而不断提速。我们也没必要为缓慢的下载时间而烦恼——不出一年,个人连接就会得到大幅强化,而问题也会迎刃而解。然而遗憾的是,这种好日子已然一去不复返,互联网服务供应商们,感谢你们定下的带宽上限以及各种坑爹的计费方式。
无论大家对那些通过破解攫取带宽进而破坏整体网络的家伙、占有整条连通线路并制定霸王条款的运营商以及按浏览次数计费的视频提供者采取何种态度,毋庸置疑的一点是,带宽正成为程序员们需要费心分神的一大消耗品。
这将彻底改变许多围绕云建立起来的机制,因为我们从自家计算机上发往云端的流量都会被纳入计费范畴。电台能够在保证我们正常收听的同时,从广告中获得必要的财务收入吗?在线备份又能否继续发挥作用?
在设计应用程序时充分考虑带宽消耗的优化正成为如今的当务之急。将JavaScript与CSS文件尽可能压缩所带来的不只是速度的提升;它同样会节省带宽。如果程序员不顺应这一趋势,那么他们所编写的代码在不久的将来也许会给用户带来更高的带宽使用费。
阅读(1229) | 评论(0) | 转发(0) |