One of the main reasons to use Linux (or any Unix-inspired operating system like FreeBSD or Mac OS X) is the sheer number of programming languages that you can install, learn and use freely:
In his very influential essay, “Teach Yourself Programming in Ten Years”, Peter Norvig states:
“Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).”
I do not always agree with the specific languages he mentions but the important point is that all great programmers know (or, at least, are aware of) the many programming paradigms that exist (functional, imperative, object-oriented, generic, logic, concurrent, distributed, etc.)
This is important because some real-life problems can be easily solved if a programming language supporting a specific paradigm is used and, conversely, very very difficult to solve if the bad language is chosen. Don’t forget that:
“It is tempting, if the only tool you have is a hammer,
to treat everything as if it were a nail.” – Abraham Maslow
Here is a commented list of the many programming languages that I have installed in my Kubuntu Linux computer:
Language | Implementation | Comments |
C | KDevelop (using gcc) | Linux is written in C… |
C++ | KDevelop (using g++) | Much too complicated for my taste |
C# | MonoDevelop (using the Mono/.NET framework) | Looks a lot like Java to me :-) |
Boo | MonoDevelop (using the Mono/.NET framework) | I’m discovering it now… |
Nemerle | MonoDevelop (using the Mono/.NET framework) | I’m discovering it now… |
Erlang | Erlang | A functional language by Ericsson for distributed systems |
Haskell | Hugs | A great pure and lazy functional language |
Java | BlueJ / Eclipse / Netbeans (all using a Sun JVM) | A fantastic object-oriented (but too verbose) language with top-quality IDEs (you need to try BlueJ if you are a beginner) |
Lisp | CLISP | Very powerful if you get into its more advanced features like macros but I personally prefer Scheme… |
Objective Caml | Objective Caml | I’m discovering it now… |
Python | Eric / Idle | One top language and Eric is a very good IDE. Learn it now! |
Ruby | Eric / Interactive Ruby | My favourite programming language – it’s so nice and powerful at the same time! |
Scheme | DrScheme | A great functional language to learn programming… and it’s poweful too. DrScheme is a fantastic IDE for beginners. |
Smalltalk | Squeak | Addictive and powerful language. Try Squeak, it’s fun! |
Have fun discovering some of those languages…