MetaChat REGISTER   ||   LOGIN   ||   IMAGES ARE OFF   ||   RECENT COMMENTS




artphoto by splunge
artphoto by TheophileEscargot
artphoto by Kronos_to_Earth
artphoto by ethylene

Home

About

Search

Archives

Mecha Wiki

Metachat Eye

Emcee

IRC Channels

IRC FAQ


 RSS


Comment Feed:

RSS

30 March 2006

How bad software gets written. So following up on this, [More:]
I used to wonder how bad software happened. I'm not talking something that's balls-to-bones bad, totally ill-conceived and misbegotten, I'm talking about software that mostly works, but sometimes doesn't. Software that has a mostly smooth surface, except for a couple of snags, but they're snags you can't avoid and cut your finger on every damn day, and they're so annoying that eventually they're all you can see.

Since becoming a developer, I don't really wonder anymore.

It's not malice and it's (usually) not incompetence.

First off, in a company of any size, there's a lot of time and feature pressure. Marketing needs bullet points so they can convince customers to upgrade to the next version, and there's never enough time to do everything on that list, so there's not a lot of incentive to open up something that was more or less working in the last version and start messing with it.

Secondly, if a developer does get the chance to pick what to work on, he's going to pick something that's interesting to him, probably something deep in the code, which benefits to the user not immediately or easily visible. Even worse than this, an unsupervised developer might start to get clever... "sure, standard Windows tabs are nice, but they're boring, you know what would be really cool? If all the items kind of flew around the top of the screen, and you grabbed the one you wanted with the mouse and pulled it down!"

Third, developers and testers don't use the software like real users. A developer bangs out some code and it works for 99% of the cases, most of the testing and fixing is spent on those 1 percenter edge cases that most users will never see. Every release I get a totally disproportionate number of bugs and feature suggestions about making weird and rare options in the installer nicer. Why? Because the QA department has to uninstall and reinstall the product on multiple platforms every day. A real user will probably do this once, ever.

Another part of this is that we developers pretty much have no idea what we're doing. If we're making, say, widget tracking software, it's a good bet we're not doing a lot of widget tracking on a day to day basis. We don't have the domain knowledge, and we just don't really use the software that we write. We code it up, try it out, it seems to work ok, we're happy. This, by the way, is why there are so many really good text editors and bug tracking systems and whatnot out there. These are programs software developers use on a day-to-day basis.

Nextly, a lot of developers just don't like doing user interface stuff. There's kind of a stigma attached to it. It's not seen as real programming, it's almost, kind of... artsy. It's just moving buttons around in a designer, right? You do the real, hard work of adding a fancy new "fooulator" feature, then on the last day, probably on a Friday afternoon, you find an empty spot on in the UI and wedge a "Fooulate!" button in there.

Anyway, sorry everyone.

Any other coder types out there got stories?
It's not malice and it's (usually) not incompetence.

Have we ruled out malcompetence?
posted by Zozo 30 March | 12:37
I have many, many stories. I'm not sure how much I can say without violating my NDA, or casting a bad light on my (very good) employer, though.
posted by cmonkey 30 March | 12:40
Is it just me, or is this post not showing up on the front page between my Batman Sounds and the amusing pictures of socks?
posted by me3dia 30 March | 12:43
Oh, weird -- it's showing up two posts later than mine on the front page, but inbetween mine and Wolfdog's in the in-thread navigation.

Administrator, please hope us!
posted by me3dia 30 March | 12:46
I second what Capn said. It's just par for the course.
posted by matildaben 30 March | 13:03
It was delayed because it had to be okayed since it was extra long (anti-flooding measure)... dodgy needs to do geezermagic to make fixy with delayed post numbering.
posted by taz 30 March | 13:21
I have many, many stories. I'm not sure how much I can say without violating my NDA, or casting a bad light on my (very good) employer, though.
Well do you have any safely vague stories about your friend who works at the company that makes widget tracking software
posted by Capn 30 March | 13:23
This has nothing to do with my current employer, and it's very boring:

In the late '90s I was employed as a software engineer for a company, X, that did generic web development stuff for other companies. X was a big fan of ReallyBigECommerceSystemMadeByAGermanCompany. So I said "hey, I could probably write a replacement e-commerce system, and then we could just sell that rather than selling licenses for the pile of dogshit those East Germans churn out". My boss agreed, I sketched out the design, and got to work. It was a pretty good design, in my opinion, and it was going to be considerably faster and far more scalable than RBECSMBAGC was, and it wouldn't have the security problems to boot.

Then they decided to assign Stoner Assclown to work with me. Now, because Stoner Assclown had a computer science degree, and I was only a lowly high school dropout, he was Senior engineer, and thus got carte blanche to fuck up my code while listening to shitty jam bands. Never mind that I actually had more experience than he did, he had the fucking diploma. He made short work of turning my design and the code I had already written into a sloppy, bloated, unmaintainable mess.

In conclusion, stoners make lousy programmers.
posted by cmonkey 30 March | 14:09
This has nothing to do with my current employer, and it's very boring:

In the late '90s I was employed as a software engineer for a company, X, that did generic web development stuff for other companies. X was a big fan of ReallyBigECommerceSystemMadeByAGermanCompany. So I said "hey, I could probably write a replacement e-commerce system, and then we could just sell that rather than selling licenses for the pile of dogshit those East Germans churn out". My boss agreed, I sketched out the design, and got to work. It was a pretty good design, in my opinion, and it was going to be considerably faster and far more scalable than RBECSMBAGC was, and it wouldn't have the security problems to boot.

Then they decided to assign Stoner Assclown to work with me. Now, because Stoner Assclown had a computer science degree, and I was only a lowly high school dropout, he was Senior engineer, and thus got carte blanche to fuck up my code while listening to shitty jam bands. Never mind that I actually had more experience than he did, he had the fucking diploma. He made short work of turning my design and the code I had already written into a sloppy, bloated, unmaintainable mess.

In conclusion, stoners make lousy programmers.
posted by cmonkey 30 March | 14:09
Aww jeez.
posted by cmonkey 30 March | 14:10
Yes, Yes, and Yes. Capn, maybe someday over beer.
posted by safetyfork 30 March | 14:27
Aww jeez.
Stupid MeCha software!

One of my current crusades is eradicating the use of constructions like "time(s)" or "hour(s)" in our user-visible messages.

The number of times you see this, you would think that it was a TASK OF UNFATHOMABLE COMPUTATIONAL COMPLEXITY for a computer to distinguish between the number 1 and any other number.
posted by Capn 30 March | 14:30
I dunno, (amount != 1) ? "times" : "time"; is a pretty tough concept.
posted by cmonkey 30 March | 15:13
Actually, I perfer to use two totally different strings cmonkey, makes it easier for the translators.
posted by Capn 30 March | 15:18
Hmm? string msg = (amount != 1) ? gettext("times") : gettext("time"); works just fine for translation.
posted by cmonkey 30 March | 15:20
Says someone who's code only has to compile on one platform and knows not of Windows resource string tables.
posted by Capn 30 March | 15:24
(I assume)
posted by Capn 30 March | 15:25
gettext works on Linux, Windows, FreeBSD, Solaris, qnx and OSX, making it a little more cross platform than Windows resource string tables... :)
posted by cmonkey 30 March | 15:32
(Oh, wait, you're a Windows programmer. Yeah, different ways of doing things. Stoners still make lousy programmers.)
posted by cmonkey 30 March | 15:40
But programmers make great stoners!
posted by matildaben 30 March | 15:41
It's a delicate balance, it seems.
posted by cmonkey 30 March | 15:46
Well, you know, number a) see the title of this thread, that's just not the way we do things around here (that being "the right way") and 2) so your code's going to be like

log ("%s %d %s"
gettext("This widget has been tracked"),
nTracks,
nTracks == 1 ? gettext("time") : gettext("times"));

The code assumes that whatever the local language is has the same structure as English. What if the language you're translating in to wants to say something like "the times this widget has been downloaded is 1"

posted by Capn 30 March | 15:46
Oh, wait, you're a Windows programmer.

*Is affronted*
I'm a cross-platform developer who sometimes has to work on Windows-only components, yes.
posted by Capn 30 March | 15:49
Fight! Fight!
















:)
posted by safetyfork 30 March | 16:09
I'm a Windows programmer. There, I said it! Bet you don't love me anymore.
posted by matildaben 30 March | 16:13
Hate the sinner, love the sin. No, wait... Love the sinner, spare the child... no, wait...

Um, I choo-choo-chose to love the sinner and the sin.
posted by Capn 30 March | 16:18
Well, now that I think about it, gettext shouldn't be used for plurals anyway. This is the Right Way to do it:

logmsg( ngettext("This widget has been tracked %d time", "This widget has been tracked %d times", nTimes), nTimes );

I'm a Windows programmer. There, I said it! Bet you don't love me anymore.


I have no problem with Windows programmers! It's just a different way of doing things.
posted by cmonkey 30 March | 16:22
Wait a second. Sounds like there might be some spanking involved here.
posted by matildaben 30 March | 16:23
So what you're saying, cmonkey, is that you would use two totally different strings? Man, I wish I'd thought of that :)

Oh, yes, the spankings!
posted by Capn 30 March | 16:25
Oh, see, when you said "two strings", I thought you meant two string variables, not two strings in the message catalogue. I didn't get much sleep last night, dont mind me.
posted by cmonkey 30 March | 16:33
I am glad we could work this out in an amicable manner.
posted by Capn 30 March | 16:38
Amicable? Wait, can I still get the spanks?
posted by matildaben 30 March | 16:58
Yes.
≡ Click to see image ≡
posted by Capn 30 March | 17:03
Amicable? Wait, can I still get the spanks?

Are they naked spankings, or the embarrassing kind that people do in bars on someone's birthday?
posted by cmonkey 30 March | 17:30
(a), duh.
posted by matildaben 30 March | 17:46
Post an amusing picture || CR-A-A-A-CK! Onomatopoetic Batman Sounds.

HOME  ||   REGISTER  ||   LOGIN