unidos segunda que primer oficiales oficial llego lengua ingles idiomas idioma eua estudian estados español cual como aleman artificial-intelligence prototyping

artificial intelligence - segunda - ¿Qué idioma debería usar?



primer idioma de estados unidos (20)

Estoy a punto de producir un prototipo para una nueva empresa de tecnología a la que me acabo de unir, y estoy tratando de decidir qué idioma usar. Va a ser una herramienta web simple con una base de datos MySQL en segundo plano y algunas cosas de AI sucediendo en el medio. He usado Ruby y PHP una cantidad razonable en el pasado, pero me pregunto si sería mejor irme con Python o incluso con Perl. Mi principal experiencia de programación es con C / C ++ / Java, pero siento que deseo buscar algo que haga mi vida lo más fácil posible ya que estoy desarrollando un prototipo.

Creo que lo que estoy buscando es:

  • velocidad de desarrollo
  • bibliotecas de AI existentes (por ejemplo, SVM, redes neuronales, clasificadores bayesianos)
  • facilidad de interacción con una interfaz web

¿Alguno tiene alguna idea sobre esto?


¿AI? Definitivamente LISP


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


Creo que Java haría tu vida más fácil.

  • velocidad de desarrollo: dijiste que ya te conocías.

  • bibliotecas de AI existentes - echa un vistazo a JOONE

  • facilidad para interactuar con una interfaz web: servlets, JSP, demasiados frameworks web para listar.

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


Creo que Perl sería el camino a seguir. Eche un vistazo a Moose para Perl OOP, y en cuanto a las otras bibliotecas que está buscando, estoy seguro de que encontrará algunas en CPAN (tal vez algo así como los módulos bayesianos )


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 de la generación de andamios y códigos que hace un framework como rails, pero ofrece una integración perfecta con cualquier otra biblioteca o framework de Java.


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 la gente parece estar recomendando algo con total ignorancia de lo que realmente necesitas hacer, lo que significa que realmente no tienen idea de cómo ayudarte.

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. Averigüe qué otras personas ya han utilizado 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 hacen las partes importantes de su tarea, luego investigue aquellas. "AI" es un tema demasiado grande para recomendar cualquier cosa.

  • Si nadie en el trabajo conoce el idioma que desea utilizar, incluso si se trata de un lenguaje de prototipado rápido, perderá la rapidez ya que tendrá que aprender el idioma. Aprender un idioma es más que conocer su sintaxis; es conocer sus expresiones idiomáticas, bibliotecas, documentación y mucho más. ¿Qué saben las personas en el trabajo? ¿Qué tolerarán?

  • ¿Realmente desea hacer su vida más fácil o hacerla más fácil para su 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 comienzas, a menudo te quedas atascado.


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 muy bien.

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

Ve con lo que sabes

Los nuevos idiomas o los que "conoces" son geniales para divertirte, e incluso para algunos proyectos de desarrollo y creación de prototipos. Pero si necesita algo que le funcione a largo plazo, use el mejor lenguaje para la tarea QUE YA CONOCE. En este caso, creo (de su 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 de tiempo para volver a escribir la solicitud desde cero en otro idioma, así que de nuevo, usar lo que sabe ahora le reportará dividendos más adelante cuando lo "cronometra" y debe cumplir.

Aclamaciones,

-R


Lisp ha sido mencionado, pero creo que Scheme (en particular , el esquema plt ) es en algunos aspectos una buena opción como Ruby / Python / Perl / PHP. No tiene tantas bibliotecas buenas como algunas de ellas, lo que es un inconveniente, pero la mayoría de los esquemas tienen una excelente interfaz ffi (función extranjera), lo que hace que sea trivial integrar bibliotecas externas (código C). Otra fortaleza del esquema es su perfil de rendimiento; A menudo puedes acercarte al rendimiento del tipo de código C en cosas que hacen crujir números.


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

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


Los tres de Ruby, Python y Perl son buenos para el desarrollo rápido, prototipos y aplicaciones web. Por su pregunta, supongo que la parte más importante de este proyecto es la pieza de AI. Perl tiene un buen número de bibliotecas relacionadas con AI en CPAN. Consulte el espacio de nombres de AI para 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 de inteligencia artificial para Python o Ruby. Mi recomendación es tomar uno o dos días e investigar seriamente las bibliotecas de Perl, Python y Ruby. Dado que ya has usado Ruby antes, si eso tiene las bibliotecas que necesitas, es obvio, y Ruby ciertamente es amigable con la web.

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

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


Me gustaría echar un vistazo a los griales. Definitivamente es fácil de configurar y trabajar en una hora, y todavía tienes el poder de Java por debajo.

También estoy de acuerdo con aquellos que dicen que se aseguren de estar pensando en el futuro. He sido el beneficiario demasiadas veces de aquellos que no lo hicieron.


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 sobre un sistema de plantillas para un simple prototipo. SSI, en particular, es una opción atractiva, todavía tiene su elección de idiomas para el procesamiento CGI, y en cuanto a devolver datos no atómicos, puede emitir JSON y luego permitir que la interfaz de usuario recorra la estructura de datos devuelta utilizando Javascript.


Prototipo o no, si está machacando grandes cantidades de números, puede necesitar la velocidad de un Java o C / C ++ al menos para las partes de IA. Realmente no sé exactamente lo que estás haciendo, pero muchas cosas de IA requieren mucha computación. Es posible que Python VS C haga una 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 así para la IA (solo digo Java porque tiene muchas bibliotecas, incluso tengo un libro sobre Data Mining 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 las partes web).

No me gusta 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 web, parece ser más engorroso que cualquier otra cosa (aunque he visto referencias a PHP como un Perl / Python / etc. lenguaje de scripting por algunas personas).

La elección entre Python / Ruby / Perl es casi una cuestión de gusto. Excepto que Perl tiene CPAN que está más allá de cualquier cosa que Python y Ruby tengan ahora. Ya que está en una nueva puesta en marcha, la amplia selección de módulos en CPAN que puede simplemente unir puede proporcionarle valor para hacer las cosas más rápido. Personalmente, me gusta Python sobre Perl (creo que el sistema de objetos de Perl es feo cuando construyo tus propios objetos, y algunas veces me lleva un poco averiguar cómo funciona el código que escribí hace meses). Pero no puedo negar el valor de CPAN.

En resumen, es probable que necesite un lenguaje de rendimiento para algunas de las cosas de AI y la facilidad y velocidad de desarrollo de un lenguaje de scripting para todo lo demás, porque una puesta en marcha consiste en lograr que el producto se realice lo antes posible y superando a sus competidores. mercado. Me encantaría recomendar Python, pero en función de lo que sé sobre las nuevas empresas, debe evaluar CPAN en su proceso de decisión. El solo hecho de poder juntar un montón de módulos que hacen lo que desea rápidamente puede ser de gran valor en una nueva empresa.

También debería agregar que Perl y Python (no estoy seguro acerca de Ruby, pero creo que) pueden llamar al código C con bastante facilidad. Por lo tanto, podría usar 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 reescribiendo esa parte en C o C ++ y llamándola desde el lenguaje de scripting. Con todo el asunto de la puesta en marcha, la reescritura de esta manera 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 allí desde el principio.


Pruebe Python usando Mod_Python. Como lenguaje, tiene muchos módulos de gran tamaño para el aprendizaje automático de la máquina y el procesamiento del lenguaje natural, y es muy fácil de leer, aprender y usar.


Si eres un usuario de Mac, echa un vistazo a WebObjects para hacer todo el trabajo de framework, y puedes concentrarte en escribir el código neuronal significativo en Java.


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

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


Si fuera yo, escribiría todo en python, luego lo perfilaría y escribiría los cuellos de botella en pyrex . Cuando desarrolla algoritmos complejos de tipo AI, (1) es útil desarrollarlos en un lenguaje de alto nivel para que pueda probar rápidamente muchos enfoques diferentes y (2) sea útil 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 funciona bien para mí.


En cuanto a Python:

Si necesita rendimiento para cosas que requieren mucha informática, consulte Numeric Python 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 una gran cantidad de recursos numéricos de la vieja escuela como el rápido código C - math vectorial (una herramienta esencial para el trabajo ANN), etc. Pyrex es una herramienta que esencialmente te permite compilar el código Python en una ejecutable nativo.

Con Pyrex, debe tener cuidado con el uso de la reflexión, ya que no puede compilar por completo el código que utiliza ciertas construcciones reflectantes (especialmente locals () y globals ()). Menciono esta restricción solo porque tanto AI como la codificación exploratoria (implícita en su observación "prototipo") a menudo aprovechan la reflexión más que otros tipos de áreas de aplicación.


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, no orm, y el mejor lenguaje de modelado.


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