到底开发者需要掌握多少门语言?
诸如Apple、非死book及Google这样的大公司正在开发他们自己的编程语言,开发者们被迫只有适应。前不久的世界开发者大会上,Apple公布了它的新开发语言Swift。这是最近大型技术公司们开发的一大波新语言中的最新成员,这些新语言某种程度上都是专门应用于他们自己的平台。
对iOS开发者,Apple有Swift;而非死book 有 Hack —— 一门用于后端开发的语言。与此同时,Google已经拥有了它自己的Javascript替代者 Dart,以及一门新的通用编程语言Go。
这一波又一波的新语言,给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事Adriana Lee在Apple发布Swift后所说:
(开发者们到底还得学习多少门语言?) ——Adriana Lee (@adra_la) June 2, 2014
计算机语言的通天塔
目前已经存在的编程语言有数百种,同时还有更多的语言正在涌现。其中许多都是被设计用在相对较窄的应用程序范围内,大多数甚至从未走出过项目小组的范围。
与此类似,大技术公司开发的新语言其实也是伴随着公司一起成长的。通用语言的鼻祖,C语言,就源于上世纪70年代初的AT&T贝尔实验室。Java,目前作为Android app开发的主要语言,诞生于上世纪90年代Sun公司的Microsystems系统。
发 展到现在,不同之处在于,公司们拥抱新语言、从而想要延伸的特定商业目标的范围不一样了 —— 这一过程同时建立了一个忠心耿耿的开发者基础,他们被牢牢锁定在了某个公司的特定平台上。这类一石二鸟的战略,最早可以追溯到Sun对Java的采用,当 时公司就将其作为了挑战微软PC桌面统治地位的一种手段。(事情虽然没有像Sun计划的那样发展下去,但在Google转向Android之前,Java 大体上也算是在企业中间件系统中找到了自己的一席之地。)
这么看来,Apple的Swift其目标也就很明确了。Swift应该不会辜负公 司前期的大肆宣传,通过磨平Objective-C那粗糙的毛边,看起来它能够成功简化iOS app开发者的开发过程。但是同样还是这些开发者,他们却需要学习一门新语言的输入和输出,而这些功能很可能在其他地方都不会用到。
大公司们为什么要重复造轮子
“不要重复造轮子”这一哲学在绝大多数开发者心中根深蒂固,大公司们对此却并不买账。那他们为何不只是修改下现有语言用于新的用途呢?
答案很简单,公司们发明他们自己的语言,是因为他们有这个能力。设计一门新语言可能很复杂,但对资源要求却并不很高。困难之处也就在对其提供支持,包括提供软件资源(共享代码库、API、编译器、文档等)以及赢得开发者的支持。大公司们在这两方面尤其擅长。
还有一个事实,现有语言通常很难硬塞进如今的复杂代码框架中。举个栗子,非死book决定发明的Hack,就是一个普遍适用于Web开发的脚本语言PHP的超集合(superset)。
非死book 的Hack最近已经比较普遍,其主要目标就是改进代码的稳定性,针对这一目的,它强制在程序运行之前对数据类型进行检测。这样的检测确保了一个程序,比方 说,不会将一个整数解析为一个字符串,这样的错误如果捕获不到很可能会导致不可预知的后果。在Hack中,这些检测会预先执行,以便程序员能够在程序上线 前早早发现这样的错误。
据非死book的Hack项目组核心成员Julien Verlaguet透露,公司之前尝试过用一门现有语言实现更高效的编程。但是非死book的大部分代码都是由PHP编写的,公司实际上已经建立了一 个支持PHP及其分支的软件架构。即使能够让PHP同其他语言编写的代码协同工作,实现的难易程度和运行速度都无法满足要求。
“比如说我们 尝试用Scala重写PHP代码库,”Verlaguet说。“Scala是一门设计优秀的漂亮语言,但是它与PHP完全不兼容。每次我需要从Scala 的代码库部分调用PHP的时候,都会损失性能。我们很愿意使用一门现有语言,但是对于我们来说,这条路行不通。”
于是,非死book发明了Hack,它与PHP一样能够共用公司现有的架构。Verlaguet介绍说,非死book的代码库主体已经从PHP迁移到了Hack,同时公司将Hack开源,希望独立开发者们能够帮公司找到非死book以外的用途。
“你仍然可以使用PHP,”他说,“但是我们希望你有使用Hack的欲望。”
谁说了算
公司和开发者之间有一种微妙的平衡。公司可以按照自己的喜好发明语言。但是如果开发者都不愿使用这门语言,那就没人用了,公司以外的人也就没人愿意将自己的职业生涯托付给这家公司。
公 司在开发过程中同时使用不同的语言,这并不少见。例如,你可能用Objective-C开发iOS app,但却用Java开发Android app。对开发者来说,这从来都不是症结所在,因为Objective-C和Java都是通用面向对象语言。它们用途广泛适用于很多场合。
然 而,Hack、Dart、Go和Swift,到目前为止,仍然只适用于严格特定公司的编程解决方案,往往和公司选择的编程环境相对应。诚然,现在下结论可 能还太早。比方说Hack,就可以用在一些后端的实现中;它只是太新了,以至于非死book还没有任何数据供人们如此使用。
不是开发者 不能学习多门语言。事实上,大多数人已经掌握了多门语言。这好比罗曼斯语(一种由拉丁语演变而成的语言),如果你会说西班牙语,再去学法语就比那些不会西 班牙语的人简单许多。与此类似,如果你已经会Java,再学Ruby或Perl就简单得多。如果你会PHP,基本上就已经学会了Hack。
与此相反,学习多门语言更多的是一个习惯问题。如果Java已经解决了你的问题,你就不再有动力去学Ruby。如果你用Objective-C编写iOS app感觉很爽,你就不会有强烈的意愿去学Swift。
另外,对于一些开发者来说,封闭生态系统的语言只会使每个人的生活变得更糟。例如,自由设计师Jack Watson-Hamblin就告诉我说,像Apple这样强势推出Swift,其实是在冒险增加程序员的负担,同时将开发者社区割裂开来:
程序员掌握多门语言固然重要,但是不断强迫他们紧跟新语言,却是行不通的。如果我正在开发一个简单的跨平台app,我可不想被迫掌握四门语言再来完成它。如果真的需要,我也只想使用一门语言。
Watson- Hamblin就主张说,当每家公司都为了自家需要发明自己的语言时,程序员的注意力被分散,开发的视野也局限于一种,这只会拖慢整个开发进程。他说, “如果拿公司负责一门语言与负责一个开源社区相比较,这两者的区别就好比一家大企业与一个初创小公司的区别”。社区生来就更加灵活,适应能力更强。
当然,Apple有许多非常好的理由推出Swift从零开始,就像当初非死book发明Hack的时候一样。我并不是说,大公司不会强迫开发者接受这种改变,在这方面,有些公司一直都很让人讨厌。
“新语言的发明,伴随着霸权的支配,”Verlaguet说,“被迫不停追赶,确实令人沮丧,但另一方面,你又多了一种解决问题的新语言。反过来想想,要是全世界的程序员都用同样一门语言做所有事情,即使啥都凑合着能干,这门语言也一定干得不怎么样”。
题图来自于Flickr user Ruiwen Chua,CC 2.0