计算机语言通天塔
现在已经有数百种编程语言,而且越来越多的语言正在不断涌现。许多应用程序设计用于相对狭窄的应用程序,并且许多应用程序永远不会超越一小组编码器。
同样,大型科技公司一直在开发新语言,大约已有大型科技公司。具有开创性的通用语言C起源于年代初期的AT&T贝尔实验室。Java现在是Android应用程序开发的主要语言,它于年代诞生于SunMicrosystems。
如今不同的是,公司采用新语言以达到其特定业务目标的程度—这一过程还具有建立专门的开发人员基础的作用,这些开发人员有效地“锁定”了公司的特定平台。这种双重策略至少可以追溯到Sun推出Java,该公司将Java推广为挑战Microsoft在PC台式机上的主导地位的一种方式。(尽管Java最终在Google将其用于Android之前在企业中间件系统中找到了家,但事情并没有按照Sun的计划进行。)
显然,这也是Apple使用Swift的目标。如果不辜负公司的早期宣传,Swift可能会通过对Objective-C(目前iOS和MacOSX开发人员的通用语言)进行粗略整理来简化iOS应用程序的开发。但这也需要那些相同的开发人员学习他们不太可能在其他地方使用的新语言的来龙去脉。
公司为什么要自己滚蛋
这与使大多数开发人员兴奋的根深蒂固的“不要重新发明轮子”哲学背道而驰。那么,为什么没有更多的公司仅仅将已经存在的语言用于新用途呢?
答案之一就是,公司可以建立自己的语言。设计一种新语言可能很复杂,但并不是特别耗费资源。很难在提供软件资源(共享代码库,API,编译器,文档等)方面赢得支持,并赢得开发人员的支持。公司在两者上都处于独特的位置。
还有一个事实是,现有语言通常很难融入当今复杂的代码框架中。例如,Facebook决定创建Hack,这是Web开发中常用的脚本语言PHP的超集。
Facebook使用Hack的主要目标(这是当今常见的做法)是通过在执行程序之前强制执行数据类型检查来提高代码的可靠性。这样的检查可确保程序不会尝试将整数解释为字符串,如果不捕获该错误,可能会产生无法预测的结果。在Hack中,这些检查是预先进行的,以便程序员可以在代码上线之前很早就识别出此类错误。
根据FacebookHack团队的核心开发人员JulienVerlaguet的说法,该公司首先寻找一种现有的语言,该语言可能允许更高效的编程。但是,Facebook的大部分内容已经基于PHP构建,并且该公司已经建立了强大的软件基础架构来支持PHP及其分支。虽然可以使PHP使用以另一种语言编写的代码来工作,但这并不容易,也不是很快。
“假设我试图在Scala中重写我们的PHP代码库,”Verlaguet说。“这是一种精心设计的优美语言,但与PHP根本不兼容。每当我需要从代码库的Scala部分调用PHP时,我都会失去性能。我们本来希望使用现有的语言,但对我们来说,这不是一个选择。”
取而代之的是,Facebook发明了Hack,它与PHP有足够的共同点,可以共享公司现有的基础架构。Verlaguet说,Facebook的绝大多数代码库已从PHP迁移到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)认为,当公司各自为满足自己的需求而构建自己的语言时,这会分散编码人员的注意力并在该语言中强制采用单一的开发视角,从而减慢总体进度。他说:“当公司负责语言而不是开放源代码社区时,就像公司与初创公司之间的区别一样。”根据定义,社区更加灵活和适应性强。
当然,苹果公司有很多很好的理由从零开始使用Swift,就像Facebook发明Hack一样。这并不意味着它不会迫使开发人员进行变更,其中某些无疑是不受欢迎的。
韦拉格特说:“随着新语言的发明,它变得越来越霸权。”“必须跟上来可能令人沮丧。但另一方面,您更有可能使用一种新的语言来解决您的确切问题。想象一下相反的情况—在这个世界上,程序员对所有事物都使用相同的语言。这将是一种语言,它可以使所有事情做得不好,但做不到。”
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以