I ran into a polyglot the other day who asked me how many languages I knew. I flashed back to a moment circa 1977 when I was a young kid in a summer program to learn about computers. We were sitting at terminals and someone asked a hacker (in the good sense of that word) how many languages he knew.
The hacker was about 19, with long hair in a pony tail, wearing jeans, hiking boots, round-rimmed John Lennon glasses, and a T-shirt with some kind of rock band logo on it. He was the epitome of the cool nerdy hacker, leaning over our shoulders as we typed out BASIC programs and giving us tips, excited to share his craft.
“Well, if you mean human languages, only one fluently,” he said. “But if you mean computer languages, well, let’s see…” He started counting them off on his fingers. The only ones I remember now are BASIC (because I was learning it) and SNOBOL because the name was funny.
So I answered my polyglot acquaintance “Well, if you mean human languages, only one fluently. But if you mean computer languages…”
Then later when I got home, I made a list, and it was surprisingly long. Especially considering that I’ve never had a development job in my life. I’ve worked in IT for 30+ years but it’s mostly been on the administrative side, with a ton of hobbyist tinkering as well. Still, even as a sysadmin or DBA, you can end up writing some pretty huge codebases. The biggest application I wrote for work is about 80K LOC (mostly Python, SQL, and shell).
Expert-Level Knowledge
Definition: I’m probably as good as anyone in these languages.
- bash/ksh Shell: I spent several years in the early 2000s doing ksh88, which I hated because I already was exploited everything Bash could do and going back to 1988 was painful. You can write amazing things with Bash…sure, eventually you get to a point where you should just use Perl or Python, but with associative arrays, signal and exit traps, coroutines, math, and more, it can be a very productive environment, at least for what it’s meant to do. And it’s on every Linux server so it’s always at hand.
- Perl: Since Perl 3. I learned sed and awk and shell first, and then Perl was magical as it knit them all together. I’m probably the only person in the world who learned object-oriented programming concepts through Perl. I still love Perl and use it all the time for text-processing and sysadmin scripts, though I wouldn’t recommend anyone start learning it in 2026. It’s very fast and while it has a reputation for being “write only,” you can write very clean, readable Perl code if you wish.
- Regular Expressions: Not a programming language per se, but since there are entire books written about it, I’m going to list it. Learning regex has paid untold dividends over the years. I’ve seen so many people struggle with them, but once you have them down, you’ll use them everywhere with ease. I see people write long blocks of code to strip this, replace that, concat these things together when they could do it all in one regex.
Competent
Definition: I can read and write in these languages, and generally understand what people are doing with them. I’ve written large-scale code with them.
- Python: I have a love/hate thing with Python. I think the whitespace indentation is stupid and always have. I can make my code look nice without someone forcing their ideas on me. Notably, no other language has ever considered this “feature”. I do love Python’s batteries-included mindset, which may be its greatest idea. People often try to be too clever with Python, but I think the strength is in clarity, not cleverness. I have run into some scaling issues with Python due to the GIL (and used Perl instead), though I hear that’s going away Real Soon Now. I like Python, but I’ve never fallen in love with it. Still, it’s a very handy language.
- PHP: Once you know Perl and Python, PHP is a snap. I should caveat this by saying that knowing PHP is one thing, and knowing Laravel is another. To really use PHP in 2026, you need to know Laravel or some other framework. I know PHP and can passably hack on Laravel but I’m not strong on the latter. And of course, to know PHP/Laravel you have to know HTML/CSS…I’m OK on those but have never been a strong web dev. I can’t say I love PHP or even like PHP, but it’s a sort of dollar store common denominator of languages.
Digression: The longer I’ve written code, the more I’ve grown to prefer strongly-typed languages and languages that catch errors at compile-time instead of at run-time. Perl and Python are fun but you end up writing oceans of test cases for things that strongly-typed languages would discover at compile-time.
- Go: I love Go! It’s such a fun language. Yes, it can be a little boiler-platey but I think it’s fun, fast, and also batteries-included like Python. I love the concurrency parts of the language. There is so much to like with Go. And it’s strongly typed. It’s the right meeting point of performance, low-level ability, high-level concepts, and robust standard library.
- SQL: Like regex, not a programming language per se, but such a valuable skill. I don’t use it like data analysts who write page-long queries, but I know it very well. Just mastering SQL alone is still an employable skill. SQL is one of the most enduring technologies. Once you get set algebra down and “think in SQL,” you can do amazing things.
- Java: Like PHP, learning the language is one thing and then what you do with it is another level. I know Java pretty well but I don’t know Swing, Spring, etc. I like Java, despite its warts, and still maintain a Java codebase that I use at home. I wish it was compile-able…my experiments have Graal have resulted in extraordinary compile times and runtime crashes the moment you try to use advanced language features. Still, Java feels “homey” to me and while it’s started to evolve in kitchen sink directions, it’s easy to write. Though as the joke goes, “I had a problem so I wrote some Java. So I now I have a ProblemFactory.” 😂
- PL/SQL: The programming language built into the Oracle RDBMS. I learned it for work. It’s horrible. But it’s not hard to learn if you know other languages.
- Redcode: An assembly-like language used to play Core War. I ran a Core Wars server in the mid-90s. I was never a top 10% player but did OK on the public king of the hill servers. It was my first real exposure to assembly-type programming and I got a lot out of it.
Don’t Regularly Use
Definition: I used to be good in these or occasionally pick them up, but not enough to really say I’ve mastered them.
- Javascript: I mean, sure, I’ve mastered Javascript but that isn’t much of an accomplishment because it’s such a simple language. But like PHP or Java, the language itself is only part of it. You could be a Javascript master, but that doesn’t mean you’ll understand React or some other framework, and that’s where the real work is. Every now and then I get an idea and write a bunch of Javascript, but I never keep up with it…but it seems that the next time I want to use it, it’s trivial to get back to that level of proficiency. However, I’ve never really gone deep into React or one of the other frameworks, and I’m not a strong web dev. One thing I strongly hate: npm. Having a billion random unvetted authors contributing to your code base is abhorrent.
- Awk: I love awk, but after learning Perl, I never used it much except for one-liners and pipeliners. If you only know it from short bits in shell scripts, Awk is surprisingly powerful and a full-featured language. But I don’t think there’s anything it can do that Perl can’t.
- C: When I learned C, people wrote applications in C. In 2026, C is used mainly for (1) the Linux and BSD kernels and other Unix system code, (2) embedded, and (3) a language other languages are transpiled into. I know C well but any C project quickly becomes a DSL based on what you’re trying to do (kernel, embedded, etc.). I do enjoy C, but my experience is more application-level than system-level and I don’t have a lot of uses for it today. Besides, everything C is being rewritten in Rust anyway.
- COBOL: This language has a bad rap but I like it. The record-handling capabilities are awesome. If you need to rip through a billion records, COBOL is amazing, particularly the way it populates very complex variable structures automatically. There are a lot of nice “don’t worry about” things with COBOL – for example, you’re not worrying about number limits and it works with decimal math (not binary floating point). Yes, the language is insanely wordy and bizarre by modern standards, and admittedly my love for it is probably nostalgia-fueled, but I enjoy COBOL.
Have Used But Mostly Forgotten
- Assembler: I’ve written some, but not a lot, and it’s a skill that erodes quickly. I remember more Redcode assembler than x86.
- Scratch: I used to write Scratch code with my daughter and it’s fun. Trivial to relearn.
- Lisp: I learned Lisp because everyone told me it was amazing, mind-expanding journey. I guess I didn’t get enough into it to have my mind expanded. I wrote and published an emacs extension during one of my flirtations with that language. I should probably spend more time with Lisp, though I think today I’d use one of the modern versions like Clojure or Janet.
- FORTRAN: In the late 90s, I supported some satellite engineers who did a lot of work with NASTRAN, which was implemented in FORTRAN. I ended up learning some FORTRAN because when their jobs would error out, they’d ask me why and 99% of the time it was some application issue. I remember writing some FORTRAN extensions. I felt like a 1950s rocket scientist.
- BASIC: My first language, on a variety of systems, from 70s mainframes to early personal computers. Once I discovered C, I never looked at BASIC again. I never used VisualBASIC.
- PASCAL: I met a kid in the 80s who claimed he’d learned PASCAL in a weekend, so I figured if he could it, so could I. I went to the library and got a PASCAL book. Coming from C, it was pretty simple but I don’t think I ever did much with it beyond the book’s exercises. I don’t think there’s much of a need to learn PASCAL.
- C#: I remember liking C#, but I never enjoyed Windows very much. It’s ++Java, so benefits from reimplementing all of Sun’s ideas.
- Batch (Windows): There’s more to this language than most people realize, but it’s still very primitive compared to the Unix shell.
- Lua: For a time, Angband was partially implemented in Lua. I picked up a book on it and wrote some Angband code. I like Lua, though I don’t think there is anything all that remarkable about it.
- AppleScript: Every now and then I need to automate something on my Mac and remember this language. It’s one of those “forget it until you need it, then quickly relearn it” languages.
- DBASE: Now we’re talking…1980s database GLORY! I loved DBASE and it’s a fine language, though it’s pretty archaic today. At the time, relational databases were strictly proprietary software that ran on big servers. Today, sqlite or Postgres can do everything DBASE can do but in the 80s, DBASE was king. Enjoy this soap opera about it.
- PL/I: During some of my flirtations with MVS 3.8j, I picked up some PL/I and liked it. But I never wrote large-scale code with it.
- JCL: The mainframe batch language. I’ve known so many mainframers who have a passionate love for JCL. I do love the mainframe and don’t mind admitting I am a mainframe fanboy. JCL is a bit cryptic but if you know JCL, you know the mainframe.
On Deck
- Rust: I’ve started learning Rust. It’s…okay…ish. It’s a compiled systems language that doesn’t have memory management and doesn’t have garbage collection, so those are huge plusses. I find the syntax rather ugly. I didn’t care for the Rust book, but like Jim Blandy’s book Programming Rust. The major thing I don’t like about Rust is the crate ecosystem, which is like npm. I understand they’re working on having more strongly-vetted crates, which make it more “batteries included” without the supply chain risk, which I think would be great.
- ALGOL 68: When I read that the most recent iteration of GCC supported ALGOL 68, I thought “wait…what?!?” I think it’d be fun to learn this language just for its history.
Languages I Dislike
- C++: The biggest language not in the list above. I hate C++ and refuse to learn it. There are so many criticisms of C++ (for example) that I don’t think I need to explain. Stroustrup once said there was a “smaller, elegant language in C++ struggling to get out”. Great…LET IT OUT and throw C++ away. I am hopeful Rust will make C++ completely obsolete, but I’m sure it’ll soldier on like the COBOL of the 90s.
- csh: It’s buggy and there’s no need for the C-shell. Back before Bash existed, sure, csh/tcsh had some nice features not in ksh. But for at least 20 years, Bash has had everything in sh/ksh/csh/tcsh and there’s no need for csh. I had to maintain csh scripts for many years and hate this language.
- m4: Scars from when I had to maintain sendmail. There’s nothing m4 can do that Perl can’t.
- RPG: This hoary old reporting language was in use at a company I worked for and I learned a bit of it…just enough to dislike it.
- Ruby: I’ve never understood the justification for this language. We have Python, Perl, PHP…why do we need another scripting language? Ruby had its moment with Ruby on Rails and every now and then I run into some project using it (e.g., Homebrew for Mac) but it seems unnecessary to me. I hear it’s big in Japan.
So What’s Missing?
There are some big languages I’ve never played with:
- Forth: This is one language I should learn. You start with very small primitives and build up the language you want, which sounds interesting to me (and certainly easier than writing one’s own compiler). Lifespan permitting, I will one day read a Forth book.
- Prolog: Another one that interests me, just because it’s so different than other languages. Prolog is built around logical statements – it’s really just a logic expression language, like Mr. Spock’s ultimate fantasy.
- Ada: The official language of the Department of Defense.
- Erlang: This language looks very interesting but I’ve never had the need/time.
- Swift: I don’t write iOS apps. I could write macOS apps. I wish it was more of a general purpose language that was well-supported on Linux, which would make it more attractive to me.
- R: I think I may have written some R at one point, but I don’t recall. I don’t do high-end data analysis.
- Smalltalk: Though to be honest, I think all of its ideas are in other languages I know.
- Haskell: I’ve heard of it.
- APL: I mean, when this is valid code:
life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵}
…then I guess I’m intrigued.
I’m sure there are some languages I’ve forgotten…there are so many.




















Leave a Reply