Jack of all trades, master of none
I wrote my first computer program when I was ten years old. It was a crude script written in a language called GFA BASIC. My “workstation”: a Commodore 64. There were no classes, methods or fancy generics. Simply a list of LINE, CIRCLE and PCIRCLE commands. Once executed, it would produce a drawing of a car. Clearing the screen and redrawing the car in a different location created a sense of motion. Busy waits or sleeps weren’t necessary: The drawing process was slow enough that simply executing a series of draw commands created an animation by itself.
Fast-forward eight years: I get enrolled in the computer science program of my local university. In the years to come I learn about the basics (and not-so-basics) of software engineering. Topics discussed are domain modeling, functional programming, SPARC-assembly, data structures, object oriented design, formal reasoning and linear algebra. In the meantime, I pick-up a job at a local ISV and get my hands dirty on real life applications.
Years pass. I graduate and become a full-time consultant. Now, I am not only using frameworks, but also building my own. No longer lurking StackOverflow, but contributing. No longer consuming open source, but writing open source.
I feel like I should be an awesome developer.
I am not.
Why? Because the technology I acquire today is deprecated tomorrow. In fact, my knowledge of yesterday’s technology only helps me to determine its inferiority in light of today’s technology. It’s like the sixties space race, except the US beats the USSR with a warp drive.
So what have I learned?
- To embrace the temporality and volatility of IT.
- To accept that if one changes the world, it will only be for a brief moment.
- And most importantly, to be a jack of all trades and master of none.
With each project, I reevaluate the playing field and cherry-pick technologies as I see fit. Rather than mastering technologies, I take the agile approach: Barely good enough is good enough. Once I’ve finished the project, I evaluate the strength and weaknesses of all used technologies. This will help me compare technologies in future projects.
So is this IT arms race a bad thing? Absolutely not. New technologies are fun and each project is an opportunity to use the latest and greatest. Why drive the same car for twenty-five years when you can drive a new and faster car each year? The only real downside is there’s less room for standards and practices in an ever changing environment.