The Struggle To Keep Java Relevant
snydeq writes "Fatal Exception's Neil McAllister questions Oracle's ability to revive interest in Java in the wake of Oracle VP Jeet Kaul's announcement at EclipseCon that he would 'like to see people with piercings doing Java programming.' 'If Kaul is hoping Java will once again attract youthful, cutting-edge developers, as it did when it debuted in 1995, [Kaul] may be in for a long wait,' McAllister writes. 'Java has evolved from a groundbreaking, revolutionary language platform to something closer to a modern-day version of Cobol.' And, as McAllister sees it, 'Nothing screams "get off my lawn" like a language controlled by Oracle, the world's largest enterprise software vendor. The chances that Java can attract the mohawks-and-tattoos set today seem slimmer than ever.'"
There are some good ideas in Java, but they're drowned by the inconsistent implementation, and Oracle will most certainly not make that better.
java can FOAD, as can the lecturers around the world who bought into sun's bullshit.
for academics there's haskell, for professionals there's C++, and everyone else can suck my dong
Maybe he's barking up the wrong tree. The best young programmers I know don't have any piercings or tattoos that I can see.
I have no data to support this, but I have always thought the best of the tech crowd were too busy being into their tech to get into the body modification scene. I don't think this is different now than it was 30 years ago.
On the other hand, there's a lot I can't see (and in many cases, thank goodness!)
Someone emulating the punk movement of 40 years ago is "cutting edge"? If that's his idea of "cutting edge, hot talent", he needs to stop thinking he's in the movie "hackers" and he's looking for Angelina Jolie. Associating dress or style with talent is stupid no matter if it's "you wear a suit, you're smart" or "you've got 3 piercings and drive a crotch rocket you're the next big thing"
Demanding innovation never works. Innovation just happens from a need, not a demand from some Oracle guy who desires it and thinks it'll be good for marketing. There are interesting things happening in Java. Scala is certainly interesting. I haven't used it myself, but I'd love to try it if I had a good project to use it in.
AccountKiller
All those "COBOL is going to die" people are silly and not grounded in reality. Plenty of talented developers see its power and use it.
let me get this straight... Java needs tattooed programmers to be relevant? Snarky comments about Cobol aside, Java is the current programming workhorse. It provides the greatest infrastructure and options for scalability. Since when does fashion dictate what technology is best for the job?
I make a lot of money working with Java. I have piercings. I've been known to have hair in a primary color.
Seriously though. Android applications. Eclipse. Adsense, GMail, Wave - in fact, just about every big Google web application (yes, even the client side stuff is written in Java and translated to Javascript). Openfire XMPP. Tomcat. Geronimo. ActiveMQ. Azureus.
You can badmouth Java all you want, but performance and tooling are excellent and there seems to be an infinite supply of libraries and sample code. It runs in lots of different places. There are 100% open source implementations. You can compile it to native code. You can run it in the CLR.
I know it's trendy to play with Ruby and Python, and that's fine. I'm a big fan of Scala, which runs on the JVM. I believe Twitter's backend is at least partially built on Scala. El Reg, I know, I know.
Anyone who thinks Java is fossilizing needs to give their head a shake. It's everywhere, and it's being used in very diverse ways.
If that doesn't excite this mythical "pierced programmer", then said idiot is too busy practicing the Hipster Doctrine - studied disinterest.
With syntax like this:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
No thanks.
Hey KID! Yeah you, get the fuck off my lawn!
Does.it.allow.you.to.do.useful.things.without.typing.a.classpath.fifteen.layers.deep?
If.so.it.might.be.exactly.what.is.needed.to.make.Java.an.appealing.language.for.programmers.with.fresh.ideas. Else.it.won't.do.the.trick.
The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
Popularity isn't a good measure of relevancy?
Java is described in TFA as a cutting edge language from the 90's having somewhat lost its edge since them. Java was never cutting edge. It's always been technology from the 70's - mostly a Smalltalk derivative. Java always has been about been about compromise between being more advanced than its mainstream predecessors (C, Delphi/Pascal...) and keeping accessible to the average programmer.
If anything, in the last 10 years Java has succeeded, turning from a questionable language for client-side applets to a stable and widely used environment for serious server-side apps. Unless Oracle are totally braindead they will keep it moving in the same direction, slowly moving forward and not confusing the average programmer with too much Haskell/Lisp/Perl-like complicated stuff.
Java was brain-dead at birth. SmallTalk is the cleanest of object-oriented programming languages with a simple, clean syntax. A good programmer can develop an interpreter for a language using SmallTalk in a weekend. Try that in Java and your head will explode due to the inherent complexities of the language. Java, at best, is C with bytecode execution rather than native machine code.
None. Learn algorithms, data structures, and theory. You can and will change languages a half dozen or more times in your career. Theory works for everything. And the good employers know that.
I still have more fans than freaks. WTF is wrong with you people?
What they had better NOT do: treat it like Solaris. You're only allowed to use it in production if you have support, and the only support they sell is a site license which costs $25 * the number of people in your company + the number of users for your application.
I'm not being entirely silly. I have an application for which I would have been willing to pay for Java support. But the only support Sun would sell us (late 2009, when they had already started Oraclizing) was an unreasonably expensive site-wide support contract.
I don't get it, why you want the java language to die? I programming Java now for 4 years and the only thing I'm missing are closures.
The core of Java is very robust, you have class, enums and interfaces. Generics are do what they are suppose to do (and they are backwards compatible). Threading is integrated in the Java with synchronized and the threading API. In addition, Java have neat features like annotations and anonymous classes.
Reflection is very easy to use, but the exception model is perhaps debatable.
The tools and the libraries are top class. Maven is my favorite killer-tool for Java.
If Java get closures, what are you missing in Java? It's maybe not the future but Java is a very robust and consistent language.
http://www.mueller-public.de - My site http://www.anr-institute.com/ - Advanced Natural Research Institute
This question is ask as if Java is somehow imporant in and of itself. It isnt. Neither is perl, or PHP, Phython or gasp - C++ or even C. Throw C#, F# and VB into that group as well.
These are tools. We (as in devleopers) should simply use the right tool for the job. If thats Java - then okey-dokey. If its C#, then groovy, if its C++ then thats ok to. Hey, I still use assembly language for a few things.
Do real engineering work folks! Pick the right tools for the job based on the business and technical requirements.
-Foredecker
Jibe!
I was just by the Apple Store in Palo Alto, CA. There are people lined up for the iPad launch, some sleeping in tents. Three TV stations are covering the waiting line. Reminds me of Apple's "Lemmings' video.
Actually, the state of the art in programming languages still sucks. The mindset that "it has to be unsafe to go fast" is so deeply entrenched in the C/C++ community that fixable problems aren't fixed, and as a result, millions of programs still crash every day. The "virtual machine" thing has resulted in ".NET", a virtual machine for x86 only. The "scripting language" approach is useful, but fanatical late-binding coupled with naive interpreters makes for very slow execution, as with Python. Few mainstream languages do concurrency well; the notion that concurrency is the operating system's problem results in pain for all concerned.
Looked at that way, Java isn't bad. Memory safety is good. There are efficient compilers. There's some language support for concurrency. It's not too weird, and not too theoretical. Java is mediocre, but better than most of the alternatives when you need to get large amounts of work done.
I went from Smalltalk to Java in 1996 and didn't like its implementation. In Smalltalk, EVERYTHING inherited from TOFU (Top OF Universe). Not so in Java. Haven't done it for some years, but I thought it wasn't very elegant.
The enterprise sector is spectacular at painting itself into corners. Java isn't the first instance of that, and it certainly won't be the last. So yeah, Java isn't going anywhere as far as enterprise is concerned. But neither is Cobol or Fortran or many other moribund technologies.
The rest of us can sensibly let all of that die.
As for inconsistencies, how many mutually incompatible versions of Java are there? How many revamps compared to languages stewarded by standardization bodies or other neutral actors? (C has, what, 3 over it's 40 years of history?)
I'd say that the best thing Oracle could do for Java would be to give it to ISO, but I think it's 10 years too late. I'd love to be surprised, though.
It's no longer language constructs, data structures, or algorithms that are cutting edge. Innovation has moved on to more fertile pastures. Yes, those who build software tools, libraries, IDEs, and compilers will continue to innovate.
Hmm.. language conststructs, data structures, or even algorithms are simply much harder to innovate in since they're so basic to software.. but I just don't agree there's no innovation happening in these areas. It just happens with less frequency because it's harder. The payoffs are likely of much higher impact though than anything of what you listed.
The rest of your post I think I agree with. The idea of the article seems to be something to to with trendiness or "cool". That's great and all, but I rather agree with your approach that it's about the interesting problems, not the technology.
AccountKiller
I believe what would be significant is to improve the JVM bytecode, to add some additional instructions. Tail-recursive calls is an example. There are some others. If the JVM specification was improved (and implemented by Oracle & other major JVM sources), several new languages (or language feature) could flourish. And the important part is not the Java language; it is the JVM. Better languages (Clojure, Scala) can be implemented for the JVM, and if the JVM was improved, even better languages could be experimented, all able to use the legacy of Java. Regards.
And you are aware most job offerings tend to take the kitchensink approach? "Lets include every word we ever read and then demand 4 years experience with it. iPAd, senior engineer!".
Also (java) matches javascript.
I know you are blowing smoke because PHP is not listed. Oversight or some other reason?
Oh and wouldn't your query also match "Need highly skilled X developer who knows enough Java to migrate us away from the steaming pile of crap?".
Or indicate that there are no good Java developers to be found?
What about companies that offer you a nice cup of java every morning?
I know that a job count for PHP has to discount those companies with .php in their url.
In fact, does posting a few queries to Monsterboard not tell you anything more then that you have to much time on your hand?
MMO Quests are like orgasms:
You may solo them, I prefer them in a group.
The history of Java is very instructive for any aspiring professional coder.
Management: Damn these irreplaceable "programmers"! Look at their goddamn salaries. We need to standardize technology, remove the sharp edges, and train people who understand! Sun has got the thing.
Programmers: Heh. We're going to be spinning out gotta-haveit ETLA frameworks faster than your Indian developers can say 'Yes sir! Right away sir!". Good luck with that. Now bend over and take another load of XML. *cracks-knuckles*
Live by the marketing hype, die by the marketing hype, Sun Java.
Business. Numbers. Money. People. Computer World.
Congratulations, you reinvented ColdFusion.
Table-ized A.I.
No, GOOD developers will follow the GOOD jobs. Now try resorting the list by both the average quality of job and the most elegant syntax offered to do just that with the given language.
It's all about Balls - risk taking, competition, innovation.
The computer is a new and novel device. It is probably more important than the wheel, perhaps less important than fire (with all the chat about cooking being a primary driver for evolutionary change in humans). Your view of the correct set up and instruction set for computing may be correct, but surely you would be the first to admit that if it is then you have been strikingly prescient. In my view the use cases for computers are far from decided, and while it is true that complete equivalence of all Turing complete instruction sets would enable any language to be used to do what any other language does I think that we want tools that are convenient and efficient for a particular task.
So, 70, 80, 100 years of diversity and then convergence; at least! The more that the energy of change is put into the system the more diversity in the ecosystem. Eventually it will settle down and a standard set of tools will emerge, but not yet.
--------------------------------------------- "In the end, we're all just water and old stars."
'Java has evolved from a groundbreaking, revolutionary language platform to something closer to a modern-day version of Cobol'
So Java has gone from immature, constantly changing and buggy to stable, reliable and fast? I can see how that would be a problem for somebody that wants to attract unexperienced scriptkiddies to a programming language.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
Java has evolved from a groundbreaking, revolutionary language platform to something closer to a modern-day version of Cobol.
The whole reason why Java enjoys the widespread popularity that it has is precisely because of that. Most projects aren't made by "trendy" guys in a basement somewhere - they're made by corporations, most of them not exactly small, who value predictability and the peace of mind that comes with it over new & trendy.
The advantage of Java there is that it is a well-known quantity, and it has been in that state for a while, with few changes. There are many development tools, all top-notch, with code editing features unmatched by IDEs for any other language. There is a huge amount of useful code in third-party libraries, most of them under liberal (free, non-copyleft) licenses. There is a large workpool, and it's going to remain that way for some time to go.
There's nothing wrong with that. It's a niche that has to be filled, and Java is doing remarkably well in doing so. Don't fix what's not broken.
And in the meantime, the trendy guys always have Groovy, Scala etc to play with.
Java (specifically J2EE with an Oracle or similar database back-end) seems to be second only to .NET/ASP.NET/C#/VB.NET with SQL Server in terms of jobs I see when I look on the job sites here in Australia.
Plus Java is still the #1 mobile language. Not just on Android but on the 1000s of feature phones out there running various incompatible versions of J2ME for applications (I have owned 3 feature phones, all of which have supported Java apps in some form)
Java on the desktop is dead (if it was ever anything but stillborn in the first place). Java for client side web development died and got replaced with ActiveX, Flash and other technologies.
But Java in the enterprise and mobile spaces is far from dead.
If anything, Oracle should be pushing J2EE even harder (Oracle is the dominant choice of database to use alongside J2EE)
Both are a problem for code maintainability. Java will never have dynamic typing. It's not that it is hard to implement (e.g. look at bsh an interpreter that is still, basically Java), it's that it has way to many drawbacks. If you want to have that, use a scripting language (and don't use it for large programs).
"It was never groundbreaking and revolutionary."
Of course not, it was not because it was explicitly designed not to be all that. It was supposed to be a small well defined language that brought good OO practices and GC to the mass market of C/C++ programmers - hence it syntax. For this to happen, it needed also to be relatively fast during execution.
As for all the politics, I am highly surprised by the way you think the market moves. The development market moves because it sees something useful. After that it looks at the license yes, and Java never had much to scare away developers except hard core purists (read: the linux crowd - and they certainly had good reasons for shunning it).
"But betting on Sun was the wrong move: Sun screwed up the language, screwed up the toolkits, screwed up the implementations, and made Java one of the most proprietary languages in existence.
In the end, all Sun managed to produce was the only thing they have ever been able to produce: bloated server side software.
Good riddance, Sun, you won't be missed."
Now that's just trolling. I'm very surprised that you get modded up when that kind of junk is in your post.
There are more things, these are just those that irk me most. I love the idea of applets, webstart, and portable bytecode, and I'd love to see Java succeed, but the language is so badly done I can't see this happening.
Who cares if Java is cool or not? It's getting a lot of actual work done. In fact, there's a crap load more stuff getting done in Java than Ruby or 'The Cloud' or whatever is supposed to be cool these days. In the end, 'coolness' has absolutely no engineering benefits whatsoever.
The fact that Java has lasted as long as it has and is as prevalent as it is now is testament to its ability to GetShitDone(tm). ...along with a lot of other useful languages which are useful regardless of whether some hack or slashdot group-think thinks it's trendy or not.
Java is not and never has been groundbreaking and revolutionary. All the features people used to tout about Java back in the day were things that existed before it. A lot of smart people have poured a lot of effort in research related to Java, and the platform has grown stronger as a result, but even most of that seems to be just re-implementing existing ideas for Java.
However, that by no means implies that Java isn't relevant. It has certainly taken the software world by storm, and, as far as I can see, Java is still going strong. People are taking Java courses left and right, either to learn it for the first time or to deepen their understanding. There are so many Java projects that it's hard to find something for those in our company who would prefer to use something else. Even with .NET being backed by a company whose products usually get adopted as a matter of course, I don't see nearly as much demand for .NET knowledge as for Java. Java irrelevant? It sure doesn't seem that way to me.
Please correct me if I got my facts wrong.
If Java get closures, what are you missing in Java?
Others have listed other reasons, but let's see...
It's statically typed. Understand, I don't mind strict typing (Ruby is strictly typed), I just get annoyed at having to declare variable types all the time.
The generics is a mess -- as u17 says, it's a hack, and it's also incredibly difficult to understand, and requires a lot of heavy thinking and planning about types and interfaces. Compare to what you get for free from a language like Ruby.
And most of that mess is in the name of backwards compatibility. Excuse me, but do we care that much about backwards compatibility? I suppose it made sense at the time, and I suppose I can't blame them, but it cripples the language today.
Java's threading API sucks. Aside from the overhead u17 pointed out, it's still the same old threading API. Compare to something like Erlang.
Reflection? Easy to use? You've obviously never used a language where it's actually easy to use, like, say, Ruby.
Aside from closures, it's missing Lisp's macros, which take that idea to a whole other level.
And the syntax is brittle -- no operator overloading, for one -- it'd be very difficult to correct any of what I've just said with a library. For example: In most sane languages, a == b has well-defined semantics of comparing the values of a and b. In Java, it compares the values for numerical primitives, and the references for everything else. Because of this, you end up with Object.equals(), which is much more verbose and cumbersome to use, and incurs boxing/unboxing overhead when used with primitives.
Yet despite all that, Java does do some overloading of its own with Strings -- it overloads +, but not ==.
So you can imagine, just about anything interesting I'd want to add to the language, which would be an internal DSL in smarter languages like Ruby and Lisp, would be a mess of verbose library calls in Java.
Similar problems: You can use enumerations and integers for a switch statement, but you can't use strings. Because Java lacks any meaningful way to modify the primitive types, and isn't flexible enough to override case itself, you can't fix this to do what you'd expect, which is for it to use Object.equals(), or even a more verbose version that allows you to pass a Comparator.
What else...
No keyword arguments, and no sane way to add syntax for them. No built-in hash type, and thus no hash literals. Ruby doesn't have keyword arguments either, but its syntax is loose enough that you can use the builtin hashes to replace them.
No symbols/atoms, either.
No good interactive shells. Then again, do you really want an interactive shell in a language that's that friggin verbose?
Hell, verbosity deserves a category of its own. Just look at Hello World in Java. Compare to Hello World in pretty much any other language.
The built-in array type, aside from having an unnecessarily verbose literal, is also a fixed size. I suppose it's useful to have a fixed-size array, but 99% of the time, that's not what you want. Make ArrayList the default array type, have things accept Lists (or better yet, Collections) rather than arrays, and provide syntactic sugar for creating ArrayLists instead of Arrays, then tuck the actual Array type deep in some system library so programmers don't have to bother with it again... but like so many of these problems, you can't actually solve it that way without breaking the language.
Then again, u17 points out a potential problem with that -- ArrayLists, like all Collections, must store objects (and thus references) rather than the actual values. That means ArrayList<Integer> is necessarily slower and bloatier than int[] (by much more than it should be), and there's again nothing you can do about it. Contrast to Ruby -- you'd expect a construct like [1, 2, "three", 4] to be even worse, but it's actually better than an ArrayList of [1,2,3,4] in Java -- I believe it uses a
Don't thank God, thank a doctor!
Despite what a lot of people think. The games market on PC/servers etc is pretty small. Sun was wise not to push it really. For games you would need Xbox..etc to support a jvm for it to really make sense. And that will not happen for a number of reasons.
....)
However there is lwjgl (opengl/openal binding for java), and most common higher level languages can run on top of a JVM these days. (Jython, JScheme, Kawa, lua,
The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
Agreed. If you have the second most popular website in the world serving over 400 billion dynamically generated page views per month from a backend of over 30,000 servers, you absolutely do not want to rely on PHP to serve those pages for you.
This is the same old argument over and over again. Facebook and a couple of other large sites building on PHP don't work the way they do because of PHP, but despite being build on PHP. There's a lot of engineering effort put into those sites, with a not unimportant share of that devoted to things having nothing to do with what PHP handles. With such engineering effort being poured in, Facebook could have been developed in assembly or COBOL, neither of which would have been prove that they are inherently suited for such environments.
Also, don't forget that Facebook is migrating to their C++ based hiphop toolchain and have build their own internal framework, a framework that resembles the Java EE stack in a couple of ways and is NOT available to the general public. The kind of PHP that Facebook does is NOT your typical 'phpfreakz' kind of PHP that is most commonly practiced.
I've also personally talked to the lead developer of Hyves -- the Dutch version of Facebook with some 12 million users -- and he said 'PHP is a little shit language' (PHP is een kut taaltje). I understand that out of context this may not mean much, but he did said that. Additionally, Hyves, Tweakers (a Dutch news site) and a couple of other companies I know that use PHP professionally, some of which I know people working there, almost all seem to agree on that it's very difficult to find really skilled PHP programmers. There is an abundance of programmers that are of the Joe's Burgers variety and have hacked on some PHP script, but that's a completely different category really and not at all what a professional organization is looking for.
So, even though a select few companies are using PHP very professionally, the norm in the PHP market is that it's used by people who barely know the difference between a while loop and an if statement, let alone that they know anything at all about data structures, algorithms, or efficiently structuring their code.
Those aren't real problems unless they are actively preventing you from developing your website, which is probably only the case about 2% of the time. The other 98% of the time you never need consider them.
And that's precisely where it all goes wrong. We don't need no education anymore, we don't need no knowledge about CS theory, we don't need no transactions, we don't need no unicode, we don't need no MVC... PHP is so easy... a baby can now program any web site. .... Until it all comes falling down.
It's the typical Visual Basic kind of mindset. A mindset about which you can read everyday on thedailywtf. Sure, idiots can produce crap in any language, but for some reason both PHP and VB seem to produce a disproportionate amount of that.
You sound like you did very well in school, and maybe even graduated at the top of you CS class. You also sound like you may have little real world experience.
I did okay in school and CS went well too, thank you. I'm currently the lead developer of a 12 person strong development team I've worked with for about 7 years. We're building an enterprise application consisting of several 100k LOC and every day have to deal with an infuriating amo
Right, the "Java is needed for advanced stuff" argument. Fact: If your web application is "too advanced for PHP" you are doing it wrong and should simplify your design.
For the love of god, wake up man. Not every web application is Joe's Burgers. Not every web application is essentially a web site with some dynamics. Some web applications are simply enterprise applications where the front-end happens to be rendered via HTML accessible via a web browser. They do heavy computations, processing, reporting, run simulations and yes, they DO NEED concurrency, and yes they DO NEED transactions.
If a web application is "too advanced for PHP" then mark my words "it's too advanced for PHP". The model of fetching parameters from the request at the top of the page, feed them into an SQL query, and iterate over the result set while spitting out some HTML is fine for those 4 page web sites, and maybe even the 20 page ones, but it does not fit every possible application out there.
Are you the same kind of person who walks up to a civil engineer designing that bridge over a large river telling him al his or her schooling and techniques are wrong, and the design needs to be simplified, and that it all can be done in an afternoon instead of 3 years, since that 16 year old kid just threw an old shelf over a ditch and he had a bridge?
And I'm not sure how many times I have to explain this, but there is nothing complicated about USING some of this 'advanced' stuff. Yes, it's quite complicated to implement this under the hood, but guess what, the guys who bring us Java EE implementations have already figured out the hard stuff. I can simply use it, and with 'simply' I really mean 'simply.
But okay, Mr Einstein, let me play along a little. Tell me how 'simplifying' my design magically gives me transactional semantics for non trivial operations.
Any web app will be IO bound anyway.
Good one. Take an app, ANY app. Slap a web interface on top of it, and any part of the app that was CPU bound suddenly becomes IO bound. Really?
Dependency injection is a kludge you only need because Java is static and not dynamic.
Dependency injection is about separation of concerns mister, and has very little to nothing to do with typing.
Transactions should be handled by the framework
Which is precisely how it is done in Java, via the very stable and mature Java Transaction API, that one can either use programmatically or declaratively via enterprise bean. Your point again?
the transaction decorators always been misused by overzealous developers creating huge transactions slowing the application down to a crawl.
Maybe you're referring to some home grown 'transaction decorator' as may typically attempted to be made in PHP by programmers who have a basic understanding of stuff, yet overestimate their abilities and think they can just build transparent transactions themselves. I mean, what could possible go wrong, right? If you're referring to the default declarative transaction support in Java EE, then really this is rarely a problem. If you don't know your stuff and simply do too much work in a transactional method, then you're simply doing too much work. That would have been a problem regardless of using a transactional method or not. Like so many other things, it's a professional tool that's utterly simple to use, but you do have to know what you're doing. Just as you should not blindly make each and every method asynchronous or each and every method synchronized etc.
It proves that you are one of those Java only developers too stupid to learn new languages.
I think it actually proves you are someone who jumps a little too fast to a conclusion. For the record, I started programming when I was 6 in C64 BASIC, quickly moved on to assembly, then C on an Amiga and later Apple, C++ on an SGI