January 27, 2003

Alex read last week’s

Filed under: Archives — mhoye @ 12:00 pm

Alex read last week’s entries, and was consumed with rage! Brimstone
steamed from his mouth and nose as vitriol spewed through his
keyboard, directed at your unsuspecting author! Well, probably not
really; he just disagreed with me. He’s a pretty relaxed guy most
of the time, and probably doesn’t even know how to sweat
bile or make a sinister red froth drip from his tear ducts. And
good for him, I say. But he did disagree, and with his gracious
permission I’m going to reprint some of his remarks here in no
particular order. It will become obvious in a moment that I agree
with most of his points, and that I expressed myself poorly in
that previous group. Mercifully, though, I disagree with him in
on enough points that it won’t seem like I’m gunning for the 2003
Remora Anteriorum Award and if we’re really lucky, fearless reader,
this won’t be a complete waste of time. Alex writes:

Real Programmers” like that are jerks. They get
laid off by any half-competent manager. They produce terrible code,
and in the end it’s inefficient. Real Programmers will focus on
the most useless and unused part of the code, and will make it
optimized. It will be buggy, and impossible to debug. They always
screw up. They’re prima-donnas, except they don’t really know what
they’re talking about.

Nobody likes a “real programmer”. Nobody works with them. You can’t
count on them. They can’t provide you with decent estimates, or
a stable API, because they don’t think those things are important.
I really have nothing good to say about Mel.

Let me be clear about this – I don’t want to be Mel. I did, once,
but I grew up; the reason that I grew up had a lot to do with my
fellow students and my opinion their and occasionally, I’ll admit,
my, ability to cooperate, which is dismal to the point of slapstick.
The problem is that I’ve realized that I could actually get out of
a degree program here without ever having to so much as attempt a
couple of things that I suspect are pretty fundamental skills out
there in Real Life. For example, I have not yet had to:

  • Write a stable, rigorously defined API. Sure, I’ve had to
    create products, widgets that do whatever limited thing
    they do in some clearly-defined way, interacting with libraries,
    whatever, but I’ve never had to do the reverse: writing a library
    to support an existing program. I don’t doubt that I could,
    but it’s not something I have done.

  • Start working in mid-project on a large, established codebase. I
    need to know if I can internalize and contribute usefully to
    a project that is already underway. Everything that I’ve had to do
    so far, in the rigorous academic world of “if you show your code to
    other people, you’re cheating“, has basically been lone-wolf
    software that, so long as it accomplishes the given task within the
    given parameters, doesn’t have to scaleable, easily understandable
    or even legible.

  • Play well with others. This is a superset of the last two,
    and includes a social aspect that I continually struggle with here
    at school. I can only hope that when I get out into the real world
    the fact that I struggle to hold back the vitriol when I’m dealing
    with boneheaded ideas or boneheaded people will be offset by the
    hopefully small intersection between professional programmers and

In short, while I’m absolutely sure that I can learn to do it,
I am not confident right now that I can join a team of programmers,
understand very clearly what is already there and contribute
useful things in return. I understand why the actual “Real Programmer group says most people
think it’s a good thing there aren’t many of them left. I
can indeed write code. I understand, viscerally, why these
are important, I really do. I use lint. I’m a University programmer,
and I’m pretty good at it. I don’t know if I’m good at or even
capable of production-quality teamwork, and this clearly
needs to change.

You seem to think that there’s a
majic to programming. Maybe there is – but not in the work that
I’ve done, and not in the people I’ve worked with. Be smart,
think of things logically, use deductive reasoning, and you’re
ahead of the crowd. People think that I’m a smart guy at work,
because I do things like ask: “If we test that out, and it works, it
doesn’t prove anything. If we test it out, and it fails, it still
doesn’t prove anything. So why are we testing it? What would it
tell us?”

I don’t think there’s a magic to programming, but
I do think there’s some magic to being able to quickly
develop a deep understanding of a complicated system. I have
witnessed, and have far too often experienced, an inadequate
understanding of some program or system resulting in (and, quite
probably, from) half-assed programmers changing clearly
unrelated things at random in the hopes that it will make some poorly-understood
problem go away
. I have learned
enough about myself to recognize whether I’m thrashing
because I’m trying to work around a problem in the code, or
whether I’m trying to work around a more fundamental problem with
my understanding, and I think that’s a big step. But I nonetheless
have a deep, deep fear of thrashing like that at a real job.

He wrote a bit more than that, but it’s totally dinner time. See
you all soon enough.

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress