6

面对您可以自由设计的新应用程序的挑战,组建一个团队来开发和管理:

  1. 您会选择哪种语言/平台?
  2. 为什么?

背景:桌面应用程序将控制硬件设备并执行计算、分析和显示它返回的数据。

要求:(重要性: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
  • 等等

期待听到你的想法!

4

8 回答 8

11

我的第一选择是 C++

  1. “语言的生命周期”......我认为 C/C++ 不会很快消失。
  2. 支持与 USB/以太网/其他的低级通信
  3. 您已经拥有团队中的知识/技能
  4. 许多优质的库/IDE等可用
于 2009-01-22T01:37:31.917 回答
11

老实说,根据您的要求,出于以下原因,我会选择 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 到 VB.net 的迁移问题。

  • Will need to communicate with devices using USB and/or ethernet (9).虽然 Java 并不直接适用于此,但它有 JNI 来完成繁重的工作。您仍然需要一个 C 组件来执行此操作(并且它会针对每个平台进行更改,但最好将大部分代码编写一次 - 使用 C,您可能会针对每个平台更改大部分代码,并且对于 C#,它真的在 Windows 以外的平台上受支持吗?)。另一种选择是JNA,它看起来像"Python ctypes"Java(访问共享库和 DLL,无需 JNI 接口层)。

  • Availability of resources, tutorials, support (9).所有语言在网络上都有巨大的资源横截面。

  • Richness and breadth of libraries available (9).你有 C++ 和跨平台 GUI 的 Boost,但它们是必须添加的东西 - 开发环境中没有内置任何东西,如 Eclipse/Java。

  • Unit testing (9).与以下工具的可用性相同的响应 - 有很多(免费)Eclipse 插件可以自动化单元测试。

  • Availability of engineers with relevant skills (8).你提到的所有语言都有大量(我喜欢使用这个词)能够完成这项工作的人。

  • Availability of quality IDE/tools (8).这是日食。在我看来,没有两种方法。它的插件数量确实是巨大的。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#,不(尽管存在 Mono,但我仍然看到有一天它会与 MS 发生冲突的风险,而且由于它的 MS 协会,FOSS 世界不会有多少人会致力于它)。

于 2009-01-22T01:56:02.770 回答
6

为此,我将使用 C#,原因如下:

  • 在语法方面与 C++ 最接近;
  • unsafe如果需要使用块直接访问内存;
  • 开发成本低于任何 C++ UI 框架的现代 UI;
  • 高技能可用性;
  • 感谢 Microsoft 和其他人,提供几乎任何东西(包括 USB)的库;
  • Visual Studio 相对便宜;
  • 预期寿命长:.Net 既相当成熟(7 年以上),也是“字节码平台”(主要包括 Java)中具有最佳长期前景的一个;
  • 通过 DLL 轻松集成本机代码。Java/JNI(根据经验)就更尴尬了;和
  • 单元测试框架。

老实说,我认为 C++ 桌面应用程序的时代已经过去了。它们太容易出错和昂贵(相比之下)开发。

C#/.Net 解决方案唯一缺少的是跨平台(尽管是 Mono)。我不知道这对您有多大影响,但您只将其列为 3。

于 2009-01-22T01:57:46.773 回答
4

就个人而言,我会选择 C++ 或 C(甚至可能是 D)作为低级硬件接口,但是我会将该代码包装在一个漂亮、干净的 API 中,然后我会编写所有面向用户的带有 WPF 和 XAML 的 C# 中的 GUI 内容。

编写设备驱动程序所需的技能组将与 GUI 开发人员的技能组完全不同(尤其是如果您想提供丰富的图形图表和报告。所以无论如何您可能会有两个不同的团队(即使他们是非常小的团队),并且以不同(但兼容)的语言实现这两个层将提供一个很好的机制来强制这些层之间的关注点分离。

于 2009-01-22T01:43:43.963 回答
4

如果我现在发布一些东西,C++/wxWidgets 会胜出。该组合非常便携,并且可以满足您的所有可用性和成本问题。

下月初,如果我没记错的话,Qt 将在 LGPL 许可下发布。我自己从未使用过它,但我听过几个人对它赞不绝口;许可证要求是唯一让我看不到它的东西。对于您的需求,它可能与 wxWidgets 一样好。

据我所知,这些都不处理脚本或单元测试。

我会考虑使用 Python 作为脚本语言。它作为其他程序的嵌入式脚本语言而享有盛誉。

我从来没有找到我喜欢的单元测试框架,所以我不能推荐一个。

于 2009-01-22T02:39:38.033 回答
3

桌面应用程序将控制硬件设备

C++

于 2009-01-22T01:42:00.193 回答
3

我看到这里有很多 C# 人,- C#: 在 Windows 以外的其他平台上运行不佳。所以这是个坏主意。忘了它。- Java:不适合设备驱动程序,并且仍然比 C 或 C++ 慢。Java 有一些不错的特性,但也有很多人对它有很高的评价。- VB:你为什么要使用它?

我可能会使用 C++/Qt,唯一的缺点是,如果 Qt 是商业产品,它会花钱,如果不是,它是免费的。您说您的团队已经有 C++ 经验,因此学习如何使用 Qt 应该不难。这在 Windows、Linux 和 mac 上都可以工作并且看起来非常好。Ide 不是 Qt 的问题,Trolltech 正在开发一个您可以使用的跨平台 ide,或者您可以使用 Visual Studio、eclips 或其他 C++ ide。

于 2009-01-22T07:24:21.547 回答
2

我会投票给 C#。即使有从 C++ 迁移出来的学习曲线,您的开发人员也应该更有效率,并且工具和库也很棒。

我看到 C# 增加项目复杂性的唯一地方是与 USB 设备的接口,但是使用 P/Invoke 和 /C++/CLI 将 C/C++ 驱动程序公开给 .NET 相当容易。

于 2009-01-22T01:33:51.910 回答