The Center for Education and Research in Information Assurance and Security (CERIAS)

The Center for Education and Research in
Information Assurance and Security (CERIAS)

So you have to learn a 3rd programming language?


I recently found myself in a conversation where someone made a comment about "Being so old I've programmed in Pascal!" I'm considerably older than that person, and actually did some of my first programming on plugboards and punchcards. I declined the opportunity to point that out at the time.

Upon some reflection, I realize I've had the opportunity (and sometimes, the necessity) to use many, many different languages during my 48 years of programming. I used to find it empowering and instructive to try different programming paradigms and approaches, so I actively sought out new ones. As my workload and schedule have evolved over time, I have not really picked up many new ones. I’d like to learn Swift and Rust (for example) but I'll need to carve out the time and obtain a compiler, first.

For grins, I thought I'd make a list of programming languages where I wrote at least one non-trivial program, where "non-trivial" means that there were subroutines/functions/methods/etc. I may have left a few out, but... (you can find most of these documented on Wikipedia if you haven't run across them before).

  • 80x86 assembler
  • 6502 assembler
  • 8080 assembler
  • abc
  • Ada
  • Algol 68
  • Algol W
  • APL
  • AppleScript
  • awk/sed
  • bash
  • Basic
  • bc
  • C (original and ANSI)
  • C++
  • Cobol
  • Common LISP
  • csh
  • dc
  • Eiffel
  • Emacs LISP
  • Euclid
  • flex/lex
  • Forth
  • Fortran 77
  • Fortran II
  • Fortran IV
  • html
  • Java
  • Javascript
  • JCL
  • ksh
  • LISP
  • M4
  • MIX
  • Modula 2
  • Modula 3
  • MS-DOS Batch
  • nroff/troff
  • Oberon
  • Pascal
  • Perl
  • PHP
  • PL/I
  • PL/M
  • Postscript
  • Pr1me assembler
  • Prolog
  • Python
  • Ratfor
  • RPG
  • sed
  • Simula
  • Smalltalk
  • tcl/tk
  • TeX/LaTeX
  • VAX assembler

I also wrote one small program in Intercal, to prove to myself that I could. I never worked up the courage to tackle Malbolge.

I've also written and debugged patches in microcode on several machines, but I won't claim that I really mastered any of the associated languages.

There may be a few I left out plus dialect/version variations, but that is almost 60 languages as is. I'm sure there are people who have programmed in more; those of us who have been around for a while have needed to adapt.

I don't program very much anymore. I occasionally will whip up a ksh or Perl script, and very rarely, a C program. Those are sort of my default programming tools. If I needed to, I suppose a weekend or two with some language manuals would get me somewhat back up to speed with these others. Thankfully, no one has a pressing need for me to write code for anything, although I'm still pretty good at debugging (errors tend to be the same in any language). I have written four complete compilers and three full operating systems using some of these languages, including one each in assembly language. Thankfully, that is also not on my agenda to do again.

So when "kids these days..." complain about having to learn a 3rd programming language for class, well, I am amused.


Posted by Ben Cotton
on Sunday, March 28, 2021 at 07:44 PM

I would like to give SpafOS a try!

Posted by David Bell
on Monday, March 29, 2021 at 07:48 AM

A very impressive list.  As a former mathematician, my list is shamed by this list.  My favorite bit was “errors tend to be the same in any language.”  I am reminded that the part of the TCSEC that required searching for the standard errors was a reflection of the fact that the old-time penetrators found that the same errors (and back-doors in) tended to be present everywhere.  Why waste cycles searching for novel methods, when the usual 12 methods typically unlocked the door?


This is the same phenomenon that makes things like the SANS and OWASP top errors lists very useful.

There is a class of local errors that seem repeated (e.g., of-by-one), and a set of more macro errors that are repeated (e.g., namespace collisions).

Leave a comment

Commenting is not available in this section entry.