面对您可以自由设计的新应用程序的挑战,组建团队进行开发和管理:
你会选择哪种语言/平台?
为什么?
背景:桌面应用程序将控制硬件设备并执行计算,分析和显示它返回的数据.
要求 :(重要性:10 =最重要)
将需要使用USB和/或以太网与设备通信(9)
有相关技能的工程师的可用性(8)
高质量IDE /工具的可用性(8)
IDE /工具的成本(7)
资源可用性,教程,支持(9)
语言/ API /平台/框架的生命周期 - 即对该应用程序的投资将来会有多大的前景?......该产品具有较长的生命周期(10)
跨平台(3)
丰富多样的图书馆(9)
应用程序需要能够解释脚本语言(6)
单元测试(9)
假设:
对于设备的USB变体,设备驱动程序将使用C/C++编写
申请将是一项全新的努力 - 从零开始
现有工程师的背景是C/C++,他们具有很强的OO能力.现有工程师愿意采用最佳语言/平台,并且将招聘具有适当技能的新工程师.
候选名单(可以添加到):
的Java/J2SE
C#/.NET
C++/wxWidgets的
C++/QT
等等
期待听到您的想法!
我的第一选择是C++
"语言的生命周期"......我不认为C/C++会在任何时候出现.
支持与usb/ethernet /其他人的低级别通信
您已经拥有团队中的知识/技能
有很多高质量的库/ IDE等
说实话,我会根据您的要求选择Java(带有C的一小部分),原因如下.
Lifetime of language/API/platform/framework- i.e., how future-proof will the investment in this application be?... the product has a long life-cycle (10).
这真的取决于你的意思.我真的无法想象Java会消失,仅仅是因为它庞大的安装基础.C或C++也没有消失,但在考虑C#的未来时,我总是想到VB6-to-VB.net迁移问题.
Will need to communicate with devices using USB and/or ethernet (9).
虽然Java不是直接理想的,但它有JNI来完成这项艰苦的工作.你仍然需要一个C组件才能做到这一点(并且它会针对每个平台进行更改,但最好是将大部分代码写入一次 - 使用C,您可能会为每个平台更改大部分代码,并且使用C#,它是否真的支持Windows以外的其他平台?).另一个替代方案是JNA,它看起来像"Python ctypes"
Java(访问共享库和没有JNI接口层的DLL).
Availability of resources, tutorials, support (9).
所有语言在网络上都有巨大的资源横截面.
Richness and breadth of libraries available (9).
你有Boost for C++和跨平台的GUI,但它们是必须添加的东西 - 没有像Eclipse/Java那样内置于开发环境中.
Unit testing (9).
与下面的工具可用性相同 - 有大量(免费)Eclipse插件可自动执行单元测试.
Availability of engineers with relevant skills (8).
你提到的所有语言都有很多能够胜任工作的人(我喜欢用这个词).
Availability of quality IDE/tools (8).
这是Eclipse.在我看来,没有两种方式.它的插件数量确实很大.NetBeans的可能外观漂亮,但我宁愿比外观的功能(等会我的妻子,所以这是幸运:-).
Cost of IDE/tools (7).
Eclipse是免费的.
The application will need to be able to interpret a scripting language (6).
最后我听说,Java现在包含JavaScript作为内置函数以及开发人员添加自己的脚本引擎的能力.
Cross-platform (3).
C#,没有(尽管单的存在,我依然看到它会下降相抵触的MS1天风险,不会有很多是开源软件世界将在它的工作,因为它MS协会).
我会用C#来解决这个问题,原因如下:
在语法方面相对于C++最接近;
如果unsafe
块需要,可直接访问内存;
现代UI,开发成本低于任何C++ UI框架;
高技能可用性;
感谢微软和其他人,几乎所有的图书馆(包括USB);
Visual Studio相对便宜;
长期待寿命:.NET是两个相当成熟(在7年以上)和一个用的"字节码平台"最好的长期前景(主要包括Java);
通过DLL轻松集成本机代码.Java/JNI(从经验来讲)更加尴尬; 和
单元测试框架.
老实说,我认为C++桌面应用程序的时代已经过去了.在开发过程中,它们太容易出错并且价格昂贵(相比之下).
C#/ .Net解决方案唯一缺少的是跨平台(Mono尽管如此).我不知道你有多大的优惠,但你只把它列为3.