2012-06-05 10 views
20

DivulgaciónEscribir un gran proyecto utilizando lenguaje de programación J

Esta es una pregunta "en general", tal vez sin una respuesta concreta, pero es no pretende ser una guerra de mensajes. Realmente me gustaría obtener información antes de embarcarme en mi proyecto.

tengo que poner en práctica un proyecto en particular lo que realmente se benefician de las estructuras de datos y abstracciones proporcionado por J. Este es un gran proyecto, destinado a funcionar como el componente central de un gran (real suave tiempo) aplicación web. Entonces el rendimiento es muy importante.

He estado tratando de encontrar información sobre el uso de J en grandes proyectos comerciales o de código abierto, pero no puedo encontrar ninguna información sobre la cual basar mi decisión de seguir adelante. Tengo:

  • Busqué Google Trends, pero recibí la siguiente respuesta: "Sus términos, el lenguaje de programación, no tienen suficiente volumen de búsqueda para mostrar gráficos".
  • buscado en libre (código), y no se ha encontrado un solo proyecto usando J
  • Buscado en Sourceforge, y no se ha encontrado un solo proyecto usando J
  • buscado en Lambda el último, y sólo encontraron los following discussion que oblicuamente referencias APL
  • Buscado general en Google y Bing, y no pudo encontrar ningún ejemplo de proyectos a gran escala en el despliegue que utilizan J

I estaría cometiendo un error en el uso de J para mi proyecto? Parece tener todo lo que quiero, especialmente en términos de estructuras de datos, abstracción y concisión. Claro, podría pasar tiempo simulando todas esas propiedades en F #, o C#, o C++, pero J ya las tiene, así que ...

¿Puede alguien decirme algunos inconvenientes de usar J (o cualquier lenguaje oscuro) para proyectos importantes? ¿No es lo suficientemente eficiente? ¿No tiene bibliotecas? ¿Algo más que deba saber?

Gracias de antemano por sus respuestas.

+6

Probablemente el principal inconveniente de un lenguaje oscuro en un ** gran ** proyecto es que es difícil encontrar ** muchos ** desarrolladores con experiencia en ese idioma. –

+0

¿Qué estructuras de datos clave y abstracciones presentes en J no están presentes en los lenguajes funcionales? –

+0

@DonStewart, para ser sincero, me resultaría difícil ofrecer ejemplos específicos de estructuras de datos, porque sé que con un poco de trabajo todos estos se pueden replicar en Haskell o en cualquier otro idioma. Pero las matrices hiperdimensionales son muy útiles para mí. Y el hecho de que puedo manipularlos con unos pocos verbos cortos significa que puedo llegar a la "carne" del trabajo, sin preocuparme demasiado por el código repetitivo. Por supuesto, todo esto es discutible si, por ejemplo, J no tiene bibliotecas XML listas (y un par de otras cosas). – Shredderroy

Respuesta

16

Creo que J es adecuado para uso crítico en proyectos grandes e importantes. Pero también creo que J sería una elección muy aventurera (léase: de alto riesgo) para un proyecto así.

Las dos compañías de buen tamaño que conozco que utilizan J como la tecnología central para un importante sistema de software son Cognos y Luen Thai. (Cognos ha sido adquirido por IBM.) Algunos debates sobre estos sistemas, o al menos algunas experiencias que los involucran, se han mostrado en el J Chat Forum. Sin embargo, no hay mucha información allí.

Puede haber otros sistemas de software grandes que se basan en J, pero no los haya identificado (y ya estoy guardando mi ojo hacia fuera durante años.)

Dmitri Chubarov es correcto pensar que la dificultad para encontrar adecuada desarrolladores expertos podrían ser un problema significativo. Además, creo que es difícil para las personas que aún no han desarrollado habilidades significativas en un lenguaje de matriz estimar cuánto esfuerzo les tomará llegar a ser buenos en la programación en J.Personalmente, considero particularmente importante que se aprenda de una actitud de alegre entusiasmo, y esta actitud puede verse amenazada por las presiones de producción de un proyecto de software. (Se es posible aprender J en el trabajo y el amor, pero el riesgo de que un programador le odio porque "tienen que" aprender que no debe ser ignorada.)

Otra probable dificultad es los esfuerzos de integración. J tiene una variedad de bibliotecas, y se ha conectado a varios otros sistemas de software, pero el contraste con lo que se ha logrado para los idiomas más populares es dramático. Mi experiencia ha indicado que J interactúa con bastante facilidad, lo cual atribuyo a algunas buenas elecciones en cuanto a cómo trabajar con el mundo exterior. (Esto incluye DLL, archivos mapeados en memoria, sockets y scripts de archivos de texto). Sin embargo, en un proyecto grande estarás innovando mucho más a menudo de lo habitual al hacer conexión con el software de soporte circundante.

En mi mente, el factor más importante sería si tenía un equipo adecuado para llevar a cabo el núcleo del producto. Esto podría ser, de manera realista, un equipo mucho más pequeño del que dependen la mayoría de los proyectos "grandes". Los lenguajes de la matriz se han asociado con equipos significativamente más pequeños que los típicos del campo, que considero una de las ventajas. Si has organizado la participación de los colegas que necesites, genial. Si no, no te comprometas con tal proyecto hasta que lo hagas.

Los siguientes cosas más importante sería saber lo que se espera obtener como los principales beneficios de J, y las maneras de comprobar que usted está recibiendo los beneficios mientras se desplaza por el proyecto. No soy la persona adecuada para aconsejar cómo hacer esto, pero estoy seguro de que no quiere dedicar capital de inversión sin hacer un seguimiento de si una opción de alto riesgo como esta está teniendo las recompensas anticipadas.

Paul Graham ha escrito que algunos idiomas, se invocan como ventajas secretas. J definitivamente podría ser un lenguaje así. El mero hecho de usar J, sin embargo, no sería suficiente para asegurar que ofrezca el tipo de ventajas que tenía en mente. Lo que describió como los aspectos atractivos de J sugieren que tal ventaja podría estar a su alcance. Si opta por confiar en él, podría ser vital que todos los participantes principales tengan una comprensión sólida y sobria de por qué se eligió este idioma para ese trabajo.

+0

Gracias por la respuesta detallada. Y puntos de bonificación para el enlace a las bibliotecas XML. Y sí, "diversión" es mi punto de partida. Varias partes del proyecto están todavía en la fase de planificación, por lo que tengo al menos cuatro o cinco semanas antes de que necesite comenzar a escribir el código para el proyecto. – Shredderroy

11

Estoy respondiendo esto a pesar de la respuesta ya aceptado.

  • Portabilidad: Soy el encargado de mantener una gran base de código construida con J, la mayoría de los cuales es un-portátil (o realmente peligrosos para hacerlo) a J6, por lo que estoy atascado en J5. J no está destinado a ser muy compatible con versiones anteriores. De hecho, la mayoría de las versiones introducen cambios bruscos. La versión 7 usa Java para su interfaz, por lo que sus interfaces y todo lo que utiliza el controlador de Windows (wd) no funcionarán. Versión 8 promete tener QT para su interfaz, lo que de nuevo su nueva interfaz Java muy probablemente no será portado. Advertencia justa.

  • IDE: Para mí, un gran proyecto debe ir mano a mano con un IDE fiable. J es un editor de texto.

  • Bibliotecas: hay muchas bibliotecas J, pero como J es tan conocida, existen varios lenguajes que tienen bibliotecas y marcos mucho más ricos.

  • Estructura del código: Eso depende totalmente de usted, y en realidad no es un punto en contra de que J. J pueda escribirse tan claramente o tan confuso como cualquier otro idioma. Se aplican las prácticas de programación estándar, y siempre se debe documentar y describir lo más explícitamente posible. Esto cuenta el doble en J si descubres que un cierto conjunto de "malas palabras censuradas" funciona mejor que otro.

  • Finalmente, si solo necesita J para algunas de sus capacidades, puede usar J como componente. La integración de .NET desafortunadamente se ha liberado en J7 (y no era 100% compatible en J6 incluso, particularmente en su sabor de 64 bits), pero hay formas de hacerlo comunicarse con el mundo exterior. KDB, por ejemplo, se basa en el hermano distanciado de K, J, y básicamente ajusta los archivos mapeados para un acceso rápido, una instalación que también tiene J.

+2

Muchas gracias por la respuesta. Estoy muy cerca del punto donde tengo que comenzar a escribir el código. Hasta ahora, he estado haciendo pruebas de unidades más o menos paralelas en J y F #. De esa manera, si uno de los idiomas termina siendo demasiado problemático para completar el proyecto, siempre puedo recurrir al otro. (Estoy amando a ambos: la expresividad de F # y la "nerdiness" de J tienen su encanto.) – Shredderroy

+2

Eso es * realmente * una pena que la integración .NET haya sido dejada ir. Siempre consideré que J sería mejor como lenguaje incrustado, es decir, debería distribuirse como una biblioteca con un front-end CLI opcional. Entonces, podría usar J donde J es mejor, y un lenguaje de host donde sea mejor. –

1

Para mí, J es un buen lenguaje de script (en el papel de apoyo), especialmente para los cálculos matemáticos relacionados. Es muy autónomo para implementarse mediante copia de carpeta (especialmente entorno de Windows), que es ventajoso sobre ruby ​​o python.

Por ejemplo, en una aplicación web nodejs, un child_process se puede usar para llamar a jconsole.exe y pasar parámetros a través de la interfaz de línea de comandos.

El programa completo se puede implementar y ejecutar en la plataforma azul de Windows, así como en una máquina local sin ninguna instalación adicional (es decir, node.exe y jconsole.exe están incluidos en la misma carpeta).

2

Puede alguien por favor dígame algunas desventajas de usar J (o cualquier lenguaje oscuro) para proyectos importantes?

El mayor inconveniente de utilizar lenguajes más oscuros para la misión proyectos críticos para alguien en el papel de un gerente o líder del proyecto son todos acerca de personas y habilidades.

  1. ¿Cómo encontramos y evaluamos las habilidades y aptitudes potenciales de los miembros del equipo en el idioma?
  2. Si alguien se va ¿cuánto tiempo me llevará llenar los vacíos de conocimiento?
  3. Cuando necesitamos ayuda adicional, ¿podemos escalar el equipo de desarrollo lo suficientemente rápido?

Para un proyecto importante, quiero personas que ya tengan mucha experiencia en el idioma y que no solo lo estén aprendiendo sobre la marcha.

Cuestiones relacionadas