Debasish specializes in leading delivery of enterprise scale solutions for various clients ranging from small ones to Fortune 500 companies. He is the technology evangelist of Anshin Software (http://www.anshinsoft.com) and takes pride in institutionalizing best practices in software design and programming. He loves to program in Java, Ruby, Erlang and Scala and has been trying desperately to get out of the unmanaged world of C++. Debasish is a DZone MVB and is not an employee of DZone and has posted 54 posts at DZone. You can read more from them at their website. View Full User Profile

Five Reasons Why You Should Learn a New Language Now

08.17.2009
| 11655 views |
  • submit to reddit
There have been quite a few murmers in the web sphere today regarding the ways Java programming paradigms have changed since its inception in the late 90s. A clear mandate and recommendation towards immutable abstractions, DSL like interfaces, actor based concurrency models indicate a positive movement towards a trend that nicely aligns with all the language research that has been going on in the community since quite some time. Language platforms are also improving by the day, efforts have been on for making the platforms a better host for multi-paradigm languages. Time is now for you to learn a new language - here are some of my thoughts of why you should invest in learning a new language of your choice .. NOW!

#1

Language barriers are going down - polyglot programming is on the way up. Two of the big enablers towards this movement are:
  • Middleware inter-operability using document formats like JSON. You can implement persistent actors in Scala or Java that use MongoDB or CouchDB as the storage of JSON documents, which interoperate nicely with your payment gateway system hosted on MochiWeb, developed on an Erlang stack.

  • Easier language inter-operability using DSLs. While you are on a specific platform like the Java Virtual Machine you can design better APIs in an alternative language that interoperates with the core language of your application. Here's how I got hooked on to Scala in an attempt to make my Java objects smarter and publish better APIs to my clients. Even Google, known for their selective set of languages to use in production applications, have been using s-expressions as an intermediate language expressed as a set of Scheme macros for their Android platform.

#2

Learning a different language helps you look at a problem in a different way. Maybe, the new way models your domain more expressively and succinctly. And you will need to write and maintain lesser amount of code in the new language. Once you're familiar with the paradigms of the new language, idiomatic code will look more expressive to you, and you will never complain about the snippet in defence of the average programmer. What you flaunt today as design patterns will come as natural idiomatic expressions in your new language - you will be programming at a higher level of abstraction.

#3

Playing on the strengths that the new language offers. Long back I blogged on Erlang becoming mainstream as a middleware language. You do not have to use Erlang for the chores of application development that you do in your day job. Nor you will have to be an Erlang expert to use Erlang based solutions like RabbitMQ or CouchDB. But look at the spurt of development that have been going on using the strengths of Erlang's concurrency, distribution and fault tolerance capabilities. As of today, Erlang is unmatched in this regard. And Erlang has the momentum both as a language and as the platform that delivers robust middlware. Learning Erlang will give you more insights into the platform's capabilities and will give you the edge to make a rational decision when your client asks you to select Webmachine as the REST based platform for your next Web application talking to the Riak datastore.

#4

The Java Virtual Machine is now the cynosure of performance optimization and language research. Initially being touted as the platform for hosting statically typed languages, the JVM is now adding capabilities to make itself a better host for dynamically typed languages as well. Anything that runs on the JVM is now a candidate for being integrated into your enterprise application architecture tomorrow. Learning a new JVM language will give you a head start. And it will safeguard your so long acquired Java expertise too. JRuby is a classic example. From a really humble beginning, JRuby today offers you the best of dynamic language capabilities by virtue of being a 100% compatible Ruby interpreter and a solid player in the JVM. JRuby looks to be the future of Ruby in the enterprise application space. Groovy has acquired the mindshare of lots of Java professionals by virtue of its solid integration with the Java platform. Clojure is bringing in the revival of Lisp on the JVM. And the list continues .. Amongst the statically typed ones, Scala is fast emerging as the next mainstream language for the JVM (after Java) and can match the performance of Java as of today. And the best part is that your erstwhile investment on Java will only continue to grow - you will be able to freely interoperate any of these languages with your Java application.

#5

This is my favorite. Learn a language for the fun of it. Learn something which is radically different from what you do in your day job. Maybe Factor, maybe some other concatenative language like Forth or Joy. Or Lua, that's coming up fast as a scripting language to extend your database or application. A couple of days ago I discovered JKat, a dynamically typed, stack-based (concatenative) language similar to Forth but implemented as an interpreter on top of the JVM. You can write neat DSLs and embed the JKat interpreter very much like Lua with your application. Indulge to the sinful feeling that programming in such languages offer - you will never regret it.

From http://debasishg.blogspot.com

Published at DZone with permission of Debasish Ghosh, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Greg Brown replied on Mon, 2009/08/17 - 8:28am

I whole-heartedly agree with #2. I still prefer Java to the other JVM languages I have looked into, but I have taken away some valuable design elements from each that have helped improve my Java code. I also agree that some languages are simply better suited to certain use cases - the availability of so many great scripting languages on the Java platform really gives us an opportunity to "choose the right tool for the job".

And, it *is* fun to learn a new language. :-)

fred jones replied on Mon, 2009/08/17 - 11:06am

I agree with these comments. Learning several languages can help you learn better ways of doing things, make you more valuable as a programmer, and give you something fun to do. 

I'm strongest with Java, but during my programming career I've also learned or programmed in C, C++, Perl, Python, Ruby, Groovy, Scheme, Javascript, PL/SQL, and probably some other languages.  The problem I have now is remembering the built-in functions and APIs from these different languages and keeping straight the syntax and language constructs from each. In short, learning new languages is a good idea, but it has a downside.  

Do any of my fellow polyglots have any suggestions on keeping my languages straight?

Jacek Furmankiewicz replied on Mon, 2009/08/17 - 11:10am

I've learned Erlang too...enough to realize its strengths and weaknesses. Erlang is what made me really interested in picking up Scala, which gives you all the Erlang power and more, plus the endless array of JVM libraries that are available.

Otengi Miloskov replied on Mon, 2009/08/17 - 12:01pm in response to: fred jones

Im agree with you, This times we need to know a couple of languages to get the job done but sometimes instead of writing Python in Python Im doing Java in Python and also is getting hard to remember API calls for each language. So for sure polyglot have some downsides.

Also as Jacek it helps to learn functional programming as for me Haskell so the entry barrier to new languages as Scala is more easy but Im not sure if helps right now to apply advanced functional concepts to mainstream languages it gets more complicate, Some Scala concepts and syntax are complicate for the avarage programmer that is not interested in the outside of mainstream stuff.

Walter Bogaardt replied on Mon, 2009/08/17 - 7:11pm

Learning multiple languages is good and bad. Point the breadth of API's is nearly impossible to know and even though IDE's help they won't suggest what you should use. Example case, a developer could start developing a string to date formatter, not realizing in a language like Java that a Simple date formater exists.

Point # 2, good point it does get one to think outside the box. I've argued there is nothing like getting a high level language like Java to work with low level api stuff like C or C++, through JNI, that there is almost nothing you can't do.

Manjuka Soysa replied on Mon, 2009/08/17 - 8:58pm in response to: fred jones

Remembering functions and libraries in all the different languages is my problem too..  unless you are into some memory improvement techniques, the only solution is to find some good reference sites and have them in your browser bookmarks :-)

I'll never gain the same level of competency in other languages as I have in Java, but as long as you stick to good practices, spending a bit of extra time looking up API documents is not too much of a hassle.

Alessandro Puzielli replied on Tue, 2009/08/18 - 5:03am

Remember the API all of the all the language is my problem too: for this I decide to learing Scala, because this language uses the Java bytecode in correct way (and vice versa).

 Happy coding!

Karl Peterbauer replied on Mon, 2009/09/14 - 4:40am

I don't think that it is that easy. You have to learn the new language itself, many common library functions such as string crunching, date formatting/parsing and the like, and in the case of a Java programmer, you have to experiment a lot to replace familiar frameworks such as annotation-based JPA/Hibernate persistence or IoC-frameworks such as Spring or Guice with similar technologies (or - in the case of a JVM-based language - to properly use them within the new language), and you have to get the whole tool-chain (IDE, debugger, profiler, logging, troubleshooting-tools like stack- or heap-analyzers) straight.  Finally you will need to experiment with a few small- or medium-sized projects to gain the experience for accurately estimating the effort for a new large-scale project. Unless you are not a real big-shot, this will take months of hard work until you reach the same level of skill.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.