Simon said:
Oracle are suing Google over Google's use of Dalvik on Android; you can
find the details here:
http://www.groklaw.net/article.php?story=20100815110101756
The details, however, are not what's concerning me. What's concerning me
is Oracle's apparent willingness to sue people operating in the Java
space. Let's face it, if Oracle sues Google, Google can afford to fight;
if Oracle sues you or me, regardless of the merits of the case, we fold.
I'm at the point of starting work on a new generation of my main
infrastructure layer, which supports all my products; I was going to use
Java+Clojure+XSL, because that's an environment I'm comfortable in. But I
have to admit this lawsuit has shaken me.
Is anyone else concerned by Oracle's apparently more confrontational
approach to working with other members of the Java community? Is anyone
concerned enough to change language? If so, what language(s) are you
switching to, and why?
Node.js.
I spent most of last week, walking in the park, thinking a lot about my
personal investment in Java, and through a lot of anger.
This move by Oracle and Ellison comes on the heels of a personal
epiphany, and gives me something to talk with my co-workers about. My
divestment in Java had already begun, and it began because of an
investigation of Node.js.
I suddenly wanted to experiment with peer-to-peer networking, for
whatever reason. In the many years in the Java community, I've known to
keep my aspirations to myself, otherwise I'd be chided for "reinventing
the wheel", or else told that if I wanted to contribute, there was an
Apache project that was doing the same thing. There has always been this
institutionalized incuriousness to Java, and that has made me resentful
of Java.
I'd spent the better part of a year, working on better ways of doing
things in Java, and was going to release this through GitHub, but I knew
it would be rather pointless, for a great many reasons. That trying to
create something of your own in Java puts you in the class of crazy
trollish person with their secret genius project.
I'd spent the better part of a year, walking back from the a
StationWagon is a Car mode of programming, where everything is an
Object, and an Account debits itself, and if it doesn't it is an "anemic
object", and if anyone sees chained method calls, you end up in a debate
about the Law of Demeter talking about whether the Paperboy should ask
for to be paid, or reach into the Wallet of the Customer. Basically,
walking back from a worked of interfaces, and toward a world of
implementations. It seems that the program to interfaces, not
implementations mantra has been so effective, no one seems to be
actually implementing anything anymore.
I like this community here. You are all nice and helpful and supportive
of people who ask questions. However, there is an incredible community
that is collaborating on Google V8 and Node.js.
What draws me to Node.js and not, oh, say, Python. It compiles to a 5.1
MB binary that is easily redistributed. You don't have to subject the
user to an installer that is branded by someone else. It is tiny and
performant. The Google V8 JavaScript engine does many little objects
well, with a generational Garbage Collector, and it knows how to create
classes from your prototypes, so the represenations of the objects
themsleves are small.
Which is why I came to Java from Perl and back to Java from Ruby,
because I wanted to program with types, patterns that employ many small
objects, which falls down in the previous generation of scripting
languages. Google V8 allows many small objects, which means programming
with lots of types, duck types, but types none the less.
If you must be on Windows, then Rakudo is ready, and it is next
generation interpreter that is intelligent about types and garbage
collection, and then if you're on Windows, you'll probably move to C# or
F# or the like.
The mixture I want is, smart memory management, small footprint, and an
easy way to implement native bindings. But, you can add to that, of
course, a community language, with no corporate owner, like Rakudo and V8.
I'm converting my Java projects to Node.js now, which means throwing
away a lot of Java I'd written. I had my own way, a better way of doing
things, using Java, but throwing away all of the bureaucracy; methods
are *not* contracts, *not* everything is a black box, creating trees of
objects is a healthy practice and does *not* violate any law. My way of
doing Java was better, I thought, and I'd advocate it someday, I
thought, and all my code is on GitHub, but I'd make nice pages and
documentation for it and share it with people, I thought, but...
The Node.js way is better than my Java world. I'm delving into the
projects I was working toward, the distributed database exploration, in
Node.js. I'm using Connect and Express for my bread and butter web
programming stuff. I do Ruby on Rails for bread and butter as well,
maintaining a boundary between my stuff and their stuff, for certain
people I work for/with.
Now, I'm going through Thunderbird and unsubscribing from various Java
listservs, and there are so few I've been able to participate in, Jetty
User/Dev, Guice, Guice Warp, Antlr, XOM, Signpost, Lucene Dev/User,
Stripes Users. So many places to lurk, to ask for tech support, but no
place to discuss, find like minds and collaborations. The #java IRC
channel is about as civil as the comments section of a police Taser
video at YouTube.
The Node.js community is all together on IRC and their listserv. (Perl 6
is also quite coherent and civil.) I can ask a question about anything,
and get an answer. If I ask about a particular utility that does not
exist, immediately there is a discussion about how to implement it.
These are people who are programming implementations. They see C++ and
object orientation as a means to an end, and not an end in itself. There
are a lot of cool things to do. I'm able to work with Node.js to
experiment with distributed databases, which was still a ways off for me
in Java land, since I had a wheels left to reinvent before I got there.
I'm content that this is the right direction for me and I'm busy
deleting Java from my life. This lawsuit is a funny thing to have happen
just as I walk out the door. It makes me realize that Java is not, and
never has been about the programmer. It is about creating an environment
where programmers are interchangeable bureaucrats.