|
|
Of course, the Java buzz has been present since I was an undergraduate student,
but being in the games industry I have been so happily insulated from it that
the buzz has always maintained such a low signal-to-noise ratio in my attention
that I never really registered it.
Frankly, the only thing I ever use java for is when I write something that I
want to put on my website where the load involved in hosting the required CPU
cycles would be prohibitive, so I whack it together in Java and push it out the
door. I think I have only one surviving project like that, and I'm here to
tell you, Sudoku puzzle creators are a pain in the ass to debug in any
language. (As I type this, Internet Explorer has completely frozen up on me
trying to run the thing. Firefox is fine.)
But Java enjoys a growing popularity. I've never understood it, really, though
some of the more recent developments are really quite interesting. But I will
say this: if Java ever does take over the world (no language ever will, but for
the sake of the next wishful thought, we'll enter the Land of Make Believe)
then I'll never have to look at another Gawd-awful line of template code again
as long as I live.
Templates are the realm of the worst code I have ever seen. A company I used
to work for would require multiple inheritance - 10-20 typenames wide and 2-3
deep - to create a single object. Whoever came up with that crap was never
an engineer, they were just a programmer. And a laughable one at that. He
developed his - for a lack of a better term - "skill" by inflicting his
experimental contraptions upon a professional world. He cost that company
ten to fifty times what they paid him.
I've decided that we teach programming the wrong way around. We hand people a
computer and have them write their own code for years on end before they ever
have to really grok - at a fundamental level - any appreciable body of code
that was written by a stranger. We give budding engineers years to develop
their habits and foibles... then turn them loose upon the world.
It seems that the way to go would be to teach software engineering, the art of
coding, as a passive art for a while. Learning by doing imprints syntax,
semmantics, and algorithms, but it does not teach style. More importantly, it
does not teach one speck of how to write readable, flexible, extensible code.
A good software solution is like any invention, in that when you see it laid
out before you the idea is obvious. Your mind skips over it and only ends up
focusing on that which requires your undivided attention to decypher. By
letting novice coders run amok in their own little protected worlds, writing
code that only they will ever read, and failing to expose them to some serious
crap, some software bereft of thought, we set them up for failure in
professional life.
Think about it. How many programmers do you know that fell out of the faith
after their first job? There must be something fundamentally different between
the education they received - at great expense - and the professional life. For
me, the largest difference was simply... I never, ever, ever, had to look at a
large body of code, or even a small body of bad code.... until I was a
professional.
I still see this in every junior programmer I meet. I see it in every proud,
"self-taught" hacker I bump into.
We don't ask English majors to start writing their novel until they've read,
digested, disected, analyzed, and absorbed hundreds or thousands of authors.
It is so obvious that you wouldn't do it any other way that it would be
ludicrous for me to even suggest that authorship should come before readership,
so why on earth do we take this path with programmers?
Software is not getting smaller, it is not getting simpler, languages are not
going to minimize in any conceivable future. The shock factor of leaving 4-7
years of personal projects and getting dumped into a 100 man-year swamp isn't
going to get any more pleasant. If we want another generation of bit-heads,
this is a problem that must be addressed.
-rbarry
|