到底开发者需要掌握多少门语言？
诸如Apple、Facebook及Google这样的大公司正在开发他们自己的编程语言，开发者们被迫只有适应。  前不久的世界开发者大会上，Apple公布了它的新开发语言Swift。这是最近大型技术公司们开发的一大波新语言中的最新成员，这些新语言某种程度上都是专门应用于他们自己的平台。 对iOS开发者，Apple有Swift；而Facebook 有 Hack  一门用于后端开发的语言。与此同时，Google已经拥有了它自己的Javascript替代者 Dart，以及一门新的通用编程语言Go。 这一波又一波的新语言，给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事Adriana
编程语言 程序员
58.59.12.51
原文还是没有追到根子上去，现在计算机语言的热潮，源于微软种下的祸根，微软office就是个典型的恶之代表，但是赢利颇丰！一个个新的计算机语言，其实就是一个个程序员级别的office，都在圈地。。。谁能把自己圈成微软规模呢？
微博评论
2014-07-04T20:03:02.000
175.162.122.7
@RealCharlie 哥！我在IT也搞技术超过30年了！都不敢妄言这事！就您？嘛您都敢掰啊！您说！您是勇者无畏啊？还是无知者无畏啊？
微博评论
2014-07-04T20:33:00.000
175.162.122.7
若说您搞医学超过30年，我会倏然起敬，若说您搞IT超过30年，我会嗤之以鼻！IT技术日新月异，各领风骚三五载的技术已属牛叉，30年前？您老586啊。。。//@无偿献血享受拯救生命的快乐: @RealCharlie 哥！我在IT也搞技术超过30年了！都不敢妄言这事！就您？嘛您都敢掰啊！您说！您是勇者无畏啊？
微博评论
2014-07-04T20:33:00.000
175.162.122.7
[挖鼻屎]
微博评论
2014-07-04T20:33:00.000
183.208.99.39
@韩--某人 感觉你会感兴趣。不用谢谢我[偷乐][偷乐][偷乐]
微博评论
2014-07-04T21:33:02.000
220.181.51.45
回复@Linux中国:[哈哈]你仔细看看@RealCharlie 的微就知道了！
微博评论
2014-07-04T22:33:01.000
58.62.42.72
以物造物，为己所用
文剑一飞
2014-07-05T09:11:35.000
113.204.117.138
没得法子呀，现状如此~
tenght
2014-07-07T11:14:35.000
169.145.197.12
What?
2014-07-08T08:44:20.000
诸如Apple、Facebook及Google这样的大公司正在开发他们自己的编程语言，开发者们被迫只有适应。  前不久的世界开发者大会上，Apple公布了它的新开发语言Swift。这是最近大型技术公司们开发的一大波新语言中的最新成员，这些新语言某种程度上都是专门应用于他们自己的平台。 对iOS开发者，Apple有Swift；而Facebook 有 Hack  一门用于后端开发的语言。与此同时，Google已经拥有了它自己的Javascript替代者 Dart，以及一门新的通用编程语言Go。 这一波又一波的新语言，给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事Adriana
![](/data/attachment/album/201407/04/161902f8zrltgzvjg4vbe4.jpg)



> 
> 诸如Apple、Facebook及Google这样的大公司正在开发他们自己的编程语言，开发者们被迫只有适应。
> 
> 
> 


前不久的世界开发者大会上，Apple公布了它的新开发语言[Swift](https://developer.apple.com/swift/)。这是最近大型技术公司们开发的一大波新语言中的最新成员，这些新语言某种程度上都是专门应用于他们自己的平台。


对iOS开发者，Apple有Swift；而[Facebook 有 Hack](http://readwrite.com/2014/03/20/facebook-new-programming-language-hack) —— 一门用于后端开发的语言。与此同时，Google已经拥有了它自己的Javascript替代者 Dart，以及一门新的通用编程语言Go。


这一波又一波的新语言，给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事[Adriana Lee](http://readwrite.com/author/adriana-lee#awesm=%7EoGfPbJlSrFBamJ)在Apple发布Swift后所说：



> 
> （开发者们到底还得学习多少门语言？） ——Adriana Lee (@adra\_la) [June 2, 2014](https://twitter.com/adra_la/statuses/473537386266112000)
> 
> 
> 


### 计算机语言的通天塔


目前已经存在的[编程语言有数百种](http://en.wikipedia.org/wiki/List_of_programming_languages)，同时还有更多的语言正在涌现。其中许多都是被设计用在相对较窄的应用程序范围内，大多数甚至从未走出过项目小组的范围。


与此类似，大技术公司开发的新语言其实也是伴随着公司一起成长的。[通用语言的鼻祖，C语言](http://en.wikipedia.org/wiki/C_(programming_language))，就源于上世纪70年代初的AT&T贝尔实验室。Java，目前作为Android app开发的主要语言，诞生于上世纪90年代[Sun公司的Microsystems系统](http://en.wikipedia.org/wiki/Java_(programming_language))。


发展到现在，不同之处在于，公司们拥抱新语言、从而想要延伸的特定商业目标的范围不一样了 —— 这一过程同时建立了一个忠心耿耿的开发者基础，他们被牢牢锁定在了某个公司的特定平台上。这类一石二鸟的战略，最早可以追溯到Sun对Java的采用，当时公司就将其作为了挑战微软PC桌面统治地位的一种手段。（事情虽然没有像Sun计划的那样发展下去，但在Google转向Android之前，Java大体上也算是在企业中间件系统中找到了自己的一席之地。）


这么看来，Apple的Swift其目标也就很明确了。Swift应该不会辜负公司前期的大肆宣传，通过磨平Objective-C那粗糙的毛边，看起来它能够成功简化iOS app开发者的开发过程。但是同样还是这些开发者，他们却需要学习一门新语言的输入和输出，而这些功能很可能在其他地方都不会用到。


### 大公司们为什么要重复造轮子


“不要重复造轮子”这一哲学在绝大多数开发者心中根深蒂固，大公司们对此却并不买账。那他们为何不只是修改下现有语言用于新的用途呢？


答案很简单，公司们发明他们自己的语言，是因为他们有这个能力。设计一门新语言可能很复杂，但对资源要求却并不很高。困难之处也就在对其提供支持，包括提供软件资源（共享代码库、API、编译器、文档等）以及赢得开发者的支持。大公司们在这两方面尤其擅长。


还有一个事实，现有语言通常很难硬塞进如今的复杂代码框架中。举个栗子，[Facebook决定发明的Hack](http://readwrite.com/2014/03/20/facebook-new-programming-language-hack)，就是一个普遍适用于Web开发的[脚本语言PHP](http://en.wikipedia.org/wiki/PHP)的超集合（superset）。


Facebook的Hack最近已经比较普遍，其主要目标就是改进代码的稳定性，针对这一目的，它强制在程序运行之前对数据类型进行检测。这样的检测确保了一个程序，比方说，不会将一个整数解析为一个字符串，这样的错误如果捕获不到很可能会导致不可预知的后果。在Hack中，这些检测会预先执行，以便程序员能够在程序上线前早早发现这样的错误。


据Facebook的Hack项目组核心成员Julien Verlaguet透露，公司之前尝试过用一门现有语言实现更高效的编程。但是Facebook的大部分代码都是由PHP编写的，公司实际上已经建立了一个支持PHP及其分支的软件架构。即使能够让PHP同其他语言编写的代码协同工作，实现的难易程度和运行速度都无法满足要求。


“比如说我们尝试用Scala重写PHP代码库，”Verlaguet说。“Scala是一门设计优秀的漂亮语言，但是它与PHP完全不兼容。每次我需要从Scala的代码库部分调用PHP的时候，都会损失性能。我们很愿意使用一门现有语言，但是对于我们来说，这条路行不通。”


于是，Facebook发明了Hack，它与PHP一样能够共用公司现有的架构。Verlaguet介绍说，Facebook的代码库主体已经从PHP迁移到了Hack，同时公司将Hack开源，希望独立开发者们能够帮公司找到Facebook以外的用途。


“你仍然可以使用PHP，”他说，“但是我们希望你有使用Hack的欲望。”


### 谁说了算


公司和开发者之间有一种微妙的平衡。公司可以按照自己的喜好发明语言。但是如果开发者都不愿使用这门语言，那就没人用了，公司以外的人也就没人愿意将自己的职业生涯托付给这家公司。


公司在开发过程中同时使用不同的语言，这并不少见。例如，你可能用Objective-C开发iOS app，但却用Java开发Android app。对开发者来说，这从来都不是症结所在，因为Objective-C和Java都是通用面向对象语言。它们用途广泛适用于很多场合。


然而，Hack、Dart、Go和Swift，到目前为止，仍然只适用于严格特定公司的编程解决方案，往往和公司选择的编程环境相对应。诚然，现在下结论可能还太早。比方说Hack，就可以用在一些后端的实现中；它只是太新了，以至于Facebook还没有任何数据供人们如此使用。


不是开发者不能学习多门语言。事实上，大多数人已经掌握了多门语言。这好比罗曼斯语（一种由拉丁语演变而成的语言），如果你会说西班牙语，再去学法语就比那些不会西班牙语的人简单许多。与此类似，如果你已经会Java，再学Ruby或Perl就简单得多。如果你会PHP，基本上就已经学会了Hack。


与此相反，学习多门语言更多的是一个习惯问题。如果Java已经解决了你的问题，你就不再有动力去学Ruby。如果你用Objective-C编写iOS app感觉很爽，你就不会有强烈的意愿去学Swift。


另外，对于一些开发者来说，封闭生态系统的语言只会使每个人的生活变得更糟。例如，自由设计师Jack Watson-Hamblin就告诉我说，像Apple这样强势推出Swift，其实是在冒险增加程序员的负担，同时将开发者社区割裂开来：



> 
> 程序员掌握多门语言固然重要，但是不断强迫他们紧跟新语言，却是行不通的。如果我正在开发一个简单的跨平台app，我可不想被迫掌握四门语言再来完成它。如果真的需要，我也只想使用一门语言。
> 
> 
> 


Watson-Hamblin就主张说，当每家公司都为了自家需要发明自己的语言时，程序员的注意力被分散，开发的视野也局限于一种，这只会拖慢整个开发进程。他说，“如果拿公司负责一门语言与负责一个开源社区相比较，这两者的区别就好比一家大企业与一个初创小公司的区别”。社区生来就更加灵活，适应能力更强。


当然，Apple有[许多非常好的理由推出Swift从零开始](http://blog.erratasec.com/2014/06/why-it-had-to-be-swift.html#.U58BJI1dXtA)，就像当初Facebook发明Hack的时候一样。我并不是说，大公司不会强迫开发者接受这种改变，在这方面，有些公司一直都很让人讨厌。


“新语言的发明，伴随着霸权的支配，”Verlaguet说，“被迫不停追赶，确实令人沮丧，但另一方面，你又多了一种解决问题的新语言。反过来想想，要是全世界的程序员都用同样一门语言做所有事情，即使啥都凑合着能干，这门语言也一定干得不怎么样”。


题图来自于[Flickr user Ruiwen Chua](https://www.flickr.com/photos/ruiwen/3260095534)，CC 2.0




---


via: <http://readwrite.com/2014/06/17/apple-swift-facebook-hack-google-dart>


译者：[Mr小眼儿](http://blog.csdn.net/tinyeyeser) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

