Infoworld编程领域的十一大发展趋势

从随处可见的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语言的系统知识,这一切是多么美好啊。
如果大家认为上述事例还不足以说明问题,不妨点击这个链接。这里有包括RubyPythonLisp、Scheme、Haskell以及OCaml等几乎各种语言向JavaScript转换的范例。

编程发展趋势第三位: 代码永远不可能独善其身
有位朋友曾经告诉我,他曾在位于密歇根州北部由他父亲与叔叔亲手搭建的小屋中生活过一段时间。这一小片天地只属于他们自己,因为这里的一草一木、一砖一瓦都浸透他们的汗水。在那里,他们可以轻松地享受夕阳的抚慰并自由自在地沉浸在成就与自豪的情感当中。
编写程序曾经也是这样。按下编译按钮,那么转换过后,代码就会在我们的设备上有序运转。当然,它与操作系统层之间存在交互,但同时它也是实实在在的有形成果,正如朋友所拥有的小屋。快看这个.EXE文件,这是我独力完成的作品——在那段美好的时光中,我们完全可以这样骄傲地向朋友们宣布。
然而,这种特征正在消失。我们的代码越来越多地依赖于生态系统。举例来说,许多PHP程序员都只是在为WordPress、Drupal、Joomla或者其它什么框架创建插件。他们的代码总是同时也不得不以模块化形式出现,以保障与其它模块的并行运作。
有时具体的单位甚至更小,由代码片段缩小为字符串。例如不少Drupal模块就可以通过调整为PHP服务。程序员只需要将片段形式的代码填充进去即可,而无需单独创建任何新的内容。
当这一整套机制成为主导时,结果当然可能是积极的。但实际上,真正的结果往往喜忧参半。虽然大家使用的代码片段能够在引擎之下发挥作用,但随之而来的还有大量调试工作。在多数情况下,错误都来自系统的核心部位,那是我们完全意想不到的问题来源。而且关于这部分内容的文档资料也很少,因为基本没人指望程序员能以这样的深度剖析系统故障。
而在最极端的情况下,错误也许来自其他人所引用的代码片段。而且我们根本无法同时对二者同时进行调试,因为整套机制的基础正是大家各负其责,做好自己的部分。这时最好的解决方式往往是给对方打个电话,具体聊聊当前所遭遇的冲突。
这些工具常常作用于小型扩展及已经由框架原作者进行过加密的简单工具。采取其它任何方案对于紧迫的调试周期而言都是一种赌博行为。拿出一套有效的后备资源来代替现有代码,进而与自己的堆栈相结合进行读取及跟踪,这当然是不错的想法,然而这种通用方案也已经越来越稀缺。

编程发展趋势第四位: 围墙花园模式铺天盖地

这类紧密集成的代码堆栈同时带来了阴暗面,即:围墙花园。

互联网的起步是以高度开放性为前提的。每个数据包都应被顺利送往其目的地,而每位用户也理应在信息与数据的大地上恣意驰骋。然而,这一承诺正在日渐衰落,原因却不在于ISP(即互联网服务供应商)所努力打造的流量整理或是尝试数据包检测技术。

如今,每个人似乎都希望退回到围墙花园之中,因为这里的一切都安全而简单。如果大家打算为iPhone做点开发工作,那就必须遵守苹果所制定的那些含糊不清的规则,而且苹果——也只有苹果——能够决定是否允许该程序运行在其设备上。这一切我们身为程序员却无法自由把握,用户的意见也不再产生效力。

无独有偶,为Facebook制作游戏也同时意味着需要获得Facebook的相关权限,借以与其用户相连接。无论有多少用户表示喜欢我们的产品,只要Facebook不放话,一切就都成了浮云。说到这里,我们不得不提起微软。这家企业似乎在转瞬之间就变成了最具开放性而且限制条件最少的大公司,同时也在用户群中赢得了广泛的同情之声。他们对过去的成功表现得充满敬畏,并在面对司法部对IE浏览器的穷追猛打时露出一脸无辜。只有天真的程序员才会相信其它公司不会像微软一样再次上演扮猪吃老虎的闹剧。

围墙花园模式中还存在着更深层的弊端,这比丧失控制权要严重得多。围墙花园模式的供应商们对于独立软件开发者们通过劳动所获取的收入始终虎视眈眈。从他们手中漏给程序员们的利润也就只够维持私有服务器勉强运转。

这些自成体系的隔离手段同样使得整个编码世界根据所用语言的不同分裂成数个独立的阵营。只在一瞥之间,我们就可以看到程序员们正从具备独立个性的开放先行者沦为软件工厂中的受剥削者。欢迎来到围墙花园,希望大家早日习惯墙内的生活。

编程发展趋势第五位: 开放性的丧失

对于所有成功的开源软件来说,在细节处修补完善的特色正在逐渐过气。iPhone的成功在每个人心中种下了隔阂与闭塞的种子。当然,最新的车载计算机使用的是Linux系统,但希望大家不会天真地以为输入“安装”,这套东西就自己跑到你的车上了。

即使我们承认刹车系统被重新设置的确非常危险且骇人听闻,但导航系统难道就真的万无一失吗?汽车工业始终在鼓吹他们所选定的系统将如何与我们的手机紧密契合,但这套系统的开放程度仍然无法望桌面系统之项背。事实上目前所出现的一切新鲜事物恐怕都很难在开放性上达到过去桌面系统的水准。而且甚至连桌面系统也开始逐渐丧失自由,大家有没有想过,为什么Windows 8的安全启动架构要剥夺我们使用其它备用操作系统的权利?

这势必会影响到创新精神在未来的发展走向。在车库中埋头钻研的黑客及程序员们将不得不抛开令自己颇为自豪的开发成果,转而投身于那些碌碌无为的大众工作当中。失去了开源实验的动力将对售后市场造成毁灭性的打击。而且企业将越来越难以聘请到自身需要的人才,因为程序员们往往是在对开源软件的修补工作中成熟起来的,失去了培养技能的温床,他们将无法填补关键性的职位空缺。

不过话说回来,前途也并非一片漆黑。我们仍然能够看到一些振聋发聩的喜人特例,这种希望通常出现在程序员之间所共享的代码中。以Apache为例的某些项目始终茁壮成长着,并吸引到了充足的财政支持以支撑顶尖人才的引进。Github与SourceForge仍然在不断推出更多新项目,同时也不乏在尖端领域为开发者们开拓实验平台的系统。然而,纯开放式系统在终端客户群体中的大规模成功还是相当罕见,这似乎在很大程度上受到了主流专有制度的不良影响。

编程发展趋势第六位: 带宽不再免费

Web程序员在成长过程中始终相信带宽这东西既免费又会随着时代的前进而不断提速。我们也没必要为缓慢的下载时间而烦恼——不出一年,个人连接就会得到大幅强化,而问题也会迎刃而解。然而遗憾的是,这种好日子已然一去不复返,互联网服务供应商们,感谢你们定下的带宽上限以及各种坑爹的计费方式。

无论大家对那些通过破解攫取带宽进而破坏整体网络的家伙、占有整条连通线路并制定霸王条款的运营商以及按浏览次数计费的视频提供者采取何种态度,毋庸置疑的一点是,带宽正成为程序员们需要费心分神的一大消耗品。

这将彻底改变许多围绕云建立起来的机制,因为我们从自家计算机上发往云端的流量都会被纳入计费范畴。电台能够在保证我们正常收听的同时,从广告中获得必要的财务收入吗?在线备份又能否继续发挥作用?

在设计应用程序时充分考虑带宽消耗的优化正成为如今的当务之急。将JavaScript与CSS文件尽可能压缩所带来的不只是速度的提升;它同样会节省带宽。如果程序员不顺应这一趋势,那么他们所编写的代码在不久的将来也许会给用户带来更高的带宽使用费。

编程发展趋势第七位: 能源同样不再免费

保证计算机设备运作所带来的成本过去曾一度可以忽略不计。那时我们的服务器机架无论消耗掉多少能源,最终拿到手上的缴费单永远不会吓人一跳,因此根本没人在乎这方面的开销。

然而一切都改变了——能源消费成了一项重大问题,无论大家是为智能手机还是为服务器群开发程序,这都成了需要认真对待的关键性指标。我就有一部Android手机,其最大的局限在于,就算啥任务也不处理,它的待机时间也只有八个小时。如果大家设计出一款比GPS功能耗电速度更快的应用程序,那毫无疑问它的下载量将会惨不忍睹。

服务器程序员对这个问题可能认识不深,因为在他们眼中降低能耗似乎与自己扯不上关系。他们对于处理速度颇为慎重,但对数据库处理过程所带来的能源成本则知之甚少。谷歌在这个问题上属于走在时代前沿的几家企业之一,他们在寻找低成本能源方面投入了大量资金以支持大量的搜索活动。看起来该公司似乎在以单独的搜索活动为单位计算能源消耗,并量度其所能带来的广告收益,进而协调整套搜索服务的投入产出比。

云计算则将这一问题进一步推上台面。那些相比之下更为复杂的云——例如谷歌App Engine或是Amazon S3——不以机架或是启动密码数量计费。它们采用的是以数据库提交及查询量为单位,尽管这给大多数程序员带来了新的挑战,但不可否认,这样的机制使能源成本更加趋于透明化。在它们的推动下,大家会开始习惯于认真考虑每个子程序所带来的支出,而不是仅仅关注代码行或者毫秒级的执行时间。

编程发展趋势第八位: 传统教育方式已经不再重要

问起任何一位项目管理者,他们都会抱怨顶级计算机科学部门缺乏足够的人才。到目前为止,他们可能仍然愿意在不考虑简历是否精彩的情况下从一流高校中聘请一位主修文职专业的学生。但一旦讨论起一位来自同所学校、但已经步入中年的编程求职者,管理者们往往顾左右而言他,最多扔下一句“请等待电话通知”。

事实上,不少首要技术公司都在向美国国会抱怨,声称他们不仅无法从美国公民中找到足够多的编程专家,同时也很难在与大龄名校程序员之间关于年龄歧视的诉讼中赢得胜利。

这种现象可能说明,教育经历的附加值已经逐渐淡出企业的主流价值观。年纪较长且具备同等教育背景的员工们曾经是业内炙手可热的人才,但如今他们却反映,企业只喜欢年轻且没有家庭拖累的新员工,因为这个群体能够胜任更多加班工作。由此我们不禁想到,也许新鲜的本科学历能否令人满意并非重点,企业所真正看重的是年轻所带来的较低的薪酬期望。

有些企业则直接跳过这类问题,将四年制高校学习简单视为制约市场发展的一项扭曲规则。风险投资商人们往往愿意为那些忽略了本科教育的潜力型人才提供资金,而另一些企业则正在积极招募拥有特殊技能的员工,并通过集中培训的方式帮他们迅速掌握工作所必需的实用性技能。在他们眼中,高校课程中常见的理论分析能力几乎没有什么价值。

对于传统高校教育摒弃程度最深的莫过于PayPal创始人Peter Thiel所采取的方案。他大量招聘那些刚刚从高中毕业的年轻人,并为他们提供“一站式”高校教育,以培养顶尖编程人才。孩子们得到了工作,而Peter Thiel也拥有了众多年轻且极具可塑性的骨干力量。

另一些人更关注普通高校那令人错愕的学费增长上,认为短期而更有针对性的集中式教育具有更为积极的经济意义。一位有着四十年职场经验的顶级高校毕业生每个月会给我们带来1500美元的纯教育支出(也就是25万美元薪水的6.8%),相比之下充分利用供应商的网上课程与培训则能够显著降低这一成本。

《Fast Company》一书中曾收录了这样一篇文章,其中涉及一个问题,即“为什么要在二者实际工作能力对等的情况下,优先雇用一位博士而非自学成才的少年?”紧接着,文章通过阐述企业可资借鉴的实习方案回答了这一问题。事实证明,只要培养得当,就算没有花哨的学历,企业照样能够获得真正的人才。

编程发展趋势第九位: 准确性要求削弱,可扩展性高于一切

多年以前,ACID主导着数据库领域。挑战在于建立一套坚不可摧的系统,以保证每条查询都得到准确且一致的响应。飓风、核武器抑或是管理者的错误插拔都不应该对数据库造成影响。使用这类服务的大客户包括银行、酒店以及航空公司,而他们最看重的就是银行账户以及预定信息的一致性与准确性。

时至今日,业界的工作重心转移到了寻求一种简便的方式,借以存储我们生活中所涉及的点点滴滴。从我们曾经游历过的地方到与朋友们之间争论的话题,将当下世界上每个人的所有细节以快速且有效的手段记录在案才是专家们的终极目标。

在处理这一问题的过程中,那些最具才智的人们很快意识到,恰当地抛弃干扰因素、忽略非关键性条件才是真正简化工作的不二法门。如果某些状态更新消失了,哪些人会注意到?如果某些人在使用查询服务选择了一家咖啡厅后,却没能得到与期望一致的接待,那可能也没什么大不了的,因为他们可能日后还会再次光临。在新一代数据管理者意识到他们可以通过降低对准确性的要求来大幅节约计算周期及相关基础设施的建设开支后,NoSQL及其它类似的数据存储机制也就应运而生了。

现在,摒弃对Web准确性的要求成为缩减处理时间及资金投入的优先方案。大家不妨尝试用一些以Web为基础的工具搜索一下老旧的邮件消息,结果是,这些工具往往会偷偷忽略掉一些陈旧内容。这一现象反映出搜索标准正在经受的缓慢侵蚀。就拿谷歌为例,他们悄悄取消了使用加号进行逻辑搜索这一功能。一旦数据库管理员之间达成共识,我们肯定会看到越来越多的Web工程师用各种掩人耳目的方法巧妙地逐步放弃对准确性的执著追求。

编程发展趋势第十位: 真正的并行架构开始付诸实践

计算机架构师们已经花数年时间讨论如何在设备中引入真正的并行机制,但担当前锋角色的程序员们却刚刚得到工具,为这一设想付诸实践而着手工作。

并行技术突出作用于两大领域:多节点数据库与Hadoop作业。当然在某些情况下二者之间也互有交集。

大多数NoSQL数据存储系统用于帮助我们将大量工作负载分摊给多台计算机。有些提供自动分区,用于将数据集划分成块、将指定块同步至目标计算机并且在必要时直接查询拥有对应内容的设备;另一些则提供复制或备份功能,此类功能相对比较传统。当然也不乏二者兼而有之的系统。

Hadoop是一款开源框架,能够协调数台计算机共同处理同一问题,并将全部答案整合起来,并编译成一种统一的结果。该项目在一定程度上模仿了由谷歌开发的Map/Reduce框架,后者主要用于同步信息搜集系统,但Hadoop的发展前景无疑比这些前辈要光明得多。

此类工具让多设备协作处理同一问题的能力得到大幅增强。如今的基础设施非常牢固,足以让企业架构师们在略加点拨与稍有困扰的情况下,成功完成对大量设备机架的部署。

编程发展趋势第十一位: GPU压倒CPU

就在几年之前,CPU芯片制造商还是这个世界上赚钱最容易的企业之一。然而随着图形处理器的市场认可度不断攀升,那段美好的时光也转瞬即逝了。现在我们经常看到一些小朋友在整套计算机设备与操作系统上花上三百美元,却愿意为一块发烧级显卡砸上六百美元。

游戏爱好者并不是痴迷于显卡的惟一群体。那些需要高功率计算能力的科学家们也在对GPU进行重新编程,用以分析蛋白质折叠结构或是猜测最小粒子单位的秘密。英伟达公司还为针对非玩家群体打造的设备召开了数次重要会议,他们为那些想要打造超级计算机的科学家奉上了极为贴心的显卡产品。美国橡树岭国家实验室计划在一台超级计算机上安置一万八千个来自英伟达公司的Tesla GPU,在这种强力加持之下,这台设备预计将登上世界计算机五百强的冠军宝座。不过他们同时也得为能源部提供一套精致的模型,以阐释整套体系的运作状态及能耗情况;毕竟这样一套怪物级设备同时也如同在只硕大无朋的电老虎,光靠玩反恐能跑多少帧可说服不了政府的官员们。

你可能感兴趣的:(Infoworld编程领域的十一大发展趋势)