The Struggle To Keep Java Relevant 667
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.'"
Groovy (Score:3, Interesting)
THe thing that makes me think Java has a huge path forward is groovy.
in theory groovy has all the advantage python has and more. Plus unlike python it has a path forward to a statically typed quasi compiled and generally close-to-c speed when you need it without much effort.
Re:Just let it die (Score:3, Interesting)
I agree with this. Oracle will have to do some serious sucking up to the world to convince anyone they are not out to destroy everything that MS licensing was unable to touch. I'm not saying that Oracle sucks, just that their business model is not really where the world has been migrating to lately. For more or less all the reasons that MS products are not looking so good these days to many people, Oracle products (including the products they buy) will also not look good. There is reason to think this looks like a sinking ship taking on ballast weights.... IMO
Re:Groovy (Score:1, Interesting)
The future of Java will depend on standardization of cross project support. It's gotta be easy like connecting legos.
Re:Just let it die (Score:3, Interesting)
Can you be specific about these inconsistencies? I'd like to hear about them.
As for "letting it die", Java is the default language of enterprise everything. Outside of the embedded world, there's probably more lines of Java currently deployed than anything else. And I have to say, Spring 3.x is actually pretty neat.
JVM keeping it alive (Score:5, Interesting)
Java will remain relevant because of the large number of languages being built for the JVM: scala, erjang, clojure, groovy etc. Thus writing libraries in java has significant appeal.
JJ
Oracle has some work to do (Score:5, Interesting)
Re:Just let it die (Score:3, Interesting)
You're mostly right. Back in the 90's Sun was so successful in hyping Java I remember VC's funding software companies _just_ because they were focusing on Java. Got it into a lot of (maybe all?) schools too. So damn near every young developer knows Java now and as a result that language gets chosen over others.
So yeah, letting it die might not work, we'll have to be more proactive.
Oh, now what the hell is this? (Score:4, Interesting)
Ok, so they want to get the love back and show that java is still relevant. Maybe they want some people to expand their skillsets and add java to their toolbox. Well I thought, lets see how heavy this thing has become. I found the necessary magic words to install it on ubuntu from apt. And then: SPLAT! Upon trying to install it, I get this very unfriendly looking licensing message during the install!
Sun is willing to let you install this under the condition that you accept the terms of this 15 PAGE! licensing agreement! In order to install, you must accept the terms, do you accept the DLJ license terms? YES or NO?
If you say NO, then the installation -crashes- and you get prompted again, in a loop asking you to accept the terms again! Ok, after 3 declines, it bails out completely.
You know what? I dont remember that kind of love when I installed PYTHON. Maybe this is what they mean by tough love.
the cutting edge itself has moved on (Score:5, Interesting)
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. They have and will continue to come up with some brilliant stuff. But cutting edge developers don't pick a shop because they write in groovy or whatever the language-de-jeur is. Cutting edge developers go where they believe the next killer app is going to be born.
The best developers are multi-lingual. They don't identify with a single programming language. They're not VB developers or Java developers or even Rails developers. They can pick up any language/library/environment quickly. They don't really get off on curly braces versus colons. What feeds the best developers is the challenge of world domination through innovation.
Change the world, right?
Re:Tempest, meet teacup... (Score:5, Interesting)
I just recently got a job at an all-Java shop. I might, if I feel the need, write a shell script or two. From what I can tell, Java's still accepted in the "real world", but it doesn't have the hype it used to.
Java's Big Thing was its ability to be written once, and run on VMs on any platform. That advantage was promptly killed by the rise of AJAX and all its cross-platform happiness. The same buzz Java once enjoyed is now held by cloud computing, for much the same reason: it allows programmers to write something once, and not worry about the future as much. As languages have progressed, we've consistently moved away from hardware-specific details. Today, I see Java as a sort of middle ground between using the "edgy but immature" languages like Python, and the "old but crusty" languages like C and C++. It has enough libraries and tie-in packages that any modern technology can be easily implemented.
Programmers today don't want to (and shouldn't need to) deal with memory allocation, pointers math, or any such arcane matters. They also don't want to have to refactor as their chosen language tries to stabilize itself. This is why C rose to such prominence. It allowed programmers to stay away from the processor. Java currently allows programmers to stay away from the operating system. Eventually, I expect we'll move toward even more abstract languages, where we just need to specify what we want, and the compiler (or something) will figure out the steps needed to reach that goal. It'll be an automatic software engineer, just as compilers are automatic replacements for the grad students who used to translate programs into machine code.
Here's to the future, where I, too, will be obsolete.
What the... FUDFUDFUD (Score:3, Interesting)
As far as I know, pretty much every “enterprise” server software still in written in Java, and hence the developer base is gigantic. I mean just look at the job offers. 9 out of 10 say Java, the last time I looked.
What is he talking about?? Does he even know anything about what he is supposed to manage?
Re:good coders will follow the money (Score:3, Interesting)
Actually, if you look at smaller data sets (regional ones), and data from other job sites that have language categories, you will notice, that Java tops out even C by a good bit.
Punks don't care about type inference (Score:2, Interesting)
I for one would like geeks to be like the lab girl in NCIS but in fact they are not. Most "punks" in IT are just doing their programmer job to get some money at the end of the month. They do not care about advanced computer language theory.
Anyway if you're one of the few geeks with piercings and really want your language to be "cutting edge" as TFA puts it, Scala, Clojure, Groovy, SISC, you name it, are available in the Java ecosystem. I'm sure you can even find some Forth dialect if you look hard.
As for most people with piercings they'll be glad to use a language that is neither too cumbersome like C or Cobol or Pascal or VB, neither too hard to understand or organize like ML or Perl or Scheme. Java is nice for them and will stay so even now Oracle has bought Sun.
Re:Cutting edge == Johnny Rotten? (Score:3, Interesting)
He wanted to convey the idea of 'cutting edge', and to be honest it seems like both you and I understood what he meant even if his example is a bit cliche.
I understand what he meant, I just think it's kind of stupid. Call me crazy, but I'd rather focus on keeping a language relevant to the kinds of problems people are trying to solve, not trying to maintain some level of trendiness like the latest cool band.
All languages have a useful lifetime, and Java is no exception. Languages have come a long way since the abomination of something like COBOL, so the comparison is more than a little stupid. As an industry advances the tools become more advanced and long lived. I don't see anyone worrying that circular saws are going to "die" anytime soon in carpentry.
Young developers (Score:5, Interesting)
Java attracted the young developers because more experienced ones had already watched the "new next thing" come and go too many times to be blinded by the hype. Many of them realized that the whole bytecode, write once run anywhere was done in 1969 (p-code) and that if those hyping Java didn't know that, they didn't have enough experience to know if it was good or not. If they did know that then they were liars. Of course, the p-code interpreter fit on a single sided floppy with room to spare and ran acceptably on a 6502....
It is amazing to me the way the hype machine strapped JATOs on that pig and sorta made it fly, but that can only last so long.
Now with Java in the clutches of the enterprise people who are the leading source of anti-cool, it doesn't stand a chance.
Re:Groovy + other languages (Score:2, Interesting)
There is a huge advantage to java programmers by staying within the familiar JVM world when changing a language rather than jumping to a completely new and foreign environment - familiar stacktraces, reusable libraries etc.
The "primary" language on the JVM - java will inevitably evolve slower (JCP = design by committee) and will therefore struggle to remain at the cutting edge.
Re:I've.never.used.groovy.so.I.have.a.question. (Score:3, Interesting)
It's certainly not a complete measure of a language, but they are certainly worse ways to look at it. Java has some inconveniences, like famously deep class hierarchies which lead to very long lines of code. OTOH, Java has support for generics, and some inherent safety mechanisms which would need to be handled manually in C. In C, it's normal to have a set of similarly named functions that operate on floats, doubles, int, shorts, etc., which are all basically copy-pasta, which is a bad thing about C. Like most bad things in a language, it really does directly correlate with the fact that you have to write more C.
Nobody ever sold a language feature on the fact that it was hard to use. Every language prides itself on the fact that you don't have to write more of it.
What do you mean "Keep"? (Score:1, Interesting)
Java was always a bloated, misconfigured mess from the start. The idea to unify on a single machine language is old and proven: you do this kinda think in _hardware_ not software. Don't think so? Take a Linux box with Sun's own Java on a stroll of Bongo, Facebook, and other all-game sites and see what kind of "compatability" you have.
Oh, sure, when people like COMPAQ think they're gonna revitalize their market holdings by merely putting TORX heads on the exact same case screws, it's hard to debate with them. Often times CEOs are dorks; people relent because they have money, and things stop from getting done. But if we want computers that interface, we NEED THIS AT THE CHIP LEVEL.
There seem to be several camps creating several environments in which Java(TM) code can be run. But which version? Can we manage to keep the RAM bill under 1G this time? NO? Ok.
I've been arguing the usefulness of a 'common language' of microprocessors since about 1978. For a while they DID manage a completely solid translation of CP/M (8080/8085/Z-80) on early 8088's. Completely different architecture, worked perfectly. No multiple versions, no need to 'convince people' that it was still relevant. No apologies: that's the way it is when you emulate a given processor in hardware.
If anyone *ever* wants this to work in a rational, grow-old-with-it technology that doesn't fail, there needs to be a small number of CPU instructions which are agreed-upon by chip makers. In a worlds of perhaps hundreds-of-thousands of instructions, what's a couple hundred more if it means complete software freedom?
Yeah, I know- I'm old; I used to be a sysadmin prodigy, but I got sidetracked with caregiving. But I'm tellin' ya: this is the way to unify, if only someone has the balls to ACTUALLY MAKE IT HAPPEN.
We've done hundreds of things harder- why can't we just agree on something?
There's plenty of room making these instructions faster than the other guy. There's plenty of room making multiple co-processors for this work. Why can't we just get it done already?
Re:Groovy (Score:4, Interesting)
Because C is the new assembly language! It has a huge existing codebase. I like having the option of implementing the performance critical bits in C if it proves necessary (often, it doesn't). The way C is called from another language also tells me a lot about the underlying structure of that language.
Re:I've.never.used.groovy.so.I.have.a.question. (Score:2, Interesting)
> OTOH, Java has support for generics
How are generics a good thing? They are a band aid for the fact that not everything in Java is an object. I would say that is the most serious defect of Java, apart from the lack of closures (yes, I know they are coming, but when?).
Plus any JVM I have seen is a piece of shit. Sorry, but if the official JVM takes several seconds just to start, that disqualifies it from a lot of perfectly good uses.
Re:the cutting edge itself has moved on (Score:2, Interesting)
I can tell you what that is: a "GUI Browser" that can deliver desktop-like GUI behavior without the problems of buggy bloated version-sensitive AJAX and JavaScript libraries. HTML browsers were designed for eBrochures, not real GUI's, and have resisted successful retrofitting for real GUI's.
Base it on an XML GUI markup language. It will be the next Mosaic: build it open-source and they will come. Everybody wants it because they are tired of rocket science to get basic GUI elements to work together.
Re:The VM is decent. The language sucks. (Score:3, Interesting)
but but but (Score:3, Interesting)
Guido says [blogspot.com] you [souja.net] don't [wordpress.com] need [blogspot.com] it! (/me ducks)
Erlang programmers might disagree ;-)
I don't care what you say (Score:3, Interesting)
The One True Instruction Set was the PDP-11's.
la-la-la-la-la-la-la...
Re:Groovy (Score:3, Interesting)
C integration with Groovy is the same as C integration with Java... since Groovy uses the JVM, which means making some definitions in Java for the external functions handled by C, adding some extra build options and writing the C module itself. It's the same as any other language... it's fairly easy to write C modules for tcl, perl, python. java, etc... you just need to look up the bindings library and off you go.
Re:Groovy (Score:3, Interesting)
With syntax like this:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
That's not Groovy's fault. That's Sun's fault for writing a retarded Date library and refusing to replace it with something sane.
Groovy has TimeCategory, which is what you want to use. With it, you can just do:
2.months.ago
and get what you'd expect to get.
Re:Just let it die (Score:3, Interesting)
My University only has two programming courses: C++ and Java
That's terrible. No Prolog? No Lisp? No functional programming language at all? No assembly, for that matter? And what about parallel programming languages? I must have learned about a dozen languages at my university (not all of them very thoroughly, mind you).
Re:good coders will follow the money (Score:2, Interesting)
Ding ding ding! We have a winner! The problem I have with most Java-bashing is that it seems so utterly disconnected with the real world and the marketplace.
I read comments in this thread, and they sound like, "Last night I was analyzing differences between Erlang and Smalltalk, and while pondering the merits of Lua vs. Forth I realized that Java doesn't support true closures...". Hey, do you even work as a programmer? I mean, programming professionally... do you get PAID to write code? Enough to support a mortgage and retirement savings and all that livelihood stuff? Have you ever kissed a girl?
I enjoy tinkering with scripting languages and "new" (or at least repackaged from Lisp) programming concepts myself. But when I need drivers to connect to a database (other than MySQL!!!), or to an inventory system on an old IBM midrange box, or just about anything else used in the business world, I need Java. When I need mature toolsets and continuous integration systems, such that I can work in a team of two dozen or more programmers and keep everything straight, I need Java. When I need my credibility with management tied to figures who don't go by names like "Why The Lucky Stiff" [wikipedia.org] and who don't make a childish ass of themselves every time they open their mouths [wikipedia.org], then I need something like Java. When I need to post my resume on the major job hunting sites, have recruiters call ME, and have my next gig nailed down within two weeks... I need Java.
With Java, I'm even able to "sneak in" some things like Jython or JRuby here and there... so that if indeed the "paradigm shift" occurs during my career, I'll be able to hype those experiences in my resume and have a foot in that door. However, I'm not holding my breath. There are so many factors which come into the picture when doing large-scale enterprise development, and such a different skillset and mindset required. Where a project uses one of these scripting languages, it would wind up LOOKING LIKE Java development anyway. It takes years to get used to that mindset, whereas it took me about an hour and a half to get the hang of closures... so I feel pretty comfortable no matter which way the industry goes.
Re:Young developers (Score:4, Interesting)
Java got off because of several reasons, system became so complex and distributed that C++ simply was a sure tool to make such a project fail, and java was very simple back then but could pull off things which C++ was not able to in a decent matter of time only with a few locs.
The other issue was Smalltalk, ParcPlace single handedly killed with a stupid business move the entire Smalltalk market, they bought the most popular Smalltalk vendor on the PC side, Digitalk promised to unify their apis and the Digitalk ones and what happened was that they killed digitalk never fullfilled their promise, it did not help either that Digitalk was the cheap kid on the block why ParcPlaces Smalltalk did cost a fortune. Add to that some infighting at ParcPlace which drove important people away and a load of Smalltalk programming companies gotten burned and you had the perfect fiasco, which even IBM with their Smalltalk could not fix anymore.
Java was just heavens sent for those companies, while not as powerful as Smalltalk and in its infancy, it was the perfect next choice.
Funny thing is, that Smalltalk already had most things in place which languages like Ruby etc... try now to achieve, but in my opinion in a leaner and more thought out manner.
Re:I've.never.used.groovy.so.I.have.a.question. (Score:3, Interesting)
* first class functions, lambda, closures
First class functions are primarily the realm of functional programming languages, not procedural ones.
Lambda's, combined with ways to refer to them (C++ std::function, templates, auto) are a type of first class function.
Closures provide an interesting alternative way to code some things, but seriously who really misses them in C/C++?
Have you been living under a rock? Just about every major language out there is implementing these features. Python, C#, C++, Ruby, Javascript among others. (Java doesn't, and it is sorely missed.)
And, I do miss closures in C++. Right now I can think of several factory pattern implementations that would be greatly simplified if I could return closures instead of objects. Closures are objects are closures, sure
but they do differ in practice.
* comprehensions
Use a libary.
Good luck writing and/or finding one in C that doesn't end up requiring hundreds of lines for what can be done in at most 5 in other languages, like in Haskell.
* coroutines
Use a library.
Forget it. Coroutines work completely against the abstract machine that C models. It is a different control flow, and screws with the stack. You *may* be able to do this with Assembler code inside, but this would necessarily apply to every coroutine you write. Not good.
* painless string handling
Use a library.
No amount of C string libraries will be as convenient and easy to use as strings in other languages. C++ std::string is a good example. It is by far not the best out there, and still looks like heaven compared to the things that are usual in C. Guess why so many people use fixed char buffers for strings (and therefore cause potential buffer overflows): because proper string handling is a real PITA in C.
* module system .h/.c module definition/implementation pairs, and #ifndef/#define to allow module definitions to be blindly included.
To do what? You've listed namespaces and classes separately, so what's left that you can't do in C? Most C programmerss use paired
The .h/.c stuff is exactly what has to go. Headers are used as interfaces 99,999% of the time, and are an ugly hack. I want _proper_ modules/packages, like the ones in Python, Ruby, C#, Java, ObjC. ONE file (.cpp). Intelligent dependency tracking. The pimpl idiom, the need for include guards, and having to manually find circular #includes are some examples why this obsolete cruft has to go, and is gone in every single major programming language except for C and C++.
* reflection
C's a low level language. There is nothing to inspect. Feel free to build layers on top of it.
Oh come on. This is _exactly_ what I've said already: "Now, of course it is a valid point that these things do not necessarily belong in C. It is a system programming language, after all. But these features are very important for other domains, such as application development. Right tool for the right job, please. C is _not_ the shiny hammer, and not everything is a nail."
Of course C has evolved into C++ which has the useful items on your list, and is aquiring others (lambdas in c++0x).
I thought we were talking about K&R C....