Several new languages have come into existence and are becoming more popular with time. Well some of them(Ruby, Haskell, Python, Erlang, others ..) have been around for long time but there implementations on top of CLR (.NET) and JVM has made them more powerful & exciting. One of the major factors for emergence of these languages is “Concurrency”, well said by Herb Sutter in his popular article The Free Lunch Is Over : A Fundamental Turn Toward Concurrency in Software way back in 2005.
Well One of the advices in “The Pragmatic Programmer” says: "Learn at least one new language every year", in order to be a good hacker. The theory is that by learning a new language you “expand your mind” and become “a better programmer”. But one should be careful of choosing what language to learn rather than just learning up new syntax for same things.
Peter Norvig, Director of Research at Google, wrote an article called Teach Yourself Programming in Ten Years where he gave explicit advice on how to choose languages to learn:
Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction , one that supports syntactic abstraction (like Lisp), one that supports declarative specifications , and one that supports parallelism .
For some developers learning new language have been hard since they didn’t want to leave their worlds of .NET and JVM, but now it has become easy to learn new language for them while still benefiting the features of the above two platforms. Microsoft has gone even one step ahead & have built DLR ( Dynamic Language Runtime ) layer on top of CLR. It will be officially included in .NET 4.0 and is very exciting as a technology which is used to run IronPython and IronRuby and support further dynamic langs. My intent here is to summarize about some of the new popular languages & learn them to involve in my coding tasks.
IronRuby: is ruby on top of CLR [.NET] ( similar offering on JVM is JRuby ). Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflection. It also has a dynamic type system and is therefore similar in varying respects to Python, Perl, Lisp.
Erlang: is a general-purpose concurrent programming language and runtime system. Erlang is a functional language, with dynamic typing and for concurrency it follows the Actor model. It has been around for more than 20 years but has recently become very very popular for Concurrency reasons because of its Message Passing Model.
Groovy: An agile dynamic language for the Java Platform. It can leverage Java’s enterprise capabilities but also has cool productivity features like closures, builders and dynamic typing.
F#: A succinct, type-inferred, expressive, efficient functional and object-oriented language for the .NET platform. It is combination of type safety, succinctness, performance, expressivity and scripting. It is now being developed at Microsoft Developer Division and will be distributed as a fully supported language in the .NET Framework and Visual Studio ecosystem.
Clojure: Its also supposed to tackle concurrency issues strongly. It is a dynamic, functional programming language that targets the JVM and is a dialect of LISP. Clojure offers a software transactional memory system and reactive Agent system that ensure clean, correct, multithreaded designs.
(Scalable Language) is a multi-paradigm programming language designed to integrate features of object-oriented programming and functional programming. Scala runs on the JVM and class abstractions are extended by sub classing and a flexible mixin-based composition mechanism as a clean replacement for multiple inheritance.
Haskell is an advanced purely functional programming language with non-strict semantics . With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries. Unique concepts include monads, and type classes.
which one will you be learning next ..-> comments welcomed