Martin Odersky – the man who created Scala, the Java-based programming language that now drives such big name web services as Twitter, Foursquare, and LinkedIn – has launched a company that provides service and support around an extensive open source application stack for the language. Both the company and the stack are known as …
This is great news
I converted to Scala a year ago and haven't looked back (after being a Java dev for 10 years). The HUGE benefit is that you don't need to convert all at once since you can call all your Java code from scala (and vice versa).
I have the book...
Need time to code. Where to get?
Yet another new language
F#, Go, Noop, Scala, Ceylon, Node.js, Ruby ... there's just too much choice! Which new language (if any) should I learn if I want to remain employable over the next decade? Or should I just stick to tried-and-tested Java / .NET / Python?
Languages and Languages
You mixed a lot of different things up there.
F# is .Net's version of OCaml, an old and traditional functional programming language.
Go targets mainly system programming. It is an alternative mostly to C.
Scala and Ceylon are JVM languages, though Scala released its first version 8 years ago, and it is now on version 2.9.0, with a proven record of success while Ceylon has yet to release its first version.
Ruby is another language that is as old as Java, and has revolutionized web programming with Ruby on Rails... five years ago. There's a wide array of tools written in Ruby, and used in Linux and BSD servers -- FreeBSD's package tools have been written in Ruby for over a decade, for instance.
In fact, Python is not particularly older or more popular than Ruby -- it just attracts different crowds. So to call Ruby a "new" language and Python a "tried-and-tested" is non-sense.
So, my advise is that you actually learn a bit more about what's actually out there, before you even consider learning a new language.
As for learning a new language, it depends a lot on what you wish to accomplish and what your usual expertize lays.
If you are a .Net developer, you should definitely learn F#. Chances are high that interfacing with F# code will become common.
As a Java developer, the best bet is Scala and Groovy. Groovy is close enough to Java that it will hardly feel like learning a new language anyway, but while it is useful in some places, it can never replace Java.
If you are a Python developer, Ruby fits a similar niche, but is unlikely to be attractive if you think the Python way is the Right way.
And if you just want to stretch your horizons, learn Haskell.
Yes you're right, I did mix up languages and frameworks. My worry is that my existing programming skills are only suitable for a single-core single-machine world, a world which is fast disappearing (but thank you iPhone/Android for extending that world for a few more years).
Looking on sites like www.itjobswatch.co.uk, there's barely a mention of anything other than the mainstream languages. Searching for Java or C# returns around 20,000 results each, Python just 2,500, and Ruby returns only 1,000 job ads. Most of the other languages we've discussed appear to be less popular than COBOL or Fortran!
New languages are fascinating for researchers and hobbyists, and they do eventually lead to new features entering the mainstream languages. But will any of these ever become mainstream?
But will any of these [New languages] ever become mainstream?
Maybe not but the paradigms/groups I outlined will, especially functional because it deals with multiprocessing elegantly, so that skill (skill, not any particular language) will grow in demand.
And learn SQL thoroughly asap. That's of real value and gets you paid well (or can do, anyway).
Thanks for the useful answers!
"It's unique in that it blends the object oriented and the functional"
I really don't think so - dylan does this (very well) and probably by extension, various lisps, as dylan is the child thereof.
@ ChunkyPickle: thanks, looking to learn it soon, nice to have some support.
@ AC 20:24: learn a few common ones with various styles and don't worry about it. Languages fall into a few groups (or these days, combinations these groups) comprising procedural (c, pascal), functional (lisp, haskell, erlang, scala presumably), logic (prolog) (and not common these days), OO (loads of them), scripting (not really a group as such but singular enough to class as one; jscript, lua, etc) & a few others. (and their combinations - java is procedural + OO, jscript is scripting + procedural + functional at a push).
Once you've got these groups straight in your head, you can learn any other language with any other combination of these 'paradigms' fairly easily. The hard bit is learning the libraries that come with them. So learn a small but representative range of langs and don't sweat it.
"FreeBSD's package tools have been written in Ruby for over a decade, for instance."
Not really. Only "portupgrade" and the PackageKit stuff are Ruby, and all completely optional, as they are actually packages themselves. All of the pkg_* utilities are not Ruby. See http://www.freebsd.org/doc/handbook/ports-using.html
More Typesafety...no GC required
The IT world had a serious regression since the days of ALGOL. C, Unix, Windows and Java confused the minds of many people in the "computer trade" (for a lack of better words).
I blame it on "but I can make more money with Java|C#|C++" Way Of Thinking.
A Proper Type System (which also covers the aspect of multithreading) combined with Stack Allocation, Destructors, Value Arrays, References and so on can get very close to C/C++ runtime/memory efficiency without all the security risks of C/C++. JVM-based languages certainly will never reach the C/C++ efficiency.