I didn't plan to post so soon, once a month is about as often as I can spare. However, this post from @rosettacode provoked me:
Pick three to five programming languages for teaching orthogonal programming paradigms. Which did you choose? Why? Blog and I'll share.
So, without further ado, here's my list, in the particular order:
1. C (procedural / imperative)
Why: It's ubiquitous on most platforms, it's extremely fast, it's the lingua franca of combining multiple technologies together. Most importantly: every time I try to understand the inner workings of any piece of technology, I think of how a corresponding C code would look like.
2. Ruby (OO / dynamic)
Why: It's easy, elegant and concise. Probably my favorite language I've worked with so far. Supports many, if not all OO concepts, very flexible, especially suitable for building small internal DSLs. I find it incredible how much can be done with only a few lines of very readable code.
3. SQL (declarative)
Note: only declarative parts of the language i.e. queries, updates, DML/DDL, without stored procedures, triggers and custom extensions.
Why: SQL is to me the best example of separating "what" from "how". You build powerful queries, stating what you need, and the database engine does the rest. It is incredible how data can be flexibly sliced, filtered, joined and grouped, even when it is not normalized.
4. Erlang (concurrency / functional)
Why: The language is super simple, yet extremely powerful. Its support for concurrency is beyond anything I have ever seen. In addition, it supports pattern matching and promotes functional style. Finally, I consider the platform i.e. how the pieces of the language + VM + framework work together, as one of the greatest masterpiece in the IT field I have ever seen.
5. Lisp (functional)
Why: It's the Latin of programming languages. Almost every language and development platform, no matter which paradigm does it come from, borrows something from it.