当前位置: 首页 > 科技观察

开发者需要懂多少种语言?

时间:2023-03-15 10:46:30 科技观察

Apple、Facebook和Google等大公司正在开发自己的编程语言,开发人员被迫适应。在不久前的世界开发者大会上,苹果公司公布了其全新的开??发语言Swift。它是大型科技公司最近开发的一波新语言中的最新一员,在某些方面专门针对他们自己的平台。对于iOS开发者,Apple有Swift;Facebook有Hack——一种用于后端开发的语言。与此同时,谷歌已经有了自己的Javascript替代品Dart和一种新的通用编程语言Go。这波新语言浪潮给开发者带来了很多问题。也许最严重的问题正如我的同事AdrianaLee在Apple发布Swift后所说的那样:(无论如何,开发人员必须学习多少种语言?)-AdrianaLee(@adra_la)June2,2014TheBabelofComputerLanguages有数百种现有的编程语言,还有更多正在出现。其中许多都是为在相对狭窄的应用程序范围内工作而设计的,而且大多数甚至从未超出项目团队的范围。同样,大科技公司开发的新语言,其实也是随着公司一起成长的。通用语言的鼻祖C语言,起源于70年代初的AT&T贝尔实验室。Java,目前Android应用程序开发的主要语言,诞生于1990年代Sun的Microsystems系统。现在不同的是,公司采用新语言,因此希望扩大特定业务目标的范围——这一过程同时建立了忠实的开发人员基础,这些开发人员被牢牢锁定在公司特定的平台上。这种以一石二鸟的策略可以追溯到Sun采用Java作为挑战微软在PC桌面领域的统治地位的手段。(事情并没有像Sun计划的那样发展,但在Google转向Android之前,Java已经在企业中间件系统中找到了很大的一席之地。)这样一来,Apple的Swift的目标就很明确了。Swift应该不辜负公司早期的宣传,并且通过消除Objective-C的粗糙边缘,它看起来可以成功地简化iOS应用程序开发人员的开发过程。但是这些相同的开发人员需要学习一种新语言的输入和输出,而这些功能可能不会在其他地方使用。为什么大公司要重新发明轮子?“不要重新发明轮子”的理念在大多数开发人员的脑海中根深蒂固,但大公司并不买账。那么他们为什么不直接修改现有的语言以用于新用途呢?答案很简单,公司发明自己的语言是因为他们可以。设计一种新语言可能很复杂,但对资源的要求并不高。困难的部分是支持它,包括提供软件资源(共享代码库、API、编译器、文档等)和赢得开发者支持。大公司尤其擅长这两方面。还有一个事实是,现有的语言通常很难塞进当今复杂的代码框架中。例如,Facebook决定发明的Hack是普遍适用于Web开发的脚本语言PHP的超集(superset)。Facebook的Hack最近比较普遍,其主要目标是提高代码的稳定性。为此,它强制在程序运行之前检测数据类型。例如,此类检查可确保程序不会将整数解析为字符串,如果不及时发现此类错误,可能会产生不可预知的后果。在Hack中,这些检查是提前执行的,这样程序员就可以在程序上线之前很久就发现此类错误。据Facebook的Hack项目团队核心成员JulienVerlaguet介绍,该公司此前曾尝试使用现有的语言来实现更高效的编程。但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应用程序,但使用Java开发Android应用程序。对于开发人员来说,这从来都不是症结所在,因为Objective-C和Java是通用的面向对象语言。它们用途广泛,适用于多种场合。然而,到目前为止,Hack、Dart、Go和Swift仍然只适用于严格公司特定的编程解决方案,通常与公司选择的编程环境相对应。诚然,现在下结论可能为时过早。例如hack,可以用在一些后端实现中;它太新了,以至于Facebook还没有任何数据可供人们以这种方式使用它。不是开发人员不能学习多种语言。事实上,大多数人已经掌握了不止一种语言。这就像罗曼语(一种源自拉丁语的语言),如果你会说西班牙语,那么学法语要比不会的人容易得多。同样,如果您已经了解Java,那么学习Ruby或Perl会容易得多。如果你会PHP,那么你基本上已经学会了Hack。相比之下,学习多种语言更多的是一种习惯问题。如果Java解决了你的问题,你就没有动力再学习Ruby。如果您觉得用Objective-C编写iOS应用程序很舒服,您就不会有强烈的学习Swift的动力。另外,对于一些开发人员来说,具有封闭生态系统的语言只会让每个人的生活变得更糟。例如,自由设计师JackWatson-Hamblin告诉我,Apple积极推出Swift实际上是在冒着增加程序员负担和分裂开发者社区的风险:程序员掌握多种语言很重要,但不断地迫使他们跟上新的语言不起作用。如果我正在开发一个简单的跨平台应用程序,我不想被迫掌握四种语言来完成它。如果我真的必须的话,我也只想使用一种语言。Watson-Hamblin认为,当每个公司都根据自己的需要发明自己的语言时,程序员就会分心,开发仅限于一个视角,这只会减慢整个开发过程。“如果你将一家公司负责一种语言与负责一个开源社区进行比较,两者之间的区别就像一家大公司和一家小型初创企业之间的区别,”他说。社区本质上更具灵活性和适应性。当然,Apple有很多非常充分的理由从头开始推出Swift,就像Facebook发明Hack一样。我不是说大公司不强制开发者接受这个改变,有些公司在这方面做得很糟糕。“一种新语言的发明,以及一种霸权的统治,”Verlaguet说,“不得不继续追赶是令人沮丧的,但另一方面,你有一种解决问题的新语言。想想看反过来说,如果全世界的程序员都用同一种语言来做所有的事情,即使他们能把所有的事情都做好,那门语言也不一定做得很好。”题图来自Flickr用户RuiwenChua,CC2.0译者:MrXiaoyaner校对:wxy本文由LCTT原创翻译,Linux中国自豪推出