How do we learn, really learn?
We experiment.
We create mental models, we test them, and we adjust them. We have theories that this new piece of knowledge might relate to some other piece of knowledge, and we test that assumption. Over time, we accumulate a web of things we feel that we know.
But what we really have is a self-consistent set of beliefs. New information is admitted to this web if it doesn't damage too much of the existing beliefs.
This process is what leads to bias. When sufficient numbers of people share sufficiently similar beliefs, they reinforce each other. The beliefs become rules, and believers become less critical; asking questions might damage the group.
I suspect it might be because so much of what we do is novel, but developers seem particularly prone to glorifying shared beliefs. Here are some that have graduated to dogma:
everyone must do test-driven development
agile beats waterfall
agile doesn't work
web pages should be rendered in the client/server (choose one)
customers don’t know what they want
new is better than old
we know what we're doing
and so on…
As individuals, we need to be cautious of this phenomenon and avoid joining these soft cults as they surge past us in our social feeds. After all, if no rules are universal, acting as if a belief is actually a rule is pretty much guaranteed to make us wrong some percentage of the time.
So my advice is that you hear about something being “the way to do it” or, even worse, a “best practice,” take note, but consider what you're hearing to be nothing more than an opinion; someone else's belief. There are things you can learn from it—things you can integrate into your own belief system—but as with everything you allow into your head it needs to be tested and refined before it becomes yours. Be a skeptic, not an ardent disciple.
This advice applies to the stuff I say; it applies to the stuff everyone tells you.
None are rules.
Instead, view them as beliefs and suggestions. They’re not actions to take or rules to follow, they're just my beliefs that you might want to consider, test, modify, and maybe merge into your beliefs.
Truth is Contextual
No rules are universal.1 At the very least, a rule needs a context in which it applies. It's generally considered bad form to stick a knife into someone's throat, unless they're dying and you're performing a tracheotomy.
Context is a multidimensional concept. At a minimum, it includes:
timescale
We will do things differently depending on how long they are likely to take.group size
Are we looking at a personal practice, or something that involves the team, or the company?impact
We might behave differently if the outcome has a significant up or downside.moral and legal risk
Is this another social media site, or are we creating a medical device?confidence
How much uncertainty affects our actions?
And so on.
So, a plea. Stop for a minute and think about the things you feel are obvious, or that you believe because the group believes. Examine the basis for that belief. Is it universal? (I’m personally suspicious of any rule that doesn’t have exceptions.) Can it be tested to see if it is true? Can it be discussed rationally, or do things get heated?
Received wisdom is skin deep. True wisdom comes only from experience.
Except this one. Sorry…
Great article on how we learn and what we learn. It reminded me of a quote I recently ran across in a book on woodworking with hand tools. It would apply equally well to software craftsmanship.
“Knowledge is only a rumor until it is in the muscle.”
— Papua New Guinea Proverb