The R language is a frigging mess but it has a huge number of libraries in the statistical domain. For this reason it's a popular choice for writing data exploration and analysis programs.
The JVM the only game in town if you want some combination of high performance, the ability to do user-space systems level programming, type safety, and GC. Nobody loves Java but it is the easiest language to recruit for if you're targeting the JVM.
To me (an very infrequent user of Python) Python has NumPy and Django. So long as those projects continue to maintain their share of thought leadership Python will be fine.
Kinda odd to see this post on HN. It doesn't really seem to say much.
I think all those points are covered by Go. And Go is more succinct. It was trivial to cross-compile Go executables on my Mac for Windows and Linux.
Haskell and Rust cover the same space as well. HN seems to have some weird obsession with Go at the moment, but the reality is that outside of this little bubble no-one knows or cares about Go. I use "no-one" in the to-within-rounding-error sense, not the literal sense. Go may gain sufficient mindshare in the future that it gains a space in the average developer's head as their goto tool for a certain job but it isn't there yet.
While we're at it, Java is not the only language on the JVM. For example, Scala is growing fast and it has polymorphism AND sane error handling (http://www.scala-lang.org/archives/downloads/distrib/files/n...), features which AFAIK elude Go.
I would think HN has a very broad readership across many occupations. Dismissing Go as an HN bauble seems very odd. The point is that I enjoy Go, and it handles all the things you mention and a few more within its sweet spot. And it works well even now, immature that it is. It's a reasonable alternative to the JVM for lots of problems.
Go is also most pertinent from the Python perspective because it's probably gaining recruits from that community instead of the C/C++ community.
Go certainly has polymorphism. Also, I've written about ~30,000 lines of Go thus far, and the programs I've produced have by far the best error checking than any other program I've produced with another language. I think that at least qualifies as "sane." (Particularly since I find my error checking to be easy to write and easy to read.)
* Go makes it a lot easier to interface with native libraries than Java ever will. I think anyone who has ever written JNI can confirm that it is a nightmarish interface. JNI also has performance problems, to the point where using an optimized C implementation through JNI is often slower than writing the same thing in Java.
* Java definitely has more libraries available. However, partly because of point #1, Go is catching up quickly. It's very easy to wrap C libraries in a Go interface with cgo.
Also, a lot of the old Java code and frameworks smell kind of funny. Do you want to write a new AWT application in 2012? Really? Yeah, Java has more stuff, but... is it kind of stuff you actually want to use, or the kind of stuff you find at the thrift store?
* Go exposes more OS-level features than Java. For example, Java didn't get a way to create softlinks until JDK7.
* Java does not provide a built-in solution to dependency management. The CLASSPATH mechanism essentially punts the problem to the individual developer. It seems easy enough to dump all your jars in a folder and call it a day, but eventually you end up in a situation where library X depends on library Y, which depends on library Z, which depends on a different version of library X. Hmm. Guess you are in trouble! With Go, this problem does not exist because things are compiled statically, and Go has standardized library paths.
Maven and OSGi were both attempts to solve the dependency problem in Java-land. However, since they weren't standard parts of the language, they felt clunky and bolted-on. Maven also combines the functionality of apt-get, Makefiles, and distcc in one giant monolith, which can make debugging... interesting.
* Partly because of the complexity of Java classloaders, a number of security vulnerabilities have been discovered recently.
* Go programs have a miniscule startup time, whereas the JVM takes a lot of time to start. This seems like a very minor point, until you realize that for things like command-line utilities, it makes Java a real performance-killer. This is one often-overlooked reason why Java fizzled in the browser but succeeded on the server.
polymorphism AND sane error handling [elude Go]
Go has polymorphism. I like Go's error handling a lot-- but this topic has been discussed elsewhere.
Other technologies will have their own ecosystem. Which will grow at their own pace as demand for that grows.
Is there anything in particular that's available in Java that you couldn't get in Go or Python?
Next step on the ladder is languages. You can mix any combination of Java, Scala, Groovy, Clojure, JRuby, Jython and others with little or no friction.
Then there's infrastructure. There's a good selection of rock solid application servers - Tomcat, Jetty and Glassfish comes to mind. The entire JDK toolchain, especially VisualVM, JConsole and JMX. Get a stacktrace or a heap dump from a running java process? Trivial and built in.
Finally, the libraries: JDBC is pretty neat: Every database under the sun plugs into the same interface. Terracotta has a pretty interesting line up (http://terracotta.org/products). Hadoop - it's a full ecosystem of it's own. Eclipse and IntelliJ IDEA. Apache POI for MS Office doc manipulation. Apache FOP is supposed to be pretty powerful. Lucene. Apache Commons.
A cross-platform UI toolkit that's pretty good all things considered? A reporting toolkit that produces PDFs according to custom templates?
(Swing and JasperReports, respectively)
Recruiting for Go is not nearly as easy as for Java.
There was group of guys at a previous job of mine who loved programming in Python so much that they started advocating for its use at work for serious projects. They eventually got their wish, but six months later they realized that using Python for heavy-duty corporate stuff is far removed from using it for personal hobby programming.
The main problem is that Python has been oversold. This will be corrected in due course, and things will go on with Python being used only where appropriate.
As for your n = "?" (your ex=colleagues) anecdote, it is laughable, ignorant, and insulting to the intelligence. Are you not aware of "heavy-duty corporate stuff" such as Google, or Youtube, let alone the massive scientific ecosystem built around Python, or do you consider such things "personal hobby programming"?
Python has not been "oversold", as it has never been sold at all. Perhaps you should ask yourself why MIT has converted its courses to Python.
There's Google Go now, too, which is arguably a better solution than the heavyweight JVM (though a worse one than C or Ada).
You don't, and I don't, but some people do.
The fact is Python was a fashion some years ago. Like 2-3 years back, It was the hip language to learn. Now the current fashion is NodeJS and Go. Like it or not get used to this fact. Python system is currently undergoing wants of features what Go and NodeJS provide out of the box. This is feature hunger, and is fundamentally what causes languages to slowly phase out from the main stream to let other languages take its place.
This doesn't mean Python is bad or lacks something. Its just that only its not the fashion currently. The fashion is something else, and people don't like old fashion being pushed down their throats. People like new stuff, Python is getting old, boring, too many people are into it now and its not hip anymore.
Now, coming to the other part.
Contrary to whatever you think Perl is doing awesome at this time now. Because the Perl community has moved on. Those dark troll days that existed 5 years back are gone. There are some very awesome things happening in the Perl community which probably are not happening even in Python.
Perl has learned its lesson the hard way. Which is if you want to survive and compete, ship awesome stuff! And Perl is doing just that. New syntax, sugar and enhancements are going in to Perl core every major release(2 years). CPAN is going just awesome. Apart from that people like chromatic are doing real great work in the documentation area. There are tools like Moose, Devel::Declare, DBIx::Class etc which probably Python can never get ever!
In the other news Perl 6 is hurling quickly towards its finish line and will be there in short time now(like probably next year end), and for a project of such huge magnitude it will be quite a language to watch out.
Lots of people are also into breathing, eating, and having sex. I don't see those activities losing mindshare.
Programming languages and their affiliated ecosystems are tools for solving problems. It's fine if you want to argue that Python has ceased to solve problems for people now, either because there are new problems, or because Python itself has changed/evolved into irrelevance. But if it truly is the case that some people don't want to use it because "it's not hip", then those people are probably not actually trying to solve real problems that anyone cares about.
Agree with you about Perl though. Definitely still a persistent hum of Perl usage amongst programmers I know.
99% of all programmers in this world are in the game for employment reasons.
People are going to go things where money is. In the past it was Python, now its slowly shifting to something else.
And "2-3 years back"? Paul Graham's "The Python Paradox" was in 2004 and Peter Norvig's "How to Write a Spelling Corrector" was 2007. Neither of those were turning points. Python was, long ago, chosen as one of the three main languages at Google. Can you identify what it was 2-3 years ago which indicated that it was the hip language de jour?
Congratulations about Perl6 advances. It was the cumbersomeness of Perl5 objects and dealing with complex data types which helped me switch to Python, back in the late 1990s.
If I'm not mistaken, peak popularity went something like this:
It doesn't seem reasonable to really talk of peak usage over the last 10 years. It might be possible to talk about "most mentioned by the popular bloggers", but that's also a different metric.
You might as well not bother. TIOBE is excessively vague about what it measures to the point that no one's been able to reproduce its results. Worse, it's never demonstrated that the number of searches it measures has a strong correlation with usage.
Worst, it confused the Google Chrome browser with an implementation of Pascal for quite a while.
Also, I was looking for popularity, not usage, although these two numbers are intertwined and hard to disentangle.
 That's not quite true. http://langpop.com/ for example has what appears to be a more well-defined method of accumulating that data. However, "Last data update: Wed Apr 13 14:57:11 +0200 2011", the operator is no longer interested in the project, and would like to sell the site. I cannot find trend data, and my guess is that that's reserved for whomever will buy the site. So it might be answerable if I want to spend money on it.
Those who are successful in their careers in software become managers in their 30's and cease to take part in debates about languages, which accounts for their puerile tenor.
I'm nevertheless glad to see that you are still keeping an eye on things, Mr Dalke!
I know in my case that in my 20s I implemented an algorithm for finding the maximum common subgraph between a set of N graphs. While in my 40s I created a new algorithm for finding the same, which is faster and more flexible. But in my 20s I worked a lot harder, which means I produced more code. And got burned out a couple of times.
If you measure performance by LOC, then I might agree with you. But did Linus Torvalds and John Carmack become worse once they got into their 30s? What of Don Knuth? And Guido van Rossum was born in 1956 making him over 30 when he started Python.
I think Guido has long since learned not to care about language debates on HN. ;)
I mean its Perl because it preserves the spirit of Perl since Perl 1.
Besides as Larry has mentioned in so many occasions, Though Perl 6 has been designed ground up, in many ways that's the language Perl he always wanted to use. Using the name Perl also serves marketing needs.
I'm not sure why you bring these up, but yes - Python has those. Moose is pretty much built in - objects are in the language itself and there's no need for more syntax sugar on top. DBIx::Class is SqlAlchemy. Devel::Declare is hopefully never going to appear... unless David Beazley is bored one weekend.
Python's object system only provides a subset of what Moose (and Class::MOP) currently offers.
Have a look at Bullwinkle which is a (currently incomplete) port of Moose to Python: http://pypi.python.org/pypi/bullwinkle/
No actually, Python has an easy class syntax, that's it.
chromatic's comment below is gracious but I think he had a quite unpleasant experience, at least business-wise. And he was a core hacker.
The most fun example I know of of someone, other than a core-hacker, planning to use Perl 6 in a production setting, is Sir Robert, as discussed on his 6ing.org blog and introduced at http://www.6ing.org/?p=6
(I would describe myself as an avid Perl 6 watcher. I've been watching it for 12 years. For the last 18 months I've read pretty much the entire days' worth of dialog of the freenode #perl6 IRC channel, nowadays the main hub of Perl 6 activity. And in the last few weeks I've been selecting a subset of log lines representing the gist of each day's activity. For example: http://irclog.perlgeek.de/out.pl?channel=perl6;date=yesterda...)
Its limitations are speed and libraries. However each year these continue to improve. So for now I've only used it a couple of times for small scripts but I do plan on writing some modules/libraries in perl6 in the (near) future.
Also chromatic (http://news.ycombinator.com/user?id=chromatic) has mentioned about using it for many years in his production systems (however I think he ripped it out recently and replaced it with perl5 solution).
January 2011, in fact. I couldn't afford to keep babysitting it to keep it running. I haven't tried since then, so things may be a lot better now.
Just to be clear: my own comments about Python the last few days are driven from a purely pragmatic desire to ship a great product, on all screens, using Python. I cringe when I see comments like this that seem to conflate these pragmatic concerns with emotional language advocacy.
Python is a beautiful, high-productivity, generally pragmatic language with millions of developers.
That's why I chose to build my product around it.
But all good things can be made better, and generally the best way to find the local optimum is to have lots of feedback from users -- especially developers who are pushing the envelope by doing ambitious things with the language.
We are going to ship on iOS and WinRT using Python. Whether that's anything that the core Python devs particularly care about, and whether that helps Python in the gladiatorial combat between languages, is mostly irrelevant to me.
Perl is doing just fine.
The Python community doesn't really need a whipping boy, does it? It was quite offputting to me when Python texts, when promoting the features of the language, were essentially reduced to "It's more readable than Perl!"
Is it as powerful and expressive as Perl or is anything sacrificed for this supposed readability? (I never saw it myself).
An accepted grant to make it easier to compile perl5 on Android is currently in progress: http://news.perlfoundation.org/2012/05/grant-application-imp... | http://news.perlfoundation.org/2012/09/improving-cross-compi....
Also there is Perldroid - http://code.google.com/p/perldroid/
And I assume SL4A is still available on Android? - http://code.google.com/p/android-scripting/
And for many years I had perl5 running on my Symbian phone :)
(Early adopters only!)
I don't give at all credibility to such comments, but I have heard them. Perl's becoming every day more of a niche language.
Maybe some marketing about great Perl built projects could help. Does something like this exist?
Some do get "marketed" via Perl News (http://perlnews.org/) or PerlMonks (http://www.perlmonks.org/). But I know of many Perl built projects which you only get to hear about via contacts, mailing lists or jobs postings.
Here are some announcements of Perl built projects (that I recalled and found quickly)...
* The Secrets Behind Blekko's Search Technology - http://www.readwriteweb.com/hack/2010/12/the-secrets-behind-...
* DuckDuckGo Architecture - http://news.ycombinator.com/item?id=525048
* LOVEFiLM’s love affair with open source - http://www.itpro.co.uk/622960/lovefilm-s-love-affair-with-op...
* Trendshare.org - http://www.modernperlbooks.com/mt/2012/09/announcing-my-new-...
And here is a list of Perl start-ups that come to mind: Lokku, Moonfruit, CareerJet & Adzuna.
Marketing is bringing your story to people who don't already know about it. Readers of Perl News and PerlMonks are very likely to already be Perl users/advocates.
I don't think Python was ever sexy. There was a bit of a Ruby vs. Python thing a few years ago, but both languages were downright old when they became popular.
People really need to stop worrying about the flavor of the week. You're never going to be programming in the sexy language for more than a couple years before the next trend pops up.
I first encountered python in 1993, and although I was intrigued, my first reaction was that it could never become popular, because it was too good!
Almost 20 years later, I'm glad to see that people are not as stupid as I sometimes think.
perl wins AND it's not a common word unlike the other two
in fact, plenty of job postings misspell perl as "pearl" and I'm not even including them
The fact that perl has more hits doesn't necessarily mean that there are actually more perl jobs than ruby or python jobs, but it certainly means that perl is still around, whether or not you want to tease it
EDIT: I write python code every day and agree with pretty much everything else the author said.
There are many jobs where you are programming python
(we know we are having a hard time finding Perl people, but then again we are not in Silicon Valley ...)
Among other reasons, I suspect there are a lot of older perl guys still around who don't blog/write articles because they do other things in their spare time and we don't hear as much about perl compared to node/python/ruby/etc.
I expect that user base will increase even faster after Wes McKinney's "Python for Data Analysis" book is published.
It runs on win/osx/linux as well as iOS and android. In fact through the android-for-python project (github.com/kivy), it does pretty much exactly what the author talks about in terms of making it run on the NDK. There is also the pyJNIus project to go along with it in order to call java code and sdk directly.
python on mobile really is an option, and it lets you write cross platform apps in a very nice manner.
That said, as more and more domain specific languages come to be, and general purpose languages mature, there's probably not going to be a 'single winner.'
If I'm not mistaken, proper tail calls are even slated for addition to the next version of the ECMAScript standard.
Again, no idea what I'm talking about, that's just the impression I have from the little I've learned about functional programming so far.
Erlang is common enough as a language on a server to warrant a mention. It is not purely functional, but comes close. Immutability (no shared memory) and message passing are the key points.