What makes a better software engineer? Part 2
Before Tropical Storm Fay's mandatory visitor evacuation forced me to leave earlier than planned, I was enjoying some great weather and boating in Key Largo for my birthday weekend.
I go there to get away from the hectic for a few days, sometimes even unplugging from the world completely by disconnecting from Internet, TV, and phone. It gives me a chance to unwind, think, and ultimately reflect on where I am and where I want to go.
Anyway, at one point during the last few days I was thinking about the whole topic of "What makes a better software engineer?" and remembered an old article series by Chris Hargrove that we have on GameDev.net called Code on the Cob (CoTC).
CoTC was originally written by Hargrove for a site called loonygames, run by loonyboi, who has since moved on to bigger and better things. When loonygames shutdown, I contacted Chris to see if he would be willing to let us host the series, especially since he was pretty active in the GameDev.net community at the time.
CoTC is one of my favorite series of articles, not because there was any particular insight or because I necessarily learned a lot, but because Hargrove outlined best practices and principles for software development in an easy-to-understand way. Some of his ideas still resonate with me today.
In fact, there's one article in particular in CoTC that I've always remembered and it's the one that I thought of while away this past weekend: CoTC 11: The Next Stage, in which Hargrove outlines his thoughts on the development stages of a programmer. While it's hardly a science, I think he did a pretty good job of outlining the different growth stages a software engineer might go through.
At this point you may be wondering why I thought of this article when thinking about the topic of "What makes a better software engineer?" (Or better yet, you may be wondering why I was thinking about any of this while in the Florida Keys, but that's another topic.)
Well, while discipline is an important attribute to becoming a better software engineer (or as mentioned before, a better anything), another equally important attribute is a desire to reinvent yourself.
Reinventing yourself means to have an insatiable appetite for knowledge and recognizing how to apply that knowledge. It is our ability to change our habits and world views in order to become the person we are trying to be. Continuous improvement is another popular phrase that means the same thing. Essentially, "good enough never is."
I thought of Hargrove's article because his stages of programming are essentially about reinventing ourselves. As we progress through the stages we have to change our habits and perspectives on software development. If we fail to change, or reinvent ourselves, then we fail to progress and become better software engineers.
I know Stage 1 programmers with years of experience. I also know Stage 6 and 7 programmers (whatever 7 is, they are there) with years of experience. Besides their technical skill, the only real difference between the two is that the Stage 6+ programmers were willing to adapt, change, or reinvent themselves as they progressed in their careers. The Stage 1 programmers just went along with the daily grind.
This concept of the "better software engineer" is a very gray area, so nothing should be viewed as mutually exclusive. For instance, a person with good discipline may find it easier to reinvent herself than a person with little self-control, but then maybe not if the person uses discipline in such a way that it prevents themselves from changing.
At the same time, there are certain attributes that successful people have, and if we want to be successful, then it is in our best interest to learn how they do it, regardless of the field or discipline we are in.
Filed under: Development, Process, Software