Thursday, April 28, 2011

Expanding your toolbox - Picking a new language to learn.

Image: graur razvan ionut / FreeDigitalPhotos.net
One day a developer on my team came up to me and asked, what should he programming language should he learn next to be marketable (and by the way he also thinks that Java is slowly dying).

Well as to whether Java is dying a not, I don't think so, a quick check with TIOBE shows that Java is still ranked among the top few languages and lots of places still runs Java. So i do have a job for the next few years.

But the thought came to me, it is worth learning things that are marketable or should you learn things that broaden your knowledge? What's your take on it? Should you expand your toolbox or have more of the same tools?

Steamhead takes the languages from Seven Languages in Seven weeks and puts it into a nice flow chart. I think all should go check that out and pick something out from that list. After doing quite a lot in Java I begin to appreciate the simplicity of using interpreted languages like  python and php, and the fact that their frameworks are usually simple as compared to Java ones where sometimes we descend into XML configuration hell.

Steve Yegge has a interesting way of categorizing the various languages, he breaks them down into Nouns (Java, C# or OO languages), Verbs (LISP, Clojure or Functional Programming) and Verbs and Nouns (Scala, Ruby, Python, C++ or a Mixture of both).

Well for me I am more for the expand your toolbox model, go learn something that makes you have a new way of looking at things. A lot of people learn languages but they don't really learn design, think stuff like design patterns (Gang of Four, Java EE Design ...), SOLID principles, OO Metrics. Even if you know the syntax, you simply can't write maintainable programs and all you write lacks a certain craftsmanship to it.

By learning a different language and looking at the api, you can have a different idea about how to design your programs. An example will be like in Java. You have Math.abs a static function to get the absolute value of a number, have you ever wonder why its so "un OO" like? Compare with Ruby its just number.abs(), simple and elegant and fits into the OO paradigm.

In short

If you know Java, C# go learn Lisp Dialects (Common Lisp, Clojure), Haskell, Ruby, Python...

If you know Python, Ruby, you are pretty much there, since you straddle the limits between the 2 kingdoms.

If you know Common Lisp, Clojure, dont bother learning any other thing since you will think why in the world Java, C# programmers are typing so much code and configuring so much XML.

If in doubt just learn PHP to be marketable :)





2 comments:

  1. No doubt Java will remain forever because its a great application programming language till date but yes some of areas its losing its place to C++ where you need super fast speed for Java developer learning C++ is little difficult but I think now its something must have in your kity ? what do you think ?

    Javin
    How Synchronization works in Java

    ReplyDelete
  2. @Javin I think C++ is a good language to learn but the problem with C++ is that its quite complex to program with it. Especially for people who started off with Java as a first language. But i think having C is a definite must. Since you learn more about memory management and pointers, which even now lots of programmers are having problems understanding.

    I worked with C++ for a project and my frustration stem from handling memory, weird compile time error messages and header file hell, and as a programmer i was concentrating on the language instead of the business logic. (Okies so I am not a very good C++ programmer)

    But if your day job is doing hardcore games or high performance stuff, I think one would be hard to find employment if you only know Java.

    ReplyDelete