218 karma · joined January 12, 2019
I drive a Dacia and I love its simplicity... I fear the day when they try to make a Dacia look fancy.
Coming back to it every now and then for kicks slowly showed me a few strengths. First, with the short verb names and clear semantics, J is the only thing I've found that brings, for me, the comfort of a specialised handheld calculator to the PC. That realization, very independently from its array capabilities, is what got me really going with it, on a gentle learning curve. And you get it on your smartphone too ; I eventually sold my good old HP48 friend.
From there I started using it for small things. When I was building a lift for my brother's Warré beehives, J let me scribble a few beam-resistance equations in it and using its solver and plotter to easily get good results. So I started using it for things that were too big for spreadsheets, but that I was too lazy to deal with in a "proper" language.
That needs a change of mind regarding how you write and maintain programs. When I want J to do something in a program, I fiddle with it until I get the "sentence" right, and that's it. That sentence will never be modified again. If I need it to work differenty, I'll rewrite that sentence from scratch. Then find a good name for your sentence so that you can combine it with others, and suddently you discover that you can write J like a nice DSL that can very satisfyingly sound like plain spoken language.
I wouldn't stretch it though. I'm not passionate enough about it to invest what's needed for mastery. 80 lines of thin J is my largest. Beyond that, switch to something that helps with maintainability, but beware of the sudden and amazing code-size inflation !
The company's official ERP in which we report our monthly activities is a horrendously slow and error-prone old-school GUI, where you basically punch a lot of numeric codes that represent customers and activities, and that can be pretty hard to get right. It looks like a spreadsheet with delays of several seconds after each cell is filled-in, because the apps commits everything over the network each time. I would waste several hours of life every month, typing one piece of rubbish at a time into that sad thing. It's a lot of pain and a colleague had written an automation tool based on the ERP's binary formats. However, his tool needed the code to be adjusted to each user, then compiling his thing was no easy task, then you needed to ask for special permissions to be able to feed the ERP with the binaries, and at last you realized that the binary output was a fragile thing, and so nobody used the tool.
So I wrote an automation script in Python with pluggable input sources which can be combined (text files that are easy to read and write, http connection to Redmine activities... later on a colleague took the tool and added a GrindStone source, and another guy plugged it into his Outlook calendar). The output stage to the ERP is built upon PyWinAuto, and it just simulates key-strokes on the proper window. It is not smart. It remains constrained by the ERP's slowness. But IT IS A HELL OF A FUN TO WATCH your monthly torture getting done all by itself, and enjoying a walk with a coffee in hand for that time, coming back from time to time to see your screen doing stuff.
All in all it took me about a whole day to write the script. It has been running for four years now. One ERP update broke the output stage. Fixing it was a matter of minutes : just write down the new keystrokes.