I found J in 2011 or early 2012. I fell in love with it due to the terse, expressive notation set against pages of typical programming code from other languages. I have since moved to Dyalog APL. Roger Hui of APL/J fame, now contributes to Dyalog APL, so a lot of the novel ideas in J have made their way back into APL (Dyalog and NARS).<p>I read my first book on neural networks in 1988, and I got the matrix math and the implementation of them, but this year I was able to really grasp them in a more basic way with an implementation of Convolutional Neural Network in APL in only 10 functions/lines of code [1]. Amazing! What's even more surprising is that they manually translated it to SAC (Single Assignment C), and it is faster than TensorFlow. The interpreter is not bad either - 20x less time to init than TF, but 20x and 5x slower to train and test respectively. Compilers for APL are being worked on to make it work without the manual translation. To me the similarity to the math formulas, being able to view and work through the code in front of me in one view, is priceless. I also enjoy it, and I believe (no evidence here) that it is exercising my mind on the problem more directly than winding my mind around pages of Python/C or other PLs. Certainly a lot of the original ideas of APL and current successes of things like Pandas and NumPy owe a lot to the array languages in the APL family.<p>There's an example of an Extreme Learning Machine in J, but I don't have the link at the moment. I go back and forth with J and APL, and I am currently learning Rust. Somebody coded APL in Rust, but it has not been fleshed out. I find myself attacking problems in J/APL on my desktop, and sometimes that's it, I don't require another solution, or if I do I recreate it in C/Python or now Rust.<p>Aaron Hsu does amazing work in APL. He is/was a former Schemer [2].<p>A taste of J or APL with an average function implementation:<p>J: avg=: +/%#<p>APL: avg←+/÷≢<p>They both map/apply the '+' operator over a vector/array, then divide the sum by the tally or count of terms given.<p>Great tribute to Ken Iverson!<p>10 line CNN implemented in APL (the stencil operator ⌺is great! It allows you to move a window over your array):<p>blog←{⍺×⍵×1-⍵}<p>backbias←{+/,⍵}<p>logistic←{÷1+<i>-⍵}<p>maxpos←{(,⍵)⍳⌈/,⍵}<p>backavgpool←{2⌿2/⍵÷4}⍤2<p>meansqerr←{÷∘2+/,(⍺-⍵)</i>2}<p>avgpool←{÷∘4{+/,⍵}⌺(22⍴2)⍤2⊢⍵}<p>conv←{s←1+(⍴⍵)-⍴⍺⋄⊃+/,⍺×(⍳⍴⍺){s↑⍺↓⍵} ̈⊂⍵}<p>backin←{(dwin)←⍵⋄⊃+/,w{(⍴in)↑(-⍵+⍴d)↑⍺×d} ̈⍳⍴w}<p>multiconv←{(awsbs)←⍵⋄bs{⍺+⍵conva}⍤(0,(⍴⍴a))⊢ws}<p>[1] <a href="https://dl.acm.org/doi/10.1145/3315454.3329960" rel="nofollow">https://dl.acm.org/doi/10.1145/3315454.3329960</a> (PDF link is on page)<p>[2] <a href="https://aplwiki.com/wiki/Aaron_Hsu" rel="nofollow">https://aplwiki.com/wiki/Aaron_Hsu</a>