Commodore BASIC, Turbo Pascal, M6800 Assembly (wonderful!), 8088 Assembly (horrible!), C, SQL, M68k Assembly, AREXX, perl, sh, Javascript, Java, php. I've dabbled in others (I can crank out a VB macro if need be), but those are my core fluencies.
The assembly was very useful in learning how the CPU actually works, and proved very useful for understanding industrial/microcontroller stuff later on, but with CPUs these days being vastly more complex than an 8088 or an M6800, I don't know if it could be dumbed down enough. Perhaps on a virtual machine or something?
Turbo Pascal was an absolutely brilliant language to learn on, and it is a shame Pascal seems to have fallen out of favour. It was powerful enough to write workable programs on, but simple enough to keep a new student from wandering off the cliff edge.
If I was teaching, I'd use perl:
- perl supports multiple syntaxes so you can teach the simple stuff in a straightforward manner
- The fact that it identifies variables and in which context they are being used is a brilliant way to help students separate out what bits are variables/arguments and what bits are code
- The C and sh bits are gateways into C and sh - "C lite"
- You can do some really powerful and *useful* programs in perl, which teaches that programming isn't just the creation of monolithic apps, but a *process* that can be used to solve a single specific problem.
- perl has native regular expressions, and teaching pattern matching opens up a whole new world of problem solving techniques
I can see homework like "Take the provided text file, and write a program that takes it as input and prints out the sentence that has the most vowels in it" or "Write a program that prints a list of the songs in your music library, ordered by date of album release". These programs are easy to write in perl, fun, challenging, and *useful*.