The great thing about UNIX like systems is that virtually every language is available. UNIX was made by and for programmers.
Here is a short list of the more populair languages with free/open source implementations:
Low level
- Assembly
- C
OO
- C++
- Java
- Eifel
Imperative
- FORTRAN77
- Ada
Functional
- Lisp, including Common Lisp
- Scheme
- ML
- Haskell
- Ocaml (ML dialect, with OO features. Efficient compiler)
Scripting:
- Python
- Perl
- Tcl/Tk
- Ruby
- various shells (bash is rather full featured, no real need to try ksh, zsh)
Misc.
- Forth
- Prolog
- Post script
- M4
- Make
- awk
Now to your question. There is no need to learn all languages, but it pays to learn more that one (Brooks: if the only tool you have is a hammer, all problems look like nails)
I would suggest the following mix:
- Get real good at C. It is the system language, you need to know it for mixed language project.
- You should have an adequat grasp of shell scripts; its the glue that holds your system together. Use it to automate repetative tasks.
- For general scripting, shell scripts soon become troublesome for larger projects. Consider Perl or Python. Perl is more suited for system administration tasks, but Python is, IMHO, more readable, easier to learn. It is also OO.
- Python is also great for prototyping, especially if your program is OO.
- Learn a functional language like ML or Haskell. You dont need to become an expert, but it will open your mind to other programming approaches.
- Depending on your area of interest, pick one or more of the following:
- Learn Java if you are interested in writing busines applications
- Learn lisp if youre into symbolic math
- Learn the history and anecdotes of lisp if you want to pass yourself of as UN*X guru
- Learn FORTRAN if you are into numeric math
- Learn Ada if you want to rub shoulders with older DoD contractors (DoD doesnt mandate Ada anymore though)
- Get a working knowledge of M4 and Make, to solve all kinds of build problems.
- Keep an open mind.
I cant really recommend C++. While it allows OO, you still have to know about language implementation details. Want OO and speed ? Check out Ocaml.
Want to know which laguage is fastest ? Check out
http://www.bagley.org/~doug/shootout/.
Hope this helps.
ps. I know this list is incomplete. I only mentioned the languages I know a bit. There are many others, some just research projects, other more like a tool than a programming language (bison for example). YMMV