One of the strongest heuristics for career progress (and personal growth) is how readily you change your mind about things. After all, everybody's wrong sometimes. If you don't change your mind now and then, you just keep on being wrong.
This is a skill that's particularly relevant to developers; we're wrong all the time. When we troubleshoot a tricky bug, we start with a hypothesis ("I think the problem is X"). Then we find evidence to disprove the hypothesis, discard it, and come up with another one. This can happen tens or even hundreds of times before we find the right fix. My favorite developers to work with can turn on a dime: "whoops, I was wrong. Let's try something else." No embarrassment, no ego, no excuses. They're interested in finding the facts, no matter how many times they have to be wrong in the process.
We should apply that mindset not just to the nuts and bolts of programming but to the ideas and beliefs that drive our careers. So tell me:
- Did you have a strong opinion as a junior developer that you've changed your stance on?
- Have you come to disagree with a blog post or DEV article that you wrote years ago?
Virtual high-five! You're less wrong than you were. Let's hear about it.
For my part, there are two things that come to mind.
The first time I had to write SQL, I immediately disliked it. SQL wasn't at all like the imperative code I was used to writing. Why was it so abstract and set-oriented? Why wasn't I supposed to use
for loops? Why were we writing magic SQL strings instead of querying databases with a strongly-typed API?
It's not hard to find SQL haters online. At first brush, it seems to go against everything programmers are taught. So I joined the crowd, settled on "SQL is the worst possible thing," and went off to build a side project with MongoDB. I was sure it would be a slam dunk.
A few months later, I looked over my half-baked side project and had a difficult realization: I'd spent an embarrassing amount of time trying to make MongoDB do things that SQL does out of the box—schemas, normalization, relational data, auto-incrementing primary keys, and so on. SQL would have been the right technology for my project (and I now believe it's right for most projects) but I'd failed to look beyond the first impression.
Since that experience, I no longer shy away from SQL. Sure, it has its tradeoffs, and NoSQL databases are great for some situations. But most of the time SQL is safer and more reliable. Persistent data storage has a different set of problems from application code, and SQL is pretty darned good at it.
I've been programming since I was a kid. It's been interesting to me—nay, captivating—since the first moment I knew what it was. Even when my long-term plan was to go to law school and become a politician, I was spending my free time playing with jQuery and reading CSS-Tricks.
The mistake I made was projecting my experience onto everyone else. "Code is simple and makes sense," I thought. "Surely everyone can learn if they put in the time."
I was wrong about that. A handful of years in the industry has taught me that everyone is different. Sure, a lot of people can learn to code. But a lot of people can't, or at least not to the level of a marketable skill. Everybody's smart at something; that something usually isn't code. And even among the people who can learn to code, many of them wouldn't enjoy the solitary and repetitive nature of a programming job. I've left team anybody can code and joined team try it out first, see if you like it. This has helped me make far better recommendations to people who ask me about a career in tech.
Your turn. What have you changed your mind about lately?