TranslateProject/published/201407/20140620 How Many Languages Do Developers Need To Know.md
2014-08-01 23:35:01 +08:00

86 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

到底开发者需要掌握多少门语言?
================================================================================
![](http://a2.files.readwrite.com/image/upload/c_fill,h_900,q_70,w_1600/MTIyNzYyNjIwNDU2Njk4NDcw.jpg)
> 诸如Apple、Facebook及Google这样的大公司正在开发他们自己的编程语言开发者们被迫只有适应。
前不久的世界开发者大会上Apple公布了它的新开发语言[Swift][1]。这是最近大型技术公司们开发的一大波新语言中的最新成员,这些新语言某种程度上都是专门应用于他们自己的平台。
对iOS开发者Apple有Swift而[Facebook 有 Hack][2] —— 一门用于后端开发的语言。与此同时Google已经拥有了它自己的Javascript替代者 Dart以及一门新的通用编程语言Go。
这一波又一波的新语言,给开发者们带来了许多问题。也许其中最严重的问题正如我一位同事[Adriana Lee][3]在Apple发布Swift后所说
> (开发者们到底还得学习多少门语言?)
> ——Adriana Lee (@adra_la) [June 2, 2014][4]
### 计算机语言的通天塔 ###
目前已经存在的[编程语言有数百种][5],同时还有更多的语言正在涌现。其中许多都是被设计用在相对较窄的应用程序范围内,大多数甚至从未走出过项目小组的范围。
与此类似,大技术公司开发的新语言其实也是伴随着公司一起成长的。[通用语言的鼻祖C语言][6]就源于上世纪70年代初的AT&T贝尔实验室。Java目前作为Android app开发的主要语言诞生于上世纪90年代[Sun公司的Microsystems系统][7]。
发展到现在,不同之处在于,公司们拥抱新语言、从而想要延伸的特定商业目标的范围不一样了 —— 这一过程同时建立了一个忠心耿耿的开发者基础他们被牢牢锁定在了某个公司的特定平台上。这类一石二鸟的战略最早可以追溯到Sun对Java的采用当时公司就将其作为了挑战微软PC桌面统治地位的一种手段。事情虽然没有像Sun计划的那样发展下去但在Google转向Android之前Java大体上也算是在企业中间件系统中找到了自己的一席之地。
这么看来Apple的Swift其目标也就很明确了。Swift应该不会辜负公司前期的大肆宣传通过磨平Objective-C那粗糙的毛边看起来它能够成功简化iOS app开发者的开发过程。但是同样还是这些开发者他们却需要学习一门新语言的输入和输出而这些功能很可能在其他地方都不会用到。
### 大公司们为什么要重复造轮子 ###
“不要重复造轮子”这一哲学在绝大多数开发者心中根深蒂固,大公司们对此却并不买账。那他们为何不只是修改下现有语言用于新的用途呢?
答案很简单公司们发明他们自己的语言是因为他们有这个能力。设计一门新语言可能很复杂但对资源要求却并不很高。困难之处也就在对其提供支持包括提供软件资源共享代码库、API、编译器、文档等以及赢得开发者的心意。大公司们在这两方面尤其擅长。
还有一个事实,现有语言通常很难硬塞进如今的复杂代码框架中。举个栗子,[Facebook决定发明的Hack][8]就是一个普遍适用于Web开发的[脚本语言PHP][9]的超集合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从零开始][10]就像当初Facebook发明Hack的时候一样。我并不是说大公司不会强迫开发者接受这种改变在这方面有些公司一直都很让人讨厌。
“新语言的发明伴随着霸权的支配”Verlaguet说“被迫不停追赶确实令人沮丧但另一方面你又多了一种解决问题的新语言。反过来想想要是全世界的程序员都用同样一门语言做所有事情即使啥都凑合着能干这门语言也一定干得不怎么样”。
题图来自于[Flickr user Ruiwen Chua][11]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/) 荣誉推出
[1]:https://developer.apple.com/swift/
[2]:http://readwrite.com/2014/03/20/facebook-new-programming-language-hack
[3]:http://readwrite.com/author/adriana-lee#awesm=~oGfPbJlSrFBamJ
[4]:https://twitter.com/adra_la/statuses/473537386266112000
[5]:http://en.wikipedia.org/wiki/List_of_programming_languages
[6]:http://en.wikipedia.org/wiki/C_(programming_language)
[7]:http://en.wikipedia.org/wiki/Java_(programming_language)
[8]:http://readwrite.com/2014/03/20/facebook-new-programming-language-hack
[9]:http://en.wikipedia.org/wiki/PHP
[10]:http://blog.erratasec.com/2014/06/why-it-had-to-be-swift.html#.U58BJI1dXtA
[11]:https://www.flickr.com/photos/ruiwen/3260095534