Developer Growth Spurts
As a kid, I remember my parents always talking about the “growth spurts” I would go through. Mom always said you could tell if I was about to have a growth spurt by the way I would eat – she used to claim I had hollow legs. As I recall, the biggest growth spurts always happened during the summer, and then you would return to school and your friends and teachers were always amazed at how much you’d grown.
I remember one summer in particular, between 9th and 10th grade. I had always been kind of a small kid, a little behind the rest, and I was an easy target for bullying and harassment. That summer I caught up with a vengeance: I grew over 4 inches and gained about 50 lbs. On returning to school some of the kids didn’t even recognize me as I was now bigger than most everyone else. My life really changed as the bullies decided it was time to move on to smaller prey. That summer marks my entrance into adulthood, at least physically speaking, and things were never quite the same afterwards.
Growing as a Developer
My development as a developer has seen several similar growth spurts: the move from Procedural to Object Oriented Programming; the move from developing fixed format text screens to interactive GUI and the Event Driven model; and more recently the move from Windows Forms to WPF. I consider each one of these to be a Paradigm Shift, and each represents huge advancements in my abilities as a developer.
Of course, what I remember most was how difficult each task seemed at the time. I speak frequently about WPF, Silverlight, Blend, and other XAML related technologies. Perhaps the most common question I am asked is “how long does it take to learn this stuff.” While I naturally do not have a real answer (I usually say about 6 months of emersion to become competent), I understand what prompts the question – anticipation of the growth spurt and the accompanying growth pains.
While our adolescent growth was completely beyond our control, our developer growth is just the opposite. We have complete responsibility over our growth as developers, and that is a bit of a scary thought. The old adage “if you ain’t growing your dying” never applied more than to technology professions. I think what this means for us is that we need to constantly make the effort to place our selves in one of two states: either we need to be preparing ourselves for a growth spurt or we need to be in the midst of one at all times.
Preparing for Growth
Remember Mom said you could tell I was getting ready for a growth spurt by how I ate? In development, information is our nourishment. You should be able to tell if you are preparing for growth by what you are reading. For that matter, are you reading at all?
I’ve always been a fan of tech books and I have a tendency to read them cover to cover. I even like to read books about stuff I think I already know because inevitably I don’t know it as well as I could. I bought a Kindle just for tech books. I take it with me almost everywhere so I can fill dead moments with reading. And of course the web is overflowing with blogs, articles, white papers, etc. I probably spend 30% of my work time reading or looking up information on the web. The point here is to read, read, read, and then read some more.
A lot of the time this is reading just for the sake of it, like reading about a new technology or device just because you are curious. This sort of non-targeted reading is great and necessary to stay aware of trends and general goings-on in our profession. And doing so primes the pump, so to speak: it keeps your cognitive juices flowing so that you will be in the right state to grow. To really prepare for a growth spurt, however, we need targeted study.
So once we make the conscious decision to grow, where do we begin? The first thing to do is select the area you want to advance. Personally, I’ve recently decided that Software Craftsmanship is where I want to improve. Like many developers, I’ve mostly coded by the seat of my pants. Get it coded, make it work, push it out the door: after all, this is a business we’re trying to run here and productivity is everything.
I see now that this is a very short-sighted way of developing. I’ve almost always been a lone wolf programmer so I never had an environment or mentor that would train me otherwise. Since I’ve been involved with the developer community, however, I’ve been exposed to different ways of thinking. I’ve seen presentations on Unit Testing, learned about Agile practices, adopted coding tools, and more, but never in any targeted way: until now.
Summer Reading List
I have put together a reading list to begin the process.
- The Pragmatic Programmer, by Andy Hunt and Dave Thomas. Probably the most famous work ever on programming practices. This book is mentioned constantly as a must read.
- Clean Code: A Handbook of Agile Software Craftsmanship, by Robert “Uncle Bob” Martin.
- Code Complete, 2nd Edition, by Steve McConnell. Another book I’ve heard nothing but good things about.
- The Art of Unit Testing, by Roy Osherove. The first area I intend to implement is TDD and Unit testing.
- Test Drive Development by Example, by Kent Beck.
- Applications = Code + Markup, by Charles Petzold. While this is not a programming practices book, I chose it because it promises to cover XAML specific best practices.
I’ve already begun reading some of these. I’ve already been trying to learn unit testing and I think I’m finally starting to understand TDD: now I just need to learn how to actually put it into practice. The fun part is that I will be implementing these ideas as I go: I’ll be writing soon about my new project, which is very ambitious from a development standpoint.
Choose Your Next Growth Spurt
So now it is up to you to choose your next growth spurt. Where would you most like to improve as a developer? Once you answer that the challenge becomes “what are you going to do about it?” Who knows, before long people may not recognize you anymore.
As always, feel free to post in the comments below: I’d especially like to see what’s on your summer reading list.