

Nobody Hates Software More Than Software Developers - Mintz
http://www.codinghorror.com/blog/archives/001289.html

======
rapind
I completely agree that pretty much every proprietary software product that
has come bundled with a device I purchased has been useless crap. There's
probably one or two exceptions but I can't think of them.

I didn't find the rest of the article that interesting, but he definitely
nailed his first point.

It's not so much bad programming, it's more a case of why? Why do I want to
install something that by default will chew up memory by running in the
background (and default to launch on startup), that I will never use, because
I have so many better tools for the job.

I guess the argument is that it's useful for non power-users... Umm sure. How
many of you have been asked to fix something on a relative or friends windows
box only to find it grindingly slow because of all the run-time resident crap
running on it? Like 10 things in the system tray? Update notifications
launching one after another on boot? My first task is usually removing all of
this stuff they NEVER use before even tackling the real problem they're
having.

------
tdavis
You should consider your code to suck over time, if you're "doing it right".

If you keep learning new and better techniques and practices, old code starts
to look immature. If you code in the real world, you make compromises to get a
project launched before you're living in an alleyway.

TicketStumbler may be a steaming pile of crap in some places and my deployment
strategy may have devolved to "install random packages until it stops throwing
internal errors", but it was not always this way. Not only have I managed to
become an even more amazing programmer in the past year (against all odds),
but I've had to cut so many corners the whole thing is beginning to look like
a circle. These two factors, above all others, have caused me to rather loathe
my code. But that doesn't mean I always do.

Maybe this was the point Jeff was attempting to make? If I am only good by
hating _all_ my code, I don't see how I could ever _be_ good.

------
bonaldi
I'm a little bit nervous to say this, but this is another of Jeff's articles
where I think "man, so many of this guy's problems would go away if he didn't
hate Macs so much".

In my experience, Mac devs _don't_ hate software, and Mac users don't have the
instinctive "oh [App X I haven't heard of]? That's going to suck".

Gruber talked more about this in his Broken Windows essay --
<http://daringfireball.net/2004/06/broken_windows> \-- and what he said about
security is generally true for quality and polish as well. If I get a new app
for the Mac, I know that it's going to have basic standards of fit and finish
and will make a reasonable attempt at being a good Mac citizen, because
otherwise the community will kill it.

When a new Mac app comes out, I'm usually fairly optimistic about what it will
do. When a new Windows one appears, I'm sceptical.

This doesn't extend all the way to the quality of coding admittedly, but
certainly at least until the iPhone came out Cocoa devs were a fairly select
set of committed people, and the higher barrier to entry helped keep at least
some of the crappiest C&P coders out of the platform.

~~~
philwelch
Not even having a Mac saves you from the crapware hardware makers bundle with
their crap. You have no idea how annoying it was for me to have to remove
shitty Kodak photo management software from my parents' Mac (which had a
perfectly good version of iPhoto) or the horrific, kernel-panic-causing HP
All-In-One software. Or even the shitty Verison DSL setup CD I was supposed to
use to set up my DSL modem.

------
andrewf
Awareness of your own limits, and the likely quality of your work, is a good
thing.

But this descends into self-flagellation. _Waaaah, I suck, you suck, we all
suck. We're all the equal-worst programmers EVER._

If you're doing research into programming languages, and you're explaining
your work, or asking for funding, fine.

But coming from practicing programmers, it's a common, trite, pointless and
irritating refrain containing zero useful information.

------
biotech
_In fact, I think you can tell a competent software developer from an
incompetent one with a single interview question:

What's the worst code you've seen recently?

If their answer isn't immediately and without any hesitation these two words:

My own.

Then you should end the interview immediately. Sorry, pal._

It seems to me that few programmers would answer the question this way,
competent or not. And it's probably not true for most competent programmers...
I wonder if Jeff has actually received this answer from a interviewee.

~~~
hvs
I know I've said it in a number of interviews and have gotten offers from all
but one of them. I don't know if I'd recommend it unless you can follow it up
with a strong explanation of _why_ it was the worst -- and how you fixed it --
but it isn't an interview killer, IMO.

I agree with Jeff on this one. Some of my worst experiences with code has been
going back over stuff that I wrote 3-5 years ago. I'm pretty hard on crappy
developers, so I'm doubly hard on myself when I look back at some of the
boneheaded mistakes and decisions I've made.

------
ggchappell
I think this article makes some good points, and I found myself nodding a lot.

On the other hand, it (along with some of the HN comments) conflates a couple
of unrelated issues: (1) how well software is written, and (2) whether
software forces me to do things I don't want to do.

One of the parts I nodded along with, was his story of lunging for the
computer when the camera software CD was inserted. But this doesn't have
anything to do with whether the source of this software was readable, variable
names, etc., nor is it related to the competence of the programmers or whether
they are aware of their own failings. The issue is that such software is often
written with a view toward taking over the way I do things.

I want to do things _my_ _way_. That's the reason for my move from Windows to
Linux, and it's why I use Firefox instead of IE when I do use Windows. It's
why I avoid Flash when feasible, why I hate most children's educational
software, and why I would not even glance at the software that came with a
camera. Does this have anything to do with the quality of the code involved in
these programs? I don't think so.

------
geebee
I remember that scene from "War of the Roses" where the Danny DeVito character
tells the horror story of the Roses to talk a new client out of engaging in an
ugly and bitter courtroom battle. I think his line was (paraphrasing here)
"when a man who could charge you $250 an hour wants to tell you something for
free, you should listen."

I often feel that way about software. Remember the stages of a software
project?

1) wild enthusiasm 2) profound disillusionment 3) search for the guilty 4)
punishment of the innocent 5) rewards and accolades for the non-participants

Can't remember exactly where I read that, but software developers have
experienced them all, over and over.

I don't necessarily try to talk people _out_ of a new development effort.
After all, there are clearly times when we need to write software, and some
projects are smashing successes. But I kind of feel like that breed of lawyer
who tries to get clients to see litigation as a true last resort.

I say - is there anything already out there that could solve your problems
without a new development effort? How far would a much simpler approach go
toward solving your problems - could you live with it? Basically, I want
clients to understand just how risky a full blown development effort truly is.

Of course, if you need business... well, nothing like an angry divorce to keep
the billable hours up, and nothing like a flailing software project funded by
deep pockets to keep the cash flow positive....

------
wglb
There is a lot of value in the comments on this article, but I am afraid that
the idea that you can usefully hire someone based on the answer to one
question is a bit oversimplified. In any project that I have done that spans
any length of time, often the first code I wrote doesn't look up to snuff with
what I wrote most recently. The later code looks better by virtue of a better
feel for the environment and the tools and some obscure abbreviation-finder
that seems to be at work in the background.

One concern that I would have if you think the worst code that you have seen
is stuff you wrote, perhaps you are not reading enough of other people's code.
I bet there is a lot of that amongst us all.

In the vein of simple questions that help in an interview, particularly for
someone who purports to be an expert, is "Tell me five ways that it won't
work". An expert ought to have some scars, and have learned from them, no?

------
gaius
"How do I know, incontrovertibly, beyond the shadow of a doubt, that the world
is full of incompetent programmers? Because I'm one of them!"

Those who can, code. Those who can't, blog.

~~~
alxp
Pissing on Jeff's coding ability became passé when he put out the best
programming Q&A site out there. You need new material.

------
fogus
Extrapolated...

Programming will make you hate software. Programming will make you hate
programmers. Programming will make you hate computers.

Lisp will make you forget all of that.

~~~
mahmud
Lisp is crack. Your eyes are rolling in with pleasure and you're the king of
the world, but your _expressed_ sense of delight is not commensurate with
people's idea of what should be enjoyable and by how much, even your
programmer peers (should programming _really_ be that fun?) And to be honest,
you're just getting off writing skeletal Idealized software; your toy apps
lack the necessary cruft to face a stupid world, so no one ever sees it. As
time passes, you're left huddled over your workstation firing dopamines like
any other fiend, and the world moves on in its crisply pressed suits, doing
_hard_ work and getting social validation and recognition for it. You, on the
other hand, are left flailing your arms, _feeling_ the music, offering the
Love and the Message to others as they avoid making eye contact.

~~~
fogus
Isn't that what I said? :p

~~~
mahmud
You weren't long-winded enough.

------
edw519
_In fact, I think you can tell a competent software developer from an
incompetent one with a single interview question:

What's the worst code you've seen recently?

If their answer isn't immediately and without any hesitation these two words:

My own.

Then you should end the interview immediately. Sorry, pal. You don't hate
software enough yet. Maybe in a few more years. If you keep at it._

I have always enjoyed Jeff's columns and maybe I'm missing a subtle point (or
just taking the bait), but this may be the worst "advice" I've ever read on
hn.

If someone told me that the worst code they've seen recently was their own,
I'd wonder why.

I feel confident in my own ability to usually write excellent code on the
first try. Sure, it may need some refactoring, optimization, and flushing out
of features, but it works, it generally works well, is very well documented,
and can be easily enhanced by myself or someone else. If it's not right on the
first try, I will fix it before I promote it. Shame on me (and anyone else for
that matter) for leaving behind garbage for someone else to inherit. I've
cleaned up far too many messes to allow myself to become like that.

I'm probably not alone when I say that I love developing new code and often
hate maintaining someone else's mess.

Jeff is right about one thing though, almost everything I ever inherited was
crap in one way or another, probably written by someone "less than senior".

I'd rephrase the whole interview question:

"What's the _second_ worst code you've seen recently?"

"My own."

"OK then, what's the worst?"

"Everyone else's."

 _That's_ the one I would hire.

~~~
Mintz
The irony of you saying "almost everything I ever inherited was crap in one
way or another" is that somebody probably said the exact same thing about
_your_ code. I bet you write amazing code, but when given a choice,
programmers would rather have the joy of creating their own code than trying
to interpret someone else's.

~~~
edw519
When it comes to maintaining code, I believe there are 2 kinds of crap:
subjective (I don't like it) and objective (it's crap because of these 14
specific reasons).

You're probably right about people who inherit my code. I know, when they've
whined about it, I confronted them. "Please show me exactly what's wrong with
it. What are your specific complaints about violations?" I rarely got an
objective answer. It was usually something about formatting, indenting,
variable names too long, variable names too short, I'm use to it the way we
did it (wrongly) at XYZ Co., something like that.

True crap can be objectively identified by a violation such as:

\- variables named so that no one except King Tut could possibly figure out
what they are

\- the same variables used for different purpose _at the same time_ , usually
in nested recursions

\- variables named with 1 or 2 characters

\- unassigned variables

\- variables initiated when they shouldn't be

\- division by zero

\- single entry, multiple exit (heavily maintained so that now outlying cases
skip critical logic)

\- the same code in multiple places (only some of it maintained so that
outlying cases skip critical logic)

\- endless recursions (for outlying cases only, naturally)

\- comments that don't agree with the code

\- data base tables with no definitions either in the schema or any code (my
new favorite)

I could go on and on, but you kinda get the picture. I wonder how many readers
here have posted crap like this on their "wall of shame" at one time or
another. It's funny the first 2^n times. Not so much fun anymore.

~~~
mahmud
Those are technical issues. The truly most nightmarish software to inherit is
one that shouldn't have been writen to begin with: software made by people who
either lack the programming skills, or the domain knowledge. Nothing worse
than an accountant-turned-DBA's perl, or a system's programmer that just left
you an steaming pile of MFC GUI. Worst of all, the person responsible for the
mess is not long gone and forgotten, quite the contrary, he has been promoted
through and he is now responsible for interviewing you to polish his brown
magnum opus.

I breath a sigh of relief whenever Microsoft breaks and old DLL's
compatibility: when you can't push through for an upgrade, pray for Redmond to
force it.

[Update:

``The hardware-specific accounting package''

This one is truly the "winar": plain-jane boring software that for some
goddamn reason depends on that old Hayes modem, or this matrix printer. I have
been hired to do this shit so often it's not even funny; it tends to sneak
past the initial discussions. You tick off "GUI" and "ODBC" and you're on your
way to start hacking, making a mental note about "ability to print". What you
don't know is that, not only do they want to convert the old Access package to
an intranet web app, but they also want it to print receipts using the
"receipt printer" -- a custom made piece of pain that uses the parallel port
for data, the serial for control, and two RJ45s to whistle the Danish national
anthem on error. FUCK!]

~~~
mahmud
Now I can't sleep (why did we have to talk about bad code?)

``The Windows 3.1 Guru''

1) That guy who knew too much about Windows 3.1 internals and never thought
this newfangled "Windows for Workgroups" or "95" would never take off. Thank
you, sir. Treating obaque structures for the unsigned chars they are has never
posed a problem for me. All the documentation I needed was in those 4 pages of
macros you left me (completely unnecessary, given the clarity of their octal
values, btw) Indeed, 10 years later, the low nibble of the AL register held an
integer index into your very own " _stash_ area" just below the PSP
(task_struct for linux weenies) where you kept all the open file handles.
Clever of you, reusing every bit of the process memory, specially the unused
parts of the MS DOS header format. (long story about this _destructive_ log-
rotate elided)

Your share custody of this award with Mr. EE.

2) Mr. Electrical Engineer, how can I forget you? We all know it's all signals
and gates down there, so, yeah, it was refreshing to see them again! I can't
believe you rolled your own signal-driven layer on top of the Win32 message
system. The ordering system couldn't have been done any other way. Looking at
your code put a bar over my head, sir, you have asserted me. And to be honest,
Visual C++ needed your linguistic extensions; we all know, code runs faster
when it looks more and more like Fortran.

~~~
wglb
These would be richly funny if they were not so entirely true.

------
ajg1977
As usual Atwood manages to destroy a valid perspective (be mindful of your
code quality) with unnecessary hyperbole.

I wouldn't hire anyone who said their own code was the worst they'd seen
recently. Whatever points they may win for perception and awareness are
totally overshadowed by their lazy acceptance of the situation.

"Which areas of your coding could you most improve on?" - now that is a
question worth asking,

------
miguelpais
Clearly the main issue of the post is the answer to the interview question.
Although I think it's a very good answer and that to me it would probably mean
I would be hiring a guy which is humble, which always views his knowledge has
something that still could be better and has a view of his own code has
something imperfect, and so he tries very hard to always know more and
improve, and that would mean in the end he is just one of the best choices to
hire, I think that in most companies that guy would never be hired.

Although it sucks, nobody gives any value to humility anymore. They want the
confident, "I'm an expert" kind of guy, so giving as answer that the worst
code you've seen lately is your own, without any kind of explanation of why
you think that (that you view your knowledge has something which as always a
long way to go) would probably be a instant KO to the poor humble interviewee.

------
cloudhead
What you'll end up with is hiring either incompetent programmers who know
they're incompetent, or people with no self-esteem. Great. It seems more like
either Jeff is incompetent (which he admits to) or self-deprecating, and
assumes everyone else is.

------
Oompa
I don't understand who votes these articles up anymore. They're just
completely useless.

~~~
sofal
Not as useless as your comment.

Besides the "my code is the worst code" part, I thought he did an excellent
job of explaining a software developer's natural aversion to software. I had
my wife read it, and it helped her understand more about why I refused to
pollute the computer with that CD that came with her new camera.

Aside: I know it's a beloved HN meme to bash Atwood, but don't let that excuse
us from being lazy about it.

~~~
Oompa
My comment does serve a purpose, to point out how useless this article is,
since some people obviously don't notice it, and vote it up.

~~~
sofal
Your comment did not point out anything other than the fact that you
personally think Atwood's articles are useless. It did not contribute anything
to the discussion, and it garnered knee-jerk upvotes from people who, like
you, hate Atwood's articles. I don't often downvote, and I never downvote for
disagreement. I downvote comments that either add nothing or take away from
the discussion, and your comment was a perfect example of that.

If you have a particular problem with this article, then follow the example of
edw519 and elaborate.

