22

披露

这是一个“笼统”的问题,也许没有具体的答案,但它并不打算作为一场火焰战。在开始我的项目之前,我真的很想了解一些信息。

我必须实现一个特定的项目,该项目将真正受益于 J 提供的数据结构和抽象。这是一个大型项目,旨在充当大型(软实时)Web 应用程序的中心组件。所以性能非常重要。

我一直试图找到一些关于在大型商业或开源项目中使用 J 的信息,但我无法找到任何信息来作为我继续前进的决定的依据。我有:

  • 搜索 Google 趋势,但收到以下回复:“您的术语 - j 编程语言 - 没有足够的搜索量来显示图表。”
  • 在免费(代码)上搜索,并没有找到使用 J 的单个项目
  • 在 Sourceforge 上搜索,没有找到使用 J 的单个项目
  • 在 Lambda the Ultimate 上搜索,只发现下面的讨论斜着引用了 APL
  • 在 Google 和 Bing 上进行了一般搜索,但没有找到任何使用 J 部署的大型项目的示例

在我的项目中使用 J 会出错吗?它似乎拥有我想要的一切——尤其是在数据结构、抽象和简洁方面。当然,我可以花时间在 F#、C# 或 C++ 中模拟所有这些属性,但 J 已经有了它们,所以......

有人可以告诉我在重要项目中使用 J(或任何晦涩的语言)的一些缺点吗?它的性能不够吗?它没有图书馆吗?还有什么我应该知道的吗?

提前感谢您的回复。

4

4 回答 4

20

我认为 J 适用于大型、重要项目的关键用途。但我也认为对于这样的项目,J 将是一个非常冒险的选择(阅读:高风险)。

据我所知,使用 J 作为主要软件系统的核心技术的两家大型公司是 Cognos 和 Luen Thai。(Cognos 已被 IBM 收购。)关于这些系统的一些讨论,或者至少是一些涉及它们的经验,已经出现在J Chat 论坛中。但是,那里没有太多信息。

可能还有其他依赖 J 的大型软件系统,但我还没有确定它们(而且我多年来一直在关注它们。)

Dmitri Chubarov 正确地认为,难以找到适当熟练的开发人员可能是一个重大问题。此外,我认为对于尚未在数组语言方面掌握重要技能的人来说,很难估计他们需要付出多少努力才能擅长用 J 进行编程。我个人认为从一个快乐兴奋的态度,而这种态度可能会因软件项目的生产压力而处于危险之中。(在工作中学习 J 并喜欢它可能的,但不应忽视程序员因为“必须”学习它而讨厌它的风险。)

另一个可能的困难是整合工作。J 有各种库,并已连接到各种其他软件系统,但与更流行的语言所取得的成就形成鲜明对比。我的经验表明 J 接口非常容易,我将其归因于如何与外部世界合作的一些不错的选择。(这包括 DLL、内存映射文件、套接字和文本文件脚本。)然而,在一个大型项目中,当连接到周围的支持软件时,您会比平时更频繁地进行创新。

在我看来,最大的因素是我是否有足够的团队来承担核心产品。实际上,这可能是一个比大多数“大型”项目所依赖的小得多的团队。数组语言与比该领域典型的小得多的团队相关联,我认为这是优势之一。如果你已经安排好让任何你需要的同事参与进来,那就太好了。如果没有,在你这样做之前不要提交这样的项目。

下一个最重要的事情是了解您期望获得的 J 的主要好处,以及在完成项目时检查您是否获得了这些好处的方法。我不是建议如何做到这一点的合适人选,但我相信你不想在不跟踪这样的高风险选择是否带来预期回报的情况下投入投资资金。

Paul Graham 曾写道,某些语言被视为秘密优势。J 绝对可以是这样一种语言。然而,仅仅使用 J 并不足以确保它具有他所想的那种优势。你所描述的 J 的吸引人的方面表明,这样的优势对你来说可能是触手可及的。如果您确实选择依赖它,那么让所有主要参与者都有一个强大而清醒的理解为什么选择这种语言来完成这项工作可能是至关重要的。

于 2012-06-07T04:22:57.350 回答
13

尽管已经接受了答案,但我仍在回答这个问题。

  • 可移植性:我负责维护一个用 J 构建的大型代码库,其中大部分对于 J6 来说是不可移植的(或者这样做真的很危险),所以我被困在 J5 中。J 并不意味着非常向后兼容。事实上,大多数版本都引入了重大更改。版本 7 使用 Java 作为其前端,因此您的界面和使用 Windows 驱动程序 ( wd) 的所有内容都将无法正常工作。版本 8 承诺将 QT 用于前端,因此您的新 Java 接口很可能不会被移植。公平警告。

  • IDE:对我来说,大型项目应该与可靠的 IDE 齐头并进。J's 是一个文本编辑器。

  • 库:有很多 J 库,但 J 是众所周知的,存在几种语言,它们具有更丰富的库和框架。

  • 代码结构:这完全取决于您,实际上没有一点反对 J. J 的地方可以像任何其他语言那样清晰或模糊。适用标准编程实践,并且应该始终尽可能明确地记录和描述。如果您发现某组“经过审查的脏话”比另一组效果更好,那么这在 J 中会加倍。

  • 最后,如果您只需要 J 的某些功能,则可以将 J 用作组件。不幸的是,.NET 集成在 J7 中被放弃了(甚至在 J6 中也不是 100% 兼容,尤其是在它的 64 位风格中),但是有一些方法可以使它与外部世界通信。例如, KDB基于 J 的疏远兄弟 K,并且基本上包装了映射文件以便快速访问,J 也有一个设施。

于 2012-06-26T13:04:03.320 回答
3

对我来说,J 是一种很好的脚本语言(起到支持作用),尤其是对于数学相关的计算。它非常独立,可以通过文件夹复制(尤其是windows环境)部署,这比ruby或python有优势。

例如,在 nodejs webapp 中,可以使用 child_process 调用 jconsole.exe 并通过命令行接口传递参数。

整个程序可以在windows azure平台上部署运行,也可以在本地机器上运行,无需额外安装(即node.exe和jconsole.exe在同一个文件夹中)。

于 2013-05-27T14:39:02.933 回答
3

有人可以告诉我在重要项目中使用 J(或任何晦涩的语言)的一些缺点吗?

对于担任经理或项目负责人角色的人来说,在关键任务项目中使用更晦涩的语言的最大缺点是人员和技能。

  1. 我们如何发现和评估潜在的团队成员在语言中的技能和才能?
  2. 如果有人离开,我需要多长时间才能填补知识空白?
  3. 当我们需要额外的帮助时,我们能否足够快地扩展开发团队?

对于一个重要的项目,我希望那些已经在语言方面非常有经验的人,而不是在学习过程中学习它。

于 2014-02-11T13:21:27.313 回答