我即将为我刚刚加入的一家技术初创公司制作一个原型,并且我正在尝试决定使用哪种语言。它将是一个简单的网络工具,后台有一个 MySQL 数据库,中间有一些人工智能的东西。我过去使用过相当多的 Ruby 和 PHP,但想知道使用 Python 甚至 Perl 是否会更好。我的主要编程经验是 C / C++ / Java,但我觉得我想要一些能让我的生活尽可能轻松的东西,因为我只是开发一个原型。

我想我正在寻找的是:

  • 发展速度
  • 现有的人工智能库(例如SVM、神经网络、贝叶斯分类器)
  • 易于与网络界面交互

有人对此有什么想法吗?

有帮助吗?

解决方案

无论是否是原型,如果您要处理大量数字,您可能至少需要 Java 或 C/C++ 的速度来处理 AI 部分。我真的不知道你在做什么,但很多人工智能的东西都是计算密集型的。您可能会发现 Python 与 C 的时间差别从 10 分钟到近 2 小时或更长时间(或从一天到一个月)。

也许您最好的选择是混合方法。Java/C++ 或用于 AI 的东西(我只说 Java,因为它有大量的库,我什至有一本关于数据挖掘的书,其中讨论了 Java 中的几个库,这些库可以免费使用并执行一些技术)。Python/Ruby/Perl 用于其他所有内容(例如 Web 部件)。

我对于是否推荐 PHP 犹豫不决,因为你永远不知道你可能在做什么。PHP 似乎确实在网络上以及与网络相关的事物上大放异彩,但是一旦您需要非网络用途,它似乎比任何东西都更麻烦(尽管我已经看到像 Perl/Python/etc 一样使用 PHP 的参考文献)。作为一些人的正常脚本语言)。

Python/Ruby/Perl 之间的选择几乎取决于品味。除了 Perl 拥有 CPAN,它超越了 Python 和 Ruby 目前所拥有的任何东西。由于您处于初创公司,CPAN 上的多种模块可供您组合使用,这可能会为您更快地完成工作提供价值。就我个人而言,我喜欢 Python 而不是 Perl(我发现在构建自己的对象时 Perl 的对象系统很丑陋,有时我需要花一些时间才能弄清楚我几个月前编写的代码是如何工作的)。但我不能否认CPAN的价值。

简而言之,您可能需要一种用于某些人工智能内容的性能语言,以及用于其他所有内容的脚本语言的开发简便性和速度,因为初创公司的全部目标是尽快完成产品并击败竞争对手市场。我很乐意推荐 Python,但根据我对初创公司的了解,您需要在决策过程中评估 CPAN。在初创公司中,能够将一堆模块组合在一起快速完成您想要的事情就具有巨大的价值。

我还应该补充一点,Perl 和 Python(我不确定 Ruby,但我认为)可以相当轻松地调用 C 代码。因此,您可以通过创建一组与语言的绑定来使用 C 或 C++ 库。您还可以尝试用 Perl/Python/Ruby 编写整个内容,如果速度太慢,则用 C 或 C++ 重写该部分并从脚本语言调用它。在整个启动过程中,像这样的重写对于完成某件事来说可能是非常昂贵的。此外,由于您最熟悉 C 或 C++ 或 Java,因此从一开始就值得这样做。

其他提示

Ruby、Python 和 Perl 这三种语言都适合快速开发、原型和 Web 应用程序。从你的问题中我猜测这个项目最重要的部分是人工智能部分。Perl 在 CPAN 上确实有相当多的 AI 相关库。查看 AI命名空间 进行抽样。其他命名空间中也有模块,因此请确保搜索特定的内容,例如“Bayes”或“SVM”。

我对 Python 或 Ruby 的 AI 库选项了解不多。我的建议是花一两天时间认真研究 Perl、Python 和 Ruby 的库。由于您之前已经使用过 Ruby,如果其中有您需要的库,那就很简单了,而且 Ruby 肯定是 Web 友好的。

就Web端而言,对于Python来说,我听说过很多关于Python的好东西 姜戈. 。对于 Perl,我建议看一下 催化剂.

您会注意到我忽略了 PHP。这是我尽可能尝试做的事情;)

您选择一种语言是因为它是适合该工作的工具,但您还没有告诉我们该工作是什么。我们不知道您需要什么类型的库,行业中的其他人使用什么库来完成相同的工作,等等。大多数人似乎在推荐一些东西时完全不知道你实际需要做什么,这意味着他们真的不知道如何帮助你。

正如您已经指出的:

  • 如果您是唯一使用 X 语言执行任务的人,那么您将很难从其他人那里获得帮助。了解其他人已经使用什么来完成类似的任务。

  • 如果适合您任务的所有优秀库都是另一种语言,那么您将不得不重新发明很多轮子。不要问你的问题,而是询问哪些库完成了你任务的重要部分,然后进行研究。“人工智能”这个话题太大了,无法推荐任何东西。

  • 如果工作中没有人知道您想要使用的语言,即使它是一种快速原型语言,您也会失去速度,因为他们必须学习该语言。学习一门语言不仅仅是了解其语法;还需要了解它的语法。它知道它的惯用语、库、文档等等。工作人员已经知道什么?他们会容忍什么?

  • 您真的想让您的生活更轻松,还是让您的客户更轻松?这些事情有时是不一致的,因此您应该考虑您是否真正提供了客户所需的价值。原型似乎经常会变成生产代码,因此一旦开始,您常常会陷入困境。

我唯一能真正评论的是:PHP 基本上是一种用于 Web 的 DSL,而其他三种语言(Perl、Ruby、Python)是更通用的语言,没有特定的领域,尽管它们都肯定具有 Web 功能。

就您的第二个要点而言,我认为 PHP 可能是您列表中最糟糕的选择。

人工智能?确实 语言信息服务程序

我认为 Java 会让你的生活变得更轻松。

  • 开发速度——你说你已经熟悉它了。

  • 现有的 AI 库 - 查看 乔恩

  • 易于与 Web 界面交互 - servlet、JSP、太多的 Web 框架无法列出。

Java 还可以使用 JDBC 轻松地与 MySQL 集成。

我同意推荐 Java 的其他答案,特别是因为您可能需要它在 AI 代码和库等中的速度。可用的。

Java(servlet)和 JSP 的组合可能会很好地工作。

然而,写这个答案的原因是强烈推荐:

就用你所知道的。

新语言或您“有点”了解的语言非常适合有趣的事情,甚至对于某些开发项目和原型设计也是如此。但是,如果您需要长期适合您的东西,请使用您已经知道的最适合任务的语言。在这种情况下,我认为(根据你的帖子)它会是Java。

另外 - 它现在是一个原型,但我几乎可以保证,如果它有效,它将成为实际应用程序的默认启动。我真的怀疑你是否有足够的时间用另一种语言从头开始重写应用程序,所以再次强调 - 使用你现在所知道的内容将在以后当他们“时间紧迫”你并且你必须交付时获得红利。

干杯,

-R

我认为 Perl 是正确的选择。查看 驼鹿 对于 Perl OOP 以及您正在搜索的其他库,我相信您会在 CPAN (也许像 贝叶斯模块 )

如果你习惯了 unix 堆栈/环境,我会选择 Python——很好而且简单。

编辑:您可以用 C 或 C++ 实现数字运算部分,并将其作为在 Python 代码中使用的模块。通过这种方式,您可以获得快速的数字运算代码和易于编程的粘合剂。

Lisp已经被提到了,但我认为Scheme(特别是 plt方案)在某些方面与 Ruby/Python/Perl/PHP 一样都是不错的选择。它没有像其中一些那样多的好库,这是一个缺点,但大多数方案都有出色的 ffi(外部函数接口),这使得集成外部(C 代码)库变得微不足道。该方案的另一个优势是其性能概况;在数字运算方面,您通常可以获得接近 C 代码类型的性能。

您可能想看看 GLASS:Smalltalk、Seaside 和宝石对象数据库。比 ruby​​ 更好的 web,没有 orm,最好的建模语言。

我想再看一下 grails。它绝对很容易设置并在一个小时内开始工作,并且您仍然可以使用 java 的强大功能。

我也同意那些说确保你正在考虑未来的人的观点。我曾经多次成为那些没有受益的人的受益者。

如果是我,我会用 python 编写整个内容,然后对其进行分析并将瓶颈写在 耐热玻璃. 。当您开发复杂的人工智能类型算法时,(1)使用高级语言进行开发很有用,这样您就可以快速尝试许多不同的方法,(2)使用高级语言提供参考实现可以帮助您测试 C/C++ 实现。我一直以这种方式使用 python/pyrex,它对我来说效果很好。

如果你正在制作一个快速而肮脏的原型,那么坚持你已经知道的东西可能符合你的兴趣,特别是如果原型是为了展示其他一些奇特的功能;性能在这里并不是一个大问题。

使用 Mod_Python 尝试 Python。作为一种语言,它有很多很棒的机器学习和自然语言处理模块,而且非常容易阅读、学习和使用。

鉴于它不是一个简单的 CRUD 应用程序,Java 可能是一个不错的选择。看看 Grails ( http://grails.org/ )它提供了像 Rails 这样的框架所提供的大部分脚手架和代码生成功能,但还提供了与任何其他 Java 库或框架的无缝集成。

在这种情况下,我会选择 PHP 甚至 SSI 来进行原型设计。我的推理:我不必担心模板系统,因为它们都是模板系统。浪费时间为纯粹的原型选择模板系统是没有意义的。SSI 尤其是一个引人注目的选择,您仍然可以选择用于 CGI 处理的语言,并且对于返回非原子数据,您可以发出 JSON,然后允许 UI 使用 Javascript 循环返回的数据结构。

为您管理内存的东西。他们声称技术变革对生产力的提升最大。我认为同等水平的 c# 很难被击败。

关于Python:

如果您需要计算密集型内容的性能,请查看 Numeric Python http://numpy.scipy.org/ 和耐热玻璃 http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ 。Numeric Python 是一个 Python 扩展,它提供了许多老式的数字工具,如快速 C 代码——向量数学(ANN 工作的基本工具)等。Pyrex 是一个工具,本质上允许您将 Python 代码编译为本机可执行文件。

使用 Pyrex 时,您需要小心使用反射,因为它无法完全编译使用某些反射构造(特别是 locals() 和 globals())的代码。我提到这个限制只是因为人工智能和探索性编码(由你的“原型”评论暗示)通常比其他类型的应用领域更多地利用反射。

如果您是 Mac 用户,请查看 Web对象 完成所有框架工作,您可以专注于用 Java 编写有意义的神经代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top