Slashdot Mirror


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.'"

27 of 667 comments (clear)

  1. Cutting edge == Johnny Rotten? by Vellmont · · Score: 5, Insightful

    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
  2. um by Anonymous Coward · · Score: 5, Informative

    um google app engine? spring? android? gwt? groovy?

    Please it's evolving and even finding new uses.

    All those "java is going to die" people are silly and not grounded in reality. Plenty of talented developers see its power and use it.

  3. Re:What is out there right now? by Macrat · · Score: 4, Funny

    So what do people with piercings do now?

    Work at Starbucks.

  4. good coders will follow the money by ilmdba · · Score: 5, Informative

    piercings and mohawks somehow make someone 'cutting edge' or a better coder?  i think not.

    good developers will follow the jobs.

    i'll save you the trip to monster.com, here are some search results from there:

    search  results
    ------  -------
    java    5000+
    .net    4581
    c++     3706
    c#      3369
    perl    2569
    python  1035
    ruby    547
    cobol   286

    - 5000 is apparently the limit for the number of results a query can provide at monster.com (weak) so there are most likely far more that 5000 java jobs in their database
    - couldn't figure out how to search for C reliably, but it's probably up over 5000 as well.

    1. Re:good coders will follow the money by pushing-robot · · Score: 4, Funny

      So true. Popularity is one of the worst ways to measure interest.

      --
      How can I believe you when you tell me what I don't want to hear?
  5. JVM keeping it alive by godofredo · · 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

  6. Here's how to make Java again by grepya · · Score: 5, Funny

    The problem with Java today is... it's syntax looks too much like C. And as everybody knows, C is for geezers. Can't we write java code as follows:

    <class>
    <classname>MyPony</classname>
    <method>Run</method>
    <code>
    <if><condition>IsExcited</conditon>
    <if_block>walkFaster </if_block>
    </if>
    <method>trot</method>
    <method>gallop</gallop>

    .
    .
    etc...
      Once the java manufacturing association fixes the syntax to my satisfaction, I'd give up on my 10 GL super auto functional metaprogrammers language (Saufml) and start writing java code. Until then, I'll keep working on my latest NoSql data-store for my soon to be mobile-social-media-empire (leveraging P2P crowd-sourcing) in my beloved Saufml.

  7. Re:the best programmers? by spiffmastercow · · Score: 5, Insightful

    I have tattoos, and I used to have piercings. I'm also a damn good coder. I seriously doubt the two are related.

  8. Oracle has some work to do by hedrick · · Score: 4, Interesting

    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.)

  9. Tempest, meet teacup... by neiras · · Score: 5, Insightful

    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.

    1. Re:Tempest, meet teacup... by Sarten-X · · 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.

      --
      You do not have a moral or legal right to do absolutely anything you want.
  10. The VM is decent. The language sucks. by SanityInAnarchy · · Score: 4, Informative

    I remember taking a long, hard look at the state of various VMs awhile back, and here's what I came up with: .NET isn't a bad design, but it's entirely controlled by Microsoft.
    Rotor doesn't change that at all.
    Mono changes it a little, but Mono (at least back then) wasn't really a great platform in its own right -- not enough tools, not enough reason to use it, always playing catch-up. Plus, there's the whole patent issue.
    On top of all of that, it was never really designed to be cross-platform, and instead seems to be primarily aimed at creating native apps.

    The various "scripting" languages have been moving towards VM architectures, and some are quite good, but none that I know of actually feature any kind of ahead-of-time compilation, even to bytecode. That includes Perl, Python, Ruby, JavaScript, and plenty of others.

    Lisps are better, but they generally don't compile to an intermediate form -- if they compile at all, it's to something platform-specific, likely machine code.

    Smalltalk is interesting, but is even more closed off than Java, and basically requires an entirely different set of tools for working with. It's not really designed to work as a text-based language.

    The closest would seem to be Erlang, but it's radically different. While I know of at least one other language trying to target the Erlang VM, it's something that's really designed to work with Erlang. I'm also not entirely sure if the performance is there.

    LLVM looks very, very good, but very few languages actually target it, beyond, say, C. It seems to be targeting runtime optimizations, not portability.

    I probably looked at a few others I'm forgetting now...

    Basically, the top two are still Java and .NET. Both present a VM that supports multiple real languages. In Java, this is by accident, it's hackish, but there are plenty of robust, mature languages other than Java which target it -- Scala, Groovy, Clojure, JRuby... In .NET, this is by design, but the more interesting other languages targeting it seem to be in an alpha state.

    So Java is pretty much it. And it means we can take our fun, dynamic languages, and (eventually) compile them to Java bytecode, and create entirely cross-platform apps with no local dependencies other than Java. It means we get much of the work that's been put into optimizing Java for free -- for example, the Java garbage collector. It also means that even when designing a native app, well, Ruby just got threads in 1.9, and there's still a GIL, so no support for multicore. Python has and probably will always have a GIL. JRuby has had real, native Java threads almost as long as it's existed. Ruby has plenty of options for concurrency, but if you want to take advantage of multicore, your options are either JRuby or a unix fork(), and Ruby's GC is not COW-friendly, so fork() is potentially much more expensive than in other languages.

    I don't know if Java is the way forward. I hope someone builds something cool on top of LLVM. I certainly hope Java the language dies. But the JVM is about the best we have in terms of open-source, cross-platform, compile-once-run-anywhere VMs.

    --
    Don't thank God, thank a doctor!
    1. Re:The VM is decent. The language sucks. by Just+Brew+It! · · Score: 4, Informative

      Google has been working on a version of Python that targets LLVM instead of the Python bytecode interpreter. They're also planning to attempt to tackle the GIL issue, but that may be wishful thinking...

    2. Re:The VM is decent. The language sucks. by u17 · · Score: 4, Insightful
      A couple of reasons why Java sucks:
      1. No proper support for namespaces (see my other comment)
      2. No support for storing members in-place. If you want a Vector3d class, (i.e. an array of 3 doubles with an associated set of functions), and you want it to be fast, without referring to the members by pointers, you have to enumerate the members: {double x; double y; double z;}. If you wanted to have an array of doubles, you could only store a pointer to the array, and with an extra allocation: {double[] data = new double[3];}. For a Vector3d this is not so bad. But imagine the code for Matrix4x4d. This is a real shortcoming, if you look at Java3D, it actually uses a matrix with members defined like this: {double m00; double m01; double m02;... etc, 16 times}, instead of a double[][] array. If you do it this way then in functions you have to manually unroll loops, you can't just iterate over the values.
      3. No support for proper templates. The "generics" are only syntactic sugar. You can't have something like template <int N, int M> Matrix<N, M> for faster code. ArrayList<int> doesn't work. When you write "arraylist of integers", you expect an object with a tightly packed array if ints. But the only way to do this in Jave is to box them, and if you do, think of the waste: the array actually holds pointers and each Integer is separately, individually allocated. Additionally, each Integer not only holds an int, but also a mutex, which leads to the next problem.
      4. Every object has a mutex. WTF? Why endure such a huge waste, why increase the size of every object, when only very few of their mutexes are actually used?
      5. No operator overloading. OK, this can be abused like everthing else, but when you're working with a custom number class or with BigInteger, you don't want to clutter your code with method names that represent operators.
      6. No unsigned types. Of course there are conversion issues when mixing signed/unsigned in expressions. Normally you're fine with just signed, but what about, say, file formats that have uint64_t in them? Should you store them in BigIntegers?
      7. The standard library is a mess. They keep putting more and more stuff into it, never deprecating anything, and the result is pretty bad in many places. The library is over-engineered and in many places the implementation shines through the interface. They keep shooting themselves in the foot by having to maintain crap code like Swing for eternity. Coding in Swing is horrible when compared to, say, Gtk.
      8. Missing lambda functions/closures, 'nuff said
      9. No function pointers. This leads to one-function interfaces which only clutter your code whenever you use them.
      10. No typedefs. Especially when using generics, you don't want to type Map<String, List<Integer>> all the time, you want to type MyFancyMap instead.

      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.

  11. Re:Well this is awkward by AuMatar · · Score: 5, Insightful

    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?
  12. I know how *not* to make it more relevant by hedrick · · Score: 4, Insightful

    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.

  13. the cutting edge itself has moved on by anomalous+cohort · · Score: 4, 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?

  14. Re:What is out there right now? by nitehawk214 · · Score: 4, Funny

    So what do people with piercings do now?

    Work at Starbucks.

    Java engineers.

    --
    I'm a good cook. I'm a fantastic eater. - Steven Brust
  15. Re:Groovy by simoncpu+was+here · · Score: 4, Funny

    I was about to mod you funny when I realized that "groovy" is a programming language, not something that describes Java.

    Oh well, I also realized that I'm starting to grow my own lawn...

  16. Lemmings by Animats · · Score: 5, Insightful

    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.

  17. Re:I've.never.used.groovy.so.I.have.a.question. by Abcd1234 · · Score: 5, Insightful

    Uhuh... so you determine language quality by the terseness of it's text.

    Interesting.

    Well, you have fun writing your terse programs with inexplicably named, but I'm sure very compact, variable and function names, while the rest of us move on to writing code other people can actually, you know, read and understand while putting up with the horrible hardship of having to type a little bit more.

    Oh, and BTW, any language that has namespaces has an import keyword. Maybe you should try it out sometime.

  18. Young developers by sjames · · Score: 4, 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.

  19. The same is true of Cobol by Rix · · Score: 4, Insightful

    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.

  20. improve the JVM bytecode by basiles · · Score: 4, Insightful

    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.

    1. Re:improve the JVM bytecode by basiles · · Score: 4, Insightful

      I was serious. Tail recursive call is one of the major feature lacking in the JVM. See http://blogs.sun.com/jrose/entry/tail_calls_in_the_vm http://openjdk.java.net/projects/mlvm/ And there is no way to implemnent tail-recursive call in its full generality (including tail-call optimisation to statically unknown code, e.g. thru virtual methods...) without a proper support from the JVM. This has nothing to do with addressing modes (which you don't need in a VM offering garbage collected values). And the Ocaml virtual machine bytecode does indeed show that other kind of bytecodes can be useful. JVM is not the perfect VM; it could and should be improved.

  21. Re:Groovy by IntlHarvester · · Score: 4, Insightful

    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.
  22. Re:I've.never.used.groovy.so.I.have.a.question. by ardor · · Score: 4, Insightful

    No. K&R C lacks the following things:
    * first class functions, lambda, closures
    * comprehensions
    * coroutines
    * proper generics/templates (no, macros are _not_ a replacement)
    * painless string handling
    * module system
    * namespaces
    * reflection
    * support for common oop patterns and tools, like class definitions, dynamic dispatch etc. it has to be manually constructed, which is quite time consuming

    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.

    --
    This sig does not contain any SCO code.