because Hindley-Milner rocks
I’m one of those guys that doesn’t care if someone points out a fault in my code or if I’ve done something wrong as long as I learn something from it. Or at least I don’t mind when it doesn’t impact other developers, cause aggravation or delay a project deadline. That’s not to say that it doesn’t bother me that I was wrong. We all like to think that we hold ourselves to a higher standard but at the end of the day we’re only human. I’m fine with that and I’m fine with less than flawless perfection.
Being wrong and being able to admit it also helps keeps your ego in check. It makes you question every decision you make. It makes you validate to yourself either through rigorous unit testing or performance monitoring that your decision was the best decision you could make. You don’t want to be the guy saying “No really, you get extra points for flying the helicopter into the trees.” You’ll lose the respect of everyone around you.
Example A: One of my favorite sites of all times. The site that keeps me in check and makes me want to never wind up on it. The Daily WTF. Here’s where all the people go who won’t admit they’re wrong or that there is a better way to do things.
Example B: Anything to do with politics. (I’m just Googling around for the most controversial names and am certainly not expressing my viewpoint on this volatile arena.) Of all the war zones of the world, politics has got to be the quagmire of misinformation. The funny part is that even when presented with irrefutable facts people will adamantly refuse to admit fault.
Maybe it’s how people communicate and learn. They say that they best way to communicate is to imagine explaining something to a five year old. Like the difference between truth and fibbing. As a child develops, they learn what constitutes a believable lie versus an abject fantasy, “My shoes wet the floor, not me.” It’s reasoning about well constructed arguments and using that knowledge to their advantage. On the face of it, it’s quite an achievement. It demonstrates the cognitive ability for abstract thought.
When it comes to reasoning about things I’ve learned that I learn best by example. I am also more open to learning when something is suggested as an improvement rather than an open challenge to my credibility as an engineer.
Example A: One of my managers didn’t say “I’ll give the assignment to someone else” when I professed my poor abilities at regular expressions. Instead he said “Now’s a good time to learn.”
Example B: I volunteered an answer to a question on SO about comparing the contents of two arrays and printing out the set theoretic union. The accepted author gave as an answer something involving set_difference. I didn’t even think of it because I was under the mistaken belief it operated as set_symmetric_difference. Going even further he opined within his answer that to achieve similar results to what I had proposed the OP could use set_union (assuming that the entries were ordered.)
He converted my two pass, four line solution into a single pass, two line answer. Had me merely commented under my code, “No, you’re doing it wrong!” I might have brushed him aside for his ignorance but he didn’t. He left just enough remarks to make me look it up on my own. I thanked him for his patience.
I’ll leave you with this, probably my all time favorite quote:
“The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt.”