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.'"
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.
Some drink at the fountain of knowledge. Others just gargle.
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
Support NYCountryLawyer RIAA vs People
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.
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
Java isn't about to become irrelevant. There's no chance it's going to be the latest thing, because that opportunity only comes once. But if you want a language for doing major projects with long lifetimes, there's really Java, .NET and C++. For a lot of things, Java or .NET makes more sense, and realistically .NET limits you to Windows. For that class of things, the limiting factor in Java now is that Sun does't support the same range of APIs that MS does. Particularly desktop APIs needed for things like multimedia and games. If I wanted to make Java as useful as possible I'd put some manpower into that, and find ways to put some of the newer interpreted languages on top of the Java JVM. That would give them access to a good compiler and to the range of packages available in Java. (Despite a more limited set of APIs than .NET, there's still more than a newer language would otherwise have available.)
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.
Samsung took back my unlocked bootloader because Google wants me to rent movies. They're both evil.
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.
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?
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.
You do not have a moral or legal right to do absolutely anything you want.
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?
Any sufficiently advanced intelligence is indistinguishable from stupidity.
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.
Any sufficiently advanced intelligence is indistinguishable from stupidity.
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.
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.
AccountKiller
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.
I would say that the future popularity of the JVM is pretty secure with groovy, jruby, scala and the myriad of other languages that are now available on the JVM, see wikipedia List_of_JVM_languages.
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.
RTFM is not a radio station.
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.
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?
--- For a good time mail uce@ftc.gov
> 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.
I find no appeal in dynamic typing. It just makes programs harder to read and debug. Have you tried Scala? With type inference, it manages to get the type-safety of static typing along with the reduced verbosity traditionally associated to dynamically typed languages.
Guido says you don't need it! (/me ducks)
Erlang programmers might disagree ;-)
you had me at #!
The One True Instruction Set was the PDP-11's.
la-la-la-la-la-la-la...
you had me at #!
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).
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" and who don't make a childish ass of themselves every time they open their mouths, 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.
* 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....
This sig does not contain any SCO code.