“I need to nail this board down. Got a hammer?” asked Jim, the lowly construction worker.
John, the foreman replied, “We have a pneumatic nail driver we’ve been using. You’ll have to wait for that one.”
“But it’s just for a temporary brace while I put this wall up,” said Jim.
“We only do nailing with a pneumatic nail driver on this project.”
“It’s in too tight of a space to even fit the nair with this wall here. I can just reach a hammer in and nail it down,” said Jim.
John said definitively “No, we have to use the pneumatic nail driver. Everyone knows that hammers aren’t as good. You’ll need to cut a hole in that wall so it will fit in there.”
Any seasoned developer or any CS graduate can give you a laundry list of best practices when developing software. Things like “Don’t use globals,” “Have explicit garbage collection instead of depending on built in cleanup,” or “The use of GOTO will cause searing pain.” Good developers, however, will know that there are times when deviations to these rules is acceptable, and will at times produce software that doesn’t follow every best practice.