J documentationSome advice on what to read and what not to read if you are a J beginner. This is a very personal perspective.
Most of the documentation / tutorials which J beginnners are hunting for usually falls into one of two categories:
- The "J is easy" camp
maintains that J --or at least a subset of J-- can be easily learned and used. Examples:
The style is often informal, and often the mere presentation of expression/result pairs is deemed sufficient to make you learn how J works.
- the "Introduction to J" / "Sample Topics" (these days bundled with the proper "Dictionary of J")
- J Primer
- Learning J
- The "learn all the details!" camp
- Dictionary of J (the third, "reference" part of the Introduction/Samples/Dictionary bundle)
- J for C Programmers
These documents are very rigid and do get down to the details.
Truth is: in J, details matter. Many details. And most are invisibly at work, often fooling your eyes.
My personal experience: the informal docs didn't work for me. In particular, looking at the "expression/result" samples I developed consistent but too naive and wrong models of the J language. These wrong guesses would carry me across half of my own experiments but did utterly fail with the other half. This caused lots of frustration.
This is how I finally made it:
On a two-week skiing vacation in the Alps, I had no computer but the (small) "Dictionary of J" booklet with me. In the evenings, I sat down and sloooowly read that, starting at the beginning, and making sure to skip *nothing*. Very soon, on page 3, I would stumble over details I hadn't even been aware of so far, but which were at the core of many of my mis-understandings. Having these resolved, all other pieces of the big J puzzle started to fall into place, too.
Mind you: it was still slow reading. Often I spend 30-60 minutes on just a single primitive.
Highly recommended: JfC
These days, Henry Rich's marvellous "J for C Programmers" exists and is much easier to read. Henry really understands how J works and tells you everything at a gently pace -- and without omitting anything.
You don't have to be a C programmer. Any prior programming experience will be good enough, and I expect that even without any other programming language on your back, you will do fine with this book.
Beware of the "easy" stuff
I am afraid that many authors in the "J is easy!" camp have not really understood J themselves but just think they do. These authors are certainly well meaning and put lots of efforts into the documentation they provide, but --very sadly for all parties involved-- if it's wrong, it's wrong.
I am particularly sceptical about the NuVoc community effort. All too often I find wordings I can not be happy with.
"Typical use" and "related primitives" are worthwhile additions in the NuVoc, but they are no substitute for a complete and systematic definition. The oh so late addition of rank specs is indicative of the projects shortcomings.
Disguised tutorialsIf you have learned the J foundations but are still a beginner, you can find good examples for elegant J in these two places not really advertising as "learner's books" -- but they are:
- The "J Phrases" collection.
It doesn't say so anywhere, many of the J phrases are developed in a tutorial fashion, often teaching variations of expressions or building more complex expressions from simple base parts.
Most phrases are just two or three primitives bolted together, already yielding something useful.
- Cliff Reiter's "Fractals Visualization and J"
I like this book for its very tasteful application / use of J. The J expressions all have decent size and yet they solve real problems ("computing images"). You won't find those endless one-liners they throw at you on the mailing lists.