A common question for people is "what language should I learn?", sounds easy enough doesn't it? But in reality is really hard. You have 3 basic other questions to answer: "Do I want to learn about the computer?", "Do I want to learn about how other languages do things?" or "Do I just want to learn something new and exciting?". Each are incredibly important to your choice and how you answer each can vary you final decision greatly:

"Do I want to learn about the computer?":
The language C can help you understand how your computer works because since it's a general-purpose computer programming language and was created over 35 years ago it doesn't have some of the comfy features that modern languages have like automatic garbage collection, syntax for ranges, such as the A..B notation used in several languages, standard libraries for computer graphics and several other application programming needs, native support for multithreading and networking and some more. It may sound really crap that it doesn't have those things and that you have to do them but it helps. But by having to these extra things it'll give you a better understanding of allocation and deallocation of memory, processes and more. And it's also not that much harder to learn as well. C also can tap into the magic of the operating systems libraries which is uncommon in some languages (especially scripting). Another plus is that C (likeC++ and D) is compiled into machine code which means in runs vastly faster than any interpreted language.

"Do I want to learn about how other languages do things?":
Another thing that is really handy for a developer is to learn how other languages do things e.g how they work or what the syntax is like. If your answer would be towards yes then I'd say some type of dynamic programming language like Ruby, Python or Groovy. I have learned both Ruby and Groovy quite well and I think they'd both be worth while to learn if you want to learn new ways of doing things. Both are expressive (meaning they're incredibly short) and in some cases it isn't the best thing because somethings require a lot of control, like in a large game and memory management is very important.

"Do I just want to learn something new and exciting?":
I think that a general languages that would come under "new and exciting" is Lisp. Though many would disagree, I think Lisp is really interesting because it's a functional language and each of its dialects are aimed for different aspects of programming. Though it's the second oldest programming language around (being beaten only by Fortran), it has some nice features which include:

Really nice arithmetic functions premade for your enjoyment

Macros

Multiple Inheritance

Dynamic redefinitions (which basically means they can be changed at almost any time)

(Though each of its dialects are aimed for different things like simplicity, power, speed, portability etc) It's more of something you should really try yourself before judging because peoples opinions are extremely diverse towards it but it has stood the test of time and at least that shows something about it.

Though I've only named a couple of languages hear there are hundreds of languages you could choose to learn and when you choose when, research a good book for it, but it and then read it and learn to your hearts content.

1 Comments On This Entry

Lisp is not a functional programming language. Some dialects are functional, and some are multiparadigm. For instance, Common Lisp actually has one of the most advanced object systems in existence. Scheme is an example of a functional Lisp, along with my favorite, Clojure.

Some Lisps such as Scheme and Clojure do not even have an object system (intentionally, Rich Hickey has very detailed rationale as to why he chose to not make Clojure OO), so the "Multiple Inheritance" bit in the benefits area should be edited to explicitly mention that this is a Common Lisp specific feature.