Polyglot Programmer

I've been on a something of a language kick lately.

Here is, in no order that I can articulate, a list of the languages that I'd like to be fluent in:

  • Assembly Language
  • C
  • C++
  • Java
  • C#
  • JavaScript
  • TypeScript
  • F#
  • R
  • Go
  • Python
  • Ruby
  • Lisp

I've actually coded professionally in the following languages:

  • Assembly Language
  • C
  • C++
  • C#
  • JavaScript
  • Visual Basic/VB.NET
  • (edit - and how could I forget the early years of my career with PL/I on the DEC VAX?!? - apparently pretty easily, since it didn't even cross my mind. Suppressed memories, I think.)

And of those, I'd say I'm only currently fluent in:

  • C#
  • JavaScript (more client-side than Node.js servers)
  • VB.NET (though this one's fading fast)

And finally, those others that I can go beyond a simple Hello World program are:

  • TypeScript
  • Python
  • F#

...but not by much.

You may have noticed that I left Visual Basic/VB.NET off the list of "languages I'd like to be fluent in". Also, I'm not including things like Bash, PowerShell, Gulp, Grunt, etc.

So part of this might be an attempt to recapture my mis-spent youth. Nostalgia? Perhaps. Pride? Maybe, but like I said, my current list of fluent languages is pretty small for going into my 30th year of professional software development. Part of that is the nature of my work. Since about 1996 I've been very Microsoft-centric, actually joining Microsoft in 2008.  So for most of that time, venturing out of the MS-space has been frowned upon by the powers-that-be, though attitudes are definitely changing in the past few years.

My major in college was Computer Science, not Management of Information Systems, or IT, or anything like that. As such, I've always wanted to go through the The Art of Computer Programming (TAOCP) and work the programs that demonstrate the algorithms, if not the math itself. I still suck at math, but I'm still trying to learn.

As I started to go through TAOCP, I found that it uses a made-up version of assembler. Now I haven't coded assembler since probably my first job on a DEC VAX, and nothing extensive since my Operating Systems class in my junior year at college, in which we built and demonstrated a (somewhat) complete operating system on a PDP-11 - probably the last time I was able to effectively pull an all-nighter, by the way.

That OS class "squeezed" people, and I'm convinced that was its purpose - to see if this was really what we wanted to do with our lives. I loved it. But when you get squeezed, like an orange, the real you comes out! One night I saw this very quiet guy, who always seemed to understand what was going on in class, and he was debugging his OS on the PDP-11 and 3/4 through the night he slams both fists down on the keyboard, causing about 5-6 keys to go flying through the air (don't worry - they went back on, likely loosened by years of such tantrums). Ah, the memories.

So, assembly language. It's been years, and I've never tried it on an "IBM PC", as a lot of the old assembly language sites I've been perusing still seem to call it. It's been interesting just getting started. It also makes you appreciate where languages have gone in the past 30-40 years. But it's also fun. I'll try to keep you posted on my progress. My real goal is to do each of the algorithms in ALL of the exercises in TAOCP - likely a lifelong project at this point.