There’s a continuous revolution taking place in web development as platforms and tools evolved first to handle dynamic pages and now cloud services. But sometimes what goes around comes around so I’m predicting a resurgence of Java and Java-like languages as rotating storage goes into decline. Here’s why.
In the beginning of the web we wrote web apps with Perl and C++ because that’s all we had. This sucked.
C++ is awesome for anything requiring intense performance but because it operates at a comparatively low level (closer to the silicon) C++ is very hard for dopes like me to use. And in a way it’s an insult to the language, which gets bored waiting for databases and network requests.
To avoid the complexities of C++ we turned to Perl which was fast to write in but wasn’t ready to be a web server. And Perl had no frameworks to help write web apps so we wrote a lot of boiler plate crap every time just to get started. Sure CPAN eventually brought libraries to help but it was still fragmented.
When Java arrived it wasn’t so interesting that we had Java, it was interesting that we had the Java Virtual Machine. JVM’s took care of cleaning up memory and automatically profiling and optimizing our programs — tasks that had to be done by hand back in C++.
Java also had threading really well integrated from the start so we could handle many requests at once which was starting to become a problem by 2005 or so. Multicore’s introduction hit just at the right time for Java, too. Compiled Java is a very high-level machine code but is a standard that JVM engineers have had more than a decade to tune so it works very well.
.NET was really just another Java for Windows. Nothing is fundamentally awesome about it over Java except that the engineers got to learn from Java’s mistakes.
Java’s performance was no C++ but it was way better than perl’s and again, we didn’t need all that much. What we needed was faster development and we got it.
Yet in the last few years since, say, 2007 we’ve been moving away from Java and .NET for web development and back to interpreted dynamic languages like Ruby. These are slow as molasses (though now our CPUs are much faster) but easy to program for a broader, younger, and maybe less experienced crowd of developers. Prototyping new websites and apps has become very easy, which is why there are so many bad ones out there.
The difference between the old days of Perl and today is that we’ve made the real web server in C++. So performance in Ruby is helped by a lot of work done in C++. Since every app needs to do that work, we can write it once and lay Ruby on top to make connections, talk HTTP, etc.
Under Ruby, we put C++. On top of Ruby we put the Rails web framework. It’s not very common to actually code anything in Ruby. You pretty much only see people coding Ruby while using the Rails framework which governs the whole thing.
You can replace Ruby here with Python, Django or Groovy and it is still correct.
Notice the transition? We started with Perl, went to Java, then came back to Perl! The reason we didn’t literally do that (actually go back to writing in Perl) is because the kids who wrote Rails were too cool for Perl, which they saw as old school. But Ruby has nothing on Perl. What’s brilliant is the Rails web framework, which came about because of what people learned writing web apps in Java. There are lots of web frameworks in Java, but that was part of the problem — knowing which of the many Java web frameworks were any good.
Ruby is easier than Java. It runs something like seven times slower but who cares? We’re still waiting for the database. And if you are a new developer you can learn Rails and be one of the cool kids.
Java has all the fantastic data structures you learn about in school while Ruby has only hashtables and arrays. But if you don’t give a rat’s ass about performance you can shoehorn anything into hashtables and arrays. That’s why prototyping is so fast in Ruby.
Yeah, but there’s a problem looming for Ruby and Rails (Python, Groovy, etc.) and it is that web frameworks based on interpreted, dynamic languages only exist at all because disks are just so damned slow. What happens to these frameworks when disks get faster or disappear entirely?
A modern disk seek is around five milliseconds. That means we can get only about 200 disk seeks per second. Every non-cached database access will do several seeks (BTree datastructure, Mr. Smartypants) and every web page usually requires several database accesses to construct the page. In other words, its not uncommon to take half a second in just doing disk seeks for your local database! And of course it gets worse, much worse, if seeks across the network are involved.
But if you replace spinning disks and moving read/write heads with Solid State Disks (SSDs) and no heads at all, local seek times drop to zero. That’s why Ruby and its surrogate languages will eventually disappear.
When SSDs gain enough capacity there will be a shift from the Ruby world back to the Java world. Not for prototyping, because, well, it’s prototyping. But simply because the statement “Ruby is incredibly slow but I don’t care because my database is slower” will no longer be true. At that point Ruby (Python, Groovy, you name it) becomes the bottleneck.
Wow no comments? Guess there aren’t many programmers/developers out reading today. 🙂
I had to reread this article a few times before really knowing what is wrong with it, so 9 minutes wasn’t enough time to formulate a response.
> You pretty much only see people coding
> Ruby while using the Rails framework which
> governs the whole thing.
I think he means that the only Ruby you see people using *on the web*, which is inherently true – if you’re not a programmer, and were judging things by measuring github stats, it would appear that no language out there is used for ANYTHING except web development.
Do you ever see people coding embedded ruby or python? No, why would you, they’re a quiet bunch. Are they out there? Let me ask my friend Angelo! He does exactly that… “Yes”, he says.
Java coming back? As it’s been pointed out, it never died, it’s immensely popular in lots of different arenas. So the entire *premise* of this post is, I think, flawed.
I was interested in hearing about a “Second Coming”. Has some new framework been introduced that offers the rapid development features that rails and django provide? I don’t think rails or django developers will really fight you on scalability issues, since that’s not the problem being solved with those frameworks. It’s about getting things out of the door, and there is just nothing in Java-land that offers that (unless you count Lift, or maybe something I’ve never heard of).
…says the guy who posted only nine minutes after the article was posted. I’m guessing the devs just aren’t sitting around waiting for a new Bob article to hit. 🙂
You’re assuming that, with interpreted languages that can write ‘Hello’ to a web page in one line of code, and opcode caches in place, we care enough about another 10ms to ditch a language that lets us spit something out in a web browser in one line, and instead use one that needs 30 lines of boilerplate and a compiler to achieve the same end.
I think that’s a rather bad assumption, sorry.
Agreed. Plus Groovy is Java.
You mean like:
Response.Write(“Hello”)
in C# (I’m certain it’s not more difficult in Java). To say that it’s going to take 30x more lines to do something in java or .NET is just blatantly dishonest. Not to mention, he’s talking JVM, so if you want your ruby 1 liners there is JRuby.
Hi,
this time I didn’t get it. If slow database access is a bottleneck for these interpreted languages, shouldn’t the SSD solve this problem and, with this, get more traction for these languages like Ruby?
The point is that once the disk speed no longer dominates response times, the slow language becomes the bottleneck. The question is whether the difference in speed between e.g. Ruby and Java will matter too much. There are diminishing returns of further increases in speed.
“But Ruby has nothing on Perl.”
Not a programmer, are you Robert?
What is outstanding to me lately is the massive speed up that interpreted languages have had, fueled by none other than the nasty but ubiquitous JavaScript. Compare the performance of Apple’s Nitro or Google’s V8 vs the speed of anyone’s JavaScript in the mid-90’s. It’s unbelievable. And Facebook is coding in PHP and then generating C++ from it, for crying out loud!
Given all the research and effort going into speeding up interpreted languages, I don’t think it’s fair to say that they are as inefficient as they used to be. And often, developer efficiency trumps runtime efficiency. I wouldn’t count interpreted languages out just yet… I see more people using Python, Ruby, Tcl, PHP, JavaScript for large software development efforts than we ever way with Perl some years ago.
Horribly wrong. I see that this is not your strong area. Well, for a start you don’t even talk about PHP (far more used than python, perl or ruby). No mention about Javascript, present in any browser. Even if you are specifically focused on server side, you make your point about the speed of disk access. Well, some years ago a new layer based on mem was placed in order to reduce the time of the responses. Have you ever heared the word memcached? Just score one fail with this article. I hope the rest (where I don’t have the knowledge of this) are not such wrong.
Agreed.
bob, agree with most everything except one thing. Java isn’t coming back, the JVM is. Just look at Twitter. Scala, clojure, etc., are the next wave of the JVM, not java.
Exactly, in fact with the likes of Groovy, Jython, JRuby etc I’d say it’s already well on the way back.
Exactly what I was thinking. Jython, Iron Python or Psycho allow for JIT compiling.
Given Oracle’s incredible bloodymindedness re Java in Android, Psycho or Unladen Swallow starts looking much better.
I agree with that. Unless oracle brings some big improvements in java 8, I don’t see it having a second coming.
However, the jvm ecosystem is very healthy and I could see a language like scala gaining more popularity. There is some definite niceties about static typing (e.g. not having to step through a debugger just to figure out where the hell some method got duck punched, etc). Clojure is also really cool and is gaining some good traction.
My thoughts exactly as I read the article. Java as Java will not return – a mutated version maybe.
Mind you, with mobiles taking over the world, Java may still have a part to play due to it simplified acceptability on a mobile interface (or assumed!)
I see Java surviving in the enterprise for a long time, but I don’t see it’s resurgence for web development, especially since the interpreted “cool” languages are evolving faster than Java. Now, if Oracle releases a new version of Java with “cool” features (and removes the crappy generics) that’s not backwards compatible, then it might go somewhere. At my current job, new development is being done in Ruby and Erlang, and I have been moving non-core code of my project to Groovy.
There’s one more piece to consider.
I read this article as comparing the performance of the JVM versus any newer language interpreter, and there are many examples of those newer languages being ported to the JVM or the .Net CLR. e.g. Jython and/or IronPython and JRuby, Scala, Clojure, Bigloo, etc.
If faster storage dictates faster web application frameworks, then no reason why these alternate languages can’t play in the same space.
Bob,
JRuby anyone?
I think you are missing the point on Rails. While the framework is great for prototyping it also provides convention over configuration which a lot of java web frameworks prior to rails completely missed on (Struts anyone?). It’s been a couple of years since I looked back into Java web frameworks but my understanding is that not much of this has changed as a lot of Java engineers that I know have shifted over to Rails.
Ruby is just a language. The type system, syntax, testing frameworks are what make it powerful and efficient. All of this can be run inside a JVM via JRuby so that removes a lot of the arguments you make in your column.
There is even a JSR for support for dynamic languages running within the JVM.
http://en.wikipedia.org/wiki/JSR_292
I don’t see Ruby/Rails falling out. Just a natural competitor to the Java camp.
Fundamental Law of Optimization: If you speed up whatever is you are doing by making something run faster, you get fairly small improvement in overall performance. If what you want is really large improvement in overall performance, you need to figure out what it is that you are doing that is not needed, and quit doing that.
That factor will overwhelm choice of language, often by several orders of magnitude.
I’m not sure I buy your argument and I’m a Java coder by trade, so perhaps predisposed to do so. Java is way too constrained by its rigid type system and the lack of closures rather than anything to do with frameworks. It was a great idea in the 90s, when it saved us from writing memory management code, but now we need something that saves us from writing 20 lines of boilerplate for a one-line callback. We also need something that treats database (preferably NoSQL) and network access code as first-class citizens in the language. When was the last time anybody wrote actual file system access code? Yes, Java treats threading code as a first-class citizen but compared to the elegance of node.js and its callback system it feels clunky and cumbersome. In fact I think node.js is exactly where you should be looking to see the future of development platforms.
This is a generic response to the preceding 12 comments. You may all be correct and I could be totally full of crap. I did, after all, identify myself as a dope. But I do see a transition coming. Maybe I have it wrong in which case I’m sure you folks will set me straight and we’ll all learn something for it. But from a Big Picture standpoint I still believe I am headed in the right direction.
the future of programming is functional programming, all the “new” & “cool” languages are just adding functional programming concepts to their core, espcially the ones you cited + php. It’s the best way we know how to solve scale issues. OO & imperative was & is great for classic GUI’s, but when 99% of code is service & UI’s more and more being just HTML or some other declarative construct all the work is best covered by functional programming. ECMAScript (javascript) is a great functional language, and node.js is a prime example of how functional programming can lead to simple elegant solutions.
RE: Java, they have pretty much completely missed the boat on bringing functional programming into the core laguage. luckily jpython, jruby, & the like have brought functional programming to the JVM, but make no mistake, .NET is leading the way with it’s F# language, and all the great functional aspects being added to C# (closures, lambdas) as far as the pattern of multiple languages/paradigms working in one virtual machine.
RE: your point about waiting for the DB (or other resources). The solution to this is asynchronous programming, which in turn is solved by functional programming. That’s why it’s the future or programming. SSD’s don’t solve the waiting for resource problem. If you’re a developer and not excited about C#’s upcoming new async model, then you haven’t looked into it enough yet. Waits no longer become an issue. The only barrier left is the disconnected/synchronous request-response nature of HTTP, but websockets and the like are trying to break down those barriers too.
I generally agree with you, except the part about javascript. I doubt many people would call javascript either simple or elegant; too many poor compromises were made in its basic design. Unless you call event(function(blah) {if(something) {do_this;}}); elegant. I don’t think most people would.
Bob, you’re right, the 2nd coming of Java is at hand. The problem in the comments is, everyone who bought into the Ruby/Python/PHP frameworks bit still believes they’re right. However, they’re just not running a high enough volume site to realize how wrong they are.
Sorry script fans, but compiled languages top scripting frameworks for serious projects and honestly, this is the reason the 2nd coming of Java is more of a resonance than anything else. Java still powers the big commerce sites, and the JVM does the heavy lifting even for “Web 2.0” sites like Twitter (see Scala https://www.scala-lang.org/).
Even if functional languages are “all the rage” as I see in some comments, they’ll still run on the JVM (again see Scala).
The problem is programmers get bored and need the “next-big-thing.” For a while the Java language stagnated and the interesting developments have been in 3rd party frameworks like Spring. Developers lost interest.
However, as an IT manager, I can tell you that the majority of the developers I’ve interviewed over the past few years almost always have more or more bullet points like: “Ported .net application X to Java,” or, “Ported Rails application Y to Java.” When I ask these developers why, the answer is almost always, “Application X ended up being useful to the company, so to deploy it company-wide, we had to port it to Java.” The takeaway is that Java never really went anywhere. Developers just got bored of it. However, at the end of the day, the enterprise applications are always ported to a language that runs on Sun’s JVM.
Big sites? You mean like campfire, shopify, Revolution Health, Twitter, and yellowpages.com? Among others. Which are all based on Ruby + Rails?
Admittedly, those aren’t ebay. But ebay and amazon are big enough that they use their own proprietary solutions; it ain’t Java, either.
By the way; it was shown that what’s-his-name, who decided to incorporate some Scala into Twitter (which is still fundamentally a Rails application) jumped the gun; he simply did not know how to do what he was doing properly using Rails. That is not even close to the same as it not being possible. This was pointed out by many people when it first occurred.
Java and .net have patent and/or cost issues, I don’t see a ‘second coming’ since this has gotten worse in the last year. Oh hai Oracle.
Memcache, redis, and other in-memory caching systems make the SSD argument a moot point for many use cases. Why didn’t memcache cause a surge in Java like language use?
You analysis doesn’t cover the C10K problem, which is the current driving change to web programming (evented architectures).
Google’s Dart is a Java like language, but I think the drivers are legal and organizational over performance characteristics.
Isn’t the network and the browser the bottleneck in web development. I rarely hear anyone say the disk IO is the bottleneck in web performance. Steve Sounders made a career out of improving web sites by optimizing web page rendering.
http://stevesouders.com/
Hi Robert, whatever language your website is programmed in, there is a mis-commented “End ad tag” string in it. (Look at the right of the top ad banner on your page.)
Bob,
Are you oblivious to the fact that Groovy compiles down to Java byte code (just as if it had been written in Java) and runs in a JVM? It’s a best-of-both-worlds scenario with the ease and flexibility of dynamic languages (like Ruby or Perl) and the (relatively) better performance of Java. Bottom line is Groovy shouldn’t be lumped in with Ruby and Perl in your assessment of which languages are pending decline.
Basically, Groovy IS Java.
“Groovy is Java” — well, yes, in the sense that most Java programs are valid Groovy programs. But Bob’s point is speed, and currently Groovy does _not_ match Java (nowhere close) in speed due to all the dynamic dispatching and meta class handling required at runtime. Groovy++ (an attempt to introduce static types and type inferencing into Groovy) shows some hope of closing the performance gap, but, sadly, in some ways Groovy++ is _not_ Groovy (some valid Groovy programs have different semantics as Groovy++ programs 🙁 )
I’m surprised no one has mentioned Grails (grails.org — “Groovy on Rails”), which, to many (including me), is Rails done ‘right’. No Ruby in sight.
As many have mentioned here it is not Java that will make a comeback (it is long in the tooth and about as much fun as C++ to code in) but the JVM. Since Java, Groovy, Scala (the one to watch) all compile down to interoperable class files, your web service can use Tomcat (Java) to host Grails (Java and Groovy) to vend GSPs (Groovy as scripting language to generate web pages) while getting the heavy lifting done behind the scenes in Scala (did I say to watch out for Scala ?) which offers an elegant mixture of object oriented and functional programming, with static typing (but using type inferencing so you don’t need the syntatical verbiage of Java to get your type checking done at compile time rather than debugging it (ha!) at run time). Oh, and in some cases Scala is _faster_ than Java (given the sophistication of the Scala compiler it can sometimes emit more efficient byte codes).
Just my (longwinded) 2c.
Alanl
Most database/dynamic language websites today are made to scale by using ram-based caches (e.g. varnish up-front and/or memcached in the middle) to remove most of the database reads. SSD performance may make these redundant and simplify things, and speed up write-centric applications, but I’m not convinced it will make the dynamic language speed enough of an issue to revert to more verbose and slightly faster Java. Newer JVM hosted languages are interesting though, and could bring the best of both worlds.
No mention of PHP? Like any language it has its weak points, but it’s all over the place from Facebook to Wikipedia to… this website with WordPress.
There’s a development in this area that I’m paying close attention to, and it’s coming out of Apple. But first, let’s talk about Facebook.
You may recall that Facebook is written in PHP. My old startup company did a bunch of work with PHP in the mid 1990s, and in some sense it’s like a web-optimized flavor of Perl that usually gets embedded directly in C-based web servers. This makes stuff faster, but doesn’t make it really *fast*. So, what Facebook does is, they have PHP *compilers*. They can, in essence, do all their prototyping in PHP and then type “make” and have standalone C++-level performance thingies that they use in production.
So, Ruby is object oriented, but it’s not the same *kind* of object oriented as C++ or Java. Its “object model” is much closer to the old Smalltalk language than those other languages, which kinda makes it the odd man out these days.
Another language with an object model that’s close to smalltalk is Objective-C, the language I used to program NeXT machines, and that today is used to program MacOS and the iPhone.
The Ruby and Objective-C object models are almost the same.
So… why not take Ruby, rip out the Ruby runtime, and slap the Objective-C runtime in there? You get a system where Ruby and Objective-C objects can toss messages back and forth with ease, where Ruby objects can subclass Objective-C objects and vice versa, and it works without being gross like JNI or (shudder) the way you extend PHP or Perl via C code (which I had to do back at my old startup company).
Once you’ve done *that*, why not throw a Ruby *compiler* into the mix? In essence, you can prototype in Ruby, type “make”, and get something that’s got the performance of a compiled Objective-C app. So, why not?
Why not indeed. Apple did. It’s not done yet, but it’s out there.
https://www.macruby.com/
This is exciting to me for two reasons. Once it’s refined:
1) We may be able to get big fancy Ruby apps to have very nearly C++ performance, and
2) Since it’s only using Apple technologies, and is using the same object runtime as IOkit and stuff, we may well be able to program the iPhone in Ruby instead of Objective-C if we wish. Which, oh, by the way, may make a ton of Ruby “gems” available.
Now, these days, my day job is as a (server-side) Java developer, and I do Ruby and Objective-C and iOS development and stuff as a hobbyist (and sort-of have been since NeXTstep 0.8, decades ago — got to play with prerelease Cubes at Carnegie Mellon, which is where Mach was developed, so, well, if you know your OS history, you know why that makes sense).
Which means, if you’re right about Java coming back, I kinda win, but if this “compiled Ruby on the Objective-C runtime” thing really takes off, I *also* kinda win.
Fun times!
The problem is that MacRuby is actually not compiled Ruby code at all; only the Cocoa part gets compiled. You can prove this for yourself: create a MacRuby app, then open it up (“show package contents” in Finder), and poke around. You will find your original, uncompiled Ruby code right there. Sure, it’s packaged up in a nice neat OS X app, but it gets interpreted just like any other Ruby code.
If you want an actual compiler, you would have to go with JRuby (which uses the JVM) or Rubinius.
There will be a continued ‘first coming’ of .NET/C# in the enterprise where it is very common (at least here in the midwest).
Java is fine for large apps but not for mobile devices. Its uses too many resources and is too insecure plus performance is iffy on various platforms.
With CPU’s getting cheaper and faster and PaaS offerings allowing you to scale horizontally with ease, developer productivity will trump language efficiency in all but the largest scale projects.
Couple points. First, you can’t lump groovy in with the other examples because it compiles down into JVM bytecode same as Java. For the most part Groovy is just an alternative syntax of Java. Likewise Scala also compiles down into JVM bytecode. Secondly just because Ruby has horrible horrible performance doesn’t mean that Java is the next logical choice. Java, via the JVM, has some really nice performance without sacrificing a lot of the nice features that make it easier to work with than something like C. Java however is showing its age and is missing a lot of modern features (or has problematic implementations of certain features shoehorned in). Alternative up and coming languages such as Erlang, Scala, Clojure, Haskell, and to a lesser extent Python and Groovy, have similar, or sometimes better performance than Java, have a great many compelling features Java doesn’t have, and in some cases can even leverage existing Java code. Now, with the exception of Python and Groovy all of the mentioned languages have fairly small developer bases and commercial support, but they’re actively growing, and any of them are possible candidates as “the next big thing”.
Python is nice, and has definitely found a good niche, but I’m not convinced it’s compelling enough to displace Java. Likewise Groovy adds some nice improvements over Java, and could probably replace it in a lot of instances, but because it’s so close to Java it suffers from many of the same drawbacks Java does. Of the JVM languages, Scala or Clojure seem like the most likely candidates to replace Java, but Clojure is hampered by the perception of Lisp in the developer community, and Scala is fairly intimidating to new developers. Likewise both Erlang and Haskell suffer from a daunting learning curve mostly due to the incredibly powerful functional abstractions they provide that nevertheless require a completely different conceptual approach to problem solving than most programmers are used to employing. If enough programmers can overcome their Lisp prejudice, or man up and spend the time to learn the “zen of functional”, any of these languages could easily displace Java for web development.
Why is Scala intimidating? I admit, the opening chapter or two in the book I bought seemed to go out of its way to make Scala look odd, but it’s not that different from other non-Java languages (functions, closures, tuples like Python, Ruby, or even Perl). Plus, you can experiment with little scripts on top of existing Java code in your “app portfolio”. Yummy!
I LOVE your way of reasoning!
Funny that for once you applied the same method to a technology perspective, not just business..
And being an oldschool C and Java develpoer, I have no regrets over your conclusions.
As far as I know, several really large companies are skipping the Solid State disk level, and go directly to In Memory databases. I work with SAP products, and SAP is about to release such a solution, focused on their Business Intelligence system, so the transition is close by.
There will be a second coming in Java, but your assertions are just simply wrong, especially from a technical point of view. I mean SSD’s? C’mon. Compilation is a non-issue i.e. looking at Eclipse, it compiles stuff on the fly.
The reason people switched from Java is based on needs. Some people shifting out web sites don’t need the dev overhead Java – that is it. They are shifting noddy little applications out.
Now most of the other side of the Java guys (the enterprise lot) who bothered to switch, switched to .Net/CLR platform which is turning out to be expensive to scale. I’ve seen a lot of new projects being shifted out in Java because it’s more cost-efficient, even from MS partners recently.
And for reference, Ruby is not easier than Java: it’s just different!
>> Ruby is not easier than Java
Really? I like the brevity of Ruby, from what little I’ve done of it, compared to Java. “Struts” (or other XML domain specific languages) anyone?
“Now drop and give me 20 XML push-ups!”
Boulderdash to java. On the web, json > xml and dynamic is better than statically typed. You have something with optimizations but it is multicore that is important. The winner will be something akin to python & pypy http://pypy.org/
Code yal8r,
J
What Bob is getting at is this, “We can afford to use slow language _implementations_ because we have so many other current bottlenecks, once those bottlenecks are removed, these slow runtimes will stick out like a sore thumb.”
And that the biggest bottleneck right now is the database using spinnings disks where SSDs will provide at least two orders of magnitude of IOPs (think disk seeks).
I agree, the JVM is already gaining more *popular traction*, it never lost traction, it just wasn’t cool. But cool doesn’t really matter, websites that perform and stay up matter. The dynamic language crowd would say that, “flexible websites that are quick to write and deploy matters.” And both are right.
The argument that he makes for SSDs showing the inefficiencies of slow runtimes also holds for runtimes. JRuby (on the JVM) is damn fast, PyPy (just in time compiler for Python) is also damn fast. You can have dynamic and fast. Programmers are always trying to find the right balance between productivity and speed, and yes the SSD changes the equation.
Slow implementations? I’d sure like to see more variation on memory management. Simply having generational GC more often that full sweep GC isn’t good enough. I’d like to have a reference counting option on some popular languages. Even though it breaks the semantics “a bit” (understatement, I know), it preserves locality of reference enough to avoid marching most of 4 GB of data through a 4 MB level N cache on a regular basis.
You are looking at the wrong bottleneck. It is not application speed that is a bottleneck — it is programming speed. While application speed is a major consideration when you have effectively won, reason why facebook compiles its PHP to C, that is a problem few people have.
No, the problem for most people creating web apps is to have something faster than the competition and to adapt faster than the competition. Slow beats non-existent every day.
And THAT is the real reason why web frameworks are mostly done in dynamic languages — Ruby on Rails, Python on Django, Groovy on Grails, etc. It optimizes the time it takes to build and modify these web applications, not the time it takes them to run. Which is why Twitter is still front-ended by Ruby on Rails, even though it uses other languages on performance-critical elements.
As for application speed, JRuby, that is, Ruby on JVM, is pretty solid nowadays. It gains you most of Java’s performance without losing anything in expressiveness and flexibility.
I do agree with others that JVM is making a comeback, on the backs of other languages running on it: Scala, Clojure and JRuby just to name a few.
On the other hand, the asynchronous character of modern web applications is very well served by Javascript, so I expect Node.js to be quite successful as well.
Did Java go away? I don’t think any of the languages mentioned above will go away, maybe some shifts along the way. And may a paradigm shift will come along with a new language that will surprise and please. Since we are really over due for one I think.
Java never left and never stopped growing. All the languages developed over the past decade have been fads. In the mean time, Java became the elephant in the elephant-sized room.
I see a rather large problem with your argument. That Java does something different than Ruby or Python. All three compile to bytecode that runs in a VM. The only difference is that Ruby and Python call theirs an interpreter. This is mostly because the compilation happens on the fly. I can’t speak for Ruby, but Python actually outperforms Java for most tasks. The exception being complex math, but for that there’s Numpy.
Also, the concern these days is with horizontal scalability. Very few people are concerned with the performance of one request. If they are, the biggest gains are achieved client side.
I find it odd that you didn’t attempt to measure/justify the performance improvements gained by SSDs. Assuming that SSDs make databases fast enough that they are no longer the bottleneck(a difficult assumption on my part.) The next bottleneck would be the network, not the runtime. This is assuming an io bound workload, which is most websites.
Wow Bob,
Great troll piece. Historically the interpreted language to compiled language to interpreted language cycle has always been largely based in hardware performance, i.e., if the hardware is fast enough then interpreted is likely okay. Otherwise, compilation is necessary.
Where you argument falls down for me:
1) JRuby, et al., are written on top of the JVM negating the performance argument
2) Java continues to increase in complexity
3) Scala may well be a “better” Java
While Java has become entrenched in the enterprise as the new COBOL, it’s fallen out of favor as a development language for many reasons, not the least of which is Sun/Oracle dropping the ball constantly. Like COBOL, Java will likely have a long lifespan. Like COBOL, it will continue to decline in popularity in the face of the language of the day with all of the shiny new features that Java takes forever to implement. If you’re banking on a resurgence of Java as a popular language, you might want to also look for the Tooth Fairy, Santa Claus, and an honest investment banker.
Exactly: Java (the language) *is* the COBOL of the 21st century.
PyPy says “Sup?”.
Forget spinning disks? Not for a while. While a single SSD (or two) in a Single Server is sweet, it doesn’t scale as well as SAN Attached Storage (or iSCSI or NFS or whatever) for that Database Cluster where I have racks of processing power. I still rely on my SAN.
But you make a good point about the spinning disk. SSD’s are still too expensive for SAN’s to be price competitive but they are getting there. And with auto-tiering, they are getting even better, but I still don’t trust tiering with my most important data.
Now, if you are a single developer and you need the speed and you don’t have to worry about scaling out, then forget SSD and go Fusion IO. Now that is FAST!
that is why I would personally pick http://helma.org and/or http://ringojs.org over Ruby on Rails and NodeJS.
Having JVM as the bottom layer is the best thing I ever picked for a platform.
I’m afraid you have failed to consider that any, and I really mean any, language that is interpreted and slow today can be compiled with an optimizing compiler and be made really, really fast. There is even a compiler to take java to machine code rather than to jvm bytecode.
Javascript is the new C++; Its dirty, but it works.
Java still needs compiling (ie. taking your punched cards to the mainframe) so isn’t going to gain popularity amongst non-programmers.
Ruby is the new Cobol.
I think you’ve missed a critical aspect of this, Bob, and it undermines the whole of your reasoning. Several other commentors have hinted at it, but I’ve not seen it stated explicitly: ** You are assuming that speed is what matters in selection of a language/platform. **
We can lease a *quite* beefy server for $1500 / month. Add another 33% for network infrastructure (load balancer, etc) and call it $2000. I’m sure others will point out that this is overpaying.
What if we found that language+framework “X” in comparison to c++ / java ; allowed us to extract an additional Y% productivity benefit from our development staff of Z developers. For what what values of X and Z does it become monumentally stupid to code our new web application in java vice “X”?
> the kids who wrote Rails were too cool for Perl, which they saw as old school. But Ruby has nothing on Perl.
Priceless.
But, getting back to your point, which was that with SSD, fast “disk” access would make language speed matter: are you bonkers?
Have loaded any “regular” web page lately? It’s a clusterfuck of slowly loading ads from ten different sources, plus Flash animations soon to be replaced by CPU-sucking in HTML5 approved fashion. And embedded videos.
How the hell is the speed of the language that loads the 10% of real content going to matter?
I’m not sure you have a clue about Ruby at all. Ruby has way more than just Hashtables and Arrays. It is an object oriented language and you can implement what ever data structures in it that you wish.
People also didn’t take up Ruby instead of Perl simply because Perl was old school and they wanted to be new and hip. Ruby offers a lot when you want to create domain specific like languages. The ability in a Rails model to state something like a has_many or belongs_to or any of the other dsl type constructs it has wouldn’t be possible in Perl.
What is also readily apparent is that you dont really know what it takes to scale a website. It relies on quite a bit more then how fast a given language is. Using a faster language will get you minimal gains compared caching and load balancing, both of which java based applications need to scale as well. This includes the use of servers like apache and nginx as the first tier of the application to serve static content. There is no use in having ruby or java server up a static file when it can be done much faster by apache.
Java is still heavily used in the “Enterprise” (read over blown expensive overly complicated for no reason other then to pay contractors) space. Most people I know are moving away from the JEE based approach because most of the time it is way more than is needed. Java is still really big in the SOAP space as well, and that too is a fading area as corporations find that simple REST based applications using JSON and Javascript get the same thing done a lot quicker and for a lot less money.
Future web development will continue toward the the interpreted languages such as Ruby for sometime to come. CPU speed is getting faster, CPU and memory is getting cheaper and platforms like Amazon’s EC2 that allow for massive horizontal scaling make for ease and speed of development trumping language speed.
I dont think you can be any further from the mark.
> Ruby offers a lot when you want to create domain specific like languages. The ability in a Rails model to state something like a has_many or belongs_to or any of the other dsl type constructs it has wouldn’t be possible in Perl.
Sorry, but that is just entirely wrong. You can just as easily build DSLs in Perl. See:
http://rexify.org/
https://metacpan.org/module/Moose#SYNOPSIS
Actually you can get have your cake and eat it too JRuby – code in Ruby, run in Java bytecode. There are even debugging tools that chain back to the Ruby source.
I know of at least one company in the area, writing kiosk software for hospitals, which are comfortable with Java, who simply say their code is Java – but actually it’s Ruby on JRuby. And JRuby runs much faster than Ruby. Apparently this is mostly an artifact – according to some bright guys who have looked into it – due to a poor garbage collector implementation in Ruby and a great one in Java.
Has anyone heard of Android? – it runs a some popular smart phones? This Looks like Java…It Walks like Java:
http://developer.android.com/reference/android/net/ConnectivityManager.html
And Eclipse is the sweetest thing ever:
https://www.eclipse.org/
The problem with .Net is that it lacked checked exceptions:
http://cafe.elharo.com/programming/bruce-eckel-is-wrong/
A wise man once said to me “programming is about representation”. And he’s right. Representation and execution are independent things, mostly.
Has anyone heard of Android? – it runs a some popular smart phones? This Looks like Java…It Walks like Java:
http://developer.android.com/reference/android/net/ConnectivityManager.html
And Eclipse tools are the sweetest things ever! The problem with .Net is that it lacked checked exceptions:
http://cafe.elharo.com/programming/bruce-eckel-is-wrong/
> * frameworks based on interpreted, dynamic languages only exist at all because disks are just so damned slow. What happens to these frameworks when disks get faster or disappear entirely? *
They will use EventMachine (Ruby) or Twisted/Tornado (Pythong). And that is exactly where node.js is aimed at.
So, no, there will not be a comeback to Java.
You have a really interesting point here, embedded in other statements so inflammatory that most people will ignore it 🙂
What you’re really going to see is a lot of support for piecewise replacement of Ruby, Perl, etc with good callout to faster languages like Java. JRuby is an excellent example of this, as is IronPython, and foreign-function callout in all languages.
In other words, it’s going to come down to a set of decisions about which ones are better glue languages for attaching various components written in fast languages to each other, without slowing anything down *too* much in between.
Luckily, Ruby is fabulous for that, while Java is awful. But Java will also be used extensively in the underlayers, yes.
This is already happening. Hadoop and Cassandra are two excellent examples, both written in Java. In fact, the whole NoSQL movement is full of excellent examples, though many are written in C++ instead of Java.
I, Cringley? I cringe reading this article…
the undead zomie thats lurching from its grave is c++ not java. think gadgets
Bob,
Might you consider addressing a few confounding factors in your analysis?
1. Seek times on SSDs may be near zero, but erase times, being a prerequisite to overwrites, really suck right now, and read-only applications are generally not useful. So until SSD write penalties and block sizes get a *lot* smaller, programs that assume equal-time random accesses to small blocks of data (which is to say just about every RDBMS package and no doubt a few NoSQL packages) will be disappointed.
2. Not too long ago, some browser maker started a browser performance war (Google?). The fruits of this war include at least two performant, open-source Javascript engines with JIT compilation, language improvements, and usable interfaces for interacting bidirectionally with native code. It was a pretty small experimental leap to hooking these engines up to the network in various ways, and one called Node.js is taking off nicely with an active developer community, an impressive repository of libraries managed very much like RPMs, a simple, language-friendly architecure, and an MIT license.
3. As a result, server-side Java and server-side Javascript are close enough in performance, I think, that programmer productivity becomes a significant factor. It is true that there is a staggering quantity of Java out there, some commercial, some FOSS, that serves for just about any office automation task you might want to perform. Does that outweigh that you can probably do most of it in Javascript for yourself, with the APIs a skilled developer already knows, without having to learn a whole new package for a one-off task.
4. Speaking of the client… with Javascript now available as open source software on (or as) the server, programming the server and the client in the same programming language and sharing common code between them is an attractive and now far more achievable practice. Java on the client is not a seamless experience; Java anywhere near mobile is a poor value proposition (just ask Google).
So while you are probably correct that changes in disk technology will change the server platform landscape, I think Java might be a little too encumbered to rise for a second time based on a performance that isn’t exclusively its own anymore.
Very interesting, but flawed logic in your article. And I am a programmer (assembler, c/c++, java and dynamic languages).
Disk is not going away anytime soon. SSD are getting cheaper, yes. But datasets are growing at explosive rates – much faster than SSDs are getting cheaper. In reality we’ll have layers of storage disk, SSD, FusionIO hotness, and finally memory. Memory is the new disk, by the way.
You talk about waiting for the database. Well, if your app is doing anything at scale you’ll need to think about horizontal scaling out. I’ll give your DB (even multiple copies of it) all the SSD it can eat and front that with a few TBs of memory … guess what … you’re still waiting on the network.
On to Java itself. I love to write boilerplate code. Not. The star of the Java ecosystem is the JVM. Huge install base of Java, true. Millions of LoC. It’s here for a long time yet. But other options on the JVM are very real and gaining traction. Scala is very nice. JRuby and Jython are OK too. Java the language is old and showing its age. Others have already covered this well so I will move on.
A few comments mention NodeJS. Very serious web hotness here. There are projected to be 7 (seven!) mobile devices per human by 2020. If you want to talk to these at scale, you are going to have to have some serious money for Java-based infrastructure. Node can hold some 10k and more (100k by some accounts) connections on 1U class boxes – wait, I meant to say per 1U box. The evented model is taking off big as ever larger web systems get built. The Realtime Web and mobile are exploding and are forcing new ways of thinking about big systems.
It comes down to resources.
– what does it take to build your system (developers and hours)
– how hard is it to maintain (developer knowledge and operations effort)
– what does it take to run and scale it (users per unit of storage/cpu/network)
Java is on the downslope when you look at it this way.
So long live the JVM … Keep making our code (Java and others) run faster. Java your new name is JOBOL, at least for the web.
.
After having been in Java for 7 years and now working with basically the best of the best in Ruby I have to completely disagree with this article. One solid Rails developer can easily out iterate 2 and possibly 3 java developers on a J2EE stack. I was dragged kicking and screaming into the Ruby on Rails world and I complained for the longest time about how it sucks not knowing what type a method requires, but now that I feel comfortable there it’s extremely fast to create code in RoR.
Not only that it seems like most of the forward thinking is coming from the RoR world. Not that things are perfect but there are is a constant stream of new and great practices coming forth in the Ruby world. I work for a large foreign company (would be in the fortune 100 if it was US based), they old system was Java and their new one is RoR. The ease of deployment and development compared to the old process is staggering. I just don’t see this ever going back to Java. Ruby is really winning the battle in the minds of a lot of managers. An enormous proportion of the new start ups are in RoR. It’s definitely a force. So why spend more money and have more heartache with Java?
No it’s not all perfect. My previous company was a top 3 customer of EngineYard and yeah we had a lot of issues on our deployments. But that was more due to the fast iteration and the technical debt that was accrued. On balance I think we came out way ahead.
Groovy runs on the JVM. As does ColdFusion, Scala, Clojure. They’re all awesome in their own right – and ColdFusion especially so (including open source CFML engines like Railo and OpenBD), because you can glue together the best tools for the job, all on top of the JVM. (P.S. If you just scoffed at that, it might be that you’re missing the point, or that you’ve formed some old opinions about CFML that are no longer valid) 😉
Good point. And with ColdFusion having Hibernate and ehcache built it, its taking advantage of the JVM in nice ways. The next version of ColdFusion will be built on Tomcat as well which will open up some nice configuration/performance options as well.
Dear Cringely,
I’ve read and enjoyed your column for years. But I have to say that on this topic you are wrong. Wrong, wrong, wrong. Wrong.
For 95% of software written for the web, the most expensive thing is developer time. Performance is a very distant second. Performance only counts if you are highly successful, in which case you can still use Ruby, you just have to optimize it.
Many people, myself included, find Ruby on Rails to increase effectiveness by, subjectively, a factor of 5 or 10. This is coming from a software developer who has over a decade of experience, having made the transition first from C++ to Java and now to Ruby.
You’re wrong on some of the other details in the article too.
@Gabe,
I absolutely agree with you as a developer who moved from .net to python. Besides, java might be more performant, however you have to keep in mind that web app is not like calculating Fibonacci. It uses lots of reflection and probably IoC framework if it is medium size and they for their own hurt performance.
Thanks. That’s what I thought, too. But I thought I must be missing something. It seemed to me that if speed/disk efficiency no longer matters, then don’t you stop at the ‘prototyping’ step with Ruby/rails or python ?
Dear Cringely,
Please don’t write about programming languages again unless you understand what you’re talking about. Sorry dude, but this article makes me doubt everything you’ve written.
Please don’t write about programming languages again unless you understand what you’re talking about.
My sentiments exactly. And the scary part is, he’s making other errors too, which are not about programming. Who are you and what have you done with the real Bob?
* Databases are not slow and disk access is almost irrelevant. Where performance is needed, we’re already throwing every trick in the book at it. Including things like NoSQL and caching everything in RAM.
* The industry may switch to SSD, but it will be for power savings and durability (no moving parts), with extra speed as the bonus not the primary reason.
* Frameworks are not about performance, they’re about bypassing rewriting low level stuff over and over.
* Interpreted languages are not slow. The view “it’s intepreted so it must be slower than compiled” is simplistic and outdated.
* No programming language fits all purposes perfectly. There are many factors that determine how suitable one language is for a given task. Raw speed (in what circumstances?) is just one of them. There’s also features, libraries, tools, frameworks, ease and speed of development and QA, breadth and quality of the developer pool, flexibility, how it evolves and how well it ages etc.
I disagree that the disk is the bottleneck in modern web applications. A high-end SQL database will have gigabytes of disk cache on the RAID controller. Even lower-end applications are using things like varnish and memcached. I’ve personally written applications that can handle 10s of thousands of requests per second on fairly modest hardware. That’s sufficient for 99.9% of all web applications out there. Google will always use a high-performance compiled language, but the first rule of web development is “You are not Google”
When your web app has to update 20 or 30 tables and needs exclusive access to those tables, you are stuck doing a single transaction at a time.
/there is a lot of bad web apps out there
Where the JVM really is starting fulfill it’s early promises is in PaaS. In the past, the JVM AS vendors have, without knowing it, asked their customers to build a PaaS before they can get anything done. After 10 years of hard work, we now have a good idea of the best ways to do it. All those painful lessons are paying off for the industry, , now that people can just rent space and time on a JVM PaaS service provider, instead of building their own.)
(Full Disclosure: I’m a Developer Evangelist for one of those PaaS systems, OpenShift by Red Hat.)
Gabe: +1
I think it is telling that all the best programmers I have come across in my long career use C++. Java developers, in general, just don’t have the chops for serious product development. There are lots of good developers who use Java. But they probably aren’t doing what the really like.
Yes I heard that Josh Bloch and Brian Goetz are really rubbish programmers..
Nice comment now crawl back in your hole where you came from
You might want to think about what language Josh Bloch and Brian Goetz used to write those features with, before jumping on AlanK’s back…
Like any other general statement what you are saying is completely subjective. What is “serious product development”? Do you measure by the complexity of the application, by the revenue its responsible for, or maybe the percentage of the company’s revenue, or is it the amount of high level mathematics it processes? I think its telling that in today’s world a knowledgeable person would make a general statement like that. How do you measure “best developers”? All of these things are likely to be skewed by your own experiences. If you’ve always been a low level programmer until recently then you know the complexity of writing a low level language. Therefore you are likely to value lower level programmers more. In all actuality measuring the ability of a developer doesn’t truly accomplish very much. You need to measure their ability for what you need. I would rather hire or work with an experienced Ruby developer when I need a web application than the most talented C++ developer on the planet. If I need astronomical data crunching with high level astrophysics computations, then I’m giving that C++ developer a call.
You can’t say speed is the #1 metric and claim Java beats C++ because of “cleaning up memory and automatically profiling and optimizing”. Java is slower than (good) C++, but it’s easier. You’re willing to make the ease-of-use/speed tradeoff for Java, but not for any other lang. Sounds hypocritical.
Performance isn’t just speed. It’s also memory. You can get more throughput by launching additional instances of whatever you use and load balancing. Multiple instances of a slow, low-mem lang may perform better than a fast, hi-mem lang.
Why does multi-instancing and multi-threading work? Because one is working while the other is waiting for some slow I/O. But that’s not ideal. Why waste mem on a paused instance/thread? Async is the future. Callback when the I/O is finished. In the meantime, work on something else. The winning lang has to grok that concept.
async +1
I would also suggest that the use of AJAX hides lag in response time once the page has loaded.
If JavaScript can be made to run way faster, can similar enhancement be made for the interpreted languages?
Bob must have known this would incite pitch-fork-laiden masses.
tl;dr? I hate ppl who ask for that, but this was so much waffle for non-technical people I kept skipping, then reached the end.
The JVM is why I wrote Redline Smalltalk (http://redline.st) – so you can have a great language on a great VM.
Rgs, James.
Hitting “Read Later” so I can read this article with half-decent typography.
There are three things that matter here: developer productivity, latency, and throughput. How many lines of code do you need to write to deliver your application? Out of all the layers of your application, which contibutes most to the response time? When you put the application under load, which resource saturates first?
If you pay attention to all of these, you probably won’t write all parts of your application in the same way – because a small proportion of the pages/use cases will bear most of the load. Even in Java, if you use popular frameworks like Spring, Spring MVC and Hibernate you will probably find that under load the CPU requirements of the application server(s) are far greater than the CPU requirements of the database sever. If you profile your code, you may be shocked (I was) to see over 60 levels of method call between your application’s code and the JDBC driver.
Build each feature straightforwardly, check the SQL it uses is good, and – if this feature will be heavily used – go on into load testing, measuring, and optimising (and do this with a fully-populated database). Make sure that your framework and language give you the option to optimise. Don’t let an object-relational mapper blind you to what’s really going on at the database level, and be sure you can customise queries (especially for pages showing lists).
For an idea what can be done with a 100% JAVA application in an industrial enterprise, take a look at award winning Ignition by Inductive Automation.
This is SCADA, HMI, and Historian all rolled into one. Amazing.
Runs on Windows, Linux, and Mac because it is JAVA.
http://www.inductiveautomation.com
Unlimited clients, unlimited tags.
I have no interest in the company. I am just a raving fan.
If you meant that doing things in 10 lines of code instead of 500 makes Ruby, Python etc. easier you probably right, but this is the question of developer performance as Game already mentioned. There are a lot of web frameworks on Java but only few of them most youngest and developed after Rails not forcing developer with writing tons of unnecessary code and xml declarations. Java’s recent poor language expression level is also the reason. It’s too expensive to write low-level code and casue developers to spend time on inventing wheels and result is usually hard (and again expensive) to support.
So to increase marketshare on web Java needs to be more modern as programming language as Groovy, Scala etc. are as you mentioned Perl on top of Java platform.
It’s no so much about interpreted vs compiled languages to me – it’s more about thread-safe vs non-thread-safe. With Ruby and the likes, often the need to replicate the same structures over and over on the same machine into each process becomes the bottleneck.
+1
Hmm. Bob needs to look at Ruby more closely. It is a full OO language with classes, so it’s the same as Java. Java’s “fantastic data structures” come from the class library. Java is smalltalk with C syntax (and stupid things like integers which have caused no end of grief). Ruby is smalltalk with functional programming. Java is fast today because of just in time compilation. Ruby now has just in time compilation too.
The rails framework has been ported to other languages. If I recall correctly, it makes life simpler because one doesn’t have to replicate the table structures of the database in the class definitions of the application program. Rails does that for you by getting the info from the database directly.
Database access times are quite good. There is a reason for 7200rpm platters and caches on the disk controllers. If they were as bad as Bob says, the world would indeed be crawling.
You should have heard of Lasso lassosoft.com. It’s my web language of choice. It’s like having rails built-in and it’s designed with security in mind (Sony). And in case I get hit by a bus, it’s in English and not that difficult to decipher.
This is one of those subjects that we can debate endlessly. It comes down to what do you want? If you want something that is fast to build but not especially fast you will use one set of tools. If you want something that a lot of people will use a lot, then you want speed and a different set of tools.
The computer industry LOVES big databases and interpreted languages. It allows them to sell a lot of hardware. There are application development tools specifically designed to work better if you throw a lot of hardware (aka money) at them.
High performance application development is becoming a lost art. Sometimes I wonder if the industry should step back and really evaluate the life cycle costs of an application — maybe an investment in better, faster code is worth doing.
It is all about a good balance. The best programmer with crappy tools is just as bad off as a newbie with the best tools around. Good programming practices coupled with a good plan and systems requirements docs is the place to start. After that, picking the language based on need will give you much better final results.
Well said Joe! It comes down to picking the right tool for the job. IT for some strange likes to buy tools, then force them to the projects. Rarely does one check to see if its the right tool or even a good tool.
I help with a lot of website support. For high profile sites the use of the new public domain and/or open source stuff is becoming a big liability. The Internet bad guys are finding countless ways to compromise them and get to the data behind the website.
In picking development tools one needs to consider the security risks and requirements of the application. There are situations where the use of the new fun stuff would be irresponsible and reckless.
Given that fashion in IT changes every seven years or so, I can guarantee there will be a brand new more “productive” language/paradigm in the next couple of years.
“What are you rebelling against? What have you got?”
….meanwhile, the co-creator of C has passed on http://en.wikipedia.org/wiki/Dennis_Ritchie
Eve Online (“50,000 simultaneous players in a shared space simulation”, https://www.python.org/about/quotes/) uses Python (and of course C++) and their database sits on something faster than an SSD (100k IOPS, 2 GB/second, https://www.eveonline.com/devblog.asp?a=blog&bid=632)…
Slow kind of equals not green, meaning they take more electricity to run.
If the language is slow, then you have to have more servers to run the same number of web sites that means more electricity.
The amount of electricity used by web servers now matters somewhat in the grand scheme of things. Google has located facilities near cheap electricity (e.g. Columbia river) for this reason.
So there is a reason to care even if disks are still slow.
Oh dear. Where to begin?
“Java’s performance was no C++”
Java’s performance is actually on par with C/C++ in many cases primarily due to its ability to identity and optimize hotspots on the fly. It will likely never match native code in all scenarios, but for many applications this isn’t a concern.
“Java has all the fantastic data structures you learn about in school while Ruby has only hashtables and arrays…”
Actually, Ruby/Python/Perl have generally have all the classic data structures you’re referring to. Ruby has a strong OO design, arguably “purer” than Java, while providing support for things like mixins as well as more esoteric constructs like lambdas and blocks (things not found in Java (at the moment)).
“Under Ruby, we put C++.”
The reference implementation is actually C.
“…dynamic languages only exist at all because disks are just so damned slow…”
I think most proponents on both sides of the dynamic/compiled will acknowledge that the dynamic languages are offer a code density unparalleled in the traditional compiled world. It’s easy to knock out the same problem in 1/5 the code and do it quicker. They got their start not “because disks are so damned slow” but because many administrative tasks can be tackled quicker in a script (bash/perl/python/ruby/powershell…dos batch files) than with a dedicated compiled app.
“Ruby is easier than Java.”
It’s certainly easier to get started with than Java since there’s no need for any of the ceremony and boilerplate baggage the Java brings with it. It’s very easy to get lost in some of the more advanced concepts that many dynamic languages introduce (lambdas. comprehensions, etc) primarily because there’s no notion of such things in many compiled languages (I know, I know, “Java 7”, C++11, C#4, F#, etc).
“Ruby is already migrating to that JRuby ”
Good god. JRuby is awesome but MRI Ruby is hardly “migrating” to it.
I refuse to believe that Bob Cringely wrote this article. I typically enjoy your writing sir, but I sincerely hope this was a joke.
You must be a new reader. The comments section is always much more interesting and informative than the article.
Garren, I agree with you 100%.
furthermore:
I am finding more and more that I am writing pure Ruby and not Rails code on large scale projects. I’ve talked to a ton of the top tier Rubyists and they are doing the same thing. We’re moving towards consumable API’s in highly heterogenous systems with multiple data sources (DB’s, NOSQL data stores, other API’s…) and implemented in whatever language best does the job (and if in Ruby then on the best platform: MRI, Jruby, Rubinius, REE).
Also, the idea that the one of the primary reasons people adopt ROR is for ‘Coolness’ is asinine and the tone given in those paragraphs is insulting.
Also again, this whole idea that the we choose Dynamic languages because we can hide some supposed slowness in the access time of hard disks is ludicrous. In any sufficiently large scale web app, most queries will be cached in RAM already, so that’s a straw-man.
All dynamic languages to a greater or lesser extent, when architect-ed properly, allow for the continuous evolution of an application, sloughing off the slower bits for more highly optimized bits that can be in another language altogether. In the case of Ruby and ROR, the culture and framework are in line with these goals to such an extent that even the concept of prototyping has diminished, for prototyping is simply the first iteration which is repeated over and over again.
Anyway, I was left with a WTF?!? after this (Cringely’s) post.
*shrug
did you build your code in release mode, not debug mode?
Any guy who starts a comment with “Oh Dear” deserves a good LOL before skipping the rest of his post.
[…] I, Cringely » Blog Archive » The second coming of Java […]
Another reason to reconsider Java’s JVM: Optimize to use new tech ( i.e. gpu’s )
I gained more respect for Java ( being a c++ guy myself ) when I read that the latest (experimental?) JVM’s were optimizing code on the fly to take advantage of special hardware on a given platform. So even old code would benefit from a gpu on your new phone.
This takes what I assumed to be a performance advantage iOS had ( with Objective C and specific hardware ) and potentially gives it to Android ( using Java and hardware choice).
Feels like geoworks (hand-tuned assembly) vs windows 1.0 ( C – just recompile ) all over again?
I still have an unwrapped copy of geoworks on my desk. The box looks pretty damn cool. One of these days I’ll find a floppy drive…
You are right. Not exactly how I’d come to the same conclusion. But yes, in a nutshell you are correct.
However, I surprised you didn’t point out the obvious. Double jeopardy says that Microsoft probably isn’t going to pull another screw Sun or [insert company here] job on Oracle.
They already did with Sun, by purposely making JNI incompatible. Microsoft lost in court. But by then, the damage was already done. I, like many other developers, never bothered with the JVM update for Visual Studio, J++ wasn’t the way to go and the entire fiasco put on the skids on long enough for .NET to take over.
The funny thing is, .NET and its protected “Virtual Machine” architecture (read: sandbox) was supposed to be the last nail in the coffin to native code. The premise for WebOS and our dearly departed WebApps touted this too (sorry Palm). Even Apple pushed it in the early days of iOS. What happened?
Apple showed us that native, done right, can kick some serious hand held booty.
Put the sandbox API in the AppStore approval gods and now you can have software that doesn’t run like an ActiveX virus yet flys on a low power CPU. Smart. Maybe Android will follow suite when enough silent pay-per-call, address book stealing malware makes customers say “enough!”. Or maybe CPU sucking phone anti-virus is just a few ticks around the corner -now that was profitable.
That’s the last straw Bob, I can’t read your blog anymore. Too much talk about things you clearly know nothing about.
Your mistake is you take Bob seriously. I stopped doing that many years ago. But I keep coming back for the entertainment value. It’s like going to a fake humor site, but the guy is actually serious! That’s what makes it so much better.
I bet he crows about how many hits he gets. If he only know what motivates the vast majority of his readers…
LOL
It would be nice to stop the madness of re-inventing the wheel every 6 months… this is getting to be the biggest problem with web apps. No matter which framework a developer chooses, the available set of developers who know how to deal with it is small.
The big problem with non-Java tools is that there are a gazillion of them that all do the same thing. Hopefully we won’t just end up with a ton of different frameworks that all do the same thing but use Java.
Your web blog is written in PHP and not a single mention of this popular language.
So are most popular, heavily trafficked, well performing sites. And Ruby lovers hate it! 🙂
LAMP is the Windows of web development. You don’t use it because it’s good, you use it because it’s everywhere you want to be.
(L and A are actually not bad for what they do. M and P, on the other hand, are misguided toys at best. If you ever find yourself needing a MySQL function to check a value inside a PHP serialize()d object in a column, you’ll probably also find yourself wishing you’d used PostgreSQL and JSON instead.)
Sorry Bob but this is the first time I’m saying “You got it Wrong” …. but I guess there always is a first time for everything.
Gabe, Jason, Ed, Greg and others all make good points as to why you got it wrong.
I too am a developer (C, C++, Cobol, Pascal, Java, C#, PHP, Ruby, Python etc) and I believe that Java is headed the same way as Cobol – Still used but can not get rid of it yet. It’s too cumbersome to write code in – mainly due to verbosity, interfaces and class-hell.
I say good riddance to Java (note I did not say the JVM) … and welcome to Python and Ruby … and maybe a few oldies (PHP) and newbies (Clojure, Coffeescript)
Your premise that “People chose Ruby and Python because disks are slow” is just dead wrong.
You couldn’t be more wrong.
Not a single Ruby or Python programmer anywhere is saying “Gee, I can’t wait until disks are faster so I can go code Java!”
Are you trolling or something?
I also think the premise is rather flawed as many commenters have pointed out. There are very few applications where the speed of disk access is a concern. Most people don’t work for Facebook.
But I do believe also that Java, and JVM technologies in general, will be seeing a resurgence. But not because of disks, but because of frameworks like the Play! Framework, which makes web development in Java pleasant again, and JVM-based languages like Clojure, JRuby, Groovy and Scala which give you added productivity while seamlessly integrating with the mamooth set of Java libraries out there.
Anthony, though Play! is surely nice, it’s absolutely not without its own problems. Many of those don’t begin to show until your site passes a certain threshold in size.
I personally think that Java is seeing a resurgence because its stewards have clearly seen the light now (guided by innovators like Hibernate, Spring, Ruby on Rails, Vaadin, and even smaller projects like PrettyFaces).
I know that with some Java EE still has a questionable reputation, but for the most part this is unjust. Java EE 6 in an incredibly lightweight yet super powerful framework. Free and open-source Web profile implementations like TomEE or Resin weigh in at around 20MB for that entire stack. Even the reference implementation Glassfish is barely larger (around 30MB). Startup time is a mere second or two. The programming model thanks to JSF 2, CDI, EJB3-lite and JPA is very lightweight.
Now combine this with the fact that Java EE -does- have an answer to scalability and is a very stable product in the industry (among others due to there being multiple implementations of it) and I think we have a winning platform.
If it hadn’t been for the dramatic change of course initiated with Java EE 5, Java EE would have been long dead now, but they turned ship just in time.
Isn’t Facebook written in PHP? Seems that they have somehow overcome the limitations of waiting for I/O (memcached?).
The site is also remarkably stable for having so many users.
facebook is mostly static pages, not php and it’s speed is due to the NOSQL backend, not php, which just passes the json string through.
This can’t be correct.
>Isn’t Facebook written in PHP?
It seems just the view templates are. The backend uses a mix of technologies, with Java (e.g. Cassandra) playing an important role.
It’s a bit like Twitter, which once was the poster child for Ruby, but since then they have started to use quite an amount of Java (and Scala too btw).
Actually, Facebook is written in PHP, but it’s transformed into C and compiled.
Correction — it’s transformed into C++
https://developers.facebook.com/blog/post/358/
So Facebook gets the programmer productivity of the scripting language (PHP) and then the performance of C++.
Very clever engineers…
Thanks for the link.
That’s where ColdFusion (or their OS versions: railo/bluedragon) kick Ruby’s butt. They are already using in memory caching and have done so for a while now. CFML is one of java’s most useful interpreters, but unlike other java wannabe’s it compiles the pages to java bytecode on first request, giving the page render times a massive boost second run.
Just have a look at what the Railo folks are doing, it’s the most flexible, fast interpreted language engine on the market, and with in memory caching, it’s blistering! And there’s hundreds of thousands of developers coding in it every day?
That’s where ColdFusion (or their OS versions: railo/bluedragon) kick Ruby’s butt. They are already using in memory caching and have done so for a while now. CFML is one of java’s most useful interpreters, but unlike other java wannabe’s it compiles the pages to java bytecode on first request, giving the page render times a massive boost second run.
Just have a look at what the Railo folks are doing, it’s the most flexible, fast interpreted language engine on the market, and with in memory caching, it’s blistering! And there’s hundreds of thousands of developers coding in it every day?
Oh and this post was an advertisement for SSD’s, not about java. 😉
Where’s the .Net love, huh? Sheesh … C# may have started out as a Java Clone, but it’s grown and led the way for the past few years with new language features.
sorry, it hasn’t led anything anywhere.
Ruby ok. Java ok. Both have strength and weakness.
I laugh how the Ruby fanboys will do anything including giving their liver to Steve Jobs to defend a (only) decent product. I am guessing that eight years ago you were making the same awesomeness claims about Java.
Another Cringely brain fart. This one is exceptionally egregious given his implication that he actually knows what he’s talking about. Which, after reading just a couple of paragraphs, was proven wrong. Very wrong.
Just a bit of history – the technology that makes Java fast were initially created for Self, a very simple and very dynamic Smalltalk dialect. The project was started at Stanford, but soon moved to Sun where most of the development took place. When Sun decided that Java, even with its toy implementation, was going to be The One True Language from then on, several of the Self developers left and joined Animorphics which was creating Strongtalk, which was “the world’s fastest Smalltalk”. They put together a quick and dirty demo to prove their technology would apply to Java as well, while the group that had remained at Sun did their own demo, called Pepe, where they ran Java on top of the Self VM.
Sun bought Animorphics and killed Strongtalk. A new team that included the rejoined Self group converted the demos into the HotSpot VM for Java, which is still in use today. So there are no technical reasons at all for any dynamic language to be slower than Java. Practically all are because the people working on their implementations have other priorities. If you hire an experienced VM guy like Lars Bak (Self, Strongtalk, Hotspot, OOVM) to implement Javascript, you get something like V8.
I’ve used a lot of languages, 360 Assembler, APL, Smalltalk, C, C++, 80×86 Assember, Java, Forth, Postscript, VB, C#, PHP and Python in that order. They all have their pros and cons. I usually prefer to choose the best language for the application and its environment.
On some occasions, where highest possible performance is required the choice could be assembler or C, but to quote an APL programmer from years ago “life is too short to code in assembler”. Where time to market and developer productivity are the most important an interpreted language like Python is probably a better choice. Where budget and development time are not important and good performance is required Java could be the best choice.
One thing this discussion hasn’t touched on is the cost of hosting. Most shared hosting services do not provide Java, but they always provide PHP and sometimes Python or C# and occasionally Ruby. For small projects for local businesses, the cost of VPS or a real server is prohibitive, so PHP is often the only choice.
/peter
Gabe: +1
The article was questionable to begin with, but once I got to “all the fantastic data structures” Java has and Ruby only having “hashtables and arrays” I nearly wanted to vomit.
Nearly everything was 1/3rd understood at best.
Not that I’d be shocked if the JVM gets a second wind (still VERY relevant) due to the alternate, innovative languages making their way there.
If the author’s fundamental premise is correct it’s by accident, not by understanding.
Are you channeling John C Dvorak now Bob? Trolling to get hits?
I dunno man.
Is Google not storing their data on spinning disks with moving read/write heads?
I just searched Cringly on Google, and it got me about 504,000 results in 0.07 seconds.
There are already techniques for removing multiple disk io waits from the user experience (although those techniques are not as easy as just using the disk in a straightforward manner)
I think there will always be many cases where the decision of what tools to use to build software will give appropriately heavy weight to, “How quickly can my developers get a new feature or bug fix implemented.” Even if that’s at a small cost to other decision parameters like performance.
And then there will be other cases (though fewer IMHO) where performance is absolutely paramount (in which case, I’m not entirely sure Java would be best).
However, I agree that a super smart VM running code developed in a language and framework that smart people can be pretty darn productive in is a good way to go, and is going to be very common for years to come.
I just couldn’t disagree more.
First of all Java wasn’t a well performing language in the beginning. JIT compiler came much later than the language itself. Java used to be slow as hell. Secondly what made Java popular, AFAIK are things irrelevant today like hotness of Java applets, Sun position in the market of servers, language simplicity. Yea, simplicity – it used to be a very simple language. Then generics came along and it wasn’t so simple ever since. I heard specs are actually something like 1K pages, no kidding. I don’t claim generics aren’t useful, but seriously 1K pages? Putting a long story short – Java used to be a decent language in a market where there wasn’t any better alternative. Today Java is a terrible language without any hint of a real change (at least in the near future) and there are plenty of alternatives.
The only thing that could save JVM (not Java) is Scala. On contrary to all the crap like Groovy, JRuby, Jython it actually offers a better performance for both your application AND your developers at the same time. Problem being, the learning curve is quite steep.
As to the hardware argument, I’d add that for small to medium sites it’s not the processor time that costs the most. It’s RAM. Because of the way modules work in the language, Java actually consumes tons and tons of memory. Compare that to Python where import statement is just an instruction like anything else and can be easily deferred to when it actually is needed.
Bob, I think you’ve positioned yourself in the the middle of the holy war among programmers. Good luck getting out.
Think of games. Most players of online games will bitch about 200ms latency. That is 180 of network and 20ms of CPU and overhead.
Us web folk have got too used to the idea of of 10sec page – or if pushed a 0.5 sec api call.
Time for a game change
Well, MMOs typically have a server limit of ~1000 players. The client side is rich (all the GUI, some of the game logic live there), so the server side can be very lightweight. This in turn means that a thousand players can really be served by a single physical unit, if architected properly.
On the other hand www is nothing like that. You don’t have to “join a server” to send a request to it. And sure, it doesn’t have to be 10 seconds for a page to load. However one thing is for certain, this has little to do with whether or not somebody used JVM runtime on the server. Long page loads may be caused by sequential requests from the client to the server (poorly constructed AJAX), sequential requests from the web server to the database, in general bad system architecture. Even most efficient databases with the lowest possible latencies will behave poorly if used sequentially. And JVM as such is not helping with this, not one bit.
As a non-programmer using Windows on a low powered Atom processor, I’ve discovered that efficiency and security of code are not just luxuries but essential. A friend of mine wanted to try out a video conferencing application with me so I had to install the Java runtime environment. It was way too slow, nothing like Skype which actually works on slow processors. I assume it’s because the virtual machine just gets in the way. (Reminded me of the difference between compiled Fortran and uncompiled Fortran on an IBM 1620 from the early 60s…uncompiled was fine for a single use program but for repetitive use, you want to take the time to compile it and from then on execute compiled code.) Also, due to security issues, Steve Gibson has been suggesting updating all your software (Windows, Flash, and other stuff you need) but when it comes to things you don’t need (like Shockwave or Java) just uninstall it rather than risk the security aspects of keeping on your system.
Jeremy (way up above this) has it right….about what Bob is trying to accomplish here. If you’ve ever had the privilege of meeting and watching Bob work in person (and it is a privilege because he is a) exceptionally bright b) well connected in the industry)), he has a very perspicacious method to his madness. Yes, he may have a position on something no doubt but that position is/was developed of, by, and through discussions with people who are as I said very well connected and exceedingly knowledgeable in the industry.
I met him many years ago, albeit very briefly, at a conference in Santa Rosa of State of California guvmint IT directors. He basically polled us at our table as to what were key issues for us in government IT…all aspects, problems, etc we were facing. What he was able to do through this was to elicit solutions from us and synthesize that info with his industry knowledge as to trends on the fly and give his presentation to the entire audience.
It was absolutely brilliant to watch. I learned a lot from that experience. I assure you (as Jeremy starts to point out), Bot WANTED you all to respond in this fashion. Being originally a reporter (of sorts) he gets his best information by creating and stimulating the discussion in such a manner. If everyone just chimed in and say “yep, you’re Bob, Java is/was the best hammer ever made”, he’d probably be disappointed.
As for the discussion that he provoked regarding languages: everyone has their favorite language for their own reasons (performance, memory usage, ease of learning, ease of coding, love, fame, money, whatever…). I only ask you the following question: Do you know what you’re doing or just doing what you know? So if you imagine yourself to be a REAL developer, go learn another language! (and then another one…don’t stop learning languages!!!)
damn…I wish these things had grammar check on them!
that’s Bob not Bot (sorry Bob!) and “Yep, you’re right, Bob…”
…as far as I can remember, this has been a hot topic for the past 20 years seems it is still a great conversational hook!
I also share the opinion of the original post and agree that Java maybe on it’s way back – one example I like is Google GWT (a Java based tool compiling into Javascript) presenting the benefits of high level languages with the lightness & speed of javascript. Out of all the comments I miss mention of one programming language.. one that should be high at the top in terms of it’s time proven rules & concepts: Eiffel.
The fact that thousands of languages emerge and disappear shows me one thing: software development has still not matured into a true engineering discipline.
In a perfect world speed should be compiler optimization issue and focus should be on the ESSENCE of programming / software design rather than all the ACCIDENTS of language issues, OS bugs and optimization tricks…
That is an interesting point but it ignores the constraints of the hardware. If the hardware was truly reconfigurable on-the-fly to optimally process the computing task in the way the programmer has expressed it, then you might get somewhere. But until then we’re stuck with a relatively rigid piece of hardware (I’m thinking in terms of buses, registers, arithmetic logic units, floating point units and so on) and so naturally programs written with those constraints in mind (and relatively low-level programming languages that facilitate this) are going to have an efficiency advantage.
I definitely agree with the general thrust of Cringely’s point though (even if not explicitly expressed in such a general way) that evolution in hardware design has the potential to shake up the relative advantages of different programming languages compared to each other.
Grosch’s Law still applies.
To be clear, I was referring to what Herb Grosch said in the 1960’s, “Anything the hardware boys come up with, the software boys will piss away.”, not the Wikipedia listed, “There is a fundamental rule, which I modestly call Grosch’s law, giving added economy only as the square root of the increase in speed — that is, to do a calculation 10 times as cheaply you must do it 100 times as fast.” version.
If true, then C should replace C++ which is always larger, and hence slower than well constructed C programs. C is more difficult for many things, but is faster.
Also, Python compiles directly into Java for many runtimes. It can also be compiled directly into C. This is somewhat true for Ruby as well.
It will soon be possible to compile Python directly into Javascript as well. With the last couple of years, all major browser manufacturers concentrating on faster JavaScript execution, a well crafted JavaScript application already runs faster than a mediocre C++ application especially if you include a lot of cruft in compiling the C++app. I wonder if this will affect the transition Bob is predicting?
People smarter than me observe that dynamic languages like Python are going to get *much* faster over the next few years – to the extent that they will maybe be faster than Java.
We’re seeing the beginnings of this in last year’s improved Javascript engines, and projects like PyPy (the Python interpreter, rewritten in Python) which is already faster than the original C version, and still has plenty of work yet to be done which will make it faster still.
Optimising static typed language compilers has benefited from intense research for decades, hand-in-hand with assistance from CPU designers. As an industry, we are now very good at this – the downside of which is that we’ve probably discovered most of the clever tricks, and it isn’t going to improve much in the future. On the other hand, dynamic language optimisation has languished for decades, is only recently starting to take off, and has much untapped potential.
That is complete and utter rubbish.
What exactly are you disputing? Or are you just throwing hand grenades? PyPy has published benchmarks showing 4.8 X performance improvements. Any serious critique would have to dispute these published results but to date these quantified performance improvements remain unchallenged.
The comment that PyPy is written in Python is incorrect, it is written *for* Python. But the PyPy project is to improve JIT bytecode compilers for all dynamically typed languages, not just Python.
Whether dynamically typed languages will perform as well as Java remains to be seen. But the point that gains are being made is valid. Single sentence to the contrary reflect a lack of objectivity.
People smarter than you might not like that you are talking out of your ass.
people have been arguing about whether Python is faster than Java or not. It seems to depend on the C extension used by both. Yes, both are getting faster, but JavaScript seems to be getting faster faster.
We may see all of them getting recompiled into JavaScript. Let the compiler optimize.
Although I was cringing my way through this entire article, I think Bob is somewhat correct.
Various interpreted languages have made it easy for any high school kid to pick up web development and start writing terrible half-assed code for profit. As long as it’s developed cheaply and quickly, nobody has cared about performance.
I don’t think that has anything to do with technical considerations like rotational disk speed. Lots of non-technical folks just want to quickly get online. If they find success, they will scale by ordering more servers, more bandwidth, more of everything except development time.
With the right approach and foundation, server-side apps could easily be built in nearly the same time with lower-level languages. The efficiency of the specific language probably will be beneficial, but not nearly as much as having a proper developer applying skilled and thoughtful design concepts.
Better scalability means less fixed costs. Products or developers who differentiate themselves in this way, while still providing modern web apps with quick turnaround, will obviously have a huge edge against the multitude of lazy/amateur developers out there.
I read Cringe’s blog on occasion for the entertainment value. Nowhere else will you find someone more willing to embarrass himself on a regular basis. Rarely am I disappointed. And this time the old guy has outdone himself. Way to go, Bob!
Cringe ignores the trends and new capabilities of JavaScript (NOT JAVA) and HTML5. He ignores the fact that Java failed not because the language itself, nor even the runtime, but the incompatible libraties and absurd complexities that such monstrosities such as enterprise java brought to the table.
Cringe ignores the fact that Java is owned by, and slowly being strangled to death by Oracle. Cringe ignores that modern cloud development is based on one of the big datacenter-centric API sets. My preferred solution is MS Azure (aka .NET), although Amazon, & Google aren’t far behind.
And none of these have anything to do with Java.
Thanks for the laugh, Boob.
Bob, I agree that Java will have a resurgence, but disagree on the reasons why.
What Apple figured out (and let’s all remember that they originally had no intention of releasing a native API) is that you can get much more performance out of a native (Objective C/C++) application than any of the ultra-high level development environments (i.e. web apps, scripting languages, JVM/JIT-style languages).
Java is becoming fast because the JVM’s are becoming really good at JIT compilation to native code. However, in a mobile environment, compilation eats many processor cycles, which burns battery ilk crazy. Apple has found that battery life is more important than how much RAM you have. Your mobile device has to LAST.
Microsoft’s .Net/CLR has advantages because they tried to stay somewhat close to C (with C#) and are trying to have rich C/C++ libraries for everything that would take more CPU time if you had to do in CLR.
Apple is trying to stay even closer to the wire, by adding memory pointer management and other infrastructure that keeps inexperienced developers from making too many fatal mistakes. Objective C is as close to plain old C as you can get, but still have object-oriented constructs. This is why they have invested so heavily in the LLVM, Clang and related projects.
Apple realizes that they have a good number of app developers, but that most of them aren’t heavily trained software engineering experts. Those are the guys who know Perl 6 inside and out, as well as C, C++ and even assembly. They also think of things like Ruby and Java as great PROTOTYPING languages, but not languages for production applications. Most Java developers have no clue what’s really going on underneath the hood. As such, they are very likely to code inefficient applications.
Apple will win because a routine that takes 100 clock cycles in Objective C, that may even be parallelized and run on the GPU is far more energy and resource efficient than the hundreds of thousands of clock cycles it takes to fire up the JIT compiler and pass the resultant code to the JVM. That’s also why an original iPad1 still seems snappy compared to a dual-core Android-based iPad imitator that has a 60% clock speed advantage, and the battery life still doesn’t even compare.
One last thing…have you seen Microsoft’s security report regarding Java being a leading attack vector for Windows?
Anything with the ability to save a file and then run it can be used as an attack vector. Yes, that includes Java. It also includes Basic, ASP, .Net (Which as Bob noted is really Microsofts version of Java), and most other scripted languages. Even JavaScript is a potential window of attack.
Windows may be the primary target, but ANY operating system can be attacked. That definitely includes Apple.
Nice read and an interesting perspective but I think it is a oversimplification.
I don’t know if Java will get a second chance in the field of web programming but execution speed is already an important factor when choosing a language for cloud hosted services. The reason for this is often the pricing model and not disk speed. But you don’t have to care about pricing when you are not one of the big players and if you don’t have a lot of traffic. But big players don’t start revolutions and already use Java all the time in the application layer and even in the persistency layer.
Before the masses need faster languages for building web apps or services, the hosters need data structures that are optimized for SSDs and better distribution mechanisms for our persistency layers. Current databases (and file systems) are mostly based on B-tree indexes. For databases, the CAP-theorem is still the result of observation and not a proven fact. I guess that this will be the sector we will see some revolutions first because cloud hosters increase profits if customers use slow languages and decreases costs if the persistency layer is highly optimized. And those cloud companies will be the driving force behind the next generation internet in the same sense that operating system companies were the driving force behind personal computing.
I taught myself assembler when I was nine. But I was living in a time (1981) and a place (not near any early computing epicenter; in 1989 we still had Apple IIe computers in the high school computer lab, and one solitary Mac) and around people, when, where, and to whom such things mattered little. And I was way to content to go outside and play, fancying myself the next Reggie Jackson, albeit smaller and whiter.
So I forgot about computers a couple years later.
I briefly got back into them in the early 90s, writing a little SED and awk in a Unix environment, but basically stayed away – during the Gold Rush years, no less.
When I finally got back into the computer industry, time had passed me by, and as a matter of expediency, I took up web development.
Now, all of that was to say that the only thing I am sure of is that web developers will go the way of the Moa. We’re too slow and too dumb. It doesn’t matter that we can talk equally to real software developers and artsy web designers; what matters is what people pay for: rapid, cross-browser development.
With the IE backlash known as the W3C pushing standards (and I thank them for it, though I now realize it was to my own demise), and the actual device and platform – and browser – soon to be irrelevant, the world will only need two kinds of people: web designers, who speak in Pantone colors and user-experience jargon, and real software developers who write the framework that allows the designers to fire the web dev because they can do it themselves. Maybe the reemergence will be some version of Frontpage or Netscape Designer.
I am now a C# developer, and still I am several layers abstracted from writing “real” code. And it would take only a small-ish change in my company’s vision or the industry in which we work to move my layer entirely into configuration tables.
I think I’d rather play outside.
The rotating disk vs SSD discussion is over-simplified, but the revolution will be real.
On the one hand, JavaScript will take over the world because we all have to learn it anyway in order to do the web part of our work. Qt has JavaScript, the JavaScriptMVC system is just one way to write apps in JavaScript. Node.js is another.
And, of all things, C++ is making a resurgence. The new C++ is easier to use and the libraries have swallowed up the job of memory management.
JavaScript and Ruby and Python are all getting faster. So maybe the SSDs will permit yet another layer of interpretation, instead of running byte code.
Or maybe embedded-or-mobile Go, from Google, will have the combination of expressiveness and the long battery life (from running just machine code) that will conquer the planet. Who knows what’s cooking in the labs?
The mobile world is taking over (sort of) and the ARM processor (which is conquering the mobile world) will permit things that today seem impractical.
Seriously, don’t give up your day job, because you have absolutely no idea what you’re talking about.
No, Arm is gaining. It’s a simpler system to program for, and uses less power. Intel’s days may be numbered.
Javascript is much faster than it used to be.
C++ (and old style C) are gaining ground again.
It doesn’t sound like the original poster is ignorant of the current state of affairs.
But, the current state of affairs can change at any time. Who knows what will be in two months?
I’m the guy who asked for a tl;dr last time. I think I maybe get what you’re saying, now – that sites are going to get faster so people will remove the /new/ slow spots (like always pulling the tallest weed in your yard – oh, now there’s a new tallest one). I suppose that’s a fair thought. However, the pioneer in massive SSD storage is PayPal (biggest in the world I’ve heard, don’t recall the size though), and their code is C++. That’s not to say it won’t go JVM elsewhere. I’ll just drag out the old generic point though, that C++ performs better and consumes less energy than Java / JVM languages, so that’s something in /its/ favor.
As for multi-core friendliness, actor-style (a la Erlang) is the ultimate, but I don’t know of any well-developed libraries for C++ or Java except I guess Microsoft’s C++ one. I’m sure they’re coming though, for all languages, so I personally don’t see that as being a point of distinction either way (I don’t think Java supports multi-threaded / multi-core better than C++; especially not with the new, C++-2011). I don’t know any reason to choose a side in the developer time vs energy consumption tradeoff though.
I was in web development and then analysis for a while at a company doing a fully web-based app (.NET, MS throughout, but multibrowser).
Over time, we learned that disk speed, CPU speed or even memory was not the biggest problem. Component selection, database design, query design, even page design were all huge contributors to poor performance. Yes, it’s obvious, but there is more.
We were rolling out a new large-scale version of the project where overall page response time and thus database speed was now very very important. What we learned from MS was that SQL server (and I would imagine many other SQL database engines) will try and fit the entire database into RAM if there is enough available. If not, THEN your disk speed becomes important. So, if you are fairly small-scale, why won’t your database fit into RAM ?
if you aren’t small-scale, why are you still trying to run some big important database on a single disk ? Or on a single PC?
Surely any half-decent outfit with a lot of queries to handle, especially on a really big database is going to be using RAID for storage at least, if not a SAN where seek times and data throughput are really not the problem.
Quite possibly a developer/team needs to do some careful thinking about why their page is running query after query just to load itself, and optimise that instead of bemoaning disk speed like more power is the only solution. But then if the whole project is geared around spending the smallest amount of money today, maybe nobody is asking why the project was written in a very slow language is running inefficient queries on a poorly designed database running on a badly configured system…
Is switching from rotating storage to SSD’s really the answer to all those problems? I don’t think so. There is no magic bullet, and SSD’s have their own disadvantages when it comes to lots and lots of write operations going on.
If you have a big system with a lot of different pricessors and large memory requirements, why are you running on SQL server? Google, yahoo, eBay, all the big stock brokerages and exchanges, all the biggest banks, even Microsoft for the large server requirements run some Unix like system for big loads.
You should be doing what the really big boys do. Windows doesn’t handle thousands of threads shared among hundreds or thousands of processors well at all. It’s an architectural question. Linux or Unix would be a better choice.
Yes, run the data base in RAM if possible. An optical bus seems to be the current best choice.
Of course we may have different definitions of what constitutes a big system. How many acres or hectares is you server room? (I don’t use a big system myself, but have interacted with and helped prep some big ones.)
I’ve always found the TIOBE index ( https://www.tiobe.com/index.php/content/paperinfo/tpci/index.html ) an interesting measure of the new development being done, as it uses a number of search engines to scour the interwebz to locate how much people are talking about a particular language.
One thing to note is that Java is and has been #1 on the index for quite a while, or a large share second if you group C and C++ together as a single language (even further if you group Objective-C, C and C++ as a single language).
This ignores the larger issue in that most everything ever owned by Oracle has had the blood sucked from it until it’s at best a zombie continuing its existence.
Seriously though, I did a little look-see at the state of Java, and here’s what I got:
*Spring/Struts/JEE is extremely expert-friendly. Looking into web frameworks, that’s what I surmised. Why can’t it be like asp.net MVC? Model. View. Controller. That’s all. Instead there’s ActiveBeans, JohnnyBeans, StatefulBeans…. so very very many language constructs to learn and you don’t even use half of them.
*No one likes using JSP.
*J2ME is dead. Compared to tinyclr, its cost and systems requirements are just insane for the 1.4.2 functionality—no wonder no one uses it. Take a look for the j2ME jobs on dice.com
*J2SE embedded requires a ‘nominal licensing fee’ which from the android lawsuit looks to be about 10% commission, ontop of their requried 32 megs of ram.
*Google is getting sued by Oracle right now for damages in the billions from android—the best thing to happen to Java since Java 5.
* getting new features such as Lambda expressions into the Java language is a snails-pace endeavor. They’re 2 years behind many good .net features, and only getting further behind.
* Most of the good open-source java additions have found themselves kicked-off of Oracle’s servers. (swingx, opencable)
Which leads quite a few folks to this sentiment: We *LOVE* Java as a language. As a platform though…not so much. As a platform, all I see is JavaFX 2.0 in terms of any direction Oracle is taking things….and I’m not impressed with the development and nurturing its getting compared to Flash 11 and Silverlight.
They’ve been less than helpful to their open-source community, and they have no sense of direction with Java as a company. Compiled PHP, asp, accelerated python…. but Java is soon to be in the same academia graveyard as its Smalltalk ancestry.
Like, where’s Linq or entity framework equivalents in Java?
http://stackoverflow.com/questions/1083080/what-are-the-java-equivalents-to-linq-and-entity-framework
[…] of RSS delivered to me this morning a link to a new blog post by Robert X Cringeley. The post, The second coming of Java got me […]
My organization uses Asp.Net and C#. C# is maturing into a very interesting language (lambda expressions, linkq, etc.) But what makes web development less painful is the rich framework. The code can be precompiled into byte code before loading on the server and then compiled at execution into native code. The native code compiler uses knowledge of the server (memory size, number of CPUs, etc.) to optimize the code.
As a previous writer noted, writing efficient code speeds up the page to page response time and a rich framework takes a lot of the work out of writing the code.
For many developers in enterprise organizations (banks, hospitals, large corporations), they have been developing in Java and/or Asp.Net since about 2000; so it is not coming around for them again.
[…] of RSS delivered to me this morning a couple to a new blog post by Robert X Cringeley. The post, The second entrance of Java got me […]
[…] of RSS delivered to me this morning a couple to a new blog post by Robert X Cringeley. The post, The second entrance of Java got me […]
[…] of RSS delivered to me this morning a link to a new blog post by Robert X Cringeley. The post, The second coming of Java got me […]
Cringely,
Accoridng to Steve Souders, even if your server time was 0 to process a request, the average user wouldn’t notice. Most of the time time for websites is transportation and rendering.
http://hanselminutes.com/288/googles-steve-souders-creator-of-yslow-on-web-site-optimization
Best,
Alex
I doubt the next fronier will be auto-directed flight the same as I doubt the value or likelyhood of a return to java.
Computers were a luxury but costs dropped and now computers are common. Memory was a luxury, now one uupgrades to as much as is available. Disk space cost a fortune, now google and others give it away. So what we need is a new cost reduction that makes something disposable. What? Computer programs. Except that all the Java, Javascript, C++ and other “experts” in programming have an interest in preserving the status quo. A return to java just continues to conserve the existing devlopment paradigm instead of geTting rid of it – after all, the existing programming paradigm has existed since programming first began – making dinosaurs of programmers and their methods. Time for a change but, just like using petroleum products for motor engines, there are too many vested interests who will prevent the possible!
So how do you program a computer without a programming language?
He’s talking about using an AI assisted natural language programming system, probably coupled with a visual system for interfaces. It would be optimized by the system.
This would allow ANY domain expert to create a program off the cuff to solve any type of problem, ala Star Trek. Then, specialist programmers would become an endangered species very quickly. Computer Scientists yes, Programmers no. Perhaps that’s why it hasn’t happened.
But, system administrators would still be needed.
This is possibly the most ill-informed turd of an article that I have read in a long time. There is no reason that you, or anyone else is forced to choose one language over another when they both clearly have different uses. Perhaps Bob, you would be better served spending your valuable time finally slogging through that copy of ‘Teach Yourself Visual Basic in 24 Hours’ and then true productivity can begin!
I think everyone here is missing a point
Read through some 140+ posts and the big assumption is the need to generate this thing called a ‘web page’. Great thing about that is anything less than 500ms is probably ok. You can optimise your cache between Db and service layer. Optimise each in turn and scale to Facebook, google or beyond. Who cares if the final app server taking all this runs a scripted language.
But what about the need to respond in 100ms, 10ms even 1ms? What if in 2 year time interfaces are 3d real and bugger all to do with web pages? When html5 fulfils it’s ambition and becomes an app language that consumes high speed data feeds is persistent.
Bob, As a great fan of books and column, all give you the benefit of the doubt, but I’m not buying this post. First, Ruby and Java are two separate things, not just that Java is a platform, but Java is now the old, staid, conservative, slow moving, Oracle-owned behemoth that you can’t go wrong with (like IBM). Ruby is a whole separate path, a different branch, and never the twain shall meet. Sort of. In other words, the Perl hackers moved to Ruby, and started slinging out apps 7x faster than their corporate Java counterparts. I talk from experience, having this very day spent most of my time restarting the @##$$$$ web server due to a huge refactoring effort. Now I have dabbled in RubyOnRails, but I see the light. With Java, the hut/platform, you need a hack upon a hack to get stuff to work, i.e. Spring, EJB, what have you. What a nightmare. So you fix all your bugs in using the bytecode compiler, then have to fix all the bugs in Spring config. This is why programmers cast an appreciative i.e. at clean architectures, though new, like RubyOnRails. And maybe that’s a good thing, because it’s new, it doesn’t have all the years of “cruft” that Java frameworks like Spring have. “Let’s do everything in XML config files because that’s the hype of the day. ” Yes, this is why Java is called J-Cobol.
So to make the point. Java, Ruby, Ruby on Rails, very different things. Nobody is going back to Java, it will just slowly plateau, like Cobol. Is oracle going to create excitement? Give us closures, that, for crying out loud, Javascript has? Doubtful.
The disk drive? Where are we Cringeley? 1996? Faster disks make dynamic languages more appealing, if anything , to Rubyists. Restarting my appserver is CPU bound, crunching through thousands of lines of code, of logic. Sure, faster disk will help. But this is a bandaid.
Signed,
Very grouchy Java programmer saying “C’mon kids, get on the grass! Take it! I’m moving to an island. Have fun!”
First of all, you are wrong that “we’ve been moving away from Java and .NET for web development and back to interpreted dynamic languages like Ruby.” Forrester data shows that Java and .NET are used consistently. I haven’t seen data to support that claim. Ruby on Rails and the productivity of other frameworks is overhyped and underdelivers. Heck. I could write a simple Web form database application in 3 minutes with Java struts. The time consuming part of Web development is tinkering with the messy combination of HTML, Javascript, and CSS. I am not defending Java. I wrote a post that Java Is A Dead-End For Enterprise Application Development last year. http://blogs.forrester.com/mike_gualtieri/10-11-23-java_is_a_dead_end_for_enterprise_app_development
These new scripting languages and frameworks are only incrementally superior to Java or .NET directly – not enough to be a breakthrough.
The right direction was the late 80’s and early 90’s with 4GL’s. 20 years later we now have the technology to make visual development and model-based approaches work. However, the new generation of developers says whoop-de-do when they see a grungy framework can take a html text field and push back into a database.
So, an optimization of scripting languages and frameworks is not even close to Java’s second coming. Rather, it is a sign of it’s final fall.
As an old-Java hand and a current flash devotee, I confess the rationale that faster storage motivates higher-performance programming languages hadn’t occurred to me. I can tell you that in the early WebLogic days (when folks argued we were nuts to have written our middleware infrastructure in Java), we did use the argument that latency and throughput were generally dominated by network, database, and storage costs rather than the application server and app logic.
Storage is definitely going to get ~10X faster as we break the cost barrier to broader flash deployment (Pure Storage’s raison d’etre), but I suspect that for most app’s, the execution speed of the app code itself will remain relatively insignificant when compared to what the app is doing (web service invocations, database access, and so on).
Better IMHO to focus on languages that make it as easy as possible to craft _and_ maintain your applications. More important than the language itself is the craftsmanship of the programmer, but I confess I am intrigued with more functional approaches as an easier path to more highly parallel applications (e.g., Scala, Clojure) and the ever higher-level frameworks for simplifying app. construction. Very nice to see the breadth of language innovation going on today, and again as an old Java hand, also to see new programming languages written on top of the JVM.
Just my $.02
[…] X Cringely’s column is always worth reading. Recently he wrote about The Second Coming of Java, in which he asks if database servers switch to SSDs and disk I/O latency is a thing of the past, […]
[…] to Robert Cringely (https://www.cringely.com/2011/10/the-second-coming-of-java/), this is bound to change once solid state storage becomes pervasive enough. With their access […]
Well I’m just catching back up, but I’d say you’re wrong.
Java used for webpages has always been slow as molasses as well. I have yet to come across a performan ASP or JSP page that is any where near the performance as the average Ruby/PHP/Python websites, and that has nothing to do with disk speeds or database accesses, though they probably don’t help anything either. (And yes, I’ve written some pretty big database web apps in PHP.)
Another reason you are wrong is that at least Python has at least as much functionality as Java and much better performance in every aspect. So don’t expect Java to ever really make a comeback; but another tool to take over that meets the performance needs if there becomes an issue.
Java was just a pothole in the road. One that will eventually be filled in so that we don’t ever hit that bump again.
Plus, Python/Ruby/PHP can each use the parts written in the other language as part of their own program. It’s just a question of the amount of memory you have available. And, unless you are an expert, the Python/ruby parts will run faster than the Java, and nearly as fast as a C++ program. Faster if the C++ programmer isn’t well optimized.
Gotta love those shell abilities. every program is a command in your language.
The main face of the cards is young and trendy women. As long as you like the bag, as long as you worship trends.
Generally, most apps still don’t care about performance … almost everyone I know about is looking to get great cutting-edge features without having the cutting-edge knowledge and experience necessary to brew it up from scratch.
I can tell you, it’s a delicate balance … the more a framework does, the more it walls the users off from doing the one exceptional edge case the way they want it to work.
People moved from Java to Rails (and Ruby) to get productivity and a more expressive language. Wide use of SSDs isn’t going to make Java any more productive.
Meanwhile, the same ethic that moved people from Java to Ruby is present in the “no SQL” database approaches, which often bypass the performance issues your are talking about by keeping data quickly available in just the format its needed in … without doing multi-way database joins and all the rest of data mangling that occurs in a traditional multi-tier enterprisey app.
The best thing those of us in the Java world can do is look to see how we can improve productivity without sacrificing performance. That’s a large part of what Tapestry is all about.
Hat tip to Howard about the ethic of the new NoSQL movement (which Cringely apparently has no experience let alone much knowledge about). Also someone else here in comments made some good points about languages such as how easy it is to maintain code (readability, writeability, etc.). I find value in Ruby for its succinctness (it doesn’t requires as many lines of code to get something done). Java is too verbose and heavy.
I agree that with SSD slower scripting languages may disappear but perhaps Java is going to be replaced by .Net on Windows and Objective-C on MacOS/iOS anyway.
They are fast enough, dynamic and reflective and the frameworks based on them powerful and complete…
[…] Cringely has an interesting article predicting the return of Java as a core language for the web: The second coming of Java. The flow of his argument is that Java is much faster than interpreted languages (such as Ruby, […]
Very good and insightful read.
Though, how can you not name PHP in your story.
Ok, the new kids came with fancy stuff but the real stuff running half of the web is still PHP…
I would also say that the need for threading came way before 2005!
Just a finer point: Groovy actually runs in the JVM — it doesn’t have its own runtime. Since it’s essentially Java, it’s a bit off to lump that in with Perl/Python/Ruby/PHP when arguing in favor of Java. Also, I think all these higher level languages will continue on their growth track anyway since CPUs continue to get faster along with storage, and developers like easier ways of solving problems. The tower of babel will keep on rising as Moore’s Law trudges forward.
Yeah, sure: given better, faster technology (SSD), developers then drop Ruby and choose a lower level language (Java). That makes a whole lot of sense, Mr. Cringely.
One thing I have noticed working with other programmers is that the above average programmers have a toolset. They use Emacs/Vim/Others for editing, Java/Ruby/Python/Others as their programming language of choice and SVN/Git/Mercurial for source control. They invest a lot of time in mastering their tools and don’t like to give up using them easily. So if SSDs become commonplace then these guys will invest their time in adapting their tools to new conditions and not the other way round.
I’ve been away for awhile and am catching up on Cringely articles but this one really made me laugh, it’s so totally missing the point.
Moving away from disks really only means people can do bad things at somewhat larger scale. That means your startup can get bigger before you get to redesign your software in order to remove bottlenecks. It doesn’t mean you’re not going to hit the same problem at some point. This extra breathing space is likely as much of a curse as a benefit: The bigger you are when you decide to redesign the harder — more expensive — it becomes to change things. It’s better to run into scaling problems early so you fix the architecture when it’s still cheap to do so. More on that in a minute.
Slow code execution hasn’t really been the problem for a long time. It has (at least in the Age of the Internet) been a lot less expensive to throw hardware at the problem than developers. The trick is making sure you can continue to throw hardware at the problem indefinitely.
Faster storage (especially databases) will improve single-instance scalability, no question about it. But it’s a matter of degree, and not even that great a degree. You’re still not going to be able to run the likes of Amazon.com on top of a single MySql server even if you’re running on RAM, to say nothing of SSDs. Faster page rendering runtimes aren’t even interesting in that context.
And here I will point out an example of both the limits of single-instance scalability and the problems with single-instance optimization: eBay. Those of you who have been around awhile may recall a time when eBay suffered a series of multi-day total outages. This happened because they were running their entire business on what was effectively One Big System. As they grew they took the easy way out: Upgrade the system to a bigger, faster system whenever the old one was no longer up to snuff. It was not very long before they were running on what was literally the biggest, fastest system anyone could build.
This was easy to do, and it was relatively cheap. It was disastrous in the long term. Even if they had not had a system failure that took out their entire business for days at a time, they had already run out of headroom for further expansion and performance was clearly suffering. There were simply no bigger systems they could possibly buy. What’s more, they were at that point so big that migrating to a new system was going to be very, very tricky. It ended up being obscenely expensive.
If they’d hit the limit when they had a few tens of thousands of customers, instead of tens or hundreds of millions, it would have been a lot easier to fix. If they’d hit the limit earlier they would have had redundant systems already in place and could have weathered an outage by shifting load, impacting a relatively small number of customers. They did eventually do this, but it cost a hell of a lot more than it would have if they’d hit the limit early.
So there’s an example of why migration to SSDs might be bad for you, rather than good for you. But let’s get back to web page rendering.
Few here may recall it, but in 1997 when companies like the one I worked for (ATG) were starting to use Java to build big systems Java was dog slow. This was before JIT, or HotSpot, or even modern garbage collection. C++ was on the order of ten times faster than Java. Many people thought we were crazy to use Java, that you needed C or C++ to get the performance you needed. (Cerf even claimed at one point that dynamic page generation in general was going to be impossible at scale, pretty much at the same time that many people were already doing it. D’oh!)
My company did what computer scientists do to deal with that: We made it as easy as possible to throw more hardware at the problem. If we were going to be ten times slower in raw execution speed, then if it was possible to throw ten times the hardware at it we were going to be just as good, and Moore’s Law makes that more and more practical every day. Even by the mid-1990s big clusters of cheap machines were becoming popular (reference Hotmail before Microsoft bought it, built on top of thousands of little BSD PCs).
Page rendering per se was the easy part, of course; it was always pretty easy to just parallelize the renderers. The hard part was the database because it’s so hard to build coherent applications without a single consistent database. But it was — and is — pretty darn easy to remove the database from almost all page renders via caching if you tweak your architecture a bit.
Web page rendering data requirements almost always fall into one of two categories: User-specific data, and shared data. Shared data is always easy, you just make a cache that all the rendering processes can pull from. You load the cache from the database once per application server instance and then the database is out of the question. User data is harder, but it becomes a routing problem; as long as you can get at the user data at memory speeds rather than network or database speeds you’ve got no problem. So you make your server infrastructure route page rendering requests to the same application server instance every time, allowing you to cache user data in that instance. You load once per user session, rather than once per page render. And since all of this stuff is in RAM, exactly where you want it, it’s very fast to access.
Voila, you reduce database overhead for rendering operations by orders of magnitude and your page rendering is lightning fast.
It was designs like this that made the web scale on Java, it wasn’t faster JVMs. C++ was much faster out the door but over the long term algorithms beat optimization, and the Java folk had more reason to work on algorithms early. Java eventually got faster but that only made the designs work all that much better.
So when you talk about using Java versus C++ versus Perl or Python or Ruby or whatever the performance of the core runtime is largely immaterial when it comes to building a big, performant website. Faster databases are really not going to make the difference between page rendering languages, we can already scale those easily.
The trick in using any of them at scale is not optimization; you’ll get degrees of improvement if the hardware is faster, if the database is faster, if the language runtime is faster, but they will all be limits again fairly shortly. When you want to scale you want to eliminate bottlenecks and you can do that with almost any language.
This is why Google and Amazon have put so much effort into distributed databases, and those distributed databases have a whole lot to do with why they are winning.
jim frost
jimf@frostbytes.com
รายได้เสริมทางเน็ต…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
Unsure…
Novices might be confused about the details however…
Android makes this prediction a no-brainer, but nice flame-bait anyway champ.
reformas de pisos…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
Design…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
trend fashion|trend fashion market|trend fashion online|trend fashion outlet…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
Program 4681…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
autoblogs seller…
[…]I, Cringely » Blog Archive » The second coming of Java – Cringely on technology[…]…
informative read.. I’m all new to JAVA developer community and so was looking around stuff that may acquaint me with JAVA programming. I’m enrolled in https://www.wiziq.com/course/1617-core-java-for-beginners-icse-students and people out there adviced me to surf around that may help in visualizing a larger picture worldwide.
top ten blogs in your niche and…
find out what they are writing about. chances are that they will have a good of which topics you should be writing about. make sure that you do not copy people’s content though. this will make you look bad, as well…
buy pamela mann online…
[…]I, Cringely » Blog Archive The second coming of Java – I, Cringely – Cringely on technology[…]…
[…] to speed it up. I could say this about PHP as well. Does their slow speed limit their future? Cringely has predicted that slow script languages will lose relevance when databases become faster: There’s a problem looming for Ruby and Rails (Python, Groovy, etc.) and it is that web frameworks […]
[…] article was originally posted by Robert X. Cringely at I, Cringely blog last year. Has this prediction come true? What do you think? Share your opinion with […]