programming languages examples programming-languages apl j k

programming languages - languages - ¿Alguien recomendaría aprender J/K/APL?



programming languages 2018 (10)

Me encontré con J / K / APL hace unos meses mientras trabajaba en algunos problemas de euler del proyecto , y estaba intrigado, por decir lo menos. Por cada solución de python de 20 líneas de aspecto elegante que produje, habría una solución de 20 caracteres J que funcionó en una décima parte del tiempo. He estado ansioso por aprender algo de J básico, y he hecho algunos intentos por aprender el vocabulario, pero he encontrado que la curva de aprendizaje es bastante pronunciada.

Para aquellos que están familiarizados con estos idiomas, ¿recomendarían invertir algo de tiempo para aprender uno (estoy pensando en J en particular)? Lo haría más con el propósito de satisfacer mi curiosidad que para avanzar en mi carrera o algo así.

Algunas circunstancias personales a considerar, si te interesa:

  • Me encantan las matemáticas y las uso a diario en mi trabajo (como matemático para una startup) pero, para ser honesto, no me siento limitado por las herramientas que uso (como python + NumPy), así que no puedo usar esa excusa. .
  • No tengo ningún deseo particular de trabajar en la industria financiera, que parece ser el principal puerto de llamadas para los usuarios de K, al menos. Además, realmente debería aprender C # como próximo idioma, ya que es el idioma principal donde trabajo. En términos prácticos, J casi definitivamente no debería ser el siguiente idioma que aprendo.
  • Estoy razonablemente familiarizado con MATLAB, por lo que usar un lenguaje de programación basado en matrices no constituiría un tremendo cambio de paradigma.

Cualquier consejo de aquellos familiarizados con estos idiomas sería muy apreciado.


Creo que tus 3 puntos muestran que no NECESITAS aprender J. Sin embargo, no puedo pensar en ninguna situación en la que aprender un nuevo idioma sea perjudicial.

Tomarse el tiempo para aprender algo que le interesa (o cualquier lenguaje nuevo) siempre mejora sus otras habilidades de programación. Aprende diferentes enfoques de los problemas que puede implementar de manera diferente con otros idiomas.

Además, con la sintaxis mínima de J, sería un buen lenguaje para garantizar que esté obteniendo los resultados correctos cuando implemente una solución en otro idioma.


En los días de los eldar, fui desarrollador de lenguaje APL, codificando en 370 ensambladores. Porté J a OS2, pero nunca aprendí a usarlo para un trabajo real. Actualmente estoy trabajando en Java y PHP y estaba evaluando Python. Después de las 3 primeras secciones del tutorial de Python, me sorprendieron las muchas similitudes que tenía con APL, que me trajeron aquí.

Recomiendo encarecidamente aprender APL o J como un ejercicio intelectual. Cambiará su forma de pensar acerca de la programación (deforme su cerebro) y probablemente ayude a la codificación de Python. También hay algunos trabajos para programadores APL y J, y probablemente menos programadores que trabajos.


Esta es una confirmación divertida para mí, una persona de cincuenta y tantos años.

Anteriormente, hoy decidí aprender un nuevo lenguaje de programación del siglo XXI después de un intervalo de 27 años sin programación. Escogí Python, bastante al azar, temeroso del mundo basado en gui y orientado a objetos en el que todos vivimos ahora.

Para mi deleite, mis años de ganarme la vida como un chico de APL a principios de los 80 significa que literalmente estoy revisando el material, con comprensión instantánea :) Solo pensé que lo compartiría.


Hace miles de años, fui programador de APL. Por miles, me refiero a los años 70 cuando el conjunto de caracteres personalizado significaba que teníamos terminales de impresión especiales con el teclado y el conjunto de caracteres APL, y las bolas de texto de IBM Selectric con los caracteres especiales, etc.

Fui a una conferencia de Ken Iverson sobre "Why APL Was Cool".

Su tesis fue esta. Érase una vez que la división era una empresa matemática seria, reservada para estudiantes graduados. La notación para cosas como la repetición de expansiones decimales implicaba una gran pila de simbolismo matemático. Érase una vez, incluso algo como un número "negativo" se requería una notación elaborada.

A lo largo de los años, al llegar a una mejor comprensión de estas abstracciones, obtuvimos una notación mucho más compacta para conceptos complejos.

El punto de APL (y J y K) es resumir los grandes algoritmos en notación ordenada.

Hoy en día, soy programador de Python. Encuentro que mi exposición temprana a APL deformó mi cerebro al obligarme a preguntar "¿qué significa esto?" y "¿es esta una operación reutilizable?" y "¿qué es un resumen conciso para toda esta pelusa algorítmica?"

Además, a medida que prosigo con los problemas del Proyecto Euler , la "programación funcional lite" de Python respaldada por mis "recuerdos empapados de ginebra de APL" son muy útiles para abordar los ejercicios.


He trabajado en J y APL durante la mayor parte de los últimos 25 años y puedo recomendar a fondo ambos. Todavía vuelvo a uno u otro cuando tengo que realizar cualquier tipo de análisis de datos ad hoc y lo he usado en el Proyecto Euler también.

Si estás interesado en el Proyecto Euler, entonces J es definitivamente el que debes elegir. Su soporte para números enteros y primos de precisión infinita lo hacen un muy buen ajuste.


J es mi lenguaje de programación principal para el Proyecto Euler y para uso personal en el trabajo. Nunca he encontrado un lenguaje mejor para el procesamiento de matrices, y el paradigma de la programación tácita es útil y estimulante una vez que aprendes a entenderlo. (De hecho, es útil porque es estimulante.) Alcanzar la competencia en el idioma básico es difícil, y leer el código de otras personas es una actividad intelectualmente disciplinada, pero la perseverancia tiene beneficios importantes debido al poder, la flexibilidad y la concisión del idioma.

Dicho esto, la razón por la que lo reservo para uso personal en el trabajo es que (1) nadie más en el trabajo lo usa, (2) la curva de aprendizaje es lo suficientemente alta como para que no sea razonable pedirle a mis colegas que la recojan y (3) el hecho de que pueda crear programas intrincados en una línea de código hace que sea difícil leer una línea de código, especialmente si no lo escribió usted mismo. (Espero pasar al menos media hora estudiando una línea de código que usa diez o más operadores, a menos que se hayan utilizado de tal manera que entienda los principios subyacentes a fondo).

Algunos ejemplos de características divertidas de J:

1) Cualquier función definida para operar en un solo número puede hacerse para operar en arreglos de rango arbitrario. Por ejemplo:

NB. totient(n) = n * /prod_{p|n} (1 - 1/p) totient=: * -.@%@~.&.q: NB. Finding the totient of 10 totient 10 NB. Finding the totient of all numbers from 1 to 10 totient"0 (1+i.10)

Es exactamente la misma función, simplemente operando en los átomos (componentes de un solo elemento) de una matriz de entrada 1xN. De manera similar, puede tomar una función definida para trabajar en matrices de rango dos (matrices) y aplicarla a cualquier matriz de rango superior simplemente usando la conjunción "(rango).

2) Puedes tomar casi cualquier función invertible teóricamente en J e invertirla ''iterándola hacia atrás''. Por ejemplo,

NB. Converts an array of binary digits to a decimal number (#.) 1 0 1 5 NB. Converts a decimal number to an array of binary digits (#.^:_1) 5 1 0 1


J es un poco como un genio: debe mantenerse dentro de una botella. Mantener una gran cantidad de software de lotes en J es un dolor serio. El mantenimiento de interfaces (basado en Windows o en la web, porque sí, puede configurar J para responder a Apache para producir una salida web) en J es un círculo experimental, poco conocido del infierno.

Por otro lado, usar J está bien si desea: analizar, tamizar, analizar, procesar, etc. algunos datos para jugar con ellos, averiguar el grano fino de un algoritmo, o impresionar a las redes internas de la manera más corta posible. para calcular cuántos triángulos caben en un círculo o qué no.

Estuve muy cerca de agregar a J como un factor decisivo en mi perfil de carreras en careers..com , pero finalmente lo dejé de lado. Para mí, usar J está bien, producir J, sin embargo, no lo está.

EDITAR:

Eso fue hace un tiempo. Todavía pienso mal en soluciones de J completas en producción (es decir, todo su MVC). Desde la respuesta original, he usado J como COM en un proyecto de C #, donde J cuenta con una gran matriz que sería difícil de administrar en C #, con gran satisfacción.

Parte de nuestro trabajo es hacer que los modelos de datos y el código hablen . No es fácil reducir esa calidad y la sintaxis muy concisa de J. Varios marcos, a diferencia de J, tienen IDE fáciles de trabajar y tienen suficiente soporte para permitir que uno pueda organizar el código de una manera humanamente legible. Las capacidades de la über-matriz de J no compensan lo que le falta.


Me gano la vida con APL desde 1980. Tengo ganas de seguir haciéndolo durante algunos años más. No solo es muy divertido usar APL, el lenguaje ofrece funciones de depuración sobresalientes. Las implementaciones modernas son lenguajes funcionales de pleno derecho y también están orientadas a objetos.

A lo largo de los años conocí a muchas personas que me preguntaron cuánto tiempo creo que podría continuar con APL. Esos tipos eran dbase y PL / 1 y ALGOL y Pascal y Forth y C y Focus y otros programadores. ¡¿Lo tengo?!


Sí, aprenda APL / J / K, le dará una visión única de lo que es posible.

Señalo que la cantidad de triángulos de @ MPelletier en un círculo y su implícita "... pero no para problemas del mundo real" es un poco miope. Sí, al IDE de J Software le faltan algunas cosas, pero crear el propio IDE no es un gran problema, y ​​un buen IDE puede enmascarar un mal lenguaje ( no debe estornudarse el encogimiento de 20 a 20 caracteres). APL siempre y cuando @KaiJaeger lo haya hecho, si no más, y mi mente esté distorsionada, pero nunca he estado feliz programando con otra cosa.


Solía ​​trabajar como programador de APL durante varios años en la década de 1970. Me encanta el idioma, pero no lo he usado durante años.

Es un gran lenguaje para algunas cosas, pero realmente no puedo usarlo para el desarrollo web, por ejemplo.

Lo que es genial para es operaciones estadísticas y matriciales. Puede resolver un problema de programación de línea en 3 caracteres. Es mucho más fácil probar la exactitud de esa implementación de LP que una que tome páginas en C, por ejemplo.

Así que si quieres aprenderlo por la alegría de aprender, te lo digo. Para mejorar sus perspectivas de trabajo, es probable que haya muchas otras cosas que aprender que impresionarán más a un posible empleador.