Pregunta

Estoy a punto de producir un prototipo para una startup tecnológica a la que me acabo de unir, y estoy tratando de decidir qué idioma usar. Será una herramienta web simple con una base de datos MySQL en segundo plano y algunas cosas de inteligencia artificial en el medio. He usado Ruby y PHP una cantidad razonable en el pasado, pero me pregunto si podría estar mejor con Python o incluso con Perl. Mi experiencia principal en programación es con C / C ++ / Java, pero siento que quiero ir por algo que me haga la vida lo más fácil posible ya que solo estoy desarrollando un prototipo.

Supongo que lo que estoy buscando es:

  • velocidad de desarrollo
  • bibliotecas de IA existentes (por ejemplo, SVM, redes neuronales, clasificadores bayesianos)
  • facilidad para interactuar con una interfaz web

¿Alguien tiene alguna idea sobre esto?

¿Fue útil?

Solución

Prototipo o no, si está acumulando grandes cantidades de números, puede necesitar la velocidad de un Java o C / C ++ al menos para las partes de AI. Realmente no sé exactamente lo que estás haciendo, pero muchas cosas de inteligencia artificial requieren mucha computación. Puede encontrar que Python VS C hace la diferencia de 10 minutos a casi 2 horas o más (o de un día a un mes).

Probablemente su mejor apuesta es un enfoque híbrido. Java / C ++ o algo para la IA (solo digo Java porque tiene un montón de bibliotecas, incluso tengo un libro sobre minería de datos que analiza varias bibliotecas en Java que están disponibles gratuitamente y realizan algunas de las técnicas). Y Python / Ruby / Perl para todo lo demás (como los elementos web).

Dudo en recomendar PHP porque nunca sabes lo que puedes estar haciendo. PHP parece brillar realmente en la web y para cosas relacionadas con la web, pero una vez que necesita usos no relacionados con la web, parece ser más engorroso que cualquier otra cosa (aunque he visto referencias a PHP que se usa como un Perl / Python / etc. Como normal lenguaje de script de algunas personas).

La elección entre Python / Ruby / Perl es casi una cuestión de gustos. Excepto que Perl tiene CPAN que está más allá de lo que Python y Ruby tienen en este momento. Dado que está en una etapa inicial, la amplia selección de módulos en CPAN que puede agrupar puede proporcionarle valor para hacer las cosas antes. Personalmente, me gusta Python sobre Perl (encuentro que el sistema de objetos de Perl es feo cuando construyo tus propios objetos, y a veces me lleva un poco descubrir cómo funciona el código que escribí hace meses). Pero no puedo negar el valor de CPAN.

Entonces, en resumen, es probable que necesite un lenguaje de rendimiento para algunas de las cosas de IA y la facilidad y velocidad de desarrollo de un lenguaje de scripting para todo lo demás porque una puesta en marcha se trata de hacer el producto lo antes posible y vencer sus competidores al mercado Me encantaría recomendar Python, pero según lo que sé acerca de las nuevas empresas, debe evaluar CPAN en su proceso de decisión. El solo hecho de poder agrupar un montón de módulos que hacen lo que quieres rápidamente puede ser de gran valor en un inicio.

También debería agregar que Perl y Python (no estoy seguro acerca de Ruby, pero creo que eso) pueden llamar al código C con bastante facilidad. Por lo tanto, podría usar las bibliotecas C o C ++ creando un conjunto de enlaces al lenguaje. También podría intentar escribir todo en Perl / Python / Ruby y, si es demasiado lento, volver a escribir esa parte en C o C ++ y llamarlo desde el lenguaje de secuencias de comandos. Con toda la puesta en marcha, la reescritura como esta puede ser muy costosa en términos de hacer algo. Además, dado que se siente más cómodo en C o C ++ o Java, puede valer la pena ir desde el principio.

Otros consejos

Los tres Ruby, Python y Perl son buenos para el desarrollo rápido, prototipos y aplicaciones web. Supongo por su pregunta que la parte más sustancial de este proyecto es la pieza de IA. Perl tiene bastantes bibliotecas relacionadas con AI en CPAN. Consulte el espacio de nombres AI para obtener una muestra. También hay módulos en otros espacios de nombres, así que asegúrese de buscar cosas específicas como "Bayes" o "SVM".

No sé mucho sobre las opciones de la biblioteca AI para Python o Ruby. Mi recomendación es tomar un día o dos y hacer una investigación seria sobre las bibliotecas para cada uno de Perl, Python y Ruby. Como ya ha usado Ruby antes, si tiene las bibliotecas que necesita, es obvio, y Ruby es ciertamente amigable para la web.

En lo que respecta al lado web, para Python, he escuchado muchas cosas buenas sobre Django . Para Perl, recomendaría echar un vistazo a Catalyst .

Notarás que ignoré PHP. Eso es algo que trato de hacer tanto como sea posible;)

Eliges un idioma porque es la herramienta adecuada para el trabajo, pero aún no nos has dicho cuál es el trabajo. No sabemos qué tipo de bibliotecas necesitará, qué otras personas en la industria usan para el mismo trabajo, etc. La mayoría de las personas parecen recomendar algo con total ignorancia de lo que realmente necesita hacer, lo que significa que realmente no tienen idea de cómo ayudarlo.

Como ya has señalado:

  • Si usted es la única persona que realiza su tarea en el lenguaje X, tendrá dificultades para obtener ayuda de otra persona. Descubra lo que otras personas ya han usado para realizar tareas similares.

  • Si todas las buenas bibliotecas para su tarea están en otro idioma, tendrá que reinventar muchas ruedas. En lugar de su pregunta, pregunte qué bibliotecas realizan las partes importantes de su tarea, luego investigue esas. " AI " es un tema demasiado grande para recomendar algo.

  • Si nadie en el trabajo sabe el idioma que desea usar, incluso si es un lenguaje de creación rápida de prototipos, perderá la rapidez ya que tiene que aprender el idioma. Aprender un idioma es más que conocer su sintaxis; es conocer sus modismos, bibliotecas, documentación y mucho más. ¿Qué saben ya las personas en el trabajo? ¿Qué van a tolerar?

  • ¿Realmente quieres hacer tu vida más fácil o hacerla más fácil para tu cliente? Esas cosas a veces están en desacuerdo, por lo que debe considerar si realmente está entregando el valor que el cliente necesita. Los prototipos parecen convertirse a menudo en el código de producción, por lo que una vez que comienza, a menudo se queda atrapado con él.

Lo único que realmente puedo comentar es esto: PHP es básicamente un DSL para la web, mientras que los otros tres (Perl, Ruby, Python) son lenguajes de propósito más general que no tienen un dominio específico, aunque todos son definitivamente compatible con la web.

En términos de su segundo punto, creo que PHP probablemente será la peor opción de su lista.

AI? Definitivamente LISP

Creo que Java te facilitaría la vida.

  • velocidad de desarrollo: ha dicho que ya está familiarizado con él.

  • bibliotecas de IA existentes: consulte JOONE

  • facilidad para interactuar con una interfaz web: servlets, JSP, demasiados marcos web para enumerar.

Java también se integra fácilmente con MySQL usando JDBC.

Estoy de acuerdo con las otras respuestas que recomiendan Java, especialmente porque puede necesitar su velocidad en el código AI, y para las bibliotecas, etc., que están disponibles.

Una combinación de Java (servlets) y JSP probablemente funcionaría bien.

Sin embargo, la razón para escribir esta respuesta es la más recomendable:

Ve con lo que sabes.

Nuevos idiomas o los que usted '' clasifica '' Los conocimientos son excelentes para cosas divertidas, e incluso para algunos proyectos de desarrollo y creación de prototipos. Pero si necesita algo que funcione para usted a largo plazo, use el mejor lenguaje para la tarea que ya conoce. En este caso, creo que (de tu publicación) sería Java.

Además, ahora es un prototipo, pero casi puedo garantizar que si funciona, se convertirá en el inicio predeterminado de la aplicación real. Realmente dudo que tenga el lujo del tiempo para volver a escribir la aplicación desde cero en otro idioma, así que de nuevo, usar lo que sabe ahora pagará dividendos más tarde cuando "crujen el tiempo". usted y usted deben entregar.

Saludos,

-R

Creo que Perl sería el camino a seguir. Consulte Moose para Perl OOP, y en cuanto a estoy seguro de que encontrará algunas de las otras bibliotecas en CPAN (quizás algo así como los módulos bayesianos )

Si estás acostumbrado a la pila / entorno de Unix, optaría por Python, agradable y fácil.

EDITAR: puede implementar la parte de cálculo de números en C o C ++ y convertirla en un módulo para usar en su código de Python. De esta manera, obtienes un código rápido de numeración y pegamento fácil de programar.

Lisp ha sido mencionado, pero creo que Scheme (en particular plt-scheme ) está en Algunos aspectos son una opción tan buena como Ruby / Python / Perl / PHP. No tiene tantas bibliotecas buenas como algunas de ellas, lo cual es un inconveniente, pero la mayoría de los esquemas tienen una excelente ffi (interfaz de función externa), lo que hace que sea trivial integrar bibliotecas externas (código C). Otra fortaleza del esquema es su perfil de rendimiento; A menudo puede obtener un rendimiento similar al del código C en cosas de números cruzados.

Es posible que desee echar un vistazo a GLASS: smalltalk, seaside y una base de datos de objetos de piedras preciosas. Mejor web que ruby, sin orm, y el mejor lenguaje de modelado.

En segundo lugar, echaría un vistazo a los griales. Definitivamente es fácil de configurar y comenzar a trabajar en una hora, y aún tienes el poder de Java debajo.

También estoy de acuerdo con los que dicen que asegúrese de pensar en el futuro. He sido el beneficiario demasiadas veces de quienes no lo han hecho.

Si fuera yo, escribiría todo en Python, luego lo perfilaría y escribiría los cuellos de botella en pyrex . Cuando está desarrollando algoritmos complejos de tipo AI, es (1) útil desarrollar en un lenguaje de alto nivel para que pueda probar rápidamente muchos enfoques diferentes y (2) útil para tener una implementación de referencia en un lenguaje de alto nivel para probar la implementación de C / C ++ en contra. Uso python / pyrex de esta manera todo el tiempo y me funciona bien.

Si está preparando un prototipo rápido y sucio, entonces probablemente le interese atenerse a algo que ya sabe, particularmente si el prototipo es para mostrar alguna otra funcionalidad elegante; el rendimiento no puede ser una gran preocupación aquí.

Pruebe Python usando Mod_Python. Como lenguaje, tiene muchos módulos excelentes de aprendizaje automático y procesamiento de lenguaje natural, y es realmente fácil de leer, aprender y usar.

Dado que no es una aplicación CRUD simple, Java podría ser una buena opción. Eche un vistazo a Grails ( http://grails.org/ ) que ofrece gran parte del andamiaje y la generación de código que un marco como lo hace rails, pero ofrece una integración perfecta con cualquier otra biblioteca o marco Java que exista.

PHP o incluso SSI sería mi elección para la creación de prototipos en este caso. Mi razonamiento: no tengo que preocuparme por un sistema de plantillas, ya que ambos SON sistemas de plantillas. No tiene sentido perder el tiempo decidiendo un sistema de plantillas para un mero prototipo. SSI en particular es una opción convincente, todavía tiene su elección de idiomas para el procesamiento de CGI, y en cuanto a la devolución de datos no atómicos, puede emitir JSON y luego permitir que la UI recorra la estructura de datos devuelta usando Javascript.

Algo que gestiona la memoria para ti. Afirman que es el cambio tecnológico el que da el mayor impulso a la productividad. Creo que libra por libra c # es increíblemente difícil de superar.

Con respecto a Python:

Si necesita rendimiento para el uso intensivo de la computación, consulte Python numérico http://numpy.scipy.org/ y Pyrex http: //www.cosc.canterbury .ac.nz / greg.ewing / python / Pyrex / . Numeric Python es una extensión de Python que proporciona muchas funciones numéricas de la vieja escuela como código C rápido: matemática vectorial (una herramienta esencial para el trabajo de ANN), etc. Pyrex es una herramienta que esencialmente le permite compilar código Python en un ejecutable nativo.

Con Pyrex, debe tener cuidado al usar la reflexión, ya que no puede compilar completamente el código que usa ciertas construcciones reflexivas (especialmente locales () y globales ()). Menciono esta restricción solo porque tanto la IA como la codificación exploratoria (implícita en su '' prototipo '') a menudo aprovechan la reflexión más que otros tipos de áreas de aplicación.

Si es un usuario de Mac, eche un vistazo a WebObjects para hacer todos los marco, y puede concentrarse en escribir el código neuronal significativo en Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top