Previously posted on
Lacrymology.com
On JavaTM (part 1)
I’ll start immediately by saying that I am in love with
JavaTM. It has provided me with a
constant source of Long Island Iced Tea funding, as well as helping to
pay the rent (in order of importance). However, as a self-proclaimed
hacker (although these days a bit of cruft is forming on the keyboard),
something about JavaTM just does not
smell quite right. It wasn’t always this way.
JavaTM once smelled like money, and to a
fresh-out-of-college stud like myself, money was the only smell worth
smelling. As the time has passed and I am starting to make my bones
(although I am closer to gelatinous goo than vertebrae),
JavaTM has lost it’s original fragrance
and has started me reminiscing on $20 whores. This should come as no
surprise however, for had I read the original whitepaper by James
Gosling, I would have observed one
of the primary guiding
principles:The system that emerged to meet these needs
is simple, so it can be easily programmed by most
developers…
After a few years of hard-core
JavaTM development, I have come to learn
that the previous sentence has almost universally been translated
as:The system that emerged to meet these needs is
simple, so it can be understood (sic) by
managers and facilitate
Mongolian Horde programming methodologies.
What on
earth am I talking about? First of all,
JavaTM is specifically designed to allow
non-programmers to become programmers. The success of this goal can be
debated all night long, and I tend to believe that it has failed.
Programmers are not the product of simple languages that treat them like
idiots. JavaTM code written by an ape
will always look, feel, and operate horribly. The simplification of the
language will not compensate for lack of skill. Likewise, the fact that
JavaTM intentionally adopted a C++ syntax
in order to facilitate familiarity for C++ developers willing (most
likely forced) to make a change in languages. On the surface, this
property may seem virtuous in that it presumably allows C++ hackers to
make a smooth transition to Java. Sadly, anyone who has spent any
appreciable amount of time surrounded by programming geniuses will see
the sham perpetrated by the C++ style syntax choice. That is,
expert-level C++ programmers care nothing for the stag of C++. These
people are C++ hackers because they know how to think programmaticaly.
These people can speak in binary, and perform math in base-8. These
people couldn’t give a toss about language syntax, and in fact often see
it at worst a nuisance and at best charming. C++ hackers would not lose
a step in productivity regardless of the syntactical choice, be it C++,
Scheme, or Logo. Given the choice between someone that truly grasps the
nuances of programming in Lisp over some code-grinder familiar with C++
syntax; the former wins 100% of the time.
Second, during my
extremely limited time working in the "real world" I have been assaulted
with the supposed power of JavaTM to
support Rapid Application Development (RAD). Granted, I have been able
to whip up some massive functionality quickly in the name of
creeping-featurism, therefore the RAD aspects of
JavaTM have largely succeeded. Having
said that; RAD is BAD. I cannot count the number of times that a crafty
mock-up has fooled the customer in question into believing that the
desired system (which they very often than not have no clear picture of…
more on this later) is ready to be signed, sealed, and delivered. This
perception has been the cause of innumerable amounts of ill will toward
developers:
Customer/Manager: Why is it taking so long to
deliver my program? You were 90% done 6 months
ago!
Developer:
Uhhh. That was a mock-up
cue
crickets
Customer/Manager:
Why is it taking so long to
deliver my program? You were 90% done 6 months ago!
Stay
tuned for part two.
-m