Programming Languages I Have Known
I’m learning Dart and it got me wondering: “Just how many programming languages have you used, Roger?”.
The thing about languages – programming or otherwise – is that you reach a level of ability: are you a beginner, are you proficient, are you fluent? And, after that, if you don’t use a language (or any other skill) for a while, it atrophies.
Depending on exactly how you count, it’s something like 40 languages. Here’s the breakdown.
Current, Familiar
These are the languages I’m currently familiar with:
- Erlang. We wrote the Electric Imp server-side components in Erlang, mostly.
- Elixir. But some of the newer stuff uses Elixir.
- C++, but only up to C++11 or so. Yes, it’s 2022, so how can I be current in a language version from a decade ago? The thing is: when you’re writing for an embedded platform, or you’re maintaining a legacy code base, there doesn’t tend to be much call for using newer language features.
- Bash scripting.
- jq. Yes, it’s a programming language.
- AWK.
- Sed.
Current, Intermediate
The list of languages that I use daily, or have used recently, but where I’ve not gone into much depth:
- Python. I’m not a huge fan, but it has its place.
- HTML. Gotta be able to put a basic website together, right? Even if it’s just templates for a static site generator.
- Squirrel. The sandboxed language used by Electric Imp’s platform. I probably know more about how the VM is implemented than I do about the actual language.
- JavaScript. If I had to do Javascript development, I’d use TypeScript or a transpiler these days, I think. Fable looks cool.
Current, Learning
Then there’s the list of languages that I’ve been playing around with recently, to learn something new:
- Rust. Because it’s not C++.
- WASM. Would it be possible to compile Squirrel to WASM? Dunno, but I played with WASM once, and plan on taking another look.
- Dart. I’ve got an Android side project, so I’m playing with Dart/Flutter.
- Kotlin. That Android side project, again, and I’m not a big fan of Java.
- F#. Played with it a bit for Advent of Code.
Current, Beginner
The list of languages that I’ve used recently, to get something done:
- Lua. We used it for nginx extensions at Electric Imp.
- Perl. Text processing of log files.
- Tcl/Expect. Some regression test scripting.
- CSS. Even static websites need a bit of styling occasionally.
- Groovy. Jenkins pipelines, mostly.
- XSLT. I had an XML export that needed transforming.
Former, Familiar
- C#. I used C# for many, many years. They’ve added a bunch of new features, but I reckon I could pick it back up fairly quickly.
- SQL. Mostly T-SQL, but I started with Oracle PL/SQL and can do MySQL and PostgreSQL.
- PowerShell. See PSBouncyCastle for example. We also wrote installers in it before Octopus Deploy was a thing.
- NAnt. I once wrote an entire CI system in it. Including the polling, scheduling and emailing parts. No, really.
Former, Intermediate
- Ruby. Learnt it with the Pickaxe book. Still occasionally use Rake for some things. Haven’t bothered with Rails.
- PHP. I once ran my website with Drupal. I dug into the PHP code occasionally. Don’t fancy going back.
- JScript. Before PowerShell.
- VBScript. Before PowerShell.
- Batch. Before PowerShell. I guess you could get fluent with Batch files, but you should probably seek help at that point.
- MSBuild. Enough to be dangerous.
Former, Beginner
- Assembly (ARM). I learnt how to read it at empeg, but never got that proficient.
- CoffeeScript. I wrote some extensions to Dashing at one point.
- Pro*C. Blast from the past. Embedded SQL statements in C code, for Oracle. Used it once at my second job after graduating.
Ancient, Familiar
These are languages that I used a lot, but haven’t used in years:
- C. I’ve still got a copy of K&R 2e on my bookshelf. I started with MixC, then QuickC for DOS. I programmed for Windows in C, since (draws breath) about 1990.
- Assembly (x86). Because back in those days, if you wanted small and fast, you did it in x86 assembler (MASM, as it happens).
- QuickBASIC. I once wrote a multi-windowed chat app using a mix of QuickBASIC, QuickC and MASM.
- RM BASIC. I used this at school until QuickBASIC became the new hotness.
- ZX BASIC. I first learned to program on the ZX81 by typing in the listings from Sinclair User and other magazines.
Ancient, Beginner
I used these at university and never again since:
- Assembly (68000).
- Assembly (32016).
- Pascal.
- Miranda. ML-influenced functional programming language. It was proprietary at the time. It’s open-source these days. I guess I’d use F# or OCaml instead, though.
- Either Eiffel or Modula-2. I don’t remember which.
- Z. We once did a group project to formally prove … something.
- Prolog.
I used these at school. For the sake of the USians, let’s say it was “High School”:
- BBC BASIC.
- Logo.
Appendix: Would Like to Learn
There’s also a list of languages that I should probably learn, but haven’t got around to it yet:
- Racket. Everyone should learn LISP, right?
- OCaml. Everyone should learn an ML-family language, right?
- Haskell. Everyone should learn Haskell, right?
- Go. I’m not a huge fan, but if I’m going to get much deeper with Kubernetes, it seems like I’m going to have to learn it at some point. Maybe I’ll wait until generics are a bit more widespread.
- Gleam. Type safe language for BEAM.
- Caramel. ML-family language for BEAM. I like the BEAM.