Nobody Hates Software More Than Software Developers

A few months ago we bought a new digital camera, all the better to take pictures of our new spawned process. My wife, who was in charge of this purchase, dutifully unboxed the camera, installed the batteries, and began testing it out for the first time. Like so many electronic gadgets, it came bundled with a CD of software. So she innocently ejected the DVD tray, and dropped the CD in.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2009/07/nobody-hates-software-more-than-software-developers.html

I work in two locations, with versions 1 and 2 of the same model of printer/scanner/fax/coffeemaker. The version 1 software worked fine with the version 1 hardware, so WHY did I install the version 2 software? I asked myself over and over again, after discovering it DID NOT WORK with the version 1 hardware… and the version 1 software would not install until I spent hours of effort uninstalling and cleaning bits of version 2 out of the registry. Thankfully the version 1 software works with the version 2 hardware, so I just ignore the daily Plug’N’Play exhortations about “new hardware needs new software”.
And yes, I got the answer right, “mine!”

Now don’t get me wrong, I hate digital camera software just as much as the next guy. But I can’t honestly say that I hate all software that I write.

Sure, I know that some of my code is crap, but I also understand that at the end of the day, the important thing isn’t that the code is poorly written, it’s that it accomplishes the task it was written to accomplish. As I learn more about coding and learn new skills to apply, I feel that I can improve on my new code by learning my mistakes from the past.

I may not like the way I’ve written old code, but I’m sure as heck glad I did-- otherwise, how would I know not to make that mistake this time around?

My own software is like bread: it’s great when it’s just baked, fine for a little while longer, and definitely beyond stale and moldy a year later. Same goes for a lot of stuff I do that requires constant learning. My best today is better than my best a year ago.

You would think hardware companies would at least be proficient at writing drivers, but even this simple task seems to be too much for most of them… Try getting a nforce motherboard’s onboard NICs to work properly under Vista (even after installing the “latest” update from M$'s Windows Update). And don’t even get me started about trying to install Logitech SetPoint under Windows Server 2003…

Sorry, I totally disagree. Sure, a lot (most) software sucks in some way, but considering Sturgeon’s Law (http://en.wikipedia.org/wiki/Sturgeon’s_Law), so does 90% of everything else, at least if you’re going to be nitpicky about it. (And you ARE being nitpicky.) Software is not special in this regard.

Yeah, a lot of the software that comes for free with your hardware gizmo stinks. So what? At least it was free. And at least for me, the free software included with my Canon 40D camera was pretty good (and in fact quite necessary for RAW image processing), and the free software included with my flatbed scanner to operate it certainly was necessary and worked well.

As an experienced software developer myself, I still have no idea why you think all (good) software people do (or even should) hate software. I don’t, and I’ve never heard any coworkers say they did. Sure, I can find room for improvement in any piece of software (including anything I’ve every done), but hate? No.

What benefit is there to “hating software” for software developers? Why are you encouraging this?

I guess the interview stuff is suppoed to be a joke, but I just find it annoying because some bozo out there might see this and make a real judgement based on asking this question.

You clearly haven’t had to maintain enough software in your career if you think you software is worse.

Early in my career, when I was writing Z80 Assembly code, I came across some code where the “developer” set the stack pointer to a location in memory and proceeded to PUSH onto that stack as a mechanism for moving data around.

No matter what crap I put out, I’ll never be able to beat that.

I agreed with you up untill you started saying that one should hate thier code more than any other code. You are right there are much less comptent programmers than incomptenet ones, but IMHO it has nothing to do with the Game. Don’t hate the Game, hate the Players.

Well it depends how you define the Game, if the Game is quantity over quality, then yes you should hate the Game. IMHO anyone who thinks their code is not good enough should go do something else right now. Anyone who read this post and agreed to the last statement should seriously consider leaving the business.

I remember hearing/reading a quote (cannot cite it, cause I don’t remember the source) OH: You should write code like the person who is maintaining it is a serial killer who knows where you live.

Take your time, do the right thing, consider all software like a space craft mission critical system where if you don’t take it seriously could cost you your job at a minimum.

In reference to your ending (which admittedly was likely said tongue-in-cheek):

“What’s the worst code you’ve seen recently?”

I agree with what several others have pointed out:

A) While I have written poor code, the worst code I’ve written certainly wasn’t today and it wasn’t recent either. This isn’t to say that I haven’t written poor code recently, just that I’m improving and that my worst is always behind me

B) I’ve seen worse code still via other channels (DailyWTF, previous MBA’s as programmers projects, etc.)

I’m starting to get sick of reading how we should accept our code is bad, we’re bad programmers, and how we’re our own worst enemy.
Jeff sometimes I write decent software. I think it out proprly, it does the job cleanly and meets all requirements. Can we celebrate when good software is written for once? Aren’t we allowed to take pride in our own code sometimes?
Walking into an interview and stating that the worst code i’ve seen recently is my own?! seriously man, I understand the need to be modest and to always improve, but I’m not going to walk around in some zombie state telling people (and potential employers) how bad I am at my profession.

Most old code I look back on I’m not especially proud of, but was the best I could produce under the deadline and with my existing set of experience. If it satisfied the stakeholders, then I was pleased at doing my best. In retrospect, I may have done a few things differently, but I don’t regret it, much less hate it.

Skepticism of one’s code is well and good but you seem to dwell on it. You can’t make every line of code perfect. Don’t let the profession change you. My girlfriend pointed out I’m always finding every little possible problem to a given situation almost immediately when asked. That isn’t how I want to live.

RE:

When people say “this sucks” they mean one or more of the following:

-This doesn’t do what I need
-I can’t figure out how to do what I need
-This is unnecessarily frustrating and complex
-This breaks all the time
-It’s so ugly I want to vomit just so I have something prettier to look at
-It doesn’t map to my understanding of the universe
-I’m thinking about the tool, instead of my work

This is far too complicated, when all you need is the last point:

-When people say “this sucks” they mean that they are thinking about the tool, instead of their work.

All of the other points can be derived from this last one.

System-Centred Design creates Friction, frustrating concentration and lowering productivity. Conversely, User-Centred Design (that is systems designed for humans not computers, which have their designs tested on real users, rather than just “assumed to be nifty” by their programmers) can create Flow, encouraging concentration and increasing productivity and actual work quality.

Consequently, the only word of advice you would need to give out is:

FLOW.

Mr. Frank, this software will address problems you never had!

Example … i just installed iTunes (windows) … again! Everytime there is an update there is just a little bit more added to the total download. Last check - 84.9 Mb - for an update! WTF?! You can just tell this is a piece of software that is made “better” by a team of (how many devs?) writing more and more code. I have only noticed one change to the application that actually seemed like an “update” and not some stupid Apple idea that a robot can tell me what music I already like listening to. As I see it, the goal of software maintenance is to eliminate code, while making the app faster, and faster and lighter and lighter. I guess that applies to everything though and I’m either going to get spiritual or quantum engineering about things soon, so i’ll stop.

BTW - my code sucks too… but my old code sucks way more. I learnt from the worst … and they really sucked. I just saw one of them on the tram … I assume her code is better now too. ah memories.

This reminds me of G.K. Chesterton’s famous reply. When asked, along with other famous writers and thinkers of his time, “What’s wrong with the world?”, he answered simply, “I am.”

This is an awful way of putting things… I love software because it’s difficult to use but on the other hand I am conscious that other people hate it for that so I create simple-to-use software for the money and keep it complex on the inside for the pleasure :wink:

The way I have always thought of this is via the question…

“Would you fly in a plane that was reliant on software you’d written to stay in the air?”

It takes reasoning and understanding to work with code, whether it is your own code or someone elses code. Being humble and admitting that your own code isn’t perfect is a good thing. Asking an interviewee about bad code should be about determining if that person is humble enough to admit that even they don’t write perfect code. Writing code will always entail a certain mental capacity and stamina. Before God confused the languages at The Tower of Babel was communication so fluent that no one misunderstood anyone else? What if computers had existed at that time? What language would have resulted? Computer languages manipulate two states on and off. That is perfection. The human brain doesn’t work like that. Why are programmers poor socializers? Because they think logically all day long. After 8 - 12 hours of logical thinking how can you possibly communicate well with someone directly after such a session. It doesn’t work. Translating the illogical thought process of a human to the perfect logical construction of computers is a tough thing to do indeed.

http://stackoverflow.com/questions/679621/how-to-overcome-the-everyone-elses-code-sucks-attitude

Apologies if this post is somewhat illogical.

The part about frantically leaping towards your spouse, hoping to cancel an install before it starts? I’ve been there. More than once. Complete with the slow-motion and the “Noooooooooo…”

There should be a law preventing hardware companies from writing software. I’m looking at you, HP.