We're not talking nuances here, it's not that your program "mostly" works - this is a black and white failure - it just won't compile or run for whatever reason. This is sort of unusual, as in many other diciplines you don't get any instant feedback of rejection.
Compare the english student writing a paper. There's no "publish button" that you click when you think you're done. In this case failure is in the eye of the beholder (or whoever's grading it) - but a gaggle of typos, full-page sentances or a sprinkling of emoticons doesn't give any instant feedback of the fact that there's going to be a big red "F" on the top of the page when you get it back (although it probably should)
As CS Students, most of the time if the computer doesn't reject what you're trying to do then you're usually most of the way there. Sure, your professors will mark some style points and want to see some comments, but if it runs and full-fills the techinical requirement, you're probably going to pass.
This give developers in the real world a strange failure dichotomy. We accept constant failure as a fact of life - as long as it's coming from a machine. But we have a tougher time dealing with failure if it's coming from a living, breathing individual.
Developer: "What do you mean it's wrong? It has 100% test coverage and fullfills the specifications to a T?"
Client: "But no one here can figure out how to use it"
Failure in the real world doesn't always give a black and white compile-time error - it sometimes comes at you in shades of gray. This means that sometimes, like our developer above, you might disagree with other's definition of failure as for developer's there's really only 1 type of project failure we implicitly accept:
#1 500 - Internal Server Error
#2 Users can't use your software.
#3 You didn't explain to the client what you were building and it's not what they wanted.
#4 You didn't force the client to figure out what they wanted and instead built what they thought they wanted.
#2 is a development failure - it's pretty clear that you need to be able to build something that's usuable by whoever the end user is. Now doing so and doing so well is a skill that takes learning and experience. It's a failure you can really only avoid by experiencing it a few times and eventually come out richer for the experience. Accept that unless you are your own demographic (e.g. programming stack overflow must have been kinda fun) you're going to have to put some legwork in to develop something that works at the level of your audience, but that's a long discussion for another time.
Compared to #2, #3 and #4 are project managment failures caused by not putting in the time upfront to figure out the requirements.
#3 happen much more often than they should because as everyone knows - programmers are lazy, tiny gods. They are lazy in that stuff that's not fun - a.k.a. anything that doesn't involve programming - is going to be skipped:
"Programmers will not keep themselves honest. If left to their own devices, they will skimp on anything that is necessary but not fun." (Phillip Greenspun / Design Review)
....and follow @cykod on twitter
Leave a Comment