If you only have a hammer, you tend to see every problem as a nail. – Abraham Maslow
Microsoft technologies have been the primary bread and butter of my career. I dabbled in a few open source technologies early on, but quickly found equilibrium with the Microsoft stack. I worked exclusively on Windows: Open source technologies quickly became relegated to something of a hobby status, and I didn’t even bother diving in to other technology stacks or languages. I dove deep into the culture of Windows development with a fervor.
But I never anticipated becoming that developer. I always considered myself a technologist, yet I began to see C# as the answer to every solution to every problem in my career. .NET had become my hammer. Meanwhile, technology continued to roll forward despite my decision to remain singularly focused within my own little programming niche. Neat Things were happening all over the technological landscape that I ignored simply because I didn’t believe the new (or old) technologies were a good enough replacement for my hammer. Smart people were doing smart things and I was missing out.
I recognized this as a Bad Thing. I started taking stock of what I knew, what I thought I knew and what I knew I didn’t know. For example, I knew I was a decent .NET developer. I thought I knew enough large-scale development to write scalable web-based services. I knew I didn’t know Haskell: I simply never considered it.
Knowing what I knew I didn’t know could ultimately help me learn the things I didn’t know I didn’t know.
And so I struggled through a metamorphosis: I forced myself to learn new and very different technologies, platforms and technology cultures. Not just learn, by the way, but dive deep. To learn what I didn’t know I didn’t know.
I’m talking about completely shifting perspective.
We all know change is hard. It’s difficult to change because you’re forced to evaluate everything you thought you knew from a very different point of view. Often, a new point of view can contradict beliefs held for years as gospel.
It’s hard, much like making the jump from procedural development to object-oriented development was hard. It’s less about new languages or tools and more about shifting your entire mental model of an established practice. It’s about really jumping in feet first and embracing change. It’s transcending the “right tool for the job” mentality: Anyone can write a script or two in Python, but do you really get Python at its fundamental core? I can’t say that I do, only because I have not yet taken the time to understand its core philosophy and principles. But I will.
I don’t want to be a developer with a single hammer in my toolbox. I don’t want to be yet another utility coder, either, using tools just to get the job done: I want to be a renaissance coder. I want to deeply understand various languages and frameworks and tools in order to cross-pollinate the designs and code I write as part of my professional career, irrespective of the project, language, framework or tools I’m required to utilize.
It’s important to shift perspective. It’s important to embrace change. It can be almost impossibly difficult, but it’s worth every ounce of effort.