November 12th, 2009
Last summer, I stumbled upon a contest being run by a company called Dyalog to promote the APL programming language; it asked you to solve a set of problems that involved a combination of mathematics and programming while following certain contest-instituted guidelines. I had never heard of the APL language. In fact, I had never even worked with any language that resembled APL. I have worked with C/C++ and Matlab for years, but this language was so radically different that I might as well have been starting from (almost) programming scratch. Worse, by the time I found out about the contest, it was already halfway over. Two months had been given to complete the task, and if I decided to give it a shot I would only have one. But I was bored and the challenge looked interesting, so in the end I decided to try anyway.
The first thing I did was download a student license for the language and head to the bookstore. I’d been hoping to buy a basic book on the APL language, but I hit my first snag when I discovered that there weren’t any. Turned out that APL had first been devised in the 70s and hadn’t been revised much since, so expecting the bookstore to carry anything on it was a rather hopeless proposition. So next, I headed to the engineering library. This search was more fruitful, turning up both a basic book on the language and a workbook containing a set of exercises designed to ease you in slowly. The textbook I actually ended up ignoring; the workbook was read through within about five days, which probably would have floored the author if I’d had the ability or desire to inform him of it. Best of all, by the time I’d finished the APL command lines I’d been reading had been transformed from indecipherable hieroglyphs into something that actually resembled sense.
So I eagerly sat down to begin programming, only to run smack into more problems. Turned out that APL, unlike C++ or Matlab, didn’t really “like” algorithms or loops. It preferred to parallelize things by putting them in matrices and operating upon entire arrays at once. That, combined with the fact that the very process of writing in branches and loops was tricky, occasionally necessitated some serious creativity on my part. On the other hand, if the arrays got too large, that also tended to slow processing time, so you had to be careful of that as well. Also, the language had some problems with memory limitations. It turned out that, once numbers got beyond a certain size, the language really had trouble remembering what was supposed to be inside the variable. Since some of the numbers in question were a hundred digits long, you can understand how that might have become a problem. And then there was the fact that the interface was just odd. Because APL used symbols almost exclusively, you had to pick the ones you wanted with your mouse from a toolbar at the top of the screen. While there were key shortcuts for most of them, first you had to memorize them and then they had to work. Finally, because the language simply carried out all operations from right-to-left, rather than from left-to-right or according to the mathematical order of operations, you had to triple-check every line of code to make sure that the answer you got was actually the answer you wanted (or indeed, that you got any answer at all).
Despite all of these obstacles, I eventually managed to come up with a workable contest entry that answered all the questions within the contest limitations. In fact, without going into the nitty-gritty I think it would be safe to say that I came up with a couple of tricks that were rather unique. By the time I submitted my entry (a couple of days before the contest deadline), I was even feeling fairly pleased with myself. So, tired but satisfied with my month’s work, I leaned back in my chair, put my feet up on the desk, and set about waiting for the contest results.
I lost.
But as it turned out, I didn’t much care and I’ll tell you why. Winning the contest was never really the point of entering. Sure, it would have been cool to get some prize money, or to travel somewhere to talk to others about what I’d done. It would have been lots of fun to be able to tell people about my awesome accomplishment of going from absolute scratch to master programmer in the space of 30 days. It would have been a great talking point on my resume and a cool summer story to wow my friends with when they all got back from break. But in the end, what did any of that really matter? Whether I got paid for it or not, I still managed to learn the fundamentals of a brand-new language in the space of a month despite having absolutely no prior experience. In a mere thirty days I was able to create and submit, not a token entry with just enough work in it to qualify for the random prize drawing, but a full and complete entry with a fair shot at placing on the winner’s list. Not only that, but the experience expanded my programming abilities in even my old languages by forcing me to think about programming and problem-solving in new ways. And win or lose, I was still able to add a new and unusual skill to my resume. I might not have gotten any recognition or prize money for my efforts, but in every way that mattered, I won.
The moral of the story? Winning isn’t everything. Or at least, whether or not you’ve won depends not so much on whether you get a prize as on how you define the terms. If you’re in the game for fortune, fame and prize money, then you’re probably playing for the wrong reasons whether you end up winning or not. But if you’re playing the game for yourself alone, with the occasional recognition of merit by others serving merely as icing on the cake, then not only are you going to get a lot more out of it even when you don’t officially win, but you’re probably going to win a lot more often than the person who cares only about the prize.
Articles written by Brianna Aubin
Tags: APL, language, losing, programming, winning
Categories: Arts, Life | Comments (8) | Home
(To avoid spam, comments with three or more links will be held for moderation and approval.)
Copyright 2023 Opinion Forum
Another well-written, classy article, Brianna! I have to admit that some of it might as well be in Greek, for all I understand, but you make a great point. To dispute Vince Lombardi, winning isn’t the only thing. I prefer Teddy Roosevelt:
I’ll echo Tom. Well-written article, Brianna.
The portion Tom quoted reminds me very much of the Biblical passage where God says that He detests luke-warm… that he prefers Hot or Cold (even though Cold is defined as being in opposition to Him) to luke-warm, bland lack of conviction one way or the other. Don’t hold me to this but I think it’s in first part of Revelation. I’d have to double-check to be sure but it really doesn’t matter here. Anyone who’d get hung up on the lack of a more precise attribution probably isn’t interested in the idea being expressed.
Brianna, you are so selfish. ;^)
Well done. I’ve never heard of APL. Does it have anything in common with PL/I or PL/C?
Brian – sigh… I keep trying to post a sample of the code on this thing, but it doesn’t seem to take. I will try to find another way to send it to you so you can see a piece and get what I am talking about. Suffice for now to say that from what I saw of the sample PL/I code on Wikipedia, the languages are nothing alike.
Brianna, you’re probably having a font problem, I would guess. Our machines probably can’t take the symbols used in the language. Or maybe WordPress can’t handle it. Or maybe not — what do I know?
Anyway, why not take a screen shot (or use snipping tool in Vista), then send the image and I’ll post it.
Don’t worry about it, it copied through in Word pretty well and I sent Brian the email. Thanks though
It is definitely bizarre-looking syntax, at least by the standards of 3G and 4G programming languages.
Brian and Brianna, every time I turn my computer on I’m thankful there are people like you who know what makes these things work. I’ve taught myself a lot about HTML and CSS in order to make the website work the way I want, but the rest of that stuff is black magic as far as I’m concerned.