New languages are carried on the backs of new platforms. eg: unix & c; web & javascript.
To predict the next big language, predict the next big platform. The upcoming platforms are: smart phones & tablets; cloud computing & many-core. The cloud, being connected services, is largely language-agnostic, and many-core might end up being implemented by borrowing whatever works in the cloud.
The needs of the above seem well-met by established languages, leaving little opportunity for new languages to emerge.
What about the next big platform after the above? It's probably more than 10 years off, but Moore's law says smaller devices will come. If disruptive, they'll be attractive to new audiences, with different needs - perhaps along the lines of cochlear neural implants (already big business) or garage genetic-engineering. What languages do those guys happen to be using? They will be carried to success.
The next big platform is multiple cores/multiple CPUs. The next big language is functional and helps deal with consistency across time and across CPUs. Therefore, the next big language is Clojure. Rich Hickey said it best:
"If somebody hands you something mutable—let's say it has methods to get this, get that, and get the other attribute—can you walk through those and know you've seen a consistent object? The answer is you can't, and that's a problem of time. Because if there were no other actors in the world, and if time wasn't passing between when you looked at the first, second, and third attribute, you would have no problems. But because nothing is captured of the aggregate value at a point in time, you have to spend time to look at the pieces. And while that time is elapsing, someone else could be changing it. So you won't necessarily see something consistent.
For example, take a mutable Date class that has year, month, and day. To me, changing a date is like trying to change 42 into 43. That's not something we should be doing, but we think we can, because the architecture of classes is such that we could make a Date object that has mutable year, month, and day. Say it was March 31, 2009, and somebody wanted to make it February 12, 2009. If they changed the month first there would be, at some point in time, February 31, 2009, which is not a valid date. That's not actually a problem of shared state as much as it is a problem of time. The problem is we've taken a date, which should be just as immutable as 42 is, and we've turned it into something with multiple independent pieces. And then we don't have a model for the differences in time of the person who wants to read that state and the person who wants to change it."
Yes, you are absolutely right. In fact I had started a chapter about the "far future" where I wanted to elaborate more on the computer architecture change and its effect on programming languages. But I thought the scope would become too large.
If you are interested I gathered some links about the "far future":
JavaScript is going to get much bigger. My money is on that especially with node.js and html5 in the game. I also noticed F# was not even mentioned, purposefully or mistakenly?
There was a post linked here a couple of days ago where JWZ was bemoaning the lack of #!/usr/bin/javascript - and it's still not possible to use JS as a general purpose language a la Perl, Python, Ruby, etc.
I know it has all sorts of negative stereotypes, but the combination of JavaScript and PHP is the new Visual Basic - something that will let someone who isn't an expert quickly make a useful GUI application. And it won't go anywhere VB didn't go.
JavaScript is definately a candidate, but I don't think it's going to be node.js. Doing all IO asynchronously strikes me as very premature optimization. I prefer the way Go or Erlang deal with these scaling issues.
I'd like to add that I already count Javascript as a "big language" as I wrote:
As we all know C, C++, C# and Java are these big mainstream languages of today with “recent” additions Python, Ruby, Javascript and, especially in the Apple world, Objective-C.
I totally agree with you that Javascript is going to get much bigger but to me it is already big so it doesn't even need to contend against the other languages in my blog post ;).
My sens tell me "JavaScript". The rise of the Web (especially Web applications), HTML5, Tablets and mobile applications, Server Side JS... I think JavaScript can make a big move. Learn one language and use it in anything you'll even dream of.
With its' flexibility, extend the language to support any feature you'd like. Make it Object Oriented, Prototypal, Procedural, your own...
We don't pick our tools to fit the job? The next big language will be determined by the needs of the largest computer user groups. The particular needs of these groups will determine the languages that eventually reach critical mass.
Using 5 universal criteria that characterize good programming languages is the wrong approach. For example, in safety critical systems his metric of conciseness is worthless. Ada may sometimes take more lines of code to accomplish a specific task than C but the requirements of safety critical platforms demand the extra effort and cost. The metric is worthless because it isn't picked to coincide with the needs of the users.
No one cares that the strong typing or other features in Ada can slow down coding and annoy programmers because this practice eliminates many bugs in the final product. The needs of the end-user for bug free code outweigh their needs to ship quickly and please developers. It is a tool used for a specific job that it handles quite well.
Evaluating a programming language with 5 universal metrics ignores that they are tools used to solve the problems of a particular group of users. If you want to figure out what the next big language will be ask what platform will have the most users in the near future and what the needs of those users are. The languages that meet them best are the top choices.
I don't really understand his justification for excluding Erlang. It IS a general purpose language, and I can't see it as any more niche than some of the obscure languages he includes (Clay?).
I find it interesting that he says Go's syntax is ugly, but that Clay programs look so good and readable. The two languages have a very similar basic syntax, and some of the Go's differences are an improvement in my book: no semi-colons, fewer parentheses.
I had an idea the other day about being able to write client-side browser apps in Google Go. I found it very intriguing.
My votes are for Go and Javascript. One has a 800lb gorilla behind it, and the other has a ton of momentum, and I agree with the other poster that the maturation of server-side Javascript and the ability to use one language on both ends is very appealing.
Strange that nobody's mentioned scala yet. Clearly it has its detractors, it seems like a credible candidate to displace Java. It also has more traction than a number of these languages, and more importantly there's a huge number of java based developers and organizations who are under pressure to improve productivity and can adopt it incrementally.
It seems to me to have fewer barriers to becoming a major language than most of the other contenders.
Would be consistent with the tendency of majority of programmers to select the crummiest possible language because some platform that necessitates its use fluked into popularity.
I was a little surprised with D being listed as one of the main contenders. I guess Clojure and Go were obvious suggestions. Go has the backing of Google and aims to be everything we want (fun/ease of Python, speed of C++) and Clojure is the ancient popular Lisp with a modern twist.
I guess I would have expected Javascript and Groovy to be included. Though I might be biased, I worked with a client using Groovy and in that short time saw that there was a lot of use in the (local) industry in it.
I was a little surprised with D being listed as one of the main contenders. I guess Clojure and Go were obvious suggestions.
Near the end he references some mailing list debate, then comments that Go emphasizes simplicity while D emphasizes features, therefore D will win, because to him, language features rock. To me, this idea reveals that much of his "reasoning" is this prejudice.
D is just a sideshow. The community is too wracked with infighting over Tango vs Phobos. There aren't going to be a viable platform and ecosystem anytime soon. Pity. The "real work" crowd has, well, real work to do, they - we - can't hang around forever.
Not a bad idea, I was skimming around the LibreOffice sources recently and it really could use a big scrapping everything and rewriting it. The best language choice would be C, or maybe C++/Qt for portability. Not that it will happen, but hopefully the LO devs will still clean up the codebase a bit.
Ps. The language actually does not matter that much. Much more important is a clean, scalable and fast design.
The Clay mention makes me really happy. Years ago, I was a part of the small team that was working on its first incarnation, though its a completely different language now and I'm sure its been through half a dozen rewrites since then.
I think a new language could win by being more portable. A compiler that targets Intel and ARM is no longer interesting. But a nice language with a compiler that can create libraries usable in JavaScript apps, iPhone apps, Android apps, and App Engine apps would be very interesting.
What I meant by that is that PHP is admittedly used widely on the web but almost nonexistent in other "niches" like game programming, kernel programming, artificial intelligence, high performance computing etc.
I'm thinking of the ecological meaning of the word niche not the meaning of "something small".
[+] [-] 8ren|15 years ago|reply
To predict the next big language, predict the next big platform. The upcoming platforms are: smart phones & tablets; cloud computing & many-core. The cloud, being connected services, is largely language-agnostic, and many-core might end up being implemented by borrowing whatever works in the cloud. The needs of the above seem well-met by established languages, leaving little opportunity for new languages to emerge.
What about the next big platform after the above? It's probably more than 10 years off, but Moore's law says smaller devices will come. If disruptive, they'll be attractive to new audiences, with different needs - perhaps along the lines of cochlear neural implants (already big business) or garage genetic-engineering. What languages do those guys happen to be using? They will be carried to success.
[+] [-] lkrubner|15 years ago|reply
"If somebody hands you something mutable—let's say it has methods to get this, get that, and get the other attribute—can you walk through those and know you've seen a consistent object? The answer is you can't, and that's a problem of time. Because if there were no other actors in the world, and if time wasn't passing between when you looked at the first, second, and third attribute, you would have no problems. But because nothing is captured of the aggregate value at a point in time, you have to spend time to look at the pieces. And while that time is elapsing, someone else could be changing it. So you won't necessarily see something consistent.
For example, take a mutable Date class that has year, month, and day. To me, changing a date is like trying to change 42 into 43. That's not something we should be doing, but we think we can, because the architecture of classes is such that we could make a Date object that has mutable year, month, and day. Say it was March 31, 2009, and somebody wanted to make it February 12, 2009. If they changed the month first there would be, at some point in time, February 31, 2009, which is not a valid date. That's not actually a problem of shared state as much as it is a problem of time. The problem is we've taken a date, which should be just as immutable as 42 is, and we've turned it into something with multiple independent pieces. And then we don't have a model for the differences in time of the person who wants to read that state and the person who wants to change it."
http://www.artima.com/articles/hickey_on_time.html
[+] [-] newgame|15 years ago|reply
If you are interested I gathered some links about the "far future":
* https://channel9.msdn.com/posts/Charles/Jonathan-Edwards-Pro...
* http://lambda-the-ultimate.org/node/4088
* http://lambda-the-ultimate.org/node/4090
[+] [-] binarymax|15 years ago|reply
[+] [-] gaius|15 years ago|reply
I know it has all sorts of negative stereotypes, but the combination of JavaScript and PHP is the new Visual Basic - something that will let someone who isn't an expert quickly make a useful GUI application. And it won't go anywhere VB didn't go.
[+] [-] fauigerzigerk|15 years ago|reply
[+] [-] newgame|15 years ago|reply
As we all know C, C++, C# and Java are these big mainstream languages of today with “recent” additions Python, Ruby, Javascript and, especially in the Apple world, Objective-C.
I totally agree with you that Javascript is going to get much bigger but to me it is already big so it doesn't even need to contend against the other languages in my blog post ;).
[+] [-] twymer|15 years ago|reply
[+] [-] csomar|15 years ago|reply
With its' flexibility, extend the language to support any feature you'd like. Make it Object Oriented, Prototypal, Procedural, your own...
[+] [-] hedgie|15 years ago|reply
Using 5 universal criteria that characterize good programming languages is the wrong approach. For example, in safety critical systems his metric of conciseness is worthless. Ada may sometimes take more lines of code to accomplish a specific task than C but the requirements of safety critical platforms demand the extra effort and cost. The metric is worthless because it isn't picked to coincide with the needs of the users.
No one cares that the strong typing or other features in Ada can slow down coding and annoy programmers because this practice eliminates many bugs in the final product. The needs of the end-user for bug free code outweigh their needs to ship quickly and please developers. It is a tool used for a specific job that it handles quite well.
Evaluating a programming language with 5 universal metrics ignores that they are tools used to solve the problems of a particular group of users. If you want to figure out what the next big language will be ask what platform will have the most users in the near future and what the needs of those users are. The languages that meet them best are the top choices.
[+] [-] ericb|15 years ago|reply
[+] [-] hassy|15 years ago|reply
(This coming from someone whose favorite language is Erlang.)
[+] [-] edsrzf|15 years ago|reply
[+] [-] michaelchisari|15 years ago|reply
My votes are for Go and Javascript. One has a 800lb gorilla behind it, and the other has a ton of momentum, and I agree with the other poster that the maturation of server-side Javascript and the ability to use one language on both ends is very appealing.
[+] [-] rbarooah|15 years ago|reply
It seems to me to have fewer barriers to becoming a major language than most of the other contenders.
[+] [-] gclaramunt|15 years ago|reply
[+] [-] johnnytee|15 years ago|reply
[+] [-] unknown|15 years ago|reply
[deleted]
[+] [-] jpr|15 years ago|reply
[+] [-] ohhmaagawd|15 years ago|reply
[+] [-] twymer|15 years ago|reply
I guess I would have expected Javascript and Groovy to be included. Though I might be biased, I worked with a client using Groovy and in that short time saw that there was a lot of use in the (local) industry in it.
[+] [-] stcredzero|15 years ago|reply
Near the end he references some mailing list debate, then comments that Go emphasizes simplicity while D emphasizes features, therefore D will win, because to him, language features rock. To me, this idea reveals that much of his "reasoning" is this prejudice.
Nothing to see here. Move on!
[+] [-] gaius|15 years ago|reply
[+] [-] melling|15 years ago|reply
[+] [-] arethuza|15 years ago|reply
Having said that, I would probably go with a set of low level modules/services, probably written in C or C++, held together with JavaScript.
[+] [-] Seth_Kriticos|15 years ago|reply
Ps. The language actually does not matter that much. Much more important is a clean, scalable and fast design.
[+] [-] gordonguthrie|15 years ago|reply
http://news.ycombinator.com/item?id=1794543
[+] [-] mmphosis|15 years ago|reply
[+] [-] woadwarrior01|15 years ago|reply
[+] [-] skybrian|15 years ago|reply
[+] [-] tszming|15 years ago|reply
Also, be sure to check out the JavaScript's kid brother - coffee-script
http://jashkenas.github.com/coffee-script/
[+] [-] rbanffy|15 years ago|reply
All a compiler can say is that it compiles. It has no idea if the program does what you want.
[+] [-] evilthinker|15 years ago|reply
[+] [-] robryan|15 years ago|reply
[+] [-] frou_dh|15 years ago|reply
I'm rooting for Clojure. Rich Hickey's presentations detailing his rationales make sense and are quite inspiring.
[+] [-] newgame|15 years ago|reply
I'm thinking of the ecological meaning of the word niche not the meaning of "something small".
[+] [-] tszming|15 years ago|reply
Also, I feel sick all the time when people telling me X is a new general purpose programming language that will solve all the problems.
People should be more open minded, pick the right tool for the job.
[+] [-] aufreak3|15 years ago|reply
[+] [-] r0sebush|15 years ago|reply