This is more of a question post than one with answers ’cause I’m all mysterious like that.
Today I was debating (and by debating I mean fat fingering my way through instance messages) with a co worker about whether a certain somewhat well known developer was good. Though I won’t divulge such a person, let’s just say he’s built a a game that might or might not have to do with mining and/or crafting.
I can’t remember how we got on the subject, but his contention was that such a developer was horrible. This made me pull out the big guns loaded with pure dickish and fired off this salvo:
Well when you write a program that surpasses 100000+ users, I suppose that can be your rock to throw
Nothing inflammatory about that, right?
So from there it became an amazingly deep debate that could match the irrelevance of the most heated of Star Wars versus Star Trek debates.
Ok maybe it did have some usefulness to it. After all, it is a good question to ask… which is why I am asking it.
My point was that it’s not easy to make a game, even one that couldn’t give Quake a run for its money in the graphics area. (And yes I mean Quake 1… You know, that game that had polygons that would suggest you were holding a weapon but you were never quite sure.) And to make something like that in his spare time proves that’s he’s at least competent.
His main point was that as a part of professional pride, the game shouldn’t be as buggy as it is. The inability to create a product that didn’t have a solid foundation is just bad. Flat out bad. After all if I build a car, that’s cool. However, if I’m trying to run over some jack–s with three collars popped and due to lack of control takes out an Apple Store…. ok bad example. Takes out Mel Gibs… –CK! Takes out a puppy store, that doesn’t really mean I’m a mechanical genius regardless of other factors involved building it.
And I think in there is the question. Should things like time constraints, degree of difficulty, and having no help (That I know of until end of last year) be taken into account when you look at a body of work, or should it be the end product and end product only that defines the competence of the coder?
I think it can go either way depending on what you consider ability. Is ability defined as doing something difficult AND doing it well or just being able to churn out something a good majority of developers couldn’t do alone.
Now make no mistake, I’m not saying he’s the best developer ever. I’m sure there are people far beyond his ability. I just don’t buy that he’s incompetent due to the more intangible things that effect development.
Isn’t this what peer reviews are for? I’d say that most of the time with any project that if left unchecked you’ll get code bloat and feature creep that can spoil the best of an originally good idea. Often you’ll find that someone throws a developer in the pool to “find a solution” without any guidance (let alone requirements… don’t get me started), then they have to wade through old spaghetti code or throw together something quickly using the equivalent of digital duct tape and hope for the best. Unless there’s a demand for the code to be tested and cleaned up, it won’t happen because often there isn’t time or interest to do otherwise. So developers go about redoing the same bad habits that were never corrected because nobody ever alerted them or steered them in a better direction.
I think you hit the nail on the head with the time constraint. Something that does have to be factored into the “bad programmer” equation, which by the way is:
Bad Programmer = (CodeQuality – (TimeLimit + Complexity)) * 1.5325262436
1.5325262436 being the Bad Programmer constant.