Spoiled for choice
Like many software developers, system designers and other computing specialists, I often find myself facing a new project with far too many implementation options. A quarter of a century ago my options were far more limited, and perhaps as a consequence it was easy to get started. If I needed to directly manipulate the underlying hardware, I’d roll up my sleeves and churn out hundreds of lines of assembly. (OK, so each processor has a different instruction set, memory model, etc., but once you’ve mastered a few, the rest are a piece of cake.) For something high level, C is the best workhorse. Quick and dirty? BASIC. Don’t laugh. Many serious solutions were coded in BASIC, or at least in one of the dozens of variations of the language. There was always JCL and DCL for those hard-to-describe administrative tasks. Then there’d be a very high level tool, such as COBOL, for the problems that mattered to the people paying the bills. Essentially, the toolkit came (metaphorically) with a hammer, screwdriver, saw, chisel and a few odd looking things that lurked at the bottom of the bag in the lint and chippings. Each specialist had such toolkit and it sufficed for every problem.
In the intervening years it would seem that the toolkit needs a trailer to get around, contains every size of hammer known to man, screwdrivers with head shapes previously unimaginable, and saws with teeth everywhere. OK, so maybe I’m stretching the metaphor a bit, but any hard-coder will know what I mean.
To illustrate, in the past two weeks among the things I’ve pulled from my toolkit are:
- Perl, my favourite pen-knife, which required several CPAN libraries to handle JSON data.
- PHP, to deal with some Web-fronted admin.
- C++, necessary to re-write another tool that I use to manage SQL databases.
- Java, to deal with various data processing mechanisms, along with a host of Java platform libraries.
- Node.js, as a lightweight handler for automated inter-server messages.
- bash, to implement a cron job that polls for updates.
- The suite of Web tech (HTML, CSS, JS etc.) because that’s what I spend a lot of time working on.
Earlier today I had one of several little tasks to do. Not work-related this time, but still needing the same skills, and I found myself torn between several implementation options. I found myself coding the solution in my head in a mixture of languages, while I also quickly scanned the Web to see if there was already an open source solution out there. I sometimes check to see how other people solve similar problems to see if their choice of tools worked for them, or if they encountered problems I’d prefer to avoid. In this particular case the problem involved syncing two data collections with completely different representation models. At one point I thought of doing it in C#, just to be different, but in the end I chose a scripting language and a pipeline of OS commands.
I’ve no idea if I could have done it better with a different set of tools, and I have no idea if my own personal toolkit is over-the-top, or missing some vital implement. What I do know for certain is that over the next few months, more tools will go in, as there’s always something new to learn in this high-tech industry. And I may need a second trailer.
Maybe one of these days I’ll complete that LinkedIn skills summary, and reveal the frightening extent of my well-worn toolkit. Or maybe not, as my toolkit is my secret weapon…
Categorised as: Coding