I've been "working" most of the day, but it's what I call "obsession
work" -- like obsessively scratching an
itch. I doubt my boss understands
why I work so hard on things like this.
I was handed some legacy Perl stuff to patch up. When I say legacy, I mean perl4, and when I say patch
up -- I have never, ever seen code this bad. I mean -- I've seen lots of
code, and I've seen lots of poorly written code with lots of bugs, but
this is in a class of its own -- because, you see, it works. It's like
Wolfgang Pauli said -- "This isn't right. This isn't even WRONG." The guy
who wrote this stuff essentially takes several thousand lines to do what I
can do in fifty, because he reinvents everything in the process.
Here's a representative sample; bear in mind that he does many things just like
this, all just as horrible.
He doesn't know about arrays. He doesn't know about arrays!
Instead, he has two scalar (string) variables: mydata, a
concatentation of all the data values, and locations, a
concatenated list of offsets into mydata. For example, take this array:
@apples = ("rome","mcintosh","granny smith","delicious")
He instead does this:
$apples = "romemcintoshgranny smithdelicious"
$apples_offsets = "000004012024"
Get it? Three digits each. The offset of
rome is
000,
mcintosh 004,
granny
smith 012,
delicious 024. He knows that the offsets of the
$apples_offsets
variable itself (which, after all, is itself a pseudoarray) are
consecutive multiples
of 3, so he doesn't need a
meta-meta-meta-meta-etc-
offset.
The mind boggles.
He then goes on to implement, poorly, useful methods like push and pop. Along
the way he "invents" file locking, persistent storage (he writes his
pseudoarrays out to files), and a host of other trivial things. If you
look at it from his perspective, he must think he's a genius --
I mean, sheesh: he singlehandedly invented the concept, or at least the
implementation of, arrays! Oh, and it gets better -- in one place he opens
a file, reads a filename in from the file, assigns the filename to a
variable, passes the variable in a web page in javascript, then gets the
variable value back under a different name via CGI, assigns it to
another variable, and finally actually opens the named file.
I see this code and I can't
help but fix it. It's like ... here's this immensely ugly thing, and I
can tear it all down and make it beautiful. Never mind that the end
product is rather humdrum -- a very simple records entry utility --
I'll sit here for hours studying his code, looking for all the
idiosyncrasies that other systems now depend on (once others have coded a
workaround to a bug, the removal of the bug would be a bug...), and in the
end replacing his 12,000 lines of code with around 200.