trabajo proyectos programacion para lenguaje introduccion innovadores ideas faciles performance functional-programming j

performance - para - proyectos de programacion innovadores



Escribir un proyecto grande utilizando el lenguaje de programación J (4)

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 de las que conozco que usan J como la tecnología central para un importante sistema de software son Cognos y Luen Thai. (Cognos ha sido adquirido por IBM.) Algunas discusiones 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 grandes sistemas de software que confían en J, pero no los he identificado (y he estado atento durante años).

Dmitri Chubarov tiene razón al pensar que la dificultad de encontrar desarrolladores con las habilidades adecuadas podría ser un problema importante. 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á convertirse en buenos para programar en J. Personalmente, considero particularmente importante que se aprenda de una actitud de entusiasmo gozoso, y esta actitud puede verse amenazada por las presiones de producción de un proyecto de software. (Es posible aprender a J en el trabajo y amarlo, pero no se debe ignorar el riesgo de que un programador lo odie porque "tienen que" aprenderlo).

Otra dificultad probable son 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 opinión, el factor más importante sería si tenía un equipo adecuado para llevar a cabo el producto principal. 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 un proyecto así hasta que lo hagas.

Las siguientes cosas más importantes serían saber qué esperas obtener como los principales beneficios de J, y las formas de verificar que obtienes esos beneficios a medida que avanzas en el proyecto. No soy la persona adecuada para aconsejar cómo hacer esto, pero estoy seguro de que no desea 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 se confía en algunos idiomas 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.

Revelación

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

Tengo que implementar un proyecto en particular que realmente se beneficie de las estructuras de datos y las abstracciones proporcionadas por J. Este es un proyecto grande, destinado a funcionar como el componente central de una aplicación web grande (en tiempo real). 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. Yo 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 encontró un solo proyecto usando J
  • Buscado en Sourceforge, y no encontrado un solo proyecto usando J
  • Buscado en Lambda the Ultimate, y solo encontré la siguiente discusión que hace referencia oblicua a APL
  • Se buscó generalmente en Google y Bing, y no se encontraron ejemplos de proyectos a gran escala en implementación que usen J

¿Estaría cometiendo un error al usar 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 algunas desventajas 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.


Para mí, J es un buen lenguaje de scripting (en el rol de soporte), especialmente para 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 webapp de nodejs, se puede usar un child_process para llamar a jconsole.exe y pasar parámetros a través de la interfaz de línea de comando.

Todo el programa 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).


Estoy respondiendo esto a pesar de la respuesta ya aceptada.

  • Portabilidad: estoy a cargo de mantener una gran base de código construida con J, la mayoría de las cuales no es portátil (o realmente peligrosa) para J6, así que estoy atrapado 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. La versión 8 promete tener QT para su interfaz, por lo que, de nuevo, su nueva interfaz Java probablemente no será portada. Advertencia justa.

  • IDE: Para mí, el proyecto grande debe ir de la mano con un IDE confiable. J es un editor de texto.

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

  • Estructura del código: depende totalmente de usted, y en realidad no es un punto en contra de J. J puede escribirse tan claramente o tan ofuscado 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 un 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 J también tiene.


¿Puede alguien decirme algunas desventajas de usar J (o cualquier lenguaje oscuro) para proyectos importantes?

El mayor inconveniente de utilizar lenguajes más oscuros para proyectos de misión crítica para alguien que desempeña el papel de gerente o líder de un proyecto es todo sobre 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.