A couple days later the Sou Java event started. This was held
only in Sao Paulo. The first talk was given by Robert Brewin, a
Distinguished Engineer at Sun. He is very tall, and one supposes this
is not unrelated to his lofty position. By contrast I suspect those
of us in the audience felt, suddenly, that we were Undistinguished.
He’s also an avid surfer.
His talk had the unwieldy title, “Java and the Developer, Platform
and Tools, Trends and Futures” and started with a joke about cariocas
(the Brazilian word for someone from Rio).
Some interesting facts: Brazil is number 4 in the world for
developer population, after the US, India, and the EU considered as a
whole. Also, there are apparently 4.5 million Java developers. (Now
one feels for Onno’s plight, as his job, I think, is to grow this to
some absurd number like 20 million.)
His talk is what I described in my notes as “a typical OSS talk”,
which is somewhat ironic considering that the JDK is not OSS. The
fact is, the folks I meet from Sun all understand OSS fairly well, and
sympathize, and even work on it in various ways (make no mistake
slashdotters — Sun is a major open source supporter), but also often
hold on to a fear about potential platform forks by unfriendly
entities (read: Microsoft). Personally I think these fears are
somewhat outdated, given that .NET exists, but nevertheless I can
sympathize. The existence of Classpath does complicate the picture
though, and my guess is that in this instance Sun will follow the
time-honored tradition of open-sourcing projects only once they are
already obsolete. Good news for Classpath, I suppose, but another sad
example of the inefficiency and short-sightedness of the system.
The various Sun communities look great on paper — big numbers,
like 7 million NetBeans downloads. More on NetBeans later, there were
many talks about it.
On to trends… Sun’s general trend is toward OSS and community.
Cool beans. This is exemplified by Open Solaris, which came up a
number of times during the week. Fun fact: apparently it took 5 years
and was quite expensive to turn Solaris into an OSS project.
Apparently they had to do a full code audit and contact many different
organizations to get a grip on the IP issues. So, this is another
area where OSS rocks; GNU projects basically all have a better paper
trail than this.
A Few Notes on Productivity
One point he made is that the complexity of programs is increasing
(which I agree is indisputably true) and that past metrics of programs
don’t apply. He said that nowadays programmers don’t write systems,
but instead integrate sets of systems. (This is true in the Java
world, the C world is still more like 1995, and the C++ world has in
some ways taken a fatal tack toward the deeper past.)
He also said that lack of productivity is a major concern. A few
talks echoed this concern over the next days, but I was struck by the
fact that nobody made an attempt to define what productivity actually
My perspective is that productivity is about maximizing the amount
of functional, bug-free code that can be written in a given amount of
development time. Furthermore, a real measure of productivity would
recognize that more time is spent in maintenance than in development,
and skew results accordingly. From this perspective I think it
becomes pretty clear that some of Java’s design goals are on target,
particularly, “reading is more important than writing”. (And honestly
on this basis I have misgivings about generics… they are clearer in
some situations, and have caught a few buglets in Classpath, but are
actually quite complex for what they provide.)
Anyway, my thinking in this area has led me to conclude that what
Java needs is, most likely, features adding more quality assurance to
the language. Generally I translate this into Eiffel-like code
invariants to better support safe derivations, and perhaps some kind
of hygienic macro support to allow things like transactions and other
higher-level application-specific modifications of control flow while
preserving “lexicalness”. (This can be done currently using anonymous
classes, but the effect is rather clunky.) On the topic of macros
though it is generally agreed that I am a nut.
Back to the Party
Bob then talked about handling complexity, for which his remedy is
sensible standards and sensible simplifications. Also he thinks that
ease of development is important, meaning that attention must be paid
to the entire application lifecycle (agreed; and both Eclipse and
NetBeans are still missing important parts of this; for example
neither has a built-in bug tracking interface, let alone more complex
things like making releases or tracking cross-release API
compatibility). He says we shouldn’t consider just “tools” but should
also look at the platform and the language. To me this is a natural
continuation of the Java approach, which is to try to consider the
system as a whole (and which explains why the compiler and the library
are not fully separable).
Another remedy for complexity is focus, namely being able to
orient to the task at hand and avoid noise. In the Eclipse world,
Mylar is exploring this area.
He made a claim, without supporting evidence, that the new
enum support helps productivity. It probably does reduce
bug rates by some small degree, but I would say little given typical
Java coding practices. He also gave what my notes describe as a
“bogus example” of using annotations — annotations are cool and do
help, but I saw some disturbing evidence at this conference that
future Java programs, particularly in the J2EE domain, are going to
end up looking like “@ soup”.
Another quote: “applications can be too complex for most
developers”. I suppose that can be true. At our airport meeting,
Simon said that in his opinion programmers do not really use
programming languages, but rather use the associated libraries.
There’s truth in this and Bob’s point may be that a typical
application can provide a bewilderingly large API profile, with
overlapping abstractions, complicated deployment schemes, and the
like. All true.
In this vein, we’ve known for a long time that personality is an
important component of programming in most environments, likewise the
social organization of teams and corporations, and the emotional
skills of managers. There is a lot of room for improvement in this
But, these talks are more narrowly construed and so Bob didn’t
dive into a psychosocial analysis of the typical Java hacker. Instead
he then gave a demo of writing a NetBeans plugin. NetBeans is coming
along well. I’ll post a full entry on it soon.