Optional require(s) NonNull
brian.goetz at oracle.com
Tue Oct 30 17:50:55 PDT 2012
I understand how you could feel that way. Let me offer a different perspective.
There are, if you believe our marketing department, on the order of 9-10 million Java developers. Developers being what they are, that means there are probably 9-10 million opinions. There are some who think we are evolving Java too fast; others think too slow. We can't possibly satisfy them all. Of course Oracle's own business requirements influence the decisions we make, but my business unit's stated #1 priority is "Keep Java #1." (This may sound like marketing crap, but think about it this way: Oracle employs over 10,000 Java developers and maintains many millions of lines of Java code. If Java were to become less vibrant, the value of our codebase decreases, the value of our human capital decreases, it becomes harder to hire good programmers, people would buy less Java middleware, and we lose big. It is in our greedy corporate financial interest for Java to remain #1.) That means it is part of my job description to identify directions for the language and core libraries that will make that happen. I have a sign over my desk that says "Don't Break Java", to remind me of the consequences of what I do.
It is very easy to confuse "there are a lot of people who think this way" with "the community in general thinks this way." If, for example, only 5% of the Java developer base feels a certain way, and only .1% of them bother to say something about it, that's still 500 people clamoring for something that 95% of the developer base doesn't care about. (Which is about the size of the population of lambda-dev, by the way.) When we hear their request, consider it carefully, and deem it to not be in the best interest of the Java community *as a whole*, that's good stewardship. But if that .1% of 5% is vocal enough, it is easy for that to look like "Sun/Oracle doesn't care about what the community thinks."
This particular example is a fine one; the set of people who are familiar with Optional in languages other than Java is probably smaller than a few percent of the Java developer base. Claiming that this vocal minority speaks for "something the larger community wants to change" is ludicrous. This is something a small but highly vocal fraction wants to change. And, we did spend a great deal more time on this issue than we had budgeted for, simply because there was a vocal request from the community to consider an alternate viewpoint, which we did. But in the end, it is our job to separate the interests of the vocal minorities / self-proclaimed elite from the interests of the greater community as a whole.
Is our judgement potentially flawed? Of course. We're human, and we don't know everything. But to claim that we're only making the decisions based on what is important to us is just sour grapes. Granted, what is important to our business interest is a factor -- how could it not be? But what is important to the vitality of the Java community is a huge factor. (As are a number of other things that the community doesn't realize it cares about, such as the maintainability of the specification and implementation, or negative interactions between a currently proposed feature and future features under consideration.) We have taken lots of input from the community, and a lot of it has affected and improved what we do. The community was in fact very involved in Lambda from the beginning -- there were thousands of messages on the lambda-dev list before we started writing any code. Some were worthless, but we read them anyway. Some contained ideas that were great for other languages or communities but not for Java. Many offered competing visions of what Java could be, perhaps all of which were valid, but not all of which could be satisfied. Prior to the creation of Project Lambda, there were several competing and conflicting proposals in the community for how to add closures to Java. In the end, it was my job to integrate all of this into a coherent vision. I am sure I made some mistakes, and I will own up to them when they become clear to me. But I'm proud of where Lambda is now, which is the product of thousands of interactions with individuals inside and outside of Oracle and many small decisions. It is not possible that they will all be popular. And it is very easy for a vocal minority to masquerade as the voice of the community.
On Oct 30, 2012, at 3:26 PM, Gregg Wonderly wrote:
> On Oct 30, 2012, at 12:24 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>> So, let's keep our input on the subject to that which is within the design center of the current implementation, rather than trying to convince us to change the design center.
> Over the years, there has been several things about Java which the larger community has wanted to change. Practically this kind of response has been a common theme in how the community has been treated.
> In JDK 2.x, Sun engineers added all kinds of new stuff which completely broke all kinds of things and made quite a disaster out of about 2 years of Java experience. I know of several companies who looked at JDK1.8 as a remarkable step forward and tried to develop projects in JDK 2.x, expecting it to only get better. The end result was that they wasted time and real money on something that would never work out beneficial to them. Sun seemed to have learned about this given the subsequent statements at JavaOne and elsewhere about how that debacle would never happen again. Stability was going to be a design center. It seemed like Sun might be listening, but I found that not to be the case for all engineers at Sun as I tried to get various Sun led JSRs to focus on things which I needed Java to do well.
> I find it particularly strange that throughout the years, Java engineering from Sun and now Oracle seems to be focused on just what is desirable to them. I understand, given the position of where this development is at now, and what these discussions are pressing, that perhaps there is a huge gap such as you describe, between your design center, and what the community, at large, is asking. It begs the question though, why does this gap exist? Why didn't the community end up involved early enough to perhaps be more influential on the design center?
> What seem ideal to me, is that Java actually would do more of what the developers want, and less of what Oracle engineers think that it should do. Why, for more than a decade, that has been such a foreign concept is beyond me. But, once again, we seem to be seeing evidence that Oracle is not a custodian or a participant, but rather the dictator of where things will go.
> Seeing lots of different JVM based languages being developed, with similar functionality, but with a couple of new features tacked on, seems to indicate to me that many different people have given up on getting Java fixed to take care of issues important to them as well.
> Gregg Wonderly
More information about the lambda-dev