11 comments

[ 2.9 ms ] story [ 38.7 ms ] thread
Would anybody with experience with J like to share what they did/didn't like about the language or what they did and didn't expect from the language?
J is fun when you're just starting. Hey, you can take the average of a list of numbers with four characters of code!

When you go from that to writing a minimal CMS, things are less fun (actual assignment from a professor who loved J).

The hardest part of J is revisiting old code and trying to figure out what you were thinking when you wrote it.

The cognitive cost of writing the same program in J versus your current favorite functional language (let's assume Scheme) is basically the same. The J version will be much more concise, and probably quicker to write.

But I found it much harder to review and extend my own J code. Where the Scheme program I wrote last month will be mostly self-documenting and easy to modify, the equivalent J program may as well be machine code.

I feel like I _should_ appreciate J more, because it is powerful, but it may be too concise for me to be comfortable with.

-survived the same class (Hi Ryan!)

We run into each other every time there's a submission about J.
Just about. Same time in a year and a half?
I've marked my calendar.
Out of curiosity, and if it isn’t impolite to ask, where/when did this bizarre class occur?
Trinity University in San Antonio. The founder of the CS department was a big fan of J and had been there since the 60's so no one really wanted to tell him to stop. J was only used in the Intro FP course. He retired the same year I graduated (2012) and AFAIK the course is now taught in a combination of Scheme, Haskell and ML.

The intro sequence for majors also includes Scala so students there get a pretty good basis in FP.

The most recent version of the course - http://www.cs.trinity.edu/About/The_Courses/cs2322/

They'll probably rewrite the CS department site eventually, but until then, it's a repository of all the information about J you can handle.

Ironically, the reason the CS site hasn't been updated is because it's implemented in J.

So naturally no one is willing to touch it.

I've recently been learning J to try something different, and have worked through the first 60-odd Project Euler problems using it.

My current assessment is that J combines the powerful computational primitives of a language designed by a brilliant applied mathematician with the FFI & I/O interfaces of a language designed by a brilliant applied mathematician. Writing purely algorithmic code feels like writing executable math in ASCII. Writing code which needs to interact with the outside system feels like programming an 80’s 8-bit microcomputer in BASIC.

I have not yet learned APL or K, so I cannot yet compare and contrast.

* Edited to add: most useful for me so far has been the book J for C Programmers bundled with the official documentation. It mostly takes the tack of expecting that you already know how to program and want to know how to do certain things you can do in other languages in J. Additionally the final section on "tacit programming" includes some details on the implementation which made some of the more obscure behaviors of the language more clear.