编程语言选择之道
编程语言选择之道
译者:Sんawn
该使用什么编程语言可能是项目面临的最大技术决策。这一个决策影响到每一个因素,包括可遵循的框架和库,以及你所雇佣的人。所以你要怎么选择该使用的编程语言?
事实是,可能大多数人都使用同一种语言,所以你也用在你最终项目上。或者,如果你是一个潮人,你使用最新的超级酷的语言,就像两年前所有耍酷孩子们喜欢在铁轨上玩耍。现在这些人正试图说明他们所信任的语言节点是怎样的可怕。我最近一次语言实验检查,具备图灵完备性语言有相同的问题解决能力。他们认为是他们的语言给了他们更好的表现力:更快的项目书写和维护成本的降低。
好工具 好工作
老话说得好:总是使用正确的工具来完成工作。如果你需要一些命令行自动维护任务,那么使用一种擅长shell脚本的语言:perl、ruby等,不要使用java。如果这个项目你须要解决一个桌面客户端无缝集成在一个windows环境,那么使用c#,不要使用java(java桌面GUI是静态的)。如果这个项目你须要解决涉及到处理大量XML,以及堆栈跟踪,那么当然使用java。
语言最大的区别通常归结为算法复杂度。如果你工作上有很多的算法复杂度问题,使用一些擅长表达一种函数式的语言,比如haskell或f#。或者,项目中有90%的webapps,你所做的数据需要一个有良好的面向对象能力的语言:java和c#在这里都是不错的选择,还有几乎所有其他现代语言。
Scala
或者你真的恨自己,你想要寻求一个妥协:为什么选择功能或程序时,你不可以有两种语言工具?能否不错过每一个语言的功能优势?想到在过去50年里出现的各种语言,你能否融合成一个强大的语言?如果这听起来像你,你可能也是一个赶时髦的人。但你真的错失了良机,建议花几年时间去学习一些scala语言知识。
我想scala获得如此多流行的部分原因,是它给了所有沮丧的java开发者他们一直想要的工具。java现在真的是一个难以置信的弱智语言,是令人难以置信的沮丧的工作。现在有些人开始转向c #,他们号称喜欢所有的新式语言。但是,这样真的会使代码更好吗?有许多语言具备大量的复杂性和多样性,这样使代码更加难以理解和难以维护。
问题是java是一个“玩具语言”,任何白痴都可以写出像样的惯用的java代码。更麻烦是每个人都是被迫写长篇大论的愚蠢的java代码,无论他们有多大的忍耐度。最好合理使用java,停止所有的愚蠢工作,停止编写难辨认代码以及废话代码。我担心这样会影响lambdas对java代码库的维护,每个人都开始寻找新的令人困惑的语言方式来表达思想。
关于招聘
另一个去选择合适编程语言的理由,它是影响雇佣开发人员的重要因素。但是,这是真的吗?我现在工作在一个c#开发公司,难道真的拒绝java开发人员吗?答案是否定的。一个优秀的开发者如果是真正优秀的,那么无论何种语言。
麻烦的是,如果你认为仅仅招聘python或节点开发人员,这样可以给你一个更好的标准开发,那么你错了。这样开发空间只会小很多,也许特殊模块质量将会更高,但是谁知道,谁又在乎呢?我只需要一个全面的开发人员,我希望他是最好的我可以雇佣的人。语言没有相关性能力,我遇到过一些非常聪明的java开发人员,以及一些真正可怕的潮人开发者。我宁愿聘用具备尽可能广泛技能的优秀的开发人员。
另一个观点,有些人认为语言要求将限制应聘者为你工作的意愿,一些开发商只想工作,比如说有些公司只想在clojure语言下工作。我宁愿人们找到想要的有趣的工作,无论语言,比那些宁愿使用最新的潮人语言来解决愚蠢问题要好。现在如果你工作在银行,你有语言选择问题吗?当然,可以先用一个时髦的语言,如果它能帮助你迅速解决问题。但是同时不要使其他语言永远远离你。
混合语言
把一屋子的潮人语言程序员召集起来,让他们形成团队,会发生什么呢?神奇的是,你已经得到了一屋子的c#和java开发人员。但是几乎每一个开发人员会知道至少有一个这样的语言——混合语言。他们的确都是坦白的不同程度的潮人程序员。
事实是最重要的是选择一个语言,导致有多少开发人员可以加入你的团队?以及那些你计划的招聘,已经知道的语言?如果团队中每个人都必须重新培训,每个你雇佣的人需要集中再学习新语言,这是一个你必须考虑的因素。这样做有什么好处吗?
其次,当你遇到问题时语言是否容易得到支持?java在开源社区是可怕的,如果你有一个问题,那么可能已经有15个不同的解决方案。如果你工作在c#中,你的选择也许会有限,但也会有所选择,其中一些甚至不遵从微软标准。如果你工作在最新的潮人语言下,猜猜会怎样?你也许会在你自己的规范中,对于一些人这是全新的潮人语言。对于我们想要完成的工作,它只能是一个痛苦。
最后,最好的建议是在完整项目中尽可能使用相同的语言,人人都已经知道该语言已经在周围广泛应用。这就是为什么java语言已迅速成为新的cobol语言。