The J Programming Language [video]
infoq.com
infoq.com
I could likely find an excuse for it in data analysis/manipulation, but that seems like the obvious application.
[1] http://www.jsoftware.com/forums.htm - the one called "programming" is what you'll be interested in.
A typical script for reading a CSV file, manipulating it in some more or less complex way and dumping results back to file would take ~40 lines of Python (with native lists and csv module from stdlib), ~25 lines of Python with Pandas and about 5 lines of J. It obviously doesn't matter if the script is going to last for years, but if it's going to be used a few times and discarded[1], then working with J is a considerable advantage.
One thing of note, though: J is HARD. It's unlike any other language you could know and it's moderately complex. It's not that hard to pick up the basics - although my head exploded a few times before I understood how J even parses expressions - but it's entirely non-trivial to learn how the basic building blocks compose to enable you to do something useful. In my experience there's just no shortcut here - you need to start with basics and slowly work your way up. It took me a couple of weeks of learning in the evenings to get J enough to actually do something, but then it rapidly became very simple (both to do things and to learn more of J).
If you don't know any array-based language, I'd say give J a chance. Even if you won't use it itself very often, you'll learn some valuable skills, transferable to Python/Pandas or R. And if you do use it, you'll get significant boost in speed of development.
[1] Actually, J is not "write-only" language, it's just not meant to be read without the help of J environment. Reading J consists of pasting pieces of definitions into REPL and experimenting with them, and possibly using one of a few built-in ways to analyse the definition structure.
[2] Also for solving fizz-buzz: http://livescript.net/blog/fizzbuzzbazz.html#comment-1145818...
q isn't open source but it is widely used by most major banks to analyse their time series data and there are very well paying and interesting jobs available.
And here is a bit more involved explanation of what those words mean: http://www.jsoftware.com/jwiki/HenryRich?action=AttachFile&d...
If there is one thing I learned as a polyglot it's that language usage patterns differ and trying to use one language as if it was another is counterproductive. My advice is to learn more and practice more - at some point you'll start seeing higher-level patterns in language design and will be able to cope with many, now unfamiliar, features and design decisions.
Basically, I want the languages I use and have to constantly relearn to have a syntax that is quick to pick up after having partly forgotten it for the nth time. That requires memorable and guessable names and keywords.
You definitely can use words instead of many symbols in J. I highly doubt though you want to do that for the core language. Much more productive - IMO - is to learn the vocabulary - which is very finite. Yes, I know it's a great show stopper for those considering learning J.
Of course, I'm very much of a C programmer, and C is kind of good too at using operators in a terse manner.
If C required
foo >>= 4;
to be written as foo = foo shift_right 4;
then it just wouldn't be as nice and fun to program in. Even more so when using the pointer-dereferencing and pre/post-increment operators, or combinations. divide=: %
and then only use divide. If you don't want to come up with your own names for all the built-in functions, you can just use the names suggested in the vocabulary (J's main help file). If you don't want to write all those definitions to give names to the built-in functions, there is already a module in the standard library that does it for you.If you do decide to program in J, however, I recommend you just learn the symbolic names, they're so much shorter and fun. :)
Edited to add examples: http://www.hakank.org/j/