Publicly-held corporations ostensibly serve the people they sell products to, but are required by law to actually serve their shareholders. Privately-held companies only serve the customer.
The problem with public corporations is that, no matter what they say, "maximize quarterly profits" is the real mantra.
Apple and Sun are both notable exceptions. Apple is run by a charismatic leader, a benevolent dictator who is able to reshape the company in his image. Which is great, as long as he is around (as they discovered when he wasn't).
Unfortunately, no one has been able to figure out Sun's business plan. When McNealy was at the helm, the business plan seemed to be "Microsoft is bad." This went by the wayside when Microsoft paid them a billion dollars (seems like it would have been cheaper for Microsoft to just buy a billion dollars worth of stock and save the legal fees) in the Java legal settlement. Hmm ... I guess this makes Java the most profitable thing Sun has done for the last ten years.
Java's philosophy has always been a "directing" one -- "we know best and will tell you what to do." When not overdone, this can be helpful, and is part of the abstraction process. "Don't worry about the stack frame, we'll take care of that for you" is something that no one argues about, for example. But it's very easy for this attitude to go too far, especially when coming from a corporate entity that consciously or unconsciously modeled itself after Microsoft (who is now busy telling its customers that they can't use Windows XP even if everyone now knows that Vista is inferior). Obvious decisions include the invention of checked exceptions (not repeated in any language I know of). Or the decision that backward compatibility was more important than usability in generics. And I've lost any hope that the eventual design for closures won't be the most bolluxed one, because Sun has a long history of choosing the design that serves the wrong needs (Think AWT. Think EJB prior to version 3. We should make a list).
A very important impact of these decisions has been in connecting to the OS. Early on, the "write once, run everywhere" chant started and that justified everything. If you want to talk to something OS-specific, you can use JNI, right? What a nightmare. And the joke became "write once, test everywhere."
And then there is the "transcendental functions" decision, still staunchly defended, in which some of the floating point processors didn't follow the IEEE floating point standard out to the far right of the decimal point. The solution was that all transcendental functions in Java are done in software, and as a result painfully slow. This decision should have been stamped on the box: "warning: if you get sucked into using this for numerical apps, you can easily get screwed," but instead the language was promoted as a solution for everything -- because that's the corporate way of doing things.
Sun, as is its habit, never learns from its mistakes. Sometime in the last couple of years, rumor has it that Adobe apparently extended the possibility of working with Sun so that Flex would integrate seamlessly with Java. This would seem like a best-of-all-worlds situation, to pal up with the folks who have been specializing in UI programming. Instead, that seems to be around the time that JavaFX was started (which even poached Flex's "Fx"). The classic "not invented here" response is the standard reply of corporate competitive-think.
Open-sourcing Java is not going to make it an open-source project. The culture that has built up around Java for over ten years is not going to change just by moving to a new license.
A truly open-source programming language does not have shareholders to serve. It can only serve its actual customers, the programmers who are consuming the language. For example, Python has always been about "what do you want to do today?" If you want to create a cross-platform app, no problem. And if you want to talk directly to the OS, that's been made as easy as possible. This makes sense because Python is an "enabling" language -- it's about helping you do what you need to do, rather than telling you what you can and can't do (these comments also apply to Ruby and other enabling languages, but I only occasionally tinker with Ruby so I can't speak authoritatively about it).
Python, after thrashing around with many different approaches, also solved the "interfacing to native code" problem. In Python 2.5, ctypes were added. Now you only have to say "there's the DLL, connect to it as efficiently as possible" and it does it. And amazingly, the DLLs are the only things that are different on different platforms; your Python code can be the same. That's the right solution to the problem. (When Jython 2.5 comes out, I've heard it will have ctypes working so that may be the reasonable alternative to JNI).
There are numerous examples of code that take minutes in Python and require hours or days or weeks in Java. The response from the Sun Java camp (obviously not the camps within Sun that fund JRuby and Jython!) is that this is the Java way. Rather than fixing the problem, respond with rhetoric (another lesson learned from Microsoft).
Will Java become much better once it is open sourced? That should be no problem, once 10+ years of culture is reversed. I heard a podcast where someone in the JCP was arguing that "people should stop complaining about the process and instead join it, and after a few years things would change." In a few years a lot of other things will change, and the internet is only accelerating this change. No one has time to wait for an ingrown culture to catch up; instead they will move on to other things.
Java won't die. But the adoption of new Java versions and features is going to continue to slow. People have been bitten too many times. Java lost its status of being a leader awhile ago, and it's now a legacy language -- it's just taking awhile for everyone to realize it.
As I've argued before, legacy languages aren't a bad thing. Having a language that is not constantly thrashing about is good, in fact. You can focus on solving your problem rather than stressing about whatever new abomination Sun is going to visit on the language (yes, yes, I know it's all the JCP. I'm sure lots of people believe that).
The JVM will be the most important legacy that Java contributes to the computing world. With years of optimizations and a platform with built-in garbage collection and exception handling, it provides a foundation for rapid development of new languages like Scala and Groovy (which play well with Java right out of the box), as well as ports like JRuby and Jython. The JVM was certainly one of the primary inspirations for .NET (and if you don't think there are important things going on in that arena, look at LINQ).
Java itself will continue to be a core workhorse, just as C++ has been. But like C++, I think people will reduce the use of the more difficult and newer features and keep their code simple, mostly because they will only be doing small portions of applications using those languages and will do whatever they can in the more powerful enabling languages.
Clarification: So there's no confusion, I am for open-sourcing Java. It's an important step. I am just skeptical that open-sourcing will have any magical positive overnight effect on the culture and infrastructure that's built up around the language.
Full disclosure: My consulting contract (mostly speaking, some free-form writing) with Adobe expired around last May (and yes, Adobe is a full-on corporation with all of the problems that implies -- but according to rumor it was Adobe that suggested the liaison with Sun); I decided on my own that Flex is a good solution for UIs, both before and after that contract. Also, James Ward and I just published our coauthored book (written under our own steam, not part of the Adobe contract) First Steps in Flex. I'm working on an open-source book on Python 3. And before you say I've gone totally anti-Java, I also organize The Java Posse Roundup with The Java Posse (so think "tough love").
Very nice writeup. I'm one of those that believe Java primarily thrives on existing inertia and the fact that it's now open source.
Due to its age and policy on backwards compatibility, entropy has gone way up to the point where it now looks like Sun pretty much gave up. Instead they added a new layer (JavaFX) and at the same time got an opportunity to arm-wrestle Adobe. The problem with this is of course, while you can dress up a pig, it will still be as fat underneath - bacon will be bacon.
And I can't help but wondering if this is a déjà-vu to the time where Sun let the pendulum swing from SE to EE, and left SE broken and battered behind. As a Java developer this prospect scares me, but as a geek it bores me and makes me look elsewhere for innovation.
There is continuing fragmentation in the language race. It's like the DSL prediction is becoming true but not quite the way people expected. There seems to be demand for general purpose languages that have sweet spots for the particular type of applications (or parts of) that you need to build.
The dominance of Java and .NET will continue for a good while, and C and C++ will keep their place as well. Behind the mainstream comes a growing list of 'smaller' languages that all share a piece of the cake. The only change that seemingly has happened is growing diversity. It's like any ecosystem in a way.
I guess the current changes are coming about due to the growing popularity of functional style of programming, coupled with a preference for reactive programming for GUIs.
Sun, IMO is right in offering Java developers a new language to support these. There is a good opportunity for tight integration between the two languages (such as POJO binding etc), which if followed through, will enable Java developers to re-use business objects within a single JVM and bind to it without changing existing code base. Very exciting, really.
Some decisions from Sun were of course wrong in hindsight. But decisions such as pushing Java for an early release and maintaining backwards compatibility was obviously right. The decision to be backwards compatible allowed me to move from Java 1.4 to Java 5 in a matter of days, while enabling me to get the benefits of generics and annotations 99% of time.
About the JNI being a pain to use, if you look at the Java market, it mainly consists of server-side developers, who do not care much about the native library access. So from pure customer's point of view, Java is right there were it should be. Even Python would not accept each and every change request into the language (or else, it would have gone the way of Perl quite early).
Corporates are much similar to people; many mistakes and some rare display of genius (exception being Apple ;-) )
All in all, it seems to me that in general the anger against Sun is a bit on the extreme side, we are in the habit of expecting Sun to do everything for us for free and now itself. They have the right to have their own visions for the future, just like Adobe has.
To criticize Sun for not dealing with Adobe is also a bit unfair as we do not know what was the terms and conditions that Adobe proposed.
Java is not about a company's altruistic service to end-users, here identified as developers and programmers.
Java always has been a disruptive technology used by Sun to avoid irrelevancy. It was meant to rob Microsoft and Intel of oligarchical control of the software/hardware market. The Java platform broke the business strategy of Microsoft and Intel. Write-once run-anywhere is a greater advantage to Sun than it was to developers. With Java, Sun has been able to sell its own hardware platform into a market that was trending toward homogenuity with the sun sparc platform on the outside looking in.
Open sourcing java is an extension of this disruptive strategy, I think, in many ways.
1) If java implementation were still licensed and own by sun, competing hardware vendors would be hesitant to improve java because in some way the improvement could be a benefit to sun.
2) Relaxed java distribution rules broaden Java's reach, perhaps even to the level of gnu C++.
3) JVM as a platform becomes shared community platform with the potential of unimagined uses. It is not in Sun's interest to be a bottleneck on these advances. (Jruby, scala, groovy and the like.)
> Apple and Sun are both notable exceptions. Apple is run > by a charismatic leader, a benevolent dictator who is able > to reshape the company in his image. Which is great, as > long as he is around (as they discovered when he > wasn't).
Sounds rather like Apple isn't an exception but rather, just another corporate. One that happens to be currently led by an exceptionally savvy individual.
> Unfortunately, no one has been able to figure out Sun's > business plan.
Sun is a hardware company and always has been. The purpose of Java is to enable them to sell boxes.
It will not be possible to predict the future of Java only by looking at the past, because the whole innovation game is changing right now. I think it will be very exciting to see how open sourcing Java will influence on it's innovation.
The Open Source community is very much alive in the Java World, and I don't think it'll blow a chance to improve the language itself. In addition there are a lot of commercial companies opening up, contributing and collaborating to improve their own abilities to compete. Motivated and competent people/companies will improve Java if they can, but many has been demotivated by never ending compromising JCP processes.
Many companies now turns to Open Innovation strategies, and this is the new game where many exciting innovations will appear.
> > Sun is a hardware company and always has been. > > Ditto Apple.
Apple sells hardware. They don't fit as easily into the software v. hardware divide. What causes them to sell is user interface: they're more of a user experience company. The hardware and software are the necessary instruments of the experience.
On one example you're a little out of date. Sun gave up on exact last binary place floating point 10 years ago in Java 1.2, unless the programmer specifically demands it with strictfp. Clearly they do learn from their mistakes. They're not always willing to correct them, but they do learn from them. But this one they did correct.
Open sourcing language implementations is one thing, open sourcing language standards is something else entirely and is never a good idea. You need a strong guiding and controlling voice, either a small committee or a single visionary individual, to control the specification. Anything else either leads to massive feature bloat (something Java is in severe danger of, may already be suffering from, with ever more idiocy being added to the core language, idiocy like closures which as you point out should have been there from the outset or (as I've been pointing out for a year or so) never should be retrofitted into a language not designed for them).
Python's language spec is controlled by a single person, so is Ruby's. The C++ spec is controlled by a large and sluggish controlling body in the form of the ISO, and as a result hasn't been updated in about a decade. Other languages are similar, either controlled by tight small groups and growing, large bodies and dead in the water (when it comes to growing the spec, not necessarilly language adoption, which goes to show that not "modernising" the spec, not incorporating things "because XXX has it" isn't going to mean that "the language is dead" as is so often claimed when it comes to Java), or they disappear in confusion because there is no structure to the way the spec is developed and people either don't take the whole thing seriously or get frustrated by the too rapid, inconsistent, and needless changes.
IMO Java is now (and has been since 1.5 maybe, 6.0 certainly, developing in that same inconsistent and haphazard way, and indeed for reasons that seem to have more to do with stroking language gurus' egos and fear of being left behind by other languages with overhyped features than anything else. Whether that's because of the open sourcing of the language or because of Sun's grasping at straws to maintain their profitmargin I don't know or care, I guess it's a bit of both, and it's harming the language (though not yet its adoption, which is and always has been mainly centered around older versions (something which seems to be getting worse)).
So I am really interested to know the opinion of you all about what is the next big thing, language wise, in corporate development then...
Mainly in the company that I work for Java is widely used. There is a very small set of other languages being used as well but nothing with much significance that I would point out as the clear winner in the years to come.
I am more interested because I would like to invest time in something that would bring me value in the future.
> So I am really interested to know the opinion of you all > about what is the next big thing, language wise, in > corporate development then...
Everybody would like to know the answer to that question, particularly the people here that write books and articles for a living.
> Mainly in the company that I work for Java is widely used. > There is a very small set of other languages being used as > well but nothing with much significance that I would point > out as the clear winner in the years to come.
I think that that's likely to be the case (particularly in companies who need programmers but aren't software houses) for a few years more. There are several nice scripting languages out there with an assortment of nice features but none of them are actually so much better than Java that they're actually "must haves" whose features outweigh the relative lack of skilled developers.
One problem is that the new languages are more or less identical. Until they eaten each other (much like vhs v. betamax or bluray v. the other one) then they won't eat Java - just nibble at the edges.
> I am more interested because I would like to invest time > in something that would bring me value in the future.
Flat View: This topic has 19 replies
on 2 pages