Lessons from APL, a “Lost” Language
blog.benjojo.co.uk
blog.benjojo.co.uk
I'm a long term Lisper (prefer Scheme) and so I have a high tolerance for languages with weird syntax and small communities, and I had to write a lot of code to get a working environment in J (for instance, I hand wrote my own simple system for interfacing with Hive, which I used a lot back then).
The main thing I did was implement Naive Bayesian inference on some internal data and lots of plotting.
J is fun and it gives you that special feeling of doing something hard and weird which sometimes motivates me, but in the end I gave up on it in favor of R and Python. Surprisingly, the main thing that won me over to these languages is that they were faster and required less care. I'm not stranger to vectorization (did Matlab for 6 years during my PhD) and I liked doing it in J, but in the end I could do less work and get sometimes much better performance out of R.
Plus, even after many months of doing J full time, I still have to get into a whole headspace to even _read_ my J code. R and Python are at least legible in a way that you can come back to after awhile.
Finally, I started to really miss the uniformity of simple, first order functions with lexical scope.
Still miss the notion of verb rank, though. Wish it was part of modern languages.
Interesting that developing a POC in J took about 40 minutes and then rewriting it into C# took 3 hours, even though with C# it was clear what's needed. J can be surprisingly efficient for research work.
Conceptually, they are more similar than they are distinct - but k is tiny and more practical, and IIRC even Iverson said that in retrospect, most choices where k differs from J (juxtaposition vs. trains and hooks; reduction going l->r instead of r->l), the choices whitney made in k are clearer and more useful even if they aren't as pure and consistent.