I discovered J by accident, the subject of another post for another time. As I spent my first few hours fooling around, getting it do "something", I was gradually overcome by a sense of awe. I wasn't sure what was going on here, but I was pretty sure that I had been working way too hard for the last 20 years.
When I encountered train syntax, my first reaction was that it was the most arbitrary, academically-inspired nonsense I had ever seen. But I was determined to grasp the syntax as I could see those patterns popped up a lot. As I struggled to rephrase my ideas into terms that I could grapple with in J, refactoring them down into the apparently arbitrary construct of the tacit train, it became apparent to me that nearly all of my logical constructs developed an inherent elegance to them in this form which was not obvious to me at all as I formulated the idea. I spent the next several months writing silly little programs, exclusively in tacit J until gradually it became second nature... I rarely use explicit J (but then again, I have no products in J)
Others can better describe the formal properties of the train that lend it such power and elegance but I can tell that now, to me, every problem looks like a train. My work in "conventional" languages has benefited as I see old algorithms in new light.
Posted to the J forum on 2009-06-04.
I am rather chagrined to tell this story to this particular audience, but I am anxious to get it off of my chest.
My first brush with APL happened late in the Spring of 2000. I was fortunate enough to land a contract at Reuters, Toronto in their development office at a time when programming jobs had suddenly become very scarce.
My assignment was to assist them in porting legacy systems to the modern paradigm of Java/Sun/Oracle which, by decree of Head Office in London, was to be the model for everything, come hell or high water. The Toronto office was to be rolled up and all development operations were to revert to London. Toronto was not the only office affected but, in hindsight, it may have been the most tragic. I was cast in the role of the arrogant visiting expert, authoritative in all things Java and Modern to an audience of Vendors of Yesteryear.
On my first day, I was re-introduced to Duane Sorrey whom I had met at the interview; he was to be my technical supervisor. He asked me if I had ever heard of APL. I thought for a moment.. I try to keep up on things; I even had something of a reputation among my clique for knowing odd, obscure technologies but no, APL rang no bells.
"What does it stand for?", I asked. "A Programming Language", he replied. I paused, waiting for the punch line. I mean, it was funny, but only mildly. I had already learned that Duane had a pretty dry sense of humour.. maybe I just didn't get it.
It proved that he was serious. I was relieved to learn that I wasn't expected to write or even read APL but, apparently, the implementation I was replacing was currently running in production as Sharp APL on DEC big iron. Bits of the history of I.P. Sharp slipped into our conversation; their early global network, the pioneering work in real-time feeds.. the list was long and likely better known to my readers than it is to me.
After I had settled in, one or another APLer would drop into my office to get advice on an obscure point about perl syntax or some such, which usually ended with them trying to give me an unasked-for APL lesson on my whiteboard. As hard as I tried, I had no idea what they were talking about but I did eventually learn to keep my desk drawer well stocked with Tylenol.
One day, Duane asked me a few basic questions about the environment and behaviour of the Java application I was designing for them:
Duane: What happens if an unexpected error occurs?
Me: An exception is thrown. I have handlers for many types of more-or-less anticipated exceptions but truly unexpected, well, it would log a message and fall down.
Duane: Can you resume it?
Me: Resume? No! Restart, sure. To resume, I need to add a layer of state preservation which would probably significantly hurt performance.. also, I don't think we have time in the schedule.
Duane: Well, that's useless.
From my background as a C/Unix guy turned Java-head, I had no idea what he was getting at.
Me: Did you expect the program to just halt, suspended, so you reach in, fix the anomaly and pick up execution where it left off?
Duane: Well, yeah!
I had no reply.
It was Bruce Amos who finally gave me the lesson that stuck. He bade me watch over his shoulder while he worked at his APL terminal and demonstrated take, append, shape, reshape, iota, grade and a few basic mathematical operators. It started to make sense but, alas, I had no access to an APL terminal and the glyphs still scared the heck out of me. When I mentioned this to Bruce, he replied, rather distractedly, "Well, there is thing thing called J you might try out; it uses ascii".
I spent 1 1/2 years in that office and came away with very little understanding of APL although I had an strongly enhanced appreciation for what it could do. I salvaged a copy of APL, An Interactive Approach from a waste bin, as one office after another was vacated. I flipped through it periodically, but I really did not understand the significance.
It was several years later while browsing the Programming Languages History page on Wikipedia that I came across the second reference to J I had ever seen. I might not have even recognized it were it not there on the graph showing it's APL parentage, but I remembered Bruce's suggestion and thought to take the dive.
I became thoroughly addicted. As the forms of J unfolded for me, I came to recognize the purity of the vision as thought itself, formalized and refined.
While I have no opportunities to use J directly in my practice, it is an indispensable tool I use every day which has deeply affected my thinking.