Pergunta

Eu estou a ponto de produzir um protótipo para uma startup de tecnologia que eu só se juntou, e eu estou tentando decidir qual idioma usar. Vai ser uma ferramenta web simples com um banco de dados MySQL no fundo e algumas coisas AI acontecendo no meio. Eu usei Ruby e PHP uma quantidade razoável no passado, mas pergunto se eu poderia ser melhor para ir com Python ou mesmo Perl. A minha principal experiência de programação é com C / C ++ / Java, mas eu sinto que eu quero ir para algo que vai fazer a minha vida mais fácil possível, já que estou apenas a desenvolver um protótipo.

Eu acho que o que eu estou procurando é:

  • velocidade de desenvolvimento
  • (por exemplo SVMs, redes neurais, classificadores Bayesianos) bibliotecas AI existente
  • facilidade de interagir com uma interface web

Alguém tem alguma opinião sobre isso?

Foi útil?

Solução

Protótipo ou não, se você está triturando enormes quantidades de números, você pode precisar a velocidade de um Java ou C / C ++, pelo menos para as partes de IA. Eu realmente não sei exatamente o que você está fazendo, mas um monte de coisas AI é computação intensiva. Você pode encontrar Python VS C faz a diferença de 10 minutos a cerca de 2 horas ou mais (ou de um dia para um mês).

Provavelmente a sua melhor aposta é uma abordagem híbrida. Java / C ++ ou algo para o AI (eu só digo Java porque tem uma tonelada de bibliotecas, eu ainda tenho um livro sobre Data Mining que discute várias bibliotecas em Java que estão disponíveis gratuitamente e realizar algumas das técnicas). E Python / Ruby / Perl para tudo o resto (como as partes da web).

Estou hesitante para recomendar PHP, porque você nunca sabe o que você pode estar fazendo. PHP parece realmente brilhar na web e para web relacionados coisas, mas uma vez que você precisa usos não web parece ser mais complicado do que qualquer coisa (embora eu tenha visto referências a PHP está sendo usado como um Perl / Python / etc. Como normais linguagem de script por algumas pessoas).

A escolha entre Python / Ruby / Perl é quase uma questão de gosto. Só que Perl tem CPAN que é além de qualquer coisa Python e Ruby tem agora. Como você está em uma start up, a grande variedade de módulos no CPAN que você pode apenas tapa juntos podem fornecer valor para você em fazer as coisas mais cedo. Pessoalmente eu gosto de Python sobre Perl (I encontrar sistema de objetos do Perl para ser feio quando a construção de seus próprios objetos, e às vezes leva-me um pouco para descobrir como código que eu escrevi meses atrás obras). Mas eu não posso negar o valor do CPAN.

Assim, em breve, você provavelmente precisará de uma linguagem desempenho para algumas das coisas AI e a facilidade e velocidade de desenvolvimento de uma linguagem de script para tudo o resto, porque uma start up é tudo sobre como obter o produto feito o mais rapidamente possível e bater seus concorrentes para o mercado. Eu adoraria recomendar Python, mas com base no que eu sei sobre start-ups, você precisa avaliar CPAN em seu processo de decisão. Basta ser capaz de bater um monte de módulos juntos que fazem o que você quer rapidamente pode ser de grande valor em uma start up.

Gostaria também de acrescentar que Perl e Python (não tenho certeza sobre Ruby, mas eu acho que a) pode chamar o código C com bastante facilidade. Então, você poderia usar C ou C ++ bibliotecas através da criação de um conjunto de ligações para o idioma. Você também pode tentar escrever a coisa toda em Perl / Python / Ruby e se for muito lento reescrever essa parte em C ou C ++ e chamando-o a partir da linguagem de script. Com todo o arranque coisa reescrever como esta pode ser muito caro em termos de obter algo feito. Também desde que você está mais confortável em C ou C ++ ou Java pode valer a pena apenas indo lá desde o início.

Outras dicas

Os três Ruby, Python e Perl são bons para rápido desenvolvimento, protótipos e aplicações web. Eu estou supondo que a partir de sua pergunta que a parte mais substancial desse projeto é a peça AI. Perl tem um grande número de bibliotecas relacionadas com a AI no CPAN. Confira o AI namespace para uma amostragem. Há também módulos em outros namespaces para certificar-se procurar coisas específicas, como "Bayes" ou "SVM".

Eu não sei muito sobre as opções de biblioteca AI para Python ou Ruby. Minha recomendação é tomar um ou dois dias e fazer alguma pesquisa séria sobre as bibliotecas para cada um Perl, Python e Ruby. Desde que você já baixou Ruby antes, se isso tem as bibliotecas que você precisa, é um acéfalo, e Ruby é certamente web amigável.

Quanto ao lado da web vai, para Python, eu ouvi muitas coisas boas sobre Django . Para Perl, eu recomendo dar uma olhada Catalisador .

Você vai notar que eu ignorado PHP. Isso é algo que eu tento fazer o máximo possível;)

Você escolhe um idioma, porque é a ferramenta certa para o trabalho, mas você não nos disse que o trabalho é ainda. Nós não sabemos que tipos de bibliotecas que você precisa, o que as outras pessoas no uso da indústria para o mesmo trabalho, e assim por diante. A maioria das pessoas parecem recomendar algo com completa ignorância do que você realmente precisa fazer, o que significa que eles realmente não têm idéia de como ajudá-lo.

Como você já tem a pontas:

  • Se você é a única pessoa que está fazendo a sua tarefa em linguagem X, você vai ter um tempo difícil obter ajuda de ninguém. Descobrir o que outras pessoas já usaram para fazer tarefas semelhantes.

  • Se todas as boas bibliotecas para a sua tarefa estão em outro idioma, você vai ter que reinventar um monte de rodas. Em vez de sua pergunta, perguntar sobre quais as bibliotecas fazem as partes importantes da sua tarefa, em seguida, pesquisar os. "AI" é grande demais de um tópico para recomendar nada.

  • Se ninguém no trabalho sabe o idioma que você deseja usar, mesmo que seja uma linguagem de prototipagem rápida, você vai perder a rapidez como eles têm de aprender a língua. Aprender uma língua é mais do que saber sua sintaxe; é saber o seu idioma, bibliotecas, documentação, e muito mais. O que as pessoas no trabalho já sabe? O que eles vão tolerar?

  • Você realmente quer para tornar a sua vida mais fácil, ou torná-lo mais fácil para o seu cliente? Essas coisas são por vezes em desacordo, então você deve considerar se você está realmente entregando o valor das necessidades do cliente. Protótipos parecem muitas vezes se voltam para o código de produção, uma vez que você começar, você está sempre preso com ele.

A única coisa que posso realmente comentar é o seguinte: PHP é bascially um DSL para a web, enquanto que os outros três (Perl, Ruby, Python) são mais línguas de uso geral que não têm nenhum domínio específico, embora todos são definitivamente web-capable.

Em termos de seu segundo ponto, eu acho que PHP será provavelmente a pior escolha para fora de sua lista.

AI? Definitivamente LISP

Eu acho que Java iria tornar sua vida mais fácil.

  • velocidade de desenvolvimento -. Você disse que já está familiarizado com ele

  • bibliotecas existentes AI - confira Joone

  • facilidade de interagir com uma interface web -. Servlets, JSP, muitos frameworks Web a lista

Java também se integra facilmente com MySQL usando JDBC.

Concordo com as outras respostas que recomendam Java, especialmente porque você pode precisar dele de velocidade no código AI, e para a bibliotecas etc, que estão disponíveis.

A combinação de Java (servlets) e JSP provavelmente funcionaria bem.

No entanto, a razão para escrever esta resposta é mais recomendo:

Vá com o que você sabe.

Novas linguagens ou aqueles que você "espécie de" saber são grandes para coisas divertidas, e até mesmo para alguns projetos de desenvolvimento e prototipagem. Mas se você precisa de algo que irá trabalhar para você, a longo prazo, usar a melhor linguagem para a tarefa que você já conhece. Neste caso, acho que (a partir do seu post) seria Java.

Além disso - é um protótipo agora, mas eu quase posso garantir que se ele funciona, ele se tornará o padrão de início da aplicação real. Eu realmente duvido que você vai ter o luxo de tempo para reescrever o aplicativo a partir do zero em outro idioma, por isso novamente - usando o que você sabe agora vai pagar dividendos mais tarde, quando eles "tempo de crise" você e você deve entregar

.

Cheers,

-R

Eu acho que Perl seria o caminho a percorrer. Confira Moose para Perl OOP, e quanto as outras bibliotecas que você está procurando, eu tenho certeza que você vai encontrar alguns deles na CPAN (talvez algo como a Bayesian módulos )

Se você está acostumado com o unix pilha / ambiente, eu iria para Python -. Agradável e fácil

EDIT: Você pode implementar a parte de trituração de número em C ou C ++ e torná-lo um módulo para uso em seu código python. Dessa forma, você obtém o código de trituração de número rápido, e easy-to-programa de cola.

Lisp foi mencionado, mas acho que Scheme (em particular plt-scheme ) está em alguns aspectos, como bom uma escolha como ruby ??/ Python / Perl / PHP. Ele não tem como muitas bibliotecas bom quanto alguns daqueles, que é um sinal de menos, mas a maioria dos esquemas têm excelente ffi (interface de função externa), o que torna trivial para integrar bibliotecas externas (código C). Outro ponto forte do esquema é o seu perfil de desempenho; Muitas vezes você pode obter um desempenho próximo tipo de código C no material de trituração de número.

Você pode querer dar uma olhada em GLASS: Smalltalk, à beira-mar e um banco de dados pedra preciosa objeto. Melhor web de rubi, sem ORM, ea melhor linguagem de modelagem.

Eu segundo dando uma olhada em grails. É definitivamente fácil de configurar e começar a trabalhar dentro de uma hora, e você ainda tem o poder de debaixo java.

Eu também concordo com aqueles que dizem ter certeza que você está pensando no caminho. Eu fui o caminho beneficiário muitas vezes de quem não tinha.

Se fosse comigo, eu iria escrever a coisa toda em python, em seguida, o perfil dele e escrever os gargalos em pirex . Quando você está desenvolvendo complexos algoritmos AI-tipo, é (1) útil desenvolver em uma linguagem de alto nível para que você possa rapidamente tentar lotes de diferentes abordagens e (2) útil ter uma implementação de referência em uma linguagem de alto nível para testar a aplicação C / C ++ contra. Eu uso python / pirex desta forma o tempo todo e ele funciona bem para mim.

Se você está chicoteando acima de um protótipo rápido e sujo, então é provavelmente dentro de seu interesse para manter a algo que você já conhece, especialmente se o protótipo é mostrar algum outro pedaço de funcionalidade fantasia; muitos desempenho não ser uma preocupação enorme aqui.

Tente Python usando mod_python. Como uma linguagem, tem um monte de grande aprendizado de máquina e linguagem natural de processamento módulos, e é muito fácil de ler, aprender e usar.

Tendo em conta que não é um aplicativo CRUD simples, Java pode ser uma boa opção. Dê uma olhada em Grails ( http://grails.org/ ) oferece muito do andaime e código de geração que um quadro como trilhos faz, mas ofertas sem costura integração com qualquer outra biblioteca Java ou framework lá fora.

PHP ou mesmo SSI seria a minha escolha para prototipagem neste caso. Meu raciocínio: Eu não precisa se preocupar com um sistema de templates, já que ambos são sistemas de templates. Sem perder tempo sentido de decidir sobre um sistema de templates para um mero protótipo. SSI em particular, é uma opção atraente, você ainda tem a escolha de idiomas para o processamento de CGI, e, como para o regresso de dados não-atômica, você pode emitir JSON e, em seguida, permitir que a interface do usuário para fazer um loop sobre a estrutura de dados retornados usando Javascript.

Algo que gerencia a memória para você. Eles afirmam que é a mudança de tecnologia que permita o maior aumento na produtividade. Acho pound-for-pound c # é incrivelmente difícil de bater.

Em relação Python:

Se você precisar de desempenho para o material de computação intensiva, olhada Numeric Python http://numpy.scipy.org/ e Pyrex http: //www.cosc.canterbury .ac.nz / greg.ewing / python / Pyrex / . Numeric Python é uma extensão Python que fornece uma série de facilidades numéricos old-school como o código C rápido - matemática vetor (uma ferramenta essencial para o trabalho ANN), etc. Pyrex é uma ferramenta que essencialmente permite que você compilar o código Python para baixo a um executável nativa.

Com Pyrex você precisa ter cuidado sobre o uso de reflexão, porque não pode código totalmente compilação que usa certas construções reflexivas (nomeadamente locals () e globals ()). Menciono esta restrição apenas porque ambos AI e exploratória codificação (implícitos por sua observação "protótipo") muitas vezes tirar proveito de reflexão mais do que outros tipos de áreas de aplicação fazer.

Se você é um usuário de Mac têm uma olhada WebObjects para fazer todo o coisas quadro, e você pode se concentrar em escrever o código neural significativa em Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top