
Java's Cover (April 2001) - cdi
http://www.paulgraham.com/javacover.html
======
mixmax
let me point to a comment made by PG yesterday when asked by thaumaturgy what
it's like to have your every written (or spoken!) word analyzed by a bunch of
people?

 _It's pretty grim. I think that's one of the reasons I write fewer essays
now. After I wrote this one, I had to go back and armor it by pre-empting
anything I could imagine anyone willfully misunderstanding to use as a weapon
in comment threads. The whole of footnote 1 is such armor for example. I
essentially anticipated all the "No, what I said was" type comments I'd have
had to make on HN and just included them in the essay. It's a uniquely bad
combination to both write essays and run a forum. It's like having comments
enabled on your blog whether you want them or not._

<http://news.ycombinator.com/item?id=4497691>

Maybe we should be discussing the future of finance, crowdsourced funding, new
programming paradigms or some other interesting forward looking stuff instead
of spending our time looking backwards trying to poke holes in an essay
written more than ten years ago.

~~~
edanm
While I usually agree, in this case I found it a very interesting. pg is a
very influential figure in many business circles, but for a lot of people on
HN, pg is a very influential _hacker_ , who has thought a lot about hacking
and the software creation business, and has very graciously let us look into
those thoughts. From that lens, this is a very interesting article.

I personally think this article makes great predictions. Obviously, Java has
since become an incredibly popular language. But I still think there are many
people (including me!) who have the same beliefs about Java as are shown in
the article. Many people consider it a much more "business-y" or "bureacratic"
language than, say, Python/Ruby or many others.

~~~
paulsutter
pg never said Java would be unpopular. He dismissed it much as he dismissed
Cobol and Visual Basic. In 1990 Cobol was the most popular programming
language in the world [1]. And in 2000 Visual Basic was the most popular
programming language in the world [2].

The essay is about hacker's radar, not Java, anyway. Personally I loved his
list of other technologies he has ignored.

[1] <http://archive.adaic.com/docs/reports/lawlis/m.htm>

[2]
[http://www.thefreelibrary.com/Visual+Basic+Programmers+Journ...](http://www.thefreelibrary.com/Visual+Basic+Programmers+Journal+Celebrates+Its+Ninth+Anniversary.-a058522477)

~~~
cdmckay
From the article: "So far, Java seems like a stinker to me. I've never written
a Java program, never more than glanced over reference books about it, but I
have a hunch that it won't be a very successful language."

I think that pretty clearly says that (at that time) he didn't think it'd be
very popular.

~~~
briantrice
So, you think popularity is success? I think that when Paul says "success", he
means "winning" in an old sense that "those who adopt X have a better chance
at winning" whatever it is. Just because the language is widely used doesn't
mean it's contributing to the success of the adopters.

~~~
thebluesky
So how would you propose measuring "contributing to the success of the
adopters" ? It seems that there is no way to either prove or disprove the
statement hence any statement about the "success" of a language could be
claimed as valid/true.

------
dasil003
> _9\. It's designed for large organizations. Large organizations have
> different aims from hackers._

This is where I think pg's bias steered him wrong. Hackers tend not to like
Java (although that is less the case now with the JVM ecosystem being what it
is), but hackers do not solely determine the success of technology.
Furthermore, the type of hacker that pg is interested in—the lisper, the
10Xer, the startup founder—are in limited supply. Certainly they wield more
influence per capita, but they still need critical mass to form a stable
community around an open source platform in order to compete with large
organizations. If you're looking to build a product or a small scale project,
by all means find yourself a Grade-A hacker.

If you want to make the next ubiquitous programming platform though, there are
other qualities that are necessary. Consensus building is probably the most
important skill that large organizations have that hackers will struggle with
at scale. If you have a ton of management and mediocre programmers, it's
easier to at least get them moving in the same direction, and they'll be more
tolerant of the foibles of a designed-by-committee language. Sun had the
perfect storm of strong technical talent to design a solid language, but also
the large organization effects to market a new platform to enterprise decision
makers.

In a way I think pg's smell test might be more valid for an earlier era. He
underestimated the influence of the mediocre programming armies, probably
because back in the old days there weren't as many and they weren't as
mediocre. This is just speculation on my part, but I have to imagine that the
quality of the average programmer as declined over time as the numbers and
appearance as a recognized career path have increased. I mean how many people
were programmers in the 70s because they're parents thought that's what they
should go to school for?

~~~
stitchy
I was going to say almost exactly the same thing. The items that he listed are
certainly detrimental from a startup perspective, but for a big company I
think that they are actually arguments in favor of Java. Unfortunately for
Paul Graham, and his prediction, the big companies have had more say in
adoption than the startups. I agree with you. In hindsight, it makes perfect
sense. But, it wouldn't necessarily have been obvious at the time.

Personally, I dislike the language wars. I think that a good developer should
be able to write good software with the tools available. Arguing the opposite
always smacked of the "silver bullet" to me.

~~~
SoftwareMaven
In the end, all languages are Turing complete, but there is still a
difference. It is similar to woodwork (from the small dabbling I've done in
woodworking): good tools make you faster and can produce better output. You
_can_ produce the same quality, but it takes a whole lot more effort.

But more important than the tools you choose (Makita vs DeWalt, Chevy vs
Ford), getting to know them is far more important. And that's where the
language wars seem to fail: the recognition that a guy with 15 years of good
Java experience will code circles around that <insert your language here>
beginner.

~~~
rickmode
XML is not Turing complete, nor are most configuration file formats. Yet these
are used to provide significant behavior. They are are programs. Programs are
data. Data are programs.

~~~
wtetzner
> XML is not Turing complete

No, but it's also not a programming language. Of course, there are languages
that use XML as their syntax, and many of these are Truing complete.

------
yequalsx
It is very interesting and worth pointing out that in the beginning of the
essay says

 _So, just in case it does any good, let me clarify that I'm not writing here
about Java (which I have never used) but about hacker's radar (which I have
thought about a lot)._

Most of the comments here on HN have been about Java and not about hackers'
radars. This is not necessarily bad but it is interesting. I've seen lots of
examples of this politics but not on a topic about technology. Does the topic
of programming languages have the same sort of emotional sensitivity that
politics does?

~~~
moondowner
Spot on comment.

There are even comments regarding Java in which is obvious that the commenter
doesn't have good knowledge of either Java or the JVM.

------
strictfp
Coming from a Perl and C++ background, Java was great because the designers
dared to remove so many features from the language. In that sense, it made the
efforts of the coders stand out more than the features of the language. This
is an important message to an up-and-coming hacker.

That said, Java is far from an ideal language. It lacks many features and is
somewhat clunky.

It does do a few things right, though. It hits a sweet spot being both
simplistic and fast. By choosing a single packaging, developers could use all
features everywhere, and start to rely on them. I think it certainly gave a
boost to concurrent programming. IMO, Java also drove the acceptance of GC:ed
languages.

Now that Java has stagnated, I think that it is time for many old Javaites to
abandon ship and transition to new languages. Perhaps it's best to let Java
be. Leave it as a historical language that had its glory days. Perhaps someone
will admire it for what it's designers dared to do. Perhaps for what it did
for the community. Or perhaps new up-and-coming coders can look in those old
code-bases and see some retro-style simplistic beauty.

~~~
cageface
Thanks to Android I've been writing a ton of Java code lately and, _with a
good IDE_ , it's not really that bad.

It should steal a few tricks from C# though. If it adopted the var keyword and
real lambdas, and something like LINQ, it would actually be a fairly pleasant
language to work with.

~~~
Silhouette
I think you captured the essence very nicely there: Java is the not-really-
that-bad language.

It's not very powerful and it lacks many useful features.

On the other hand, you can do almost anything with it eventually and it's
simple enough that stupid syntax mistakes are relatively rare in Java code.

It's a solid tool for a journeyman, and a crude instrument for a master. But
most people are never going to be masters, and most of those who will be one
day aren't masters yet.

~~~
cantankerous
By powerful do you mean that Java is not very expressive? Java can do pretty
much anything that any other language can do.

~~~
Silhouette
_Java can do pretty much anything that any other language can do._

Sure. That's part of my point. But just because languages are computationally
equivalent (cf. Turing), that doesn't mean one is as powerful/expressive as
another. I can get things done a lot faster in Python than in Whitespace.

The boilerplate in Java is a huge drag on everyday coding, and Java has weak
support for (among many other things) working with functions, text
manipulation, and in some cases even basic arithemetic. You can make things
work eventually, but sometimes the effort required and volume of resulting
junk code is prohibitive for otherwise useful programming techniques. That's
an asset if and only if the people on your team aren't up to using those
techniques anyway (and can't easily become so).

------
gst
I like Java - and I say this as someone who mostly used Python for the last 10
years (I learned other languages for fun, but did most "productive" work in
Python).

My main issue with Java a decade ago was all the bloat in the framework. Want
to write a Web application? Just use J2EE and write a few factory factories.
Or use the "lightweight" Spring alternative, that allows you to write plenty
of XML code.

This bloat got much better during the recent years and a number of sane
frameworks have evolved. Want to write a Web service? Use Dropwizward. A Web
application? There's the Play framework.

Java as a language is pretty nice. Yes - it has its warts, but the language is
relatively simple to understand and isn't missing too many important features
(Lambdas would be nice). In addition the type system really helps a lot when
having larger codebases. Yes - it's not perfect (type erasure, ...), but it
mostly does its job.

~~~
thebluesky
Your comments about Spring (not really lightweight) and Play (lightweight) are
spot on.

------
Paul_S
"Historically, languages designed for other people to use have been bad:
Cobol, PL/I, Pascal, Ada, C++. The good languages have been those that were
designed for their own creators: C, Perl, Smalltalk, Lisp."

Dazzling argumentative prowess. If I wrote that, I'd be called a troll and
downvoted for senseless flaming.

Historically people making baseless judgements like that have been proven to
be wrong.

~~~
michaelochurch
No, he's right. Now, Java is not such a terrible language. On a 1-to-10 scale,
it's a solid 5. (5.01? Can I make that joke?) It's unpleasant and verbose, but
the early Java community had real language designers, and even some
heavyweights, behind it (including Odersky, designer of Scala) and believe me,
they've made more good decisions than bad ones. (Language design is hard, yo.)
They got Unicode right in a time where expert language designers had their
heads in the sand on that one (UTF-16 is annoying, but it's a hell of a lot
better than byte arrays and strings living in the same type.) However, Java
was inevitably hijacked by the "commodity programmer" culture where
businessmen make decisions based on risk-limiting amid mediocrity rather than
clearing barriers and allowing excellence (as well as a few non-starters, cf.
Paul Graham's notion of "Black Swan Farming") to shine. It's not a fun
language to use, and the community that has grown up around it since its
inception has shown bad taste (J2EE, Maven, Eclipse). But for a period of
about a decade, Java was the best (if not only) choice for a variety of
problems.

Also, Java managed to succeed in the enterprise by feasting on Cobol's corpse,
but it built up a Detroit: a good-enough but unattractive infrastructure that
thrives when people have solid economic reasons to care about it, then is
abandoned rapidly when the context changes.

Groovy, Scala, and Clojure came out of an interesting insight: there's some
stuff in the JVM ecosystem that's too valuable to abandon just because the
Java language is (albeit slowly) dying. It'll be interesting to see how these
languages evolve in the next 15 years. Clojure is (IMO) the best Lisp, and
Scala is exciting as well... but there's a lot of cultural legacy to deal with
(there's plenty of bad Scala code being written by recently-promoted Java
programmers; most of them will improve massively as they get a hang of the
language, I hope.) Step 1 is to either improve or fire the FactoryFactory
crowd in its entirety.

~~~
lmm
Java got unicode horribly, horribly wrong; assuming everything will be in the
BMP is like assuming everything will be ascii, only harder to spot in testing.

It got some things right; threading (even ten years on Java has a more
reliable thread model than tcl/perl/python/ruby), strong typing (not much use
day-to-day, but incredibly valuable for building extensible libraries that can
nevertheless be evolved without breaking existing code), maven.

I think it achieved the enormous success it has mostly by being a
conservative, incremental improvement over C++ and Cobol. A lot of things
introduced in later versions of java were things other languages had been
doing for years, but an unwillingness to adopt unproven techniques is the best
thing about java. I don't think it even is the best choice for any given
problem - it's just that in a real world of mediocrity and turnover, java
makes it possible to produce reliable, boring code with minimal risk.

~~~
elefont2
The unicode consortium got unicode wrong, not java. At the time Java was
created, there only was a BMP and Unicode had a purely 16-bit design.
Therefore, it was perfectly reasonable for java to assume a 16-bit char.
Unicode was later extended to support more than 2^16 characters, but that was
after java was created, hence the need for UCS-2/UTF-16

Other languages which strongly value backwards compatibility and were created
around the same time have the same issue - e.g.: C#/.NET, i believe python as
well

------
smoyer
I'll say it ... I love Java (and I'd been hacking in a for a couple years when
PG wrote his article).

I came from an embedded systems background and treated the JVM as my machine.
I read and understood the JVM specification, and then the language
specification. By that time it wasn't any different to me than writing for a
uP or uC. At that time, Java was a fast-growing eco-system and our JUG met
twice a month to keep up.

While this was happening, I knew a lot of people like PG who _did_ judge the
book by its cover (and there were parts of the cover I didn't like). Don't be
so hard on him as he admitted he never cracked it open.

Out of curiousity, have any of the YC start-ups used Java? I'm curious whether
he's still biased against it. (We can count JVM languages for half points).

------
kds
The title of the submission is a bit misleading.

PG explicitly states in the essay that it's not that much on Java itself but
rather on the way hackers judge technologies (the "hacker radar" in his
expression).

And these are not quite predictions but statements on how Java is (or was then
back in 2001) perceived.

And I think, IMHO, a substantial part of the Java success today should be
attributed to the JVM, not so much to Java, the language. Clojure/Scala/etc.
are kind of clues for this.

~~~
yen223
No hard numbers, but I'm sure most Java implementations are still running Java
the language. IMHO Java's success today is more because of corporate inertia
than anything else. Kinda like how COBOL still has users in this day and age.

It also helps that it's one of the languages being taught in CS classes.

~~~
beersigns
I work in a very large company that has primarily Java for web apps and back
end processes in COBOL/Mainframe environments. I've been steering things
towards Groovy or Ruby for new projects, largely using productivity as the
justification. Top push backs from upper management have been: 1) Universities
we recruit from teach Java & most prospective employees already know Java 2)
Costs of retraining workforce 3) They don't understand those langs can be
utilized with our current JVM ecosystem

I feel pretty much all those reasons are specious and really shouldn't be
holding things back. We've got a foothold established with success of some
smaller projects using Groovy and Ruby to "prove" their viability. I'd like to
try Scala next to see how it would fit for some of our other projects.

TLDR: At least one large company is making efforts to evolve beyond just Java
in the JVM.

------
jballanc
For the _Dune_ fans out there...

Java and the JVM ecosystem strike me as very much like the programmers "Golden
Path". That is (for those not familiar with _Dune_ ), Java represents a sort
of "forced peace". Yes, things work. Yes, tools are available. Yes, there is
decent, even good, documentation.

No...nobody's happy about it. But then Java also bred the JVM, and today we
have "the Scattering" (another Dune reference), where hackers, honest-to-
goodness _hackers_ , have spread out from this forced peace to build a new
world. One that, while it will not be as peaceful as the uniform world of
Java, will ensure that the JVM remains relevant long into the future.

~~~
archangel_one
I always thought the Golden Path referred to the continuing fate of the human
race and continued after Leto's death, not referring just to his forced peace.

Still, I'm impressed that you managed to work a Dune metaphor into a Java
discussion...

------
pg
Well, _is_ Java a clean, beautiful powerful language that people love
programming in?

~~~
Zimahl
I have been developing Java since 1996. I have a written a lot of Java so I'm
probably a pretty strong example of a Java developer. I'm an above average
developer (and that might be generous) but not much of a hacker.

So let's get to it.

Is Java clean and beautiful? Sure, it's easy to read and just about anyone who
has read any other language can figure out what's going on.

Is Java powerful? You can do just about whatever you want with it. Early on it
was pretty tough to get to the native level but that has become less of an
issue over the years. It still doesn't do graphics all that well so it's never
been a great option for game development.

Do people love programming it? Programming is tedious work and good languages
help reduce the tedium. I'm not sure Java reduces the tedium _enough_ , it may
even increase it. But this is what makes it cleaner than other other
languages. Sometimes the tedium that it doesn't reduce is how others can come
in and know what I was thinking then I developed it. However, POJOs with
getters and setters are tedium no one explicitly needs.

I'm currently working on a new project (in Java) that I found I was building
more classes than I felt I needed. A lot of getters and setters, object
managers for each object, DAOs for each object, and each object itself. All
that before anything even makes it into or out of a database. I thought if it
would be easier in any other language and the answer was yes, but only
temporarily. Once this boilerplate stuff is done I would have a very robust
application that is easy to refactor if necessary and just about anyone can
add to it will little trouble.

That said, I've been meaning to try out scala and python. I tried ruby but
found it a little too _young_ (but that was a couple years ago). I also said
I'm not much of a hacker so I tend to spend my free time doing things other
than development. I'll probably get around to learning those languages right
after I learn to play the piano and can speak fluent German.

~~~
SilasX
>Is Java clean and beautiful? Sure, it's easy to read and just about anyone
who has read any other language can figure out what's going on.

Easy to read? What? Let me do a simple comparison. Let's say there's a site,
ycombinator.com, that wants to ban anyone who posts "First post!" on a story.
Here is what the python code would look like:

    
    
      if "first post!" in comment.text.lower():
          comment.user.ban()
    

Here's what the Java code would look like:

    
    
      public static void class PostPunisher extends PostHandler raises Exception {
        public void PostPostHook(Comment comment) {
          if (comment.text.to_string().to_lowercase().contains_substring("first post!")) {
            comment.User.Banner.execute();
          }
        }
      }
    

Well, I left off a few factory factories there, but you get the picture.

~~~
Zimahl
You're being obtuse just to be obtuse. This is exactly the type of
nonconstructive feedback that does no one any good.

There is no difference in your python code than the Java code that someone
would write:

    
    
      if(comment.getText().toLowerCase().contains("first post!"))
      {
        comment.getUser().ban();
      }
    

Java doesn't require a class, it doesn't require a method, it doesn't require
a factory. There is literally zero difference between the python example and
my Java example except the syntax between the languages.

You just felt the need to unnecessarily obfuscate the code to suit your
argument.

~~~
SilasX
Do you disagree that Java typically requires the additional boilerplate I
showed?

~~~
Zimahl
I believe my last post clearly showed that I disagree.

There is no 'boilerplate' required with Java. Anyone can obfuscate Java, or
any language, and make code that is overly and unnecessarily complicated. Some
do it because they don't know better. Some, like yourself, just do it to be an
ass.

~~~
SilasX
I wasn't doing it to be an ass. Even if you are allowed to manipulate the
class function you're dealing with (and so spare new classes), most java code
does look like the example I gave: lots of verbiage, having to create special
classes (including [verb]-er classes). Very, very unpleasant to read, and not
big on beauty either.

------
6ren

      > a hunch that it [Java] won't be a very successful language
    

He lists COBOL as a bad language - but it's been very successful. So I think
he's not really writing about "success", but about what hackers like.
Interpreted this way, he's accurate: hackers _don't_ like Java.

Businesses like investments that keep returning value - for languages, that
means compatibility and portability. Hackers like to change things -
expressiveness and power. Java code from years ago still works; it's also
portable across machines and OSes. In contrast, ruby broke my simple toy code,
after just a few months, in a minor point-release. Similarly, I believe there
are many incompatible versions of lisp, and many hackers write their own
libraries rather than reuse, so there's little standardisation. Different
things are valued.

So I agree with pg's theme that if businesses like it, hackers won't. (There's
some factual inaccuracies in the rest, but that wasn't his point.)

~~~
stickfigure
_hackers don't like Java_

Speak for yourself.

------
eckyptang
I'm probably going to get flamed for this but I think even for it's time, it's
wrong on a few accounts and it stinks of elitism and an "I am better than
thou" attitude rather than a discussion on relative merits or the preface
which was slapped on to change the context. It sounds like it's written by
someone who's comfortable status quo is threatened.

Ubiquitous readily available knowledge is power, not elitist hackerism...

------
ChuckMcM
That's one I hadn't read, although sadly I agree with much of it. As one of
the people who worked on the 'LiveOak' project which was the final, and
presumptively last gasp, of Java before Sun 'redeployed' all of us, there was
this really modest view of what the language was. And then it was released and
folks started saying "Gee if people deliver programs in the browser, and Sun
owns the language/environment of the browser, they are going to freeze
Microsoft right out of the market, brilliant!"

Except nobody who was actually a part of the Java group said that, they said
"Gee you can push a chemical molecule viewer to the browser at the same time
you push a model, that will let you publish stuff without having to wait for
browsers to 'catch up'"

Sun corporate had their own ideas though, and seeing it as a way to 'attack
Microsoft' (which looked pretty unassailable in 1995) and a lot of other
people were feeling the same way, and the language got hijacked. That was a
sad thing indeed. I feel sorry for the developers who create a technology that
is perceived as the way to 'kill Apple' or 'kill Google' since it will be very
popular and ultimately corrupted by those who would seek to use it in that
role. I have the misfortune of having worked on something which Sun tried to
kill Microsoft with and Oracle tried to damage Google with. 2 for 2, yuck.

So if you can separate the language from the politics, there is a lot to like,
it has been influential in a number of positive ways. But the taint on the
language from the politics will be its most enduring legacy I suspect.

------
adwf
I've always felt that it's a language designed to help eliminate the worst of
programming, which has the side-effect of limiting some of the best
programming.

So great for big businesses, but poor for hackers wanting to do cool stuff.

------
yen223
First off I must say that I like reading about past predictions. It can
provide insights into how well current predictions may pan out in the future.

It interesting that all the points made 11 years ago can still be made today,
with the exceptions of #1("It has been so energetically hyped") and #8("It's
pseudo-hip"). I guess it's true that the more things change, the more they
stay the same.

------
markokrajnc
"No one loves it. C, Perl, Python, Smalltalk, and Lisp programmers love their
languages. I've never heard anyone say that they loved Java."

I love Java. I loved Smalltalk until 1996, then I read Java White Paper and VM
Specification and I fell in love with Java and I am still loving it more than
any other programming language. I programmed in Basic, Assembler, Pascal,
Oberon, C, C++, Smalltalk, Perl, PHP, Python, Ruby (on Rails) and used many
technologies. Smalltalk was my love from 1992 until 1996...

I could write a lot about why do I love Java. If somebody is interested, I can
explain...

"People are forced to use it. ... if the technology was good, they'd have used
it voluntarily."

I am using it voluntarily for all my projects more than 15 years now. I even
migrated all my programs from other languages to Java... I am regularly
checking new programming languages - recently I tried out Dart and Go - and I
still can not find a better programming language for me... Java is still Nr.
1!

I confess: I love Java. :-)

------
jarsj
I built a new programming language in scheme, wrote a compiler in C, map
reduces in C++. I hate struts, hibernate and all shitty enterprise frameworks
but I can proudly say that I love Java. I have used it for Speech synthesis,
Image processing, Machine Learning, NLP and of-course Search. It's awesome.

------
coopdog
Java is horrible for prototyping, it's designed for large environments where
management of complexity (through interfaces and some level of top down
design) is desirable.

It's not a hacker language.

PG makes a very good point though - that today's teenagers (hackers?) are
tomorrows CEOs. But not everyone can be above average, not every CEO can be of
a technology company, and eventually those CEOs need to hire average
programmers to do basic enterprise information systems work.

Scala on the JVM with play framework is looking pretty agile these days too

------
loumf
The only prediction he made is that he would personally not like to program in
it and that he could safely ignore it. I think that prediction has come true.
He ignored it and that had no detrimental effect on him. Not ignoring it would
probably not have had a benefit.

He didn't say that Java will die, that some people won't benefit from it, that
useful things won't be made from it.

It's way too large for some good not to come out of it.

------
hellrich
I've become really fond of Groovy during the last weeks. It's compatible with
the huge number of existing Java code but more terse. Also its defaults seem
more pragmatic, e.g., "==" comparing Strings by value or implicit
setters/getters. And version 2 promises Java like performance (and type
checks) for statically compiled code.

------
mgkimsal
Another thought just struck me - a friend was relaying his thoughts on
Java/JVM vs other languages. Again, related to pg's wrappers, the core thought
was "Java as a language was more designed for the computer than a developer.
Something like perl was more designed for a developer rather than the
computer". The point was more expository than that, but that's stuck with me.
Static languages in general seem to be that way, whereas dynamic langs (perl,
ruby, php, etc), will make operations much simpler for a dev to implement,
even at the expense of speed/clarity to the underlying os/vm. Perhaps there's
more nuance here that I'm missing, or perhaps this 'wrapper' fits inside one
of pg's wrappers already?

~~~
erichocean
Scala is statically typed, runs on the JVM, and yet feels very much like
writing Ruby or Python to me. The only time you have to add typing in the
codes is where I would usually add it anyway in a dynamic language, via
comments or stereotypically-named function arguments.

------
forgottenpaswrd
I believe that PG is totally right in this one.

Android uses java not because it has been decided by the hackers but because
of a top-down decision from a big organization. It made strategic and economic
sense for them.

All big organizations love java and most programmers are not hacker geniuses,
they just want to pay the rent. So most programmers(in number) use java or C#.

I use Java a lot, but is so bloated, slow and "I'm sorry, Dave. I'm afraid I
can't do that." But it brought VMs to the table and that was a good
contribution as it is really useful for some applications. Now that you could
do that on C or C++ with LLVM but is easier on java.

For a simple proof of concept I will use java, or python, when I 'm serious I
will use c, c++ or obj c.

------
EzGraphs
Java might appear to be more successful than the (2001) article suggests, but
it is geared towards java "the language." Its not a great language, but has
found itself at the right place at the right time to address certain technical
concerns (a "better" C++ at a time alternatives were being sought, concurrency
with the rise of multi-core processing).

Java "the platform" (the JVM) has been a bigger focus in recent days
especially with additional language support (JRuby, Jython, Clojure, Groovy,
Scala). This support has been expanded in each recent release and seems to be
the basis for the majority of the articles that appear on HN (or at least that
I notice).

------
nshankar
Where do you find Go in 2012. It is also sponsored by a large organization.

------
rvijapurapu
Having developed in Java for years, I agree with some of the points which PG
has predicted 11yrs ago!

That said, using Java is sort of a insurance policy.

1\. It's easy to find developers. _Sometimes_ easier to outsource modules. 2\.
It's usually hard to make mistakes in Java (you can screw up, if you want to)
- mainly due to great tooling and excellent time-tested frameworks which help
a tonne. 3\. Has good complementary languages (Scala, Groovy, JRuby..), which
interop well with other frameworks at large. 3\. JVM does black-magic for you.

I guess committee did make a decent pick then.

~~~
moondowner
JVM does not do black magic. You can donwload the source if you want to see
what's going on: <http://openjdk.java.net/groups/hotspot/>

~~~
rvijapurapu
I know... I was talking about the optimizations which JVM does on fly.

~~~
moondowner
You're right about that, and as a plus, depending on which JVM options you use
it can act differently
[http://www.xenoc.demon.co.uk/A%20Collection%20of%20JVM%20Opt...](http://www.xenoc.demon.co.uk/A%20Collection%20of%20JVM%20Options.htm)

------
stevenelliottjr
Indeed this as an interesting topic; however, I think that many missed the
point of the essay altogether. He wasn't saying that Java is a horrible
language just that it's not viewed favorably by "hackers". I think that he is
probably right but I didn't know he spoke for hackers everywhere. Java is just
another tool in the box that almost everyone has to use at some point. Is it
ideal? No. Is it perfect? Nope. Is it fun to write software with? Sometimes. I
spend most of my days writing Python code with either Django or Pyramid and
also have problems with it from time to time. Though I consider Python my
"favorite" language it's far from perfect! All languages/platforms have their
problems and tradeoffs and there is little you can do about it other than
create your own.

Just because Java is not viewed favorably by some random sample of hackers
that pg may or may not know doesn't mean it's not an effective language. Hell,
I think C and C++ are both horrible but I have to use them sometimes and while
its not ideal for me it is what it is. If you wanna get paid, you'll use what
you have to. (Joel Spolsky cover your eyes) I went to a Java school to
computer science [GASP!] and it was fine. I already knew how to code so it was
just a formality for me; however now that I'm looking at Android development
I'm glad that I learned some Java along the way. A hacker is a hacker no
matter what language they use and most programmers are not good enough to be
called hackers anyway.

Predictions are very much like arses; everyone has them and they usually
stink.

~~~
Draiken
Exactly. All this talk about mediocre programmers use java and good
programmers use "new cool hipster" languages is just a very biased statement.

There are hackers in every language and there are mediocre programmers in
every language.

I've seen more mediocre programmers wanting to learn the new hipster languages
than java. In 10 years from now these same languages will be on the java spot,
and the cycle will continue.

But it does amuse me how so many people think they are better programmers
because they use language X or Y.

Love the predictions analogy :p

------
erichocean
Okay, I think I fit the "hacker" name (whatever that is) as well as anyone.

And for my next project, easily the most ambitious I've undertaken, I'm
working on the JVM.

If you'd asked me three years ago if I'd ever write Java code, the answer
would be no.

I don't really write Java though – I'm mostly using Scala, along with a couple
of libraries that were written in Java, that I patch (e.g. Cassandra).

Point is, hackers _are_ choosing the JVM today, whether its Scala, Clojure,
Groovy, or JRuby, Jython, and the like. And having Java in the mix, from my
perspective, is not at all bad. It means there's _tonnes_ of relatively usable
libraries out there, that are easy to tweak without breaking things, that have
had plenty of time to bake.

The Java classloader mechanism is kind of nasty when it's paired with
application servers, but consider on its own, it's allowing us to do live
rollouts of new applications written in Scala without restarting the JVM. (We
don't use an application server, we effectively wrote our own.)

Akka is like Erlang-light, and paired with Scala, makes the kinds of things
people are wanting to do with Node.js (which I ported to Solaris, along with
v8) easier, faster, and safer.

tl;dr Hackers _are_ starting to choose the JVM, and the modern languages built
on top of it (Scala, Groovy, Clojure) and the huge base of existing Java libs
is making that possible -- just like the huge base of C/C++ libs made choosing
Python, Ruby, or Perl reasonable a decade ago.

------
gbin
Quite good points except the major one : "I have a hunch that it won't be a
very successful language"

~~~
praptak
Granted, pg has not explicitly defined "successful" but it is clear from the
context. By this definition Java is not successful.

~~~
damian2000
So why is it unsuccessful? Sure inside the browser its a piece of crap, but in
terms of usage and the number of OSes and embedded processors it runs on, its
surpassed probably only by C.

~~~
praptak
It is not popular among hackers.

~~~
thebluesky
The zero day applet exploits say otherwise ;)

------
hcarvalhoalves
"Historically, languages designed for other people to use have been bad:
Cobol, PL/I, Pascal, Ada, C++. The good languages have been those that were
designed for their own creators: C, Perl, Smalltalk, Lisp."

They might not be the most beautiful languages ever invented, but they power a
great deal of real-world applications. If people managed to write useful
software with those, I consider that a success.

On the other hand, I probably never used or depended on any software written
in Smalltalk in my life.

------
paulerdos
Hmm... Android uses java. Therefore, Android smells suspicious?

------
ww520
I actually like Java very much and am tremendously productive with it. It's a
simple language and simplicity helps in many areas. It got many things right.
It has a comprehensive standard library. Threading is excellent. Performance
is excellent. Typing is helpful.

Its support for functional programming is lacking, which is why a lot of
people from fp background have a dim view of it.

------
16s
I love C++ and I know guys who love Java. And they are great systems
programmers. I have nothing against Java the language (I do dislike the focus
on OOP), but do have issues with JVMs (I prefer real machines rather than
virtual ones), however, I would not say that no one loves Java. It has a place
and is useful, and is appreciated, by many.

------
Rickasaurus
After reading this I'm completely convinced that Go will be one of the world's
most used languages within a decade.

~~~
astine
By that logic, Google will cease to exist!

------
espinchi
It's never been a loved language, but there it is, pretty much all over the
place so many years later. I wouldn't have guessed that either!

I'd be more interested in reading on well-rehearsed, _current_ predictions
about Java. Many enterprises are starting to consider (mostly JVM-based)
alternatives these days.

~~~
w0utert
> I'd be more interested in reading on well-rehearsed, current predictions
> about Java.

I predict Java-the-language will stick around for at least another decade, if
not for the huge enterprise codebases and the years invested in Java training,
it would be because of Android. The biggest mobile platform of the moment is
Android, and it's completely focussed on Java (whether that's a good thing is
a whole different discussion).

Without Android, I think Java-the-language would fade very quickly, because
IMO you can't possible assert the language is better in any way, for any kind
of purpose, compared to the many alternatives. It's archaic, verbose,
unnecessarily restrictive, misses most of the more modern language features,
or bolted them on like ugly warts, it is not a very good RAD language because
you need so much boilerplate, etc. In my experience (I've written about 100k
lines of Java, many multiples of that in C, C++, Delphi, Python, Objective-C
and PHP), Java is without doubt the least pleasant language to write.

As for Java-the-platform, I think that part of Java will not go away quickly.
The JVM is actually very good, and the Java JDK frameworks are extensive,
well-documented and well-known. New languages on top of the JVM, that allow
leveraging the JDK frameworks will remain very popular for a long time, for
good reasons.

------
mgkimsal
I remember java from 1998/99, and by 2001 was getting the 'you should do java'
routine from some colleagues. "why?" "there's so many jobs out there for it -
it must be better!" That seems very much like another 'wrapper' pg is talking
about.

I remember my immediate reaction was "there may be more jobs because it's
takes twice as many people to write similar code as many other languages". In
some ways I still feel that. The open source ecosystem around the JVM now does
allow a much different level of productivity than the JVM offered in 1998.
However, when I have to drop down to just plain-old-java, I'm reminded of how
verbose and clunky the language is. When using the JVM, I'm typically on
Groovy using some great Apache libs and such, both of which tend to shield the
clunk away. :)

------
fecak
Personally I don't think the accuracy or inaccuracy (both are debatable) of
the opinion is that interesting, and I've run a Java Users Group for over 12
years. I felt the article is much more interesting as a look inside a hacker's
head as to what non-technical factors influence his/her opinions (and
ultimately decisions) about a technology. I wrote a blog post breaking down
his reasoning for the 'stink' and how those are/aren't applicable to today's
software landscape.
<http://jobtipsforgeeks.com/2012/09/11/howhackerschoosetools/>
<http://news.ycombinator.com/item?id=4510455> to discuss on HN

------
smoyer
I just started a thread for HNers that would like to meet at JavaOne - see
<http://news.ycombinator.com/item?id=4504803> for a discussion of time and
place.

------
sunraa
I'm not sure I find much to quibble with in the essay. In fact I find it
almost prescient. Having worked with Java in an enterprise setting for over 12
years almost everything in that essay rings true. As we are acutely aware the
enterprise beast moves to a very different beat - namely the vendors looking
to make their numbers for the year. You're an IBM shop or a Microsoft shop.
The decision's been made for you. And there's nothing wrong with that. As
someone else pointed out, you're buying tooling, support and in the case of
IBM - hardware. It is the almost the COBOL of this generation.

------
TheCapn
I don't think he's _wrong_ in any sense of the word when he wrote it. From the
opening he's very forward about his "hacker radar".

From a hacker perspective, Java is typically a poor choice. But it didn't
succeed on hacker merits so much as it did on sponsorship and forward pushing
from business types. Any competent programmer who has been in the field for
long enough sees Java's issues and strengths and can judge it impartially but
I'd be hard off to find a single one that felt it was the "best" language by
any means.

------
EternalFury
Like or dislike Java, it has changed and transformed enterprise software
fundamentally and remains one of the top used languages in the world.

And I thought it would happen the way it did.

Python was already around back then in 1994, but nobody cared because Java had
Duke and was being pushed as the new idiom for everything networked.

Hacker's radar is a valuable instinct, but when a reputable commercial entity
acts as a wise custodian, behind a technology with technical merit, effort can
easily trigger and accelerate grass root adoption.

------
tegeek
Back in school days I learned about programming paradigms, programming
language technologies and cutting edge research on programming languages. I
learned Java and also Haskell. Most of my class mates including all the
teachers knew this that any industry grade language needs to provide multi-
paradigm support out of box or it'll die. If a species is not adaptable to its
environment, it'll die. And Java is one of those species.

------
sampsonjs
Why's this ancient text from the canon of Graham getting resubmitted? So we
can all have a good laugh? So the readers of this site can have a big argument
over the definition of "success"? "Sure Java sees a lot of use by clueless
corporations, but teh haxors disdain it, therefore it's a failure!"
Incidentally, Google can be added to the list of big dummies who use Java.

------
easternmonk
Right premises wrong conclusion. Most of the things PG says about Java are
true but his conclusion that it wont be successful is completely wrong. Java
is not a darling of hackers for all the reasons he has mentioned but it is
embraced by large organizations for the very same reasons PG mentions which
means there is huge market of job for Java coders if not hackers.

------
njharman
These predictions are correct, for the values of popularity and world pg and
HN deal with. Startups.

The thing not cleary stated (or possibly understood) is that "large
organizations" far out strip startups in number of employees, amount of code
written, advertising budgets. And Java is very popular in "large
organizations".

------
jyou
I wholeheartedly agree with him - I wish I had read this essay in 2001, I wish
every Java developer, especially whose who were live in US, had read it. There
was nothing wrong of Java in 2001, but, you should have caught the smell of
corporate, protocol, committee, process, outsourcing, offshoring ...

------
brudgers
_"I have a hunch that it won't be a very successful"_

As a general case, the first thing which struck me when rereading this essay
was the way in which Graham's writing style (and his draft readers' editing)
has improved. Today, a similarly structured essay would clearly answer the
question, "Successful how?"

------
oellegaard
I think he has a lot of good points. I think if they would finally stop
teaching Java in CS and other IT-related educations and Android would get
proper support for other languages, Java(language) would slowly fade away.

------
pohl
While this rings true after all these years, had it not been for Java those of
us living in the midwest would have either had to move away or spend the
intervening years coding in VB6.

------
rbanffy
Except for the parts where he predicted Java's failure and FreeBSD's
dominance, I see no big problem. He even predicted Sun's fate.

------
10098
> 4\. No one loves it.

I think he got that one right: none of my colleagues who write Java are that
much into it. They just have to.

------
dotborg2
> So far, Java seems like a stinker to me. I've never written a Java program

------
bestes
Please add the date...

------
aw3c2
*2001

~~~
Gilly_LDN
Learnt Java at university and swore off it as soon as I finished my course.
Had a day job writing Perl software and it has been much better. The only
effect though is that I have been put off Object Orientated code to, I find
that and Java too verbose and non-transparent enough to hack or maintain
quickly.

~~~
smoyer
We're a north and south pole ... I swore off Perl in 1996 or so and spend my
day job coding in Java. I find that Perl is too obfuscated and inconsistent to
write solid, maintainable code.

This is one where I think we're going to have to agree to disagree!

~~~
Gilly_LDN
Sounds okay to me - at least we won't be bumping heads applying for the same
roles :)

------
michaelochurch
Java-the-language filled a need for some time, and there's a lot of value
staked on the JVM, but Java-the-culture needs to die, and the sooner the
better.

[http://michaelochurch.wordpress.com/2012/04/13/java-shop-
pol...](http://michaelochurch.wordpress.com/2012/04/13/java-shop-politics/)

~~~
erichocean
Fantastic article, and a perfect candidate for HN readers.

 _C++ exists because someone had a fever dream in which these two classes of
vehicles got mixed up and thought, “I’m going to put wings on a fucking
tank”._

~~~
reinhardt
Indeed. Another gem: _I haven’t map-reduced a toaster cluster for years._

