我应该使用哪种语言?

时间:2008-11-06 16:53:08

标签: artificial-intelligence prototyping

我即将为刚刚加入的技术创业公司制作原型,我正在尝试决定使用哪种语言。它将是一个简单的Web工具,后台有一个MySQL数据库,其间还有一些AI内容。我过去曾经使用过Ruby和PHP一个合理的数量,但是想知道我是否会更好地使用Python甚至是Perl。我的主要编程经验是使用C / C ++ / Java,但我觉得我想要做的事情会让我的生活变得尽可能简单,因为我只是在开发原型。

我猜我正在寻找的是:

  • 发展速度
  • 现有的AI库(例如SVM,神经网络,贝叶斯分类器)
  • 易于与网络界面互动

有人对此有任何想法吗?

20 个答案:

答案 0 :(得分:13)

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

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

我对推荐PHP犹豫不决,因为你永远不知道自己在做什么。 PHP似乎真正在网络上和网络相关的东西上闪耀,但是一旦你需要非web使用它似乎比任何东西都更麻烦(虽然我已经看到PHP的引用像Perl / Python /等一样正常使用有些人的脚本语言。)

Python / Ruby / Perl之间的选择几乎是品味问题。除了Perl有CPAN,它超越了Python和Ruby现在所拥有的任何东西。由于您处于启动状态,因此您可以在CPAN上选择的各种模块可以为您提供更快完成工作的价值。我个人喜欢Perl上的Python(我发现Perl的对象系统在构建你自己的对象时很丑陋,有时我需要花一点时间来弄清楚我几个月前编写的代码是如何工作的)。但我不能否认CPAN的价值。

简而言之,你可能需要一些性能语言来处理一些人工智能的东西,以及为其他所有东西开发脚本语言的简易性和速度,因为启动就是尽快完成产品的制作和殴打你的竞争对手推向市场我很乐意推荐Python,但根据我对初创企业的了解,您需要在决策过程中评估CPAN。只是能够将一堆模块拼凑在一起,可以快速完成你想做的事情。在启动时可以带来巨大的价值。

我还应该补充一点,Perl和Python(我不确定Ruby,但我认为)可以很容易地调用C代码。因此,您可以通过创建一组语言绑定来使用C或C ++库。您也可以尝试在Perl / Python / Ruby中编写整个内容,如果在C或C ++中重写该部分并使用脚本语言调用它则太慢。对于整个启动而言,重写这样的事情在完成任务方面可能非常昂贵。此外,由于您最熟悉C或C ++或Java,因此从一开始就可能值得去那里。

答案 1 :(得分:10)

Ruby,Python和Perl三者都适用于快速开发,原型和Web应用程序。我猜你的问题是这个项目最重要的部分是人工智能。 Perl在CPAN上确实有很多与AI相关的库。查看AI namespace以获取样本。其他名称空间中也有模块,因此请务必搜索“贝叶斯”或“SVM”等特定内容。

我对Python或Ruby的AI库选项知之甚少。我的建议是花一两天的时间对Perl,Python和Ruby中的每个库进行一些认真的研究。既然你之前已经使用过Ruby,那么如果它有你需要的库,那就很简单了,Ruby肯定是web友好的。

就网络方面而言,对于Python,我听到了许多有关Django的好消息。对于Perl,我建议您查看Catalyst

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

答案 2 :(得分:8)

你选择一种语言是因为它是适合这项工作的工具,但你还没有告诉我们这份工作是什么。我们不知道您需要哪种类型的库,业内其他人员用于同一工作,等等。大多数人似乎都在推荐一些完全不了解你真正需要做的事情,这意味着他们真的不知道如何帮助你。

正如您已经指出的那样:

  • 如果你是唯一一个用X语言完成任务的人,那么你将很难获得其他人的帮助。了解其他人已经习惯做类似的任务。

  • 如果您的任务的所有好库都使用其他语言,那么您将不得不重新发明许多轮子。而不是你的问题,询问哪些图书馆完成你的任务的重要部分,然后研究这些。 “AI”对于推荐任何东西都是一个太大的主题。

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

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

答案 3 :(得分:7)

我唯一可以评论的是:PHP基本上是用于网络的DSL,而其他三种(Perl,Ruby,Python)是更通用的语言,没有特定的域名,尽管所有这些都是明确的网络的能力。

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

答案 4 :(得分:6)

AI?绝对是LISP

答案 5 :(得分:4)

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

  • 发展速度 - 你说你已经熟悉它了。

  • 现有的AI库 - 查看JOONE

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

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

答案 6 :(得分:4)

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

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

但是,最强烈建议写这个答案的原因是:

按照你所知道的去做。

新的语言或您“熟悉”的语言非常适合有趣的东西,甚至是一些开发项目和原型设计。但是,如果你需要一些长期适合你的东西,请使用最好的语言来完成你已经知道的任务。在这种情况下,我认为(从你的帖子)它将是Java。

此外 - 它现在是一个原型,但我几乎可以保证,如果它工作,它将成为实际应用程序的默认开始。我真的怀疑你会有时间用另一种语言从头开始重写应用程序,所以再次 - 使用你现在所知道的东西将会在他们“时间紧缩”你并且你必须交付时付出代价。

干杯,

-R

答案 7 :(得分:3)

我认为Perl将是最佳选择。查看Moose了解Perl OOP,对于您正在搜索的其他库,我相信您会在CPAN上找到其中的一些(可能类似于the Bayesian modules

答案 8 :(得分:2)

如果你已经习惯了unix堆栈/环境,我会选择Python - 很简单。

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

答案 9 :(得分:2)

您可能需要查看GLASS:smalltalk,海边和宝石对象数据库。比ruby更好的网络,没有orm,以及最好的建模语言。

答案 10 :(得分:2)

已经提到过Lisp,但我认为Scheme(特别是plt-scheme)在某些方面与Ruby / Python / Perl / PHP一样好。它没有那么多好的库,这是一个减号,但大多数方案都有出色的ffi(外部函数接口),这使得集成外部(C代码)库变得微不足道。方案的另一个优势是其性能特征;你可以经常在数字运算的东西上获得接近C代码类型的性能。

答案 11 :(得分:1)

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

答案 12 :(得分:1)

如果是我,我会在python中编写整个内容,然后对其进行分析并在pyrex中编写瓶颈。当您开发复杂的AI类型算法时,它(1)对于使用高级语言进行开发非常有用,因此您可以快速尝试许多不同的方法,并且(2)可以使用高级语言进行参考实现。测试C / C ++实现。我一直以这种方式使用python / pyrex,它对我很有用。

答案 13 :(得分:1)

我会先看看grails。它很容易在一小时内完成设置和工作,你仍然拥有java的强大功能。

我同意那些说确保你在想路的人。对于没有这样做的人,我一直是受益者的太多次受益者。

答案 14 :(得分:0)

为你管理记忆的东西。他们声称,技术变革可以最大限度地提高生产力。我认为p#磅很难被击败。

答案 15 :(得分:0)

在这种情况下,PHP甚至是SSI都是我选择进行原型设计的选择。我的理由:我不必担心模板系统,因为它们都是模板系统。毫无意识地浪费时间来决定一个仅仅是原型的模板系统。特别是SSI是一个引人注目的选择,您仍然可以选择CGI处理的语言,并且对于返回非原子数据,您可以发出JSON,然后允许UI使用Javascript循环返回的数据结构。 / p>

答案 16 :(得分:0)

关于Python:

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

使用Pyrex时,你需要注意使用反射,因为它无法完全编译使用某些反射结构的代码(特别是locals()和globals())。我之所以提到这个限制只是因为AI和探索性编码(由你的“原型”评论所暗示)经常比其他类型的应用领域更多地利用反射。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

答案 19 :(得分:-1)

如果您是Mac用户,请查看WebObjects来完成所有框架内容,并且您可以专注于使用Java编写有意义的神经代码。