为什么选择特定的语言/平台?

时间:2009-01-12 23:05:06

标签: architecture programming-languages

所以我知道开发人员并不总是选择他们正在工作的语言和平台 - 但从某种意义上说他们这样做,因为他们总能提出要求,追求或留下工作......所以记住:你为什么最终选择特定的语言或平台 - 不同的因素会影响最终的决定。请不要停留在“正确工作的正确工具”或类似的短语 - 请用现实生活中的例子说明。

5 个答案:

答案 0 :(得分:5)

这都是关于成本效益的。

如果我只是需要快速完成一些数据处理,对于一次性任务,我将使用JSDB Javascript(一个Javascript shell),这是我对瑞士军队型计算机Perl的替代方案黑客攻击。我有时会将它用于以后可能需要再次执行的任务,但我会更加谨慎地记录它。

对于PC上更强大的应用程序,我将使用Java,因为它在执行速度,开发速度,良好的工具集/库/文档(有些人称之为软件“生态系统”)之间是一个很好的折衷方案,并且跨平台支持。

对于嵌入式系统,我尝试使用C ++,并希望并祈祷调试器是不错的。 (其中一些是可怕的,有些没有任何调试器,你必须从串口吐出数据或闪存LED。或者创建数字脉冲来调试时序问题。)

标准我通常使用:

  • 执行速度&其他表现问题
  • 调试器/分析器可用性
  • 工具集(编译器,调试器等)的成本
  • 社区支持级别(比较此论坛上有关Java与Matlab的问题数量)
  • 语言模糊(它可能完全符合你的要求,但如果没有人知道呢?)
  • 易于学习语言,图书馆等。
  • 跨平台友好
  • 代码安全性(您可以将其编译为非常难以逆向工程的东西,还是可以轻松阅读的脚本?)
  • 语言有多大便利可维护性/模块化等等。

答案 1 :(得分:3)

作为一个涉足多种语言的人......我现在发现自己被这些平台所吸引作为我的优先事项

1)厨房水槽图书馆 - 一切都已包括在内 2)最经过深思熟虑的库结构(并且可扩展 - 因此设计师可以随时修复错误)
3)语言语法 - 我做得更好 - 过去常常是#1
4)mindshare - 你可以在某处24/7在线获得帮助

我将在明年将重点放在这两点上: Java,.NET,Groovy,IronRuby和F# 我之所以选择这些,是因为我对.NET和Java的库支持有一定程度的安慰。

我现在必须把其他东西放在一边......我太破碎了。

答案 2 :(得分:1)

我处于幸运的位置,能够在我的梦想系统中工作,并且已经存在很长时间了。我在Smalltalk中完成所有工作 - 期间(实际上:Smalltalk / X)。如果有时间关键的东西(图像处理,实时数据获取,rt控制),我将事物分成混合,其中关键的东西是用C完成的,所有的管理,GUI,webInterface,配置等都是在Smalltalk完成。这样,我们就建造了非常复杂的控制设备(控制化工厂,发电厂,煤矿,造纸厂和其他工业工厂)。另一方面,我们在Smalltalk中进行银行业务,Web框架,GUI原型设计和通信安全工作。甚至通过Smalltalk中的完全重写替换了多个现有的Java系统(!) - 并且具有更高的性能。

Smalltalk是我梦寐以求的环境,原因如下:

  • 在linux,solaris,hpux和windows之间完全可移植(应用程序开箱即用,无需单次更改)。
  • 完全独立于任何其他框架(没有摆弄不同版本的Qt或任何其他小部件库)。
  • completeley open:没有地方我无法修复错误或增强课程;没有像最终的String类这样的东西,你不能教新的技巧(也就是添加你自己的东西)。
  • 合理的表现;成熟的VM
  • 用于高性能要求的内联C代码。
  • Smalltalks拥有最好的IDE - 与生活在系统内部并且不将应用程序与IDE分离无关;即使在最终用户应用程序中也没有任何东西可以比得上IDE(曾经远程调试在中国运行的应用程序,在运行时,并在控制工厂的同时添加修复程序,而不停止那个大坝的事情?)
  • Smalltalk(在CLOS旁边)是最好的元对象模型之一,也是最好的反射之一(甚至堆栈帧,代码,调度程序是对象,带接口,并且是可扩展的)
  • Smalltalk由于其增量性质而允许更高的生产率。 (实际上,ByteCode和JITting起源于70年代和80年代的Smalltalk系统)
  • 异常语义比所有C ++,C#和Java都要好。这些提供了许多其他人甚至都不会想到的新的可能性。
  • Smalltalk的块是有史以来最美丽的发明之一:在语义上,作为聚类(这不是新的),它们的语法很有趣,可以写入和读取。看看一些代码看起来和阅读的优雅程度(参见Algorithm for joining e.g. an array of strings并将C代码与Smalltalk进行比较)
毫无疑问,很多发明都是在Smalltalk社区中完成的,而且极端敏捷的开发,结对编程,快速原型设计等都受到周围环境的影响甚至起源。

有些人认为其缺点是其有趣的语法;如果你不能对此进行抽象,我会回答你可能不值得CS学位。此外,Smalltalk几乎没有语法(它的描述适合单个页面) - 大部分内容都在库中完成。

愿意接受评论和抨击(但是downvotes是不公平的:-)
PS:是的 - 我知道并且已经使用过其他几种语言...
PPS:如果我不得不放弃Smalltalk,Lisp或Haskell将是我的第二选择,但两者都不提供IDE,这些都是我现在习惯的。
PPPS:我确实接受这样的论点,即近年来可能没有太多的“官方”咨询工作。

答案 3 :(得分:0)

对于大多数人来说,去钱的地方。如果这需要为旧的Unix系统学习Perl,或者为新的企业解决方案学习.NET(相关性不是唯一的),那么确定。

有些人可能有自己的少数几个“绝对”,但足够高的工资通常甚至可以赢得那个。没有太多的精英家会每年拒绝20万美元来忍受他们最讨厌的语言/平台。 ;)

答案 4 :(得分:0)

我可以用那种语言思考,如果没有与我做的太多其他想法发生冲突吗?

有时候小距离会有所帮助 - 过于接近的语言会导致混乱,并且在使用语言改变思维方式时有助于获得语境线索。

因此,出于工作目的,我寻找语义上接近但语法不同的语言,以帮助我专注于平台。

作为最近的一个例子 - 我在REALbasic(一个非常干净的OO BASIC)做了很多工作。对于我的Windows工作,我使用C#而不是VB.net,以避免混淆。

在学习语言以扩展我的想法(并决定是否应该将它们添加到我的工具包中)时,我会寻找具有显着差异的语言。我目前正在研究Ruby,以及改进我的C#。我希望今年晚些时候能为F#或Haskell投入大量时间。我去年学过Lisp。我相信你必须使用一种语言来完成一些真正的编程任务才能决定它与其他心理工具的兼容性 - 用语言思考与阅读它不同。